mirror of
https://github.com/chylex/IntelliJ-IdeaVim.git
synced 2025-04-29 20:34:08 +02:00
feat: add mini-ai extension
This commit is contained in:
parent
ee548b52db
commit
31a6d8174a
doc
src
main
java/com/maddyhome/idea/vim
resources/META-INF/includes
test/java/org/jetbrains/plugins/ideavim/ex/implementation/commands
tests/java-tests/src/test/kotlin/org/jetbrains/plugins/ideavim/extension/miniai
@ -423,6 +423,24 @@ https://plugins.jetbrains.com/plugin/19417-ideavim-quickscope
|
|||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary><h2>Mini.ai: Extend and create a/i textobjects (IMPORTANT: The plugin is not related with artificial intelligence)</h2></summary>
|
||||||
|
|
||||||
|
### Features:
|
||||||
|
Provides additional text object motions for handling quotes and brackets. The following motions are included:
|
||||||
|
|
||||||
|
- aq: Around any quotes.
|
||||||
|
- iq: Inside any quotes.
|
||||||
|
- ab: Around any parentheses, curly braces, and square brackets.
|
||||||
|
- ib: Inside any parentheses, curly braces, and square brackets.
|
||||||
|
|
||||||
|
Original plugin: [mini.ai](https://github.com/echasnovski/mini.ai).
|
||||||
|
|
||||||
|
### Setup:
|
||||||
|
- Add the following command to `~/.ideavimrc`: `set mini-ai`
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary><h2>Which-Key</h2></summary>
|
<summary><h2>Which-Key</h2></summary>
|
||||||
@ -484,4 +502,3 @@ or restart the IDE.
|
|||||||
|
|
||||||
https://plugins.jetbrains.com/plugin/25899-vim-switch
|
https://plugins.jetbrains.com/plugin/25899-vim-switch
|
||||||
|
|
||||||
</details>
|
|
||||||
|
230
src/main/java/com/maddyhome/idea/vim/extension/miniai/MiniAI.kt
Normal file
230
src/main/java/com/maddyhome/idea/vim/extension/miniai/MiniAI.kt
Normal file
@ -0,0 +1,230 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2003-2023 The IdeaVim authors
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by an MIT-style
|
||||||
|
* license that can be found in the LICENSE.txt file or at
|
||||||
|
* https://opensource.org/licenses/MIT.
|
||||||
|
*/
|
||||||
|
package com.maddyhome.idea.vim.extension.miniai
|
||||||
|
|
||||||
|
import com.maddyhome.idea.vim.KeyHandler
|
||||||
|
import com.maddyhome.idea.vim.api.ExecutionContext
|
||||||
|
import com.maddyhome.idea.vim.api.ImmutableVimCaret
|
||||||
|
import com.maddyhome.idea.vim.api.VimEditor
|
||||||
|
import com.maddyhome.idea.vim.api.injector
|
||||||
|
import com.maddyhome.idea.vim.command.CommandFlags
|
||||||
|
import com.maddyhome.idea.vim.command.MappingMode
|
||||||
|
import com.maddyhome.idea.vim.command.OperatorArguments
|
||||||
|
import com.maddyhome.idea.vim.command.TextObjectVisualType
|
||||||
|
import com.maddyhome.idea.vim.common.TextRange
|
||||||
|
import com.maddyhome.idea.vim.extension.ExtensionHandler
|
||||||
|
import com.maddyhome.idea.vim.extension.VimExtension
|
||||||
|
import com.maddyhome.idea.vim.extension.VimExtensionFacade.putExtensionHandlerMapping
|
||||||
|
import com.maddyhome.idea.vim.extension.VimExtensionFacade.putKeyMapping
|
||||||
|
import com.maddyhome.idea.vim.group.findBlockRange
|
||||||
|
import com.maddyhome.idea.vim.handler.TextObjectActionHandler
|
||||||
|
import com.maddyhome.idea.vim.helper.enumSetOf
|
||||||
|
import com.maddyhome.idea.vim.state.KeyHandlerState
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extend and create a/i textobjects
|
||||||
|
*
|
||||||
|
* <p>
|
||||||
|
* mini ai provides the next motions:
|
||||||
|
* <ul>
|
||||||
|
* <li>aq around any quotes.</li>
|
||||||
|
* <li>iq inside any quotes.</li>
|
||||||
|
* <li>ab around any parentheses, curly braces and square brackets.</li>
|
||||||
|
* <li>ib inside any parentheses, curly braces and square brackets.</li>
|
||||||
|
* </ul>
|
||||||
|
*
|
||||||
|
* @author Osvaldo Cordova Aburto (@oca159)
|
||||||
|
*/
|
||||||
|
internal class MiniAI : VimExtension {
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
// Constants for key mappings
|
||||||
|
private const val PLUG_AQ = "<Plug>mini-ai-aq"
|
||||||
|
private const val PLUG_IQ = "<Plug>mini-ai-iq"
|
||||||
|
private const val PLUG_AB = "<Plug>mini-ai-ab"
|
||||||
|
private const val PLUG_IB = "<Plug>mini-ai-ib"
|
||||||
|
|
||||||
|
// Constants for key sequences
|
||||||
|
private const val KEY_AQ = "aq"
|
||||||
|
private const val KEY_IQ = "iq"
|
||||||
|
private const val KEY_AB = "ab"
|
||||||
|
private const val KEY_IB = "ib"
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getName() = "mini-ai"
|
||||||
|
|
||||||
|
override fun init() {
|
||||||
|
registerMappings()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun registerMappings() {
|
||||||
|
val mappings = listOf(
|
||||||
|
PLUG_AQ to AroundAnyQuotesHandler(),
|
||||||
|
PLUG_IQ to InsideAnyQuotesHandler(),
|
||||||
|
PLUG_AB to AroundAnyBracketsHandler(),
|
||||||
|
PLUG_IB to InsideAnyBracketsHandler()
|
||||||
|
)
|
||||||
|
|
||||||
|
mappings.forEach { (key, handler) ->
|
||||||
|
putExtensionHandlerMapping(MappingMode.XO, injector.parser.parseKeys(key), owner, handler, false)
|
||||||
|
}
|
||||||
|
|
||||||
|
val keyMappings = listOf(
|
||||||
|
KEY_AQ to PLUG_AQ,
|
||||||
|
KEY_IQ to PLUG_IQ,
|
||||||
|
KEY_AB to PLUG_AB,
|
||||||
|
KEY_IB to PLUG_IB
|
||||||
|
)
|
||||||
|
|
||||||
|
keyMappings.forEach { (key, plug) ->
|
||||||
|
putKeyMapping(MappingMode.XO, injector.parser.parseKeys(key), owner, injector.parser.parseKeys(plug), true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private class InsideAnyQuotesHandler : ExtensionHandler {
|
||||||
|
override val isRepeatable = true
|
||||||
|
|
||||||
|
override fun execute(editor: VimEditor, context: ExecutionContext, operatorArguments: OperatorArguments) {
|
||||||
|
addAction(MotionInnerAnyQuoteProximityAction())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class AroundAnyQuotesHandler : ExtensionHandler {
|
||||||
|
override val isRepeatable = true
|
||||||
|
|
||||||
|
override fun execute(editor: VimEditor, context: ExecutionContext, operatorArguments: OperatorArguments) {
|
||||||
|
addAction(MotionOuterAnyQuoteProximityAction())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class InsideAnyBracketsHandler : ExtensionHandler {
|
||||||
|
override val isRepeatable = true
|
||||||
|
|
||||||
|
override fun execute(editor: VimEditor, context: ExecutionContext, operatorArguments: OperatorArguments) {
|
||||||
|
addAction(MotionInnerAnyBracketProximityAction())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class AroundAnyBracketsHandler : ExtensionHandler {
|
||||||
|
override val isRepeatable = true
|
||||||
|
|
||||||
|
override fun execute(editor: VimEditor, context: ExecutionContext, operatorArguments: OperatorArguments) {
|
||||||
|
addAction(MotionOuterAnyBracketProximityAction())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class MotionInnerAnyQuoteProximityAction : TextObjectActionHandler() {
|
||||||
|
|
||||||
|
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_TEXT_BLOCK)
|
||||||
|
|
||||||
|
override val visualType: TextObjectVisualType = TextObjectVisualType.CHARACTER_WISE
|
||||||
|
|
||||||
|
override fun getRange(
|
||||||
|
editor: VimEditor,
|
||||||
|
caret: ImmutableVimCaret,
|
||||||
|
context: ExecutionContext,
|
||||||
|
count: Int,
|
||||||
|
rawCount: Int,
|
||||||
|
): TextRange? {
|
||||||
|
return findClosestQuoteRange(editor, caret, false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class MotionOuterAnyQuoteProximityAction : TextObjectActionHandler() {
|
||||||
|
|
||||||
|
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_TEXT_BLOCK)
|
||||||
|
|
||||||
|
override val visualType: TextObjectVisualType = TextObjectVisualType.CHARACTER_WISE
|
||||||
|
|
||||||
|
override fun getRange(
|
||||||
|
editor: VimEditor,
|
||||||
|
caret: ImmutableVimCaret,
|
||||||
|
context: ExecutionContext,
|
||||||
|
count: Int,
|
||||||
|
rawCount: Int,
|
||||||
|
): TextRange? {
|
||||||
|
return findClosestQuoteRange(editor, caret, true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class MotionInnerAnyBracketProximityAction : TextObjectActionHandler() {
|
||||||
|
|
||||||
|
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_TEXT_BLOCK)
|
||||||
|
|
||||||
|
override val visualType: TextObjectVisualType = TextObjectVisualType.CHARACTER_WISE
|
||||||
|
|
||||||
|
override fun getRange(
|
||||||
|
editor: VimEditor,
|
||||||
|
caret: ImmutableVimCaret,
|
||||||
|
context: ExecutionContext,
|
||||||
|
count: Int,
|
||||||
|
rawCount: Int,
|
||||||
|
): TextRange? {
|
||||||
|
return findClosestBracketRange(editor, caret, count, false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class MotionOuterAnyBracketProximityAction : TextObjectActionHandler() {
|
||||||
|
|
||||||
|
override val flags: EnumSet<CommandFlags> = enumSetOf(CommandFlags.FLAG_TEXT_BLOCK)
|
||||||
|
|
||||||
|
override val visualType: TextObjectVisualType = TextObjectVisualType.CHARACTER_WISE
|
||||||
|
|
||||||
|
override fun getRange(
|
||||||
|
editor: VimEditor,
|
||||||
|
caret: ImmutableVimCaret,
|
||||||
|
context: ExecutionContext,
|
||||||
|
count: Int,
|
||||||
|
rawCount: Int,
|
||||||
|
): TextRange? {
|
||||||
|
return findClosestBracketRange(editor, caret, count, true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun addAction(action: TextObjectActionHandler) {
|
||||||
|
val keyHandlerState: KeyHandlerState = KeyHandler.getInstance().keyHandlerState
|
||||||
|
keyHandlerState.commandBuilder.addAction(action)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun findClosestBracketRange(
|
||||||
|
editor: VimEditor,
|
||||||
|
caret: ImmutableVimCaret,
|
||||||
|
count: Int,
|
||||||
|
isOuter: Boolean,
|
||||||
|
): TextRange? {
|
||||||
|
return listOf('(', '[', '{')
|
||||||
|
.mapNotNull { char ->
|
||||||
|
findBlockRange(editor, caret, char, count, isOuter)?.let { range -> range to char }
|
||||||
|
}
|
||||||
|
.minByOrNull { it.first.distanceTo(caret.offset) }?.first
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun findClosestQuoteRange(
|
||||||
|
editor: VimEditor,
|
||||||
|
caret: ImmutableVimCaret,
|
||||||
|
isOuter: Boolean,
|
||||||
|
): TextRange? {
|
||||||
|
return listOf('`', '"', '\'')
|
||||||
|
.mapNotNull { char ->
|
||||||
|
injector.searchHelper.findBlockQuoteInLineRange(editor, caret, char, isOuter)?.let { range -> range to char }
|
||||||
|
}
|
||||||
|
.minByOrNull { it.first.distanceTo(caret.offset) }?.first
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun TextRange.distanceTo(caretOffset: Int): Int {
|
||||||
|
return if (caretOffset < startOffset) {
|
||||||
|
startOffset - caretOffset
|
||||||
|
} else if (caretOffset > endOffset) {
|
||||||
|
caretOffset - endOffset
|
||||||
|
} else {
|
||||||
|
0 // Caret is inside the range
|
||||||
|
}
|
||||||
|
}
|
@ -45,7 +45,8 @@ internal class PluginState : ApplicationUsagesCollector() {
|
|||||||
"surround",
|
"surround",
|
||||||
"commentary",
|
"commentary",
|
||||||
"matchit",
|
"matchit",
|
||||||
"textobj-indent"
|
"textobj-indent",
|
||||||
|
"mini-ai"
|
||||||
)
|
)
|
||||||
internal val enabledExtensions = HashSet<String>()
|
internal val enabledExtensions = HashSet<String>()
|
||||||
}
|
}
|
||||||
|
@ -49,6 +49,15 @@
|
|||||||
</aliases>
|
</aliases>
|
||||||
</vimExtension>
|
</vimExtension>
|
||||||
|
|
||||||
|
|
||||||
|
<vimExtension implementation="com.maddyhome.idea.vim.extension.miniai.MiniAI"
|
||||||
|
name="mini-ai">
|
||||||
|
<aliases>
|
||||||
|
<alias name="https://github.com/echasnovski/mini.ai"/>
|
||||||
|
<alias name="echasnovski/mini.ai"/>
|
||||||
|
</aliases>
|
||||||
|
</vimExtension>
|
||||||
|
|
||||||
<vimExtension implementation="com.maddyhome.idea.vim.extension.argtextobj.VimArgTextObjExtension"
|
<vimExtension implementation="com.maddyhome.idea.vim.extension.argtextobj.VimArgTextObjExtension"
|
||||||
name="argtextobj">
|
name="argtextobj">
|
||||||
<aliases>
|
<aliases>
|
||||||
|
@ -183,20 +183,21 @@ class SetCommandTest : VimTestCase() {
|
|||||||
"set all",
|
"set all",
|
||||||
"""
|
"""
|
||||||
|--- Options ---
|
|--- Options ---
|
||||||
|noargtextobj ideamarks scroll=0 nosurround
|
|noargtextobj ideawrite=all scrolljump=1 notextobj-indent
|
||||||
|nobomb ideawrite=all scrolljump=1 notextobj-entire
|
|nobomb noignorecase scrolloff=0 textwidth=0
|
||||||
|nobreakindent noignorecase scrolloff=0 notextobj-indent
|
|nobreakindent noincsearch selectmode= timeout
|
||||||
| colorcolumn= noincsearch selectmode= textwidth=0
|
| colorcolumn= nolist shellcmdflag=-x timeoutlen=1000
|
||||||
|nocommentary nolist shellcmdflag=-x timeout
|
|nocommentary nomatchit shellxescape=@ notrackactionids
|
||||||
|nocursorline nomatchit shellxescape=@ timeoutlen=1000
|
|nocursorline maxmapdepth=20 shellxquote={ undolevels=1000
|
||||||
|nodigraph maxmapdepth=20 shellxquote={ notrackactionids
|
|nodigraph nomini-ai showcmd virtualedit=
|
||||||
|noexchange more showcmd undolevels=1000
|
|noexchange more showmode novisualbell
|
||||||
| fileformat=unix nomultiple-cursors showmode virtualedit=
|
| fileformat=unix nomultiple-cursors sidescroll=0 visualdelay=100
|
||||||
|nogdefault noNERDTree sidescroll=0 novisualbell
|
|nogdefault noNERDTree sidescrolloff=0 whichwrap=b,s
|
||||||
|nohighlightedyank nrformats=hex sidescrolloff=0 visualdelay=100
|
|nohighlightedyank nrformats=hex nosmartcase wrap
|
||||||
| history=50 nonumber nosmartcase whichwrap=b,s
|
| history=50 nonumber nosneak wrapscan
|
||||||
|nohlsearch operatorfunc= nosneak wrap
|
|nohlsearch operatorfunc= startofline
|
||||||
|noideajoin norelativenumber startofline wrapscan
|
|noideajoin norelativenumber nosurround
|
||||||
|
| ideamarks scroll=0 notextobj-entire
|
||||||
| clipboard=ideaput,autoselect
|
| clipboard=ideaput,autoselect
|
||||||
| fileencoding=utf-8
|
| fileencoding=utf-8
|
||||||
| guicursor=n-v-c:block-Cursor/lCursor,ve:ver35-Cursor,o:hor50-Cursor,i-ci:ver25-Cursor/lCursor,r-cr:hor20-Cursor/lCursor,sm:block-Cursor-blinkwait175-blinkoff150-blinkon175
|
| guicursor=n-v-c:block-Cursor/lCursor,ve:ver35-Cursor,o:hor50-Cursor,i-ci:ver25-Cursor/lCursor,r-cr:hor20-Cursor/lCursor,sm:block-Cursor-blinkwait175-blinkoff150-blinkon175
|
||||||
@ -288,6 +289,7 @@ class SetCommandTest : VimTestCase() {
|
|||||||
|nomatchit
|
|nomatchit
|
||||||
| matchpairs=(:),{:},[:]
|
| matchpairs=(:),{:},[:]
|
||||||
| maxmapdepth=20
|
| maxmapdepth=20
|
||||||
|
|nomini-ai
|
||||||
| more
|
| more
|
||||||
|nomultiple-cursors
|
|nomultiple-cursors
|
||||||
|noNERDTree
|
|noNERDTree
|
||||||
|
@ -432,21 +432,21 @@ class SetglobalCommandTest : VimTestCase() {
|
|||||||
assertCommandOutput(
|
assertCommandOutput(
|
||||||
"setglobal all", """
|
"setglobal all", """
|
||||||
|--- Global option values ---
|
|--- Global option values ---
|
||||||
|noargtextobj ideamarks scrolljump=1 notextobj-indent
|
|noargtextobj ideamarks scroll=0 notextobj-entire
|
||||||
|nobomb ideawrite=all scrolloff=0 textwidth=0
|
|nobomb ideawrite=all scrolljump=1 notextobj-indent
|
||||||
|nobreakindent noignorecase selectmode= timeout
|
|nobreakindent noignorecase scrolloff=0 textwidth=0
|
||||||
| colorcolumn= noincsearch shellcmdflag=-x timeoutlen=1000
|
| colorcolumn= noincsearch selectmode= timeout
|
||||||
|nocommentary nolist shellxescape=@ notrackactionids
|
|nocommentary nolist shellcmdflag=-x timeoutlen=1000
|
||||||
|nocursorline nomatchit shellxquote={ undolevels=1000
|
|nocursorline nomatchit shellxescape=@ notrackactionids
|
||||||
|nodigraph maxmapdepth=20 showcmd virtualedit=
|
|nodigraph maxmapdepth=20 shellxquote={ undolevels=1000
|
||||||
|noexchange more showmode novisualbell
|
|noexchange nomini-ai showcmd virtualedit=
|
||||||
| fileencoding= nomultiple-cursors sidescroll=0 visualdelay=100
|
| fileencoding= more showmode novisualbell
|
||||||
| fileformat=unix noNERDTree sidescrolloff=0 whichwrap=b,s
|
| fileformat=unix nomultiple-cursors sidescroll=0 visualdelay=100
|
||||||
|nogdefault nrformats=hex nosmartcase wrap
|
|nogdefault noNERDTree sidescrolloff=0 whichwrap=b,s
|
||||||
|nohighlightedyank nonumber nosneak wrapscan
|
|nohighlightedyank nrformats=hex nosmartcase wrap
|
||||||
| history=50 operatorfunc= startofline
|
| history=50 nonumber nosneak wrapscan
|
||||||
|nohlsearch norelativenumber nosurround
|
|nohlsearch operatorfunc= startofline
|
||||||
|noideajoin scroll=0 notextobj-entire
|
|noideajoin norelativenumber nosurround
|
||||||
| clipboard=ideaput,autoselect
|
| clipboard=ideaput,autoselect
|
||||||
| guicursor=n-v-c:block-Cursor/lCursor,ve:ver35-Cursor,o:hor50-Cursor,i-ci:ver25-Cursor/lCursor,r-cr:hor20-Cursor/lCursor,sm:block-Cursor-blinkwait175-blinkoff150-blinkon175
|
| guicursor=n-v-c:block-Cursor/lCursor,ve:ver35-Cursor,o:hor50-Cursor,i-ci:ver25-Cursor/lCursor,r-cr:hor20-Cursor/lCursor,sm:block-Cursor-blinkwait175-blinkoff150-blinkon175
|
||||||
| ide=IntelliJ IDEA Community Edition
|
| ide=IntelliJ IDEA Community Edition
|
||||||
@ -539,6 +539,7 @@ class SetglobalCommandTest : VimTestCase() {
|
|||||||
|nomatchit
|
|nomatchit
|
||||||
| matchpairs=(:),{:},[:]
|
| matchpairs=(:),{:},[:]
|
||||||
| maxmapdepth=20
|
| maxmapdepth=20
|
||||||
|
|nomini-ai
|
||||||
| more
|
| more
|
||||||
|nomultiple-cursors
|
|nomultiple-cursors
|
||||||
|noNERDTree
|
|noNERDTree
|
||||||
|
@ -483,20 +483,21 @@ class SetlocalCommandTest : VimTestCase() {
|
|||||||
assertCommandOutput(
|
assertCommandOutput(
|
||||||
"setlocal all", """
|
"setlocal all", """
|
||||||
|--- Local option values ---
|
|--- Local option values ---
|
||||||
|noargtextobj ideamarks norelativenumber startofline
|
|noargtextobj idearefactormode= scroll=0 notextobj-entire
|
||||||
|nobomb idearefactormode= scroll=0 nosurround
|
|nobomb ideawrite=all scrolljump=1 notextobj-indent
|
||||||
|nobreakindent ideawrite=all scrolljump=1 notextobj-entire
|
|nobreakindent noignorecase scrolloff=-1 textwidth=0
|
||||||
| colorcolumn= noignorecase scrolloff=-1 notextobj-indent
|
| colorcolumn= noincsearch selectmode= timeout
|
||||||
|nocommentary noincsearch selectmode= textwidth=0
|
|nocommentary nolist shellcmdflag=-x timeoutlen=1000
|
||||||
|nocursorline nolist shellcmdflag=-x timeout
|
|nocursorline nomatchit shellxescape=@ notrackactionids
|
||||||
|nodigraph nomatchit shellxescape=@ timeoutlen=1000
|
|nodigraph maxmapdepth=20 shellxquote={ virtualedit=
|
||||||
|noexchange maxmapdepth=20 shellxquote={ notrackactionids
|
|noexchange nomini-ai showcmd novisualbell
|
||||||
| fileformat=unix more showcmd virtualedit=
|
| fileformat=unix more showmode visualdelay=100
|
||||||
|nogdefault nomultiple-cursors showmode novisualbell
|
|nogdefault nomultiple-cursors sidescroll=0 whichwrap=b,s
|
||||||
|nohighlightedyank noNERDTree sidescroll=0 visualdelay=100
|
|nohighlightedyank noNERDTree sidescrolloff=-1 wrap
|
||||||
| history=50 nrformats=hex sidescrolloff=-1 whichwrap=b,s
|
| history=50 nrformats=hex nosmartcase wrapscan
|
||||||
|nohlsearch nonumber nosmartcase wrap
|
|nohlsearch nonumber nosneak
|
||||||
|--ideajoin operatorfunc= nosneak wrapscan
|
|--ideajoin operatorfunc= startofline
|
||||||
|
| ideamarks norelativenumber nosurround
|
||||||
| clipboard=ideaput,autoselect
|
| clipboard=ideaput,autoselect
|
||||||
| fileencoding=utf-8
|
| fileencoding=utf-8
|
||||||
| guicursor=n-v-c:block-Cursor/lCursor,ve:ver35-Cursor,o:hor50-Cursor,i-ci:ver25-Cursor/lCursor,r-cr:hor20-Cursor/lCursor,sm:block-Cursor-blinkwait175-blinkoff150-blinkon175
|
| guicursor=n-v-c:block-Cursor/lCursor,ve:ver35-Cursor,o:hor50-Cursor,i-ci:ver25-Cursor/lCursor,r-cr:hor20-Cursor/lCursor,sm:block-Cursor-blinkwait175-blinkoff150-blinkon175
|
||||||
@ -588,6 +589,7 @@ class SetlocalCommandTest : VimTestCase() {
|
|||||||
|nomatchit
|
|nomatchit
|
||||||
| matchpairs=(:),{:},[:]
|
| matchpairs=(:),{:},[:]
|
||||||
| maxmapdepth=20
|
| maxmapdepth=20
|
||||||
|
|nomini-ai
|
||||||
| more
|
| more
|
||||||
|nomultiple-cursors
|
|nomultiple-cursors
|
||||||
|noNERDTree
|
|noNERDTree
|
||||||
|
@ -0,0 +1,644 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2003-2024 The IdeaVim authors
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by an MIT-style
|
||||||
|
* license that can be found in the LICENSE.txt file or at
|
||||||
|
* https://opensource.org/licenses/MIT.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.plugins.ideavim.extension.miniai
|
||||||
|
|
||||||
|
import com.intellij.ide.highlighter.JavaFileType
|
||||||
|
import com.maddyhome.idea.vim.state.mode.Mode
|
||||||
|
import org.jetbrains.plugins.ideavim.VimJavaTestCase
|
||||||
|
import org.junit.jupiter.api.BeforeEach
|
||||||
|
import org.junit.jupiter.api.Test
|
||||||
|
import org.junit.jupiter.api.TestInfo
|
||||||
|
|
||||||
|
@Suppress("SpellCheckingInspection")
|
||||||
|
class MiniAIExtensionTest : VimJavaTestCase() {
|
||||||
|
@BeforeEach
|
||||||
|
override fun setUp(testInfo: TestInfo) {
|
||||||
|
super.setUp(testInfo)
|
||||||
|
enableExtensions("mini-ai")
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testChangeInsideSingleQuote() {
|
||||||
|
doTest(
|
||||||
|
"ciq",
|
||||||
|
"<caret>This is a 'simple' test",
|
||||||
|
"This is a '<caret>' test",
|
||||||
|
Mode.INSERT,
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testChangeInsideSingleQuoteNotBalanced() {
|
||||||
|
doTest(
|
||||||
|
"ciq",
|
||||||
|
"<caret>This is a 'simple test",
|
||||||
|
"<caret>This is a 'simple test",
|
||||||
|
Mode.NORMAL(),
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testChangeInsideDoubleQuote() {
|
||||||
|
doTest(
|
||||||
|
"ciq",
|
||||||
|
"<caret>This is a \"simple\" test",
|
||||||
|
"This is a \"<caret>\" test",
|
||||||
|
Mode.INSERT,
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testChangeInsideDoubleQuoteNotBalanced() {
|
||||||
|
doTest(
|
||||||
|
"ciq",
|
||||||
|
"<caret>This is a \"simple test",
|
||||||
|
"<caret>This is a \"simple test",
|
||||||
|
Mode.NORMAL(),
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testChangeInsideBackQuote() {
|
||||||
|
doTest(
|
||||||
|
"ciq",
|
||||||
|
"<caret>This is a `simple` test",
|
||||||
|
"This is a `<caret>` test",
|
||||||
|
Mode.INSERT,
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testChangeInsideBackQuoteNotBalanced() {
|
||||||
|
doTest(
|
||||||
|
"ciq",
|
||||||
|
"<caret>This is a `simple test",
|
||||||
|
"<caret>This is a `simple test",
|
||||||
|
Mode.NORMAL(),
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testChangeAroundSingleQuote() {
|
||||||
|
doTest(
|
||||||
|
"caq",
|
||||||
|
"<caret>This is a 'simple' test",
|
||||||
|
"This is a <caret> test",
|
||||||
|
Mode.INSERT,
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testChangeAroundSingleQuoteNotBalanced() {
|
||||||
|
doTest(
|
||||||
|
"caq",
|
||||||
|
"<caret>This is a 'simple test",
|
||||||
|
"<caret>This is a 'simple test",
|
||||||
|
Mode.NORMAL(),
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testChangeAroundDoubleQuote() {
|
||||||
|
doTest(
|
||||||
|
"caq",
|
||||||
|
"<caret>This is a \"simple\" test",
|
||||||
|
"This is a <caret> test",
|
||||||
|
Mode.INSERT,
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testChangeAroundDoubleQuoteNotBalanced() {
|
||||||
|
doTest(
|
||||||
|
"caq",
|
||||||
|
"<caret>This is a \"simple test",
|
||||||
|
"<caret>This is a \"simple test",
|
||||||
|
Mode.NORMAL(),
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testChangeAroundBackQuote() {
|
||||||
|
doTest(
|
||||||
|
"caq",
|
||||||
|
"<caret>This is a `simple` test",
|
||||||
|
"This is a <caret> test",
|
||||||
|
Mode.INSERT,
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testChangeAroundBackQuoteNotBalanced() {
|
||||||
|
doTest(
|
||||||
|
"caq",
|
||||||
|
"<caret>This is a `simple test",
|
||||||
|
"<caret>This is a `simple test",
|
||||||
|
Mode.NORMAL(),
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testChangeInsideRoundBrackets() {
|
||||||
|
doTest(
|
||||||
|
"cib",
|
||||||
|
"<caret>This is a (simple) test",
|
||||||
|
"This is a (<caret>) test",
|
||||||
|
Mode.INSERT,
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testChangeInsideRoundBracketsNotBalanced() {
|
||||||
|
doTest(
|
||||||
|
"cib",
|
||||||
|
"<caret>This is a (simple test",
|
||||||
|
"<caret>This is a (simple test",
|
||||||
|
Mode.NORMAL(),
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testChangeInsideSquareBrackets() {
|
||||||
|
doTest(
|
||||||
|
"cib",
|
||||||
|
"<caret>This is a [simple] test",
|
||||||
|
"This is a [<caret>] test",
|
||||||
|
Mode.INSERT,
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testChangeInsideSquareBracketsNotBalanced() {
|
||||||
|
doTest(
|
||||||
|
"cib",
|
||||||
|
"<caret>This is a [simple test",
|
||||||
|
"<caret>This is a [simple test",
|
||||||
|
Mode.NORMAL(),
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testChangeInsideCurlyBrackets() {
|
||||||
|
doTest(
|
||||||
|
"cib",
|
||||||
|
"<caret>This is a {simple} test",
|
||||||
|
"This is a {<caret>} test",
|
||||||
|
Mode.INSERT,
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testChangeInsideCurlyBracketsNotBalanced() {
|
||||||
|
doTest(
|
||||||
|
"cib",
|
||||||
|
"<caret>This is a {simple test",
|
||||||
|
"<caret>This is a {simple test",
|
||||||
|
Mode.NORMAL(),
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testChangeAroundRoundBrackets() {
|
||||||
|
doTest(
|
||||||
|
"cab",
|
||||||
|
"<caret>This is a (simple) test",
|
||||||
|
"This is a <caret> test",
|
||||||
|
Mode.INSERT,
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testChangeAroundRoundBracketsNotBalanced() {
|
||||||
|
doTest(
|
||||||
|
"cab",
|
||||||
|
"<caret>This is a (simple test",
|
||||||
|
"<caret>This is a (simple test",
|
||||||
|
Mode.NORMAL(),
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testChangeAroundSquareBrackets() {
|
||||||
|
doTest(
|
||||||
|
"cab",
|
||||||
|
"<caret>This is a [simple] test",
|
||||||
|
"This is a <caret> test",
|
||||||
|
Mode.INSERT,
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testChangeAroundSquareBracketsNotBalanced() {
|
||||||
|
doTest(
|
||||||
|
"cab",
|
||||||
|
"<caret>This is a [simple test",
|
||||||
|
"<caret>This is a [simple test",
|
||||||
|
Mode.NORMAL(),
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testChangeAroundCurlyBrackets() {
|
||||||
|
doTest(
|
||||||
|
"cab",
|
||||||
|
"<caret>This is a {simple} test",
|
||||||
|
"This is a <caret> test",
|
||||||
|
Mode.INSERT,
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testChangeAroundCurlyBracketsNotBalanced() {
|
||||||
|
doTest(
|
||||||
|
"cab",
|
||||||
|
"<caret>This is a {simple test",
|
||||||
|
"<caret>This is a {simple test",
|
||||||
|
Mode.NORMAL(),
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
// DELETE tests
|
||||||
|
@Test
|
||||||
|
fun testDeleteInsideSingleQuote() {
|
||||||
|
doTest(
|
||||||
|
"diq",
|
||||||
|
"<caret>This is a 'simple' test",
|
||||||
|
"This is a '<caret>' test",
|
||||||
|
Mode.NORMAL(),
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testDeleteInsideSingleQuoteNotBalanced() {
|
||||||
|
doTest(
|
||||||
|
"diq",
|
||||||
|
"<caret>This is a 'simple test",
|
||||||
|
"<caret>This is a 'simple test",
|
||||||
|
Mode.NORMAL(),
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testDeleteInsideDoubleQuote() {
|
||||||
|
doTest(
|
||||||
|
"diq",
|
||||||
|
"<caret>This is a \"simple\" test",
|
||||||
|
"This is a \"<caret>\" test",
|
||||||
|
Mode.NORMAL(),
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testDeleteInsideDoubleQuoteNotBalanced() {
|
||||||
|
doTest(
|
||||||
|
"diq",
|
||||||
|
"<caret>This is a \"simple test",
|
||||||
|
"<caret>This is a \"simple test",
|
||||||
|
Mode.NORMAL(),
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testDeleteInsideBackQuote() {
|
||||||
|
doTest(
|
||||||
|
"diq",
|
||||||
|
"<caret>This is a `simple` test",
|
||||||
|
"This is a `<caret>` test",
|
||||||
|
Mode.NORMAL(),
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testDeleteInsideBackQuoteNotBalanced() {
|
||||||
|
doTest(
|
||||||
|
"diq",
|
||||||
|
"<caret>This is a `simple test",
|
||||||
|
"<caret>This is a `simple test",
|
||||||
|
Mode.NORMAL(),
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testDeleteAroundSingleQuote() {
|
||||||
|
doTest(
|
||||||
|
"daq",
|
||||||
|
"<caret>This is a 'simple' test",
|
||||||
|
"This is a <caret> test",
|
||||||
|
Mode.NORMAL(),
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testDeleteAroundSingleQuoteNotBalanced() {
|
||||||
|
doTest(
|
||||||
|
"daq",
|
||||||
|
"<caret>This is a 'simple test",
|
||||||
|
"<caret>This is a 'simple test",
|
||||||
|
Mode.NORMAL(),
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testDeleteAroundDoubleQuote() {
|
||||||
|
doTest(
|
||||||
|
"daq",
|
||||||
|
"<caret>This is a \"simple\" test",
|
||||||
|
"This is a <caret> test",
|
||||||
|
Mode.NORMAL(),
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testDeleteAroundDoubleQuoteNotBalanced() {
|
||||||
|
doTest(
|
||||||
|
"daq",
|
||||||
|
"<caret>This is a \"simple test",
|
||||||
|
"<caret>This is a \"simple test",
|
||||||
|
Mode.NORMAL(),
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testDeleteAroundBackQuote() {
|
||||||
|
doTest(
|
||||||
|
"daq",
|
||||||
|
"<caret>This is a `simple` test",
|
||||||
|
"This is a <caret> test",
|
||||||
|
Mode.NORMAL(),
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testDeleteAroundBackQuoteNotBalanced() {
|
||||||
|
doTest(
|
||||||
|
"daq",
|
||||||
|
"<caret>This is a `simple test",
|
||||||
|
"<caret>This is a `simple test",
|
||||||
|
Mode.NORMAL(),
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testDeleteInsideRoundBrackets() {
|
||||||
|
doTest(
|
||||||
|
"dib",
|
||||||
|
"<caret>This is a (simple) test",
|
||||||
|
"This is a (<caret>) test",
|
||||||
|
Mode.NORMAL(),
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testDeleteInsideRoundBracketsNotBalanced() {
|
||||||
|
doTest(
|
||||||
|
"dib",
|
||||||
|
"<caret>This is a (simple test",
|
||||||
|
"<caret>This is a (simple test",
|
||||||
|
Mode.NORMAL(),
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testDeleteInsideSquareBrackets() {
|
||||||
|
doTest(
|
||||||
|
"dib",
|
||||||
|
"<caret>This is a [simple] test",
|
||||||
|
"This is a [<caret>] test",
|
||||||
|
Mode.NORMAL(),
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testDeleteInsideSquareBracketsNotBalanced() {
|
||||||
|
doTest(
|
||||||
|
"dib",
|
||||||
|
"<caret>This is a [simple test",
|
||||||
|
"<caret>This is a [simple test",
|
||||||
|
Mode.NORMAL(),
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testDeleteInsideCurlyBrackets() {
|
||||||
|
doTest(
|
||||||
|
"dib",
|
||||||
|
"<caret>This is a {simple} test",
|
||||||
|
"This is a {<caret>} test",
|
||||||
|
Mode.NORMAL(),
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testDeleteInsideCurlyBracketsNotBalanced() {
|
||||||
|
doTest(
|
||||||
|
"dib",
|
||||||
|
"<caret>This is a {simple test",
|
||||||
|
"<caret>This is a {simple test",
|
||||||
|
Mode.NORMAL(),
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testDeleteAroundRoundBrackets() {
|
||||||
|
doTest(
|
||||||
|
"dab",
|
||||||
|
"<caret>This is a (simple) test",
|
||||||
|
"This is a <caret> test",
|
||||||
|
Mode.NORMAL(),
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testDeleteAroundRoundBracketsNotBalanced() {
|
||||||
|
doTest(
|
||||||
|
"dab",
|
||||||
|
"<caret>This is a (simple test",
|
||||||
|
"<caret>This is a (simple test",
|
||||||
|
Mode.NORMAL(),
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testDeleteAroundSquareBrackets() {
|
||||||
|
doTest(
|
||||||
|
"dab",
|
||||||
|
"<caret>This is a [simple] test",
|
||||||
|
"This is a <caret> test",
|
||||||
|
Mode.NORMAL(),
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testDeleteAroundSquareBracketsNotBalanced() {
|
||||||
|
doTest(
|
||||||
|
"dab",
|
||||||
|
"<caret>This is a [simple test",
|
||||||
|
"<caret>This is a [simple test",
|
||||||
|
Mode.NORMAL(),
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testDeleteAroundCurlyBrackets() {
|
||||||
|
doTest(
|
||||||
|
"dab",
|
||||||
|
"<caret>This is a {simple} test",
|
||||||
|
"This is a <caret> test",
|
||||||
|
Mode.NORMAL(),
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testDeleteAroundCurlyBracketsNotBalanced() {
|
||||||
|
doTest(
|
||||||
|
"dab",
|
||||||
|
"<caret>This is a {simple test",
|
||||||
|
"<caret>This is a {simple test",
|
||||||
|
Mode.NORMAL(),
|
||||||
|
JavaFileType.INSTANCE,
|
||||||
|
)
|
||||||
|
assertSelection(null)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user