1
0
mirror of https://github.com/chylex/IntelliJ-IdeaVim.git synced 2025-05-02 10:34:04 +02:00

Skip unsupported arguments in command

VIM-2720
This commit is contained in:
Alex Plate 2022-08-04 20:08:05 +03:00
parent 48033ecb85
commit 2dae43258c
No known key found for this signature in database
GPG Key ID: 0B97153C8FFEC09F
2 changed files with 37 additions and 0 deletions
src/test/java/org/jetbrains/plugins/ideavim/ex/implementation/commands
vim-engine/src/main/kotlin/com/maddyhome/idea/vim/vimscript/model/commands

View File

@ -19,6 +19,7 @@
package org.jetbrains.plugins.ideavim.ex.implementation.commands
import com.maddyhome.idea.vim.VimPlugin
import com.maddyhome.idea.vim.api.injector
import org.jetbrains.plugins.ideavim.VimTestCase
/**
@ -130,6 +131,22 @@ class CmdCommandTest : VimTestCase() {
assertPluginError(false)
}
fun `test add command with range`() {
VimPlugin.getCommand().resetAliases()
configureByText("\n")
typeText(commandToKeys("command! -range Error echo <args>"))
assertPluginError(false)
assertEquals("'-range' is not supported by `command`", injector.messages.getStatusBarMessage())
}
fun `test add command with complete`() {
VimPlugin.getCommand().resetAliases()
configureByText("\n")
typeText(commandToKeys("command! -complete=color Error echo <args>"))
assertPluginError(false)
assertEquals("'-complete' is not supported by `command`", injector.messages.getStatusBarMessage())
}
fun `test add command with arguments short`() {
VimPlugin.getCommand().resetAliases()
configureByText("\n")

View File

@ -35,6 +35,18 @@ import com.maddyhome.idea.vim.vimscript.model.ExecutionResult
data class CmdCommand(val ranges: Ranges, val argument: String) : Command.SingleExecution(ranges) {
override val argFlags = flags(RangeFlag.RANGE_FORBIDDEN, ArgumentFlag.ARGUMENT_OPTIONAL, Access.READ_ONLY)
private val unsupportedArgs = listOf(
Regex("-range(=[^ ])?") to "-range",
Regex("-complete=[^ ]*") to "-complete",
Regex("-count=[^ ]*") to "-count",
Regex("-addr=[^ ]*") to "-addr",
Regex("-bang") to "-bang",
Regex("-bar") to "-bar",
Regex("-register") to "-register",
Regex("-buffer") to "-buffer",
Regex("-keepscript") to "-keepscript",
)
// Static definitions needed for aliases.
private companion object {
const val overridePrefix = "!"
@ -76,6 +88,14 @@ data class CmdCommand(val ranges: Ranges, val argument: String) : Command.Single
argument = argument.removePrefix(overridePrefix).trim()
}
for ((arg, message) in unsupportedArgs) {
val match = arg.find(argument)
match?.range?.let {
argument = argument.removeRange(it)
injector.messages.showStatusBarMessage("'$message' is not supported by `command`")
}
}
// Handle alias arguments
val hasArguments = argument.startsWith(argsPrefix)
var minNumberOfArgs = 0