mirror of
https://github.com/chylex/IntelliJ-IdeaVim.git
synced 2025-05-21 16:34:05 +02:00
fix: distanceTo to works with nested quotes and brackets
This commit is contained in:
parent
ad49800b09
commit
01d776957a
src/main/java/com/maddyhome/idea/vim/extension/miniai
tests/java-tests/src/test/kotlin/org/jetbrains/plugins/ideavim/extension/miniai
@ -220,11 +220,16 @@ private fun findClosestQuoteRange(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun TextRange.distanceTo(caretOffset: Int): Int {
|
private fun TextRange.distanceTo(caretOffset: Int): Int {
|
||||||
return if (caretOffset < startOffset) {
|
val rangeLength = endOffset - startOffset
|
||||||
startOffset - caretOffset
|
|
||||||
} else if (caretOffset > endOffset) {
|
// If caret is inside the range
|
||||||
caretOffset - endOffset
|
if (caretOffset in startOffset..endOffset) {
|
||||||
} else {
|
// Return the length of the range - smaller ranges get priority
|
||||||
0 // Caret is inside the range
|
return rangeLength
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
// If caret is outside, make the distance much larger
|
||||||
|
val startDistance = kotlin.math.abs(caretOffset - startOffset)
|
||||||
|
val endDistance = kotlin.math.abs(caretOffset - endOffset)
|
||||||
|
return (startDistance + endDistance) * 1000 + rangeLength
|
||||||
|
}
|
||||||
|
@ -23,6 +23,200 @@ class MiniAIExtensionTest : VimJavaTestCase() {
|
|||||||
enableExtensions("mini-ai")
|
enableExtensions("mini-ai")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testChangeInsideNestedQuotes() {
|
||||||
|
doTest(
|
||||||
|
"ciq",
|
||||||
|
"this 'simple<caret> \"test\"'",
|
||||||
|
"this '<caret>'",
|
||||||
|
Mode.INSERT,
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testDeleteInsideNestedQuotes() {
|
||||||
|
doTest(
|
||||||
|
"diq",
|
||||||
|
"this 'simple<caret> \"test\"'",
|
||||||
|
"this '<caret>'",
|
||||||
|
Mode.NORMAL(),
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testChangeInsideNestedQuotesDoubleInner() {
|
||||||
|
doTest(
|
||||||
|
"ciq",
|
||||||
|
"this \"simple<caret> 'test'\"",
|
||||||
|
"this \"<caret>\"",
|
||||||
|
Mode.INSERT,
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testDeleteInsideNestedQuotesDoubleInner() {
|
||||||
|
doTest(
|
||||||
|
"diq",
|
||||||
|
"this \"simple<caret> 'test'\"",
|
||||||
|
"this \"<caret>\"",
|
||||||
|
Mode.NORMAL(),
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testChangeInsideNestedQuotesBackQuote() {
|
||||||
|
doTest(
|
||||||
|
"ciq",
|
||||||
|
"this `simple<caret> \"test\"`",
|
||||||
|
"this `<caret>`",
|
||||||
|
Mode.INSERT,
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testDeleteInsideNestedQuotesBackQuote() {
|
||||||
|
doTest(
|
||||||
|
"diq",
|
||||||
|
"this `simple<caret> \"test\"`",
|
||||||
|
"this `<caret>`",
|
||||||
|
Mode.NORMAL(),
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testChangeAroundNestedSingleQuotes() {
|
||||||
|
doTest(
|
||||||
|
"caq",
|
||||||
|
"this 'simple<caret> \"test\"'",
|
||||||
|
"this <caret>",
|
||||||
|
Mode.INSERT,
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testDeleteAroundNestedSingleQuotes() {
|
||||||
|
doTest(
|
||||||
|
"daq",
|
||||||
|
"this 'simple<caret> \"test\"' test",
|
||||||
|
"this <caret> test",
|
||||||
|
Mode.NORMAL(),
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testChangeAroundNestedDoubleQuotes() {
|
||||||
|
doTest(
|
||||||
|
"caq",
|
||||||
|
"this \"simple<caret> 'test'\"",
|
||||||
|
"this <caret>",
|
||||||
|
Mode.INSERT,
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testDeleteAroundNestedDoubleQuotes() {
|
||||||
|
doTest(
|
||||||
|
"daq",
|
||||||
|
"this \"simple<caret> 'test'\" test",
|
||||||
|
"this <caret> test",
|
||||||
|
Mode.NORMAL(),
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testChangeAroundNestedBackQuotes() {
|
||||||
|
doTest(
|
||||||
|
"caq",
|
||||||
|
"this `simple<caret> \"test\"`",
|
||||||
|
"this <caret>",
|
||||||
|
Mode.INSERT,
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testDeleteAroundNestedBackQuotes() {
|
||||||
|
doTest(
|
||||||
|
"daq",
|
||||||
|
"this `simple<caret> \"test\"` test",
|
||||||
|
"this <caret> test",
|
||||||
|
Mode.NORMAL(),
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Additional edge cases with cursor on different positions
|
||||||
|
@Test
|
||||||
|
fun testChangeAroundNestedQuotesOnInnerQuote() {
|
||||||
|
doTest(
|
||||||
|
"caq",
|
||||||
|
"this 'simple \"<caret>test\"'",
|
||||||
|
"this 'simple <caret>'",
|
||||||
|
Mode.INSERT,
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testDeleteAroundNestedQuotesOnInnerQuote() {
|
||||||
|
doTest(
|
||||||
|
"daq",
|
||||||
|
"this 'simple \"<caret>test\"'",
|
||||||
|
"this 'simple '",
|
||||||
|
Mode.NORMAL(),
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test with multiple levels of nesting
|
||||||
|
@Test
|
||||||
|
fun testChangeAroundTripleNestedQuotes() {
|
||||||
|
doTest(
|
||||||
|
"caq",
|
||||||
|
"this 'simple \"nested `<caret>test`\"'",
|
||||||
|
"this 'simple \"nested <caret>\"'",
|
||||||
|
Mode.INSERT,
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testDeleteAroundTripleNestedQuotes() {
|
||||||
|
doTest(
|
||||||
|
"daq",
|
||||||
|
"this 'simple \"nested `<caret>test`\"'",
|
||||||
|
"this 'simple \"nested <caret>\"'",
|
||||||
|
Mode.NORMAL(),
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testChangeInsideSingleQuote() {
|
fun testChangeInsideSingleQuote() {
|
||||||
doTest(
|
doTest(
|
||||||
|
Loading…
Reference in New Issue
Block a user