1
0
mirror of https://github.com/chylex/IntelliJ-AceJump.git synced 2025-05-05 02:34:03 +02:00
This commit is contained in:
breandan 2023-08-28 17:09:12 -04:00
parent 209b6c97b7
commit f64e25a0a9
4 changed files with 19 additions and 23 deletions
build.gradle.kts
gradle/wrapper
src/main/kotlin/org/acejump/search

View File

@ -3,9 +3,9 @@ import org.jetbrains.changelog.date
plugins { plugins {
idea apply true 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.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" id("com.github.ben-manes.versions") version "0.47.0"
} }
@ -37,7 +37,7 @@ tasks {
} }
runPluginVerifier { runPluginVerifier {
ideVersions = listOf("2023.1") ideVersions = listOf("2023.2")
} }
// Remove pending: https://youtrack.jetbrains.com/issue/IDEA-278926 // Remove pending: https://youtrack.jetbrains.com/issue/IDEA-278926

View File

@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists 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 zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists

View File

@ -70,7 +70,7 @@ internal class SearchProcessor private constructor(
*/ */
fun type(char: Char, tagger: Tagger): Boolean { fun type(char: Char, tagger: Tagger): Boolean {
val newQuery = query.rawText + char 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 // If the typed character is not compatible with any existing tag or as
// a continuation of any previous occurrence, reject the query change // a continuation of any previous occurrence, reject the query change

View File

@ -5,13 +5,10 @@ import com.google.common.collect.HashBiMap
import com.intellij.openapi.editor.Editor import com.intellij.openapi.editor.Editor
import it.unimi.dsi.fastutil.ints.IntArrayList import it.unimi.dsi.fastutil.ints.IntArrayList
import it.unimi.dsi.fastutil.ints.IntList import it.unimi.dsi.fastutil.ints.IntList
import org.acejump.ExternalUsage import org.acejump.*
import org.acejump.boundaries.EditorOffsetCache import org.acejump.boundaries.EditorOffsetCache
import org.acejump.boundaries.StandardBoundaries.VISIBLE_ON_SCREEN import org.acejump.boundaries.StandardBoundaries.VISIBLE_ON_SCREEN
import org.acejump.immutableText
import org.acejump.input.KeyLayoutCache.allPossibleTags import org.acejump.input.KeyLayoutCache.allPossibleTags
import org.acejump.isWordPart
import org.acejump.matchesAt
import org.acejump.view.TagMarker import org.acejump.view.TagMarker
import java.util.AbstractMap.SimpleImmutableEntry import java.util.AbstractMap.SimpleImmutableEntry
import kotlin.collections.component1 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 { private infix fun Map.Entry<String, Tag>.solves(query: String): Boolean =
return query.endsWith(key, true) && isTagCompatibleWithQuery(key, value, query) query.endsWith(key, true) && isTagCompatibleWithQuery(key, value, query)
}
private fun isTagCompatibleWithQuery(marker: String, tag: Tag, query: String): Boolean { private fun isTagCompatibleWithQuery(marker: String, tag: Tag, query: String): Boolean =
return tag.editor.immutableText.matchesAt(tag.offset, getPlaintextPortion(query, marker), ignoreCase = true) tag.editor.immutableText.matchesAt(tag.offset, getPlaintextPortion(query, marker), ignoreCase = true)
}
fun isQueryCompatibleWithTagAt(query: String, tag: Tag): Boolean { fun isQueryCompatibleWithTagAt(query: String, tag: Tag): Boolean =
return tagMap.inverse()[tag].let { it != null && isTagCompatibleWithQuery(it, tag, query) } tagMap.inverse()[tag].let { it != null && isTagCompatibleWithQuery(it, tag, query) }
}
fun canQueryMatchAnyTag(query: String): Boolean { fun canQueryMatchAnyVisibleTag(query: String): Boolean =
return tagMap.any { (tag, offset) -> tagMap.any { (label, tag) ->
val tagPortion = getTagPortion(query, tag) val tagPortion = getTagPortion(query, label)
tagPortion.isNotEmpty() && tag.startsWith(tagPortion, ignoreCase = true) && isTagCompatibleWithQuery(tag, offset, query) tagPortion.isNotEmpty()
&& label.startsWith(tagPortion, ignoreCase = true)
&& isTagCompatibleWithQuery(label, tag, query)
&& tag.offset in tag.editor.getView()
} }
}
private fun removeResultsWithOverlappingTags(editor: Editor, offsets: IntList) { private fun removeResultsWithOverlappingTags(editor: Editor, offsets: IntList) {
val iter = offsets.iterator() val iter = offsets.iterator()