diff --git a/build.gradle.kts b/build.gradle.kts index af31117..9c3a612 100755 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -3,9 +3,9 @@ import org.jetbrains.changelog.date plugins { idea apply true - kotlin("jvm") version "1.9.0" + kotlin("jvm") version "1.9.10" id("org.jetbrains.intellij") version "1.15.0" - id("org.jetbrains.changelog") version "2.1.2" + id("org.jetbrains.changelog") version "2.2.0" id("com.github.ben-manes.versions") version "0.47.0" } @@ -37,7 +37,7 @@ tasks { } runPluginVerifier { - ideVersions = listOf("2023.1") + ideVersions = listOf("2023.2") } // Remove pending: https://youtrack.jetbrains.com/issue/IDEA-278926 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 84a0b92..db9a6b8 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.2.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/src/main/kotlin/org/acejump/search/SearchProcessor.kt b/src/main/kotlin/org/acejump/search/SearchProcessor.kt index 1a50746..bc9cfca 100644 --- a/src/main/kotlin/org/acejump/search/SearchProcessor.kt +++ b/src/main/kotlin/org/acejump/search/SearchProcessor.kt @@ -70,7 +70,7 @@ internal class SearchProcessor private constructor( */ fun type(char: Char, tagger: Tagger): Boolean { val newQuery = query.rawText + char - val canMatchTag = tagger.canQueryMatchAnyTag(newQuery) + val canMatchTag = tagger.canQueryMatchAnyVisibleTag(newQuery) // If the typed character is not compatible with any existing tag or as // a continuation of any previous occurrence, reject the query change diff --git a/src/main/kotlin/org/acejump/search/Tagger.kt b/src/main/kotlin/org/acejump/search/Tagger.kt index 8ec04c0..5aeb24a 100644 --- a/src/main/kotlin/org/acejump/search/Tagger.kt +++ b/src/main/kotlin/org/acejump/search/Tagger.kt @@ -5,13 +5,10 @@ import com.google.common.collect.HashBiMap import com.intellij.openapi.editor.Editor import it.unimi.dsi.fastutil.ints.IntArrayList import it.unimi.dsi.fastutil.ints.IntList -import org.acejump.ExternalUsage +import org.acejump.* import org.acejump.boundaries.EditorOffsetCache import org.acejump.boundaries.StandardBoundaries.VISIBLE_ON_SCREEN -import org.acejump.immutableText import org.acejump.input.KeyLayoutCache.allPossibleTags -import org.acejump.isWordPart -import org.acejump.matchesAt import org.acejump.view.TagMarker import java.util.AbstractMap.SimpleImmutableEntry import kotlin.collections.component1 @@ -143,24 +140,23 @@ internal class Tagger(private val editors: List<Editor>) { } } - private infix fun Map.Entry<String, Tag>.solves(query: String): Boolean { - return query.endsWith(key, true) && isTagCompatibleWithQuery(key, value, query) - } + private infix fun Map.Entry<String, Tag>.solves(query: String): Boolean = + query.endsWith(key, true) && isTagCompatibleWithQuery(key, value, query) - private fun isTagCompatibleWithQuery(marker: String, tag: Tag, query: String): Boolean { - return tag.editor.immutableText.matchesAt(tag.offset, getPlaintextPortion(query, marker), ignoreCase = true) - } + private fun isTagCompatibleWithQuery(marker: String, tag: Tag, query: String): Boolean = + tag.editor.immutableText.matchesAt(tag.offset, getPlaintextPortion(query, marker), ignoreCase = true) - fun isQueryCompatibleWithTagAt(query: String, tag: Tag): Boolean { - return tagMap.inverse()[tag].let { it != null && isTagCompatibleWithQuery(it, tag, query) } - } + fun isQueryCompatibleWithTagAt(query: String, tag: Tag): Boolean = + tagMap.inverse()[tag].let { it != null && isTagCompatibleWithQuery(it, tag, query) } - fun canQueryMatchAnyTag(query: String): Boolean { - return tagMap.any { (tag, offset) -> - val tagPortion = getTagPortion(query, tag) - tagPortion.isNotEmpty() && tag.startsWith(tagPortion, ignoreCase = true) && isTagCompatibleWithQuery(tag, offset, query) + fun canQueryMatchAnyVisibleTag(query: String): Boolean = + tagMap.any { (label, tag) -> + val tagPortion = getTagPortion(query, label) + tagPortion.isNotEmpty() + && label.startsWith(tagPortion, ignoreCase = true) + && isTagCompatibleWithQuery(label, tag, query) + && tag.offset in tag.editor.getView() } - } private fun removeResultsWithOverlappingTags(editor: Editor, offsets: IntList) { val iter = offsets.iterator()