mirror of
https://gitee.com/zhangsken/AndroidIDE.git
synced 2026-10-16 07:49:44 +08:00
Allow setting min fuzzy match ratio in IServerSettings
This commit is contained in:
@@ -53,7 +53,7 @@ import java.nio.file.Path;
|
||||
*/
|
||||
public interface ICompletionProvider {
|
||||
|
||||
int MIN_MATCH_RATIO = CompletionsKt.MIN_MATCH_RATIO;
|
||||
int MIN_MATCH_RATIO = CompletionsKt.DEFAULT_MIN_MATCH_RATIO;
|
||||
|
||||
default boolean canComplete(Path file) {
|
||||
return file != null && Files.exists(file) && !Files.isDirectory(file);
|
||||
@@ -68,7 +68,14 @@ public interface ICompletionProvider {
|
||||
}
|
||||
|
||||
default MatchLevel matchLevel(CharSequence candidate, CharSequence partial) {
|
||||
return CompletionItem.matchLevel(candidate.toString(), partial.toString());
|
||||
var matchRatio = CompletionsKt.DEFAULT_MIN_MATCH_RATIO;
|
||||
if (this instanceof AbstractServiceProvider) {
|
||||
matchRatio = ((AbstractServiceProvider) this).getSettings().completionFuzzyMatchMinRatio();
|
||||
}
|
||||
|
||||
if (matchRatio < 0 || matchRatio > 100) matchRatio = CompletionsKt.DEFAULT_MIN_MATCH_RATIO;
|
||||
|
||||
return CompletionItem.matchLevel(candidate.toString(), partial.toString(), matchRatio);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -17,6 +17,8 @@
|
||||
|
||||
package com.itsaky.androidide.lsp.api;
|
||||
|
||||
import com.itsaky.androidide.lsp.models.CompletionsKt;
|
||||
|
||||
/**
|
||||
* Settings contain preferences for the language server. Clients can use settings to enable/disable
|
||||
* specific features of a server.
|
||||
@@ -83,4 +85,13 @@ public interface IServerSettings {
|
||||
* @return {@code true} if enabled, {@code false} otherwise.
|
||||
*/
|
||||
boolean shouldMatchAllLowerCase();
|
||||
|
||||
/**
|
||||
* The minimum match ratio that is needed for the completions to be considered as 'matched'.
|
||||
*
|
||||
* @return The match ratio. Betweeen 0 and 100.
|
||||
*/
|
||||
default int completionFuzzyMatchMinRatio() {
|
||||
return CompletionsKt.DEFAULT_MIN_MATCH_RATIO;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@ import io.github.rosemoe.sora.text.Content
|
||||
import io.github.rosemoe.sora.widget.CodeEditor
|
||||
import java.nio.file.Path
|
||||
|
||||
const val MIN_MATCH_RATIO = 45
|
||||
const val DEFAULT_MIN_MATCH_RATIO = 59
|
||||
|
||||
data class CompletionParams(var position: Position, var file: Path) {
|
||||
var content: CharSequence? = null
|
||||
@@ -162,7 +162,8 @@ open class CompletionItem(
|
||||
private val LOG = ILogger.newInstance("CompletionItem")
|
||||
|
||||
@JvmStatic
|
||||
fun matchLevel(candidate: String, partial: String): MatchLevel {
|
||||
@JvmOverloads
|
||||
fun matchLevel(candidate: String, partial: String, minMatchRatio: Int = DEFAULT_MIN_MATCH_RATIO): MatchLevel {
|
||||
if (candidate.startsWith(partial)) {
|
||||
return if (candidate.length == partial.length) {
|
||||
CASE_SENSITIVE_EQUAL
|
||||
@@ -182,7 +183,7 @@ open class CompletionItem(
|
||||
}
|
||||
|
||||
val ratio = FuzzySearch.ratio(candidate, partial)
|
||||
if (ratio > MIN_MATCH_RATIO) {
|
||||
if (ratio > minMatchRatio) {
|
||||
return PARTIAL_MATCH
|
||||
}
|
||||
|
||||
|
||||
@@ -33,4 +33,9 @@ public class XMLServerSettings extends PrefBasedServerSettings {
|
||||
|
||||
return instance;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int completionFuzzyMatchMinRatio() {
|
||||
return 50;
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -126,9 +126,9 @@ class XmlCompletionProvider(settings: IServerSettings) :
|
||||
|
||||
private fun createLayoutCompleter(type: NodeType): IXmlCompletionProvider? {
|
||||
return when (type) {
|
||||
TAG -> LayoutTagCompletionProvider()
|
||||
ATTRIBUTE -> LayoutAttributeCompletionProvider()
|
||||
ATTRIBUTE_VALUE -> AttrValueCompletionProvider()
|
||||
TAG -> LayoutTagCompletionProvider(this)
|
||||
ATTRIBUTE -> LayoutAttributeCompletionProvider(this)
|
||||
ATTRIBUTE_VALUE -> AttrValueCompletionProvider(this)
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
|
||||
+2
-1
@@ -18,6 +18,7 @@
|
||||
package com.itsaky.androidide.lsp.xml.providers.completion
|
||||
|
||||
import com.android.aaptcompiler.ResourcePathData
|
||||
import com.itsaky.androidide.lsp.api.ICompletionProvider
|
||||
import com.itsaky.androidide.lsp.xml.utils.XmlUtils.NodeType
|
||||
import com.itsaky.androidide.lsp.xml.utils.XmlUtils.NodeType.ATTRIBUTE
|
||||
import java.nio.file.Path
|
||||
@@ -27,7 +28,7 @@ import java.nio.file.Path
|
||||
*
|
||||
* @author Akash Yadav
|
||||
*/
|
||||
abstract class AttributeCompletionProvider : IXmlCompletionProvider() {
|
||||
abstract class AttributeCompletionProvider(provider: ICompletionProvider) : IXmlCompletionProvider(provider) {
|
||||
|
||||
override fun canProvideCompletions(pathData: ResourcePathData, type: NodeType): Boolean {
|
||||
return super.canProvideCompletions(pathData, type) && type == ATTRIBUTE
|
||||
|
||||
+6
-1
@@ -21,6 +21,7 @@ import com.android.aaptcompiler.Reference
|
||||
import com.android.aaptcompiler.ResourcePathData
|
||||
import com.android.aaptcompiler.ResourceTable
|
||||
import com.itsaky.androidide.lookup.Lookup
|
||||
import com.itsaky.androidide.lsp.api.ICompletionProvider
|
||||
import com.itsaky.androidide.lsp.models.Command
|
||||
import com.itsaky.androidide.lsp.models.CompletionData
|
||||
import com.itsaky.androidide.lsp.models.CompletionItem
|
||||
@@ -42,7 +43,7 @@ import org.eclipse.lemminx.dom.DOMDocument
|
||||
*
|
||||
* @author Akash Yadav
|
||||
*/
|
||||
abstract class IXmlCompletionProvider {
|
||||
abstract class IXmlCompletionProvider(private val provider: ICompletionProvider) {
|
||||
|
||||
protected val log = ILogger.newInstance("XmlCompletionProvider")
|
||||
|
||||
@@ -50,6 +51,10 @@ abstract class IXmlCompletionProvider {
|
||||
const val NAMESPACE_PREFIX = "http://schemas.android.com/apk/res/"
|
||||
const val NAMESPACE_AUTO = "http://schemas.android.com/apk/res-auto"
|
||||
}
|
||||
|
||||
protected open fun matchLevel(candidate: CharSequence, partial: CharSequence) : MatchLevel {
|
||||
return provider.matchLevel(candidate, partial)
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether this completion provide can provide completions for the given [pathData].
|
||||
|
||||
+2
-1
@@ -18,6 +18,7 @@
|
||||
package com.itsaky.androidide.lsp.xml.providers.completion
|
||||
|
||||
import com.android.aaptcompiler.ResourcePathData
|
||||
import com.itsaky.androidide.lsp.api.ICompletionProvider
|
||||
import com.itsaky.androidide.lsp.xml.utils.XmlUtils.NodeType
|
||||
import com.itsaky.androidide.lsp.xml.utils.XmlUtils.NodeType.TAG
|
||||
|
||||
@@ -26,7 +27,7 @@ import com.itsaky.androidide.lsp.xml.utils.XmlUtils.NodeType.TAG
|
||||
*
|
||||
* @author Akash Yadav
|
||||
*/
|
||||
abstract class TagCompletionProvider : IXmlCompletionProvider() {
|
||||
abstract class TagCompletionProvider(provider: ICompletionProvider) : IXmlCompletionProvider(provider) {
|
||||
|
||||
override fun canProvideCompletions(pathData: ResourcePathData, type: NodeType): Boolean {
|
||||
return super.canProvideCompletions(pathData, type) && type == TAG
|
||||
|
||||
+2
-2
@@ -36,8 +36,8 @@ import com.android.aaptcompiler.ResourceGroup
|
||||
import com.android.aaptcompiler.ResourcePathData
|
||||
import com.android.aaptcompiler.ResourceTable
|
||||
import com.itsaky.androidide.aapt.findEntries
|
||||
import com.itsaky.androidide.lsp.api.ICompletionProvider
|
||||
import com.itsaky.androidide.lsp.models.CompletionItem
|
||||
import com.itsaky.androidide.lsp.models.CompletionItem.Companion.matchLevel
|
||||
import com.itsaky.androidide.lsp.models.CompletionParams
|
||||
import com.itsaky.androidide.lsp.models.CompletionResult
|
||||
import com.itsaky.androidide.lsp.models.CompletionResult.Companion.EMPTY
|
||||
@@ -52,7 +52,7 @@ import org.eclipse.lemminx.dom.DOMDocument
|
||||
*
|
||||
* @author Akash Yadav
|
||||
*/
|
||||
class AttrValueCompletionProvider : IXmlCompletionProvider() {
|
||||
class AttrValueCompletionProvider(provider: ICompletionProvider) : IXmlCompletionProvider(provider) {
|
||||
|
||||
override fun canProvideCompletions(pathData: ResourcePathData, type: NodeType): Boolean {
|
||||
return super.canProvideCompletions(pathData, type) && type == ATTRIBUTE_VALUE
|
||||
|
||||
+3
-2
@@ -24,8 +24,8 @@ import com.android.aaptcompiler.ResourcePathData
|
||||
import com.android.aaptcompiler.ResourceTablePackage
|
||||
import com.android.aaptcompiler.Styleable
|
||||
import com.itsaky.androidide.lookup.Lookup
|
||||
import com.itsaky.androidide.lsp.api.ICompletionProvider
|
||||
import com.itsaky.androidide.lsp.models.CompletionItem
|
||||
import com.itsaky.androidide.lsp.models.CompletionItem.Companion.matchLevel
|
||||
import com.itsaky.androidide.lsp.models.CompletionParams
|
||||
import com.itsaky.androidide.lsp.models.CompletionResult
|
||||
import com.itsaky.androidide.lsp.models.MatchLevel.NO_MATCH
|
||||
@@ -41,7 +41,8 @@ import org.eclipse.lemminx.dom.DOMNode
|
||||
*
|
||||
* @author Akash Yadav
|
||||
*/
|
||||
class LayoutAttributeCompletionProvider : AttributeCompletionProvider() {
|
||||
class LayoutAttributeCompletionProvider(provider: ICompletionProvider) :
|
||||
AttributeCompletionProvider(provider) {
|
||||
|
||||
override fun doComplete(
|
||||
params: CompletionParams,
|
||||
|
||||
+2
-1
@@ -19,6 +19,7 @@ package com.itsaky.androidide.lsp.xml.providers.completion.layout
|
||||
|
||||
import com.android.aaptcompiler.AaptResourceType.LAYOUT
|
||||
import com.android.aaptcompiler.ResourcePathData
|
||||
import com.itsaky.androidide.lsp.api.ICompletionProvider
|
||||
import com.itsaky.androidide.lsp.xml.providers.completion.IXmlCompletionProvider
|
||||
import com.itsaky.androidide.lsp.xml.utils.XmlUtils.NodeType
|
||||
|
||||
@@ -27,7 +28,7 @@ import com.itsaky.androidide.lsp.xml.utils.XmlUtils.NodeType
|
||||
*
|
||||
* @author Akash Yadav
|
||||
*/
|
||||
abstract class LayoutCompletionProvider : IXmlCompletionProvider() {
|
||||
abstract class LayoutCompletionProvider(provider: ICompletionProvider) : IXmlCompletionProvider(provider) {
|
||||
|
||||
override fun canProvideCompletions(pathData: ResourcePathData, type: NodeType): Boolean {
|
||||
return super.canProvideCompletions(pathData, type) && pathData.type == LAYOUT
|
||||
|
||||
+4
-3
@@ -19,8 +19,8 @@ package com.itsaky.androidide.lsp.xml.providers.completion.layout
|
||||
|
||||
import com.android.aaptcompiler.ResourcePathData
|
||||
import com.itsaky.androidide.lookup.Lookup
|
||||
import com.itsaky.androidide.lsp.api.ICompletionProvider
|
||||
import com.itsaky.androidide.lsp.models.CompletionItem
|
||||
import com.itsaky.androidide.lsp.models.CompletionItem.Companion.matchLevel
|
||||
import com.itsaky.androidide.lsp.models.CompletionParams
|
||||
import com.itsaky.androidide.lsp.models.CompletionResult
|
||||
import com.itsaky.androidide.lsp.models.MatchLevel
|
||||
@@ -29,15 +29,16 @@ import com.itsaky.androidide.lsp.xml.providers.completion.TagCompletionProvider
|
||||
import com.itsaky.androidide.lsp.xml.utils.XmlUtils.NodeType
|
||||
import com.itsaky.androidide.lsp.xml.utils.XmlUtils.NodeType.TAG
|
||||
import com.itsaky.androidide.xml.widgets.WidgetTable
|
||||
import org.eclipse.lemminx.dom.DOMDocument
|
||||
import kotlin.math.max
|
||||
import org.eclipse.lemminx.dom.DOMDocument
|
||||
|
||||
/**
|
||||
* [TagCompletionProvider] implementation for providing completing tags in an XML layout file.
|
||||
*
|
||||
* @author Akash Yadav
|
||||
*/
|
||||
class LayoutTagCompletionProvider : LayoutCompletionProvider() {
|
||||
class LayoutTagCompletionProvider(provider: ICompletionProvider) :
|
||||
LayoutCompletionProvider(provider) {
|
||||
|
||||
override fun canProvideCompletions(pathData: ResourcePathData, type: NodeType): Boolean {
|
||||
return super.canProvideCompletions(pathData, type) && type == TAG
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user