1
0
mirror of https://github.com/chylex/IntelliJ-IdeaVim.git synced 2025-08-13 06:16:58 +02:00

Use editor.mode instead of OperatorArguments.mode

`OperatorArguments.mode` is the mode *before* the command was completed, rather than the current mode, which is non-obvious. E.g. for a command in Insert mode, it will still be Insert, and for a (simple) command in Normal, it will still be Normal. The only difference is that a command such as `dw` would be in Operator-pending before the command is completed. That logic is not required for this method, so it's safe to use the current mode.

This allows us to start to deprecate `OperatorArguments.mode`.
This commit is contained in:
Matt Ellis
2024-08-23 17:00:14 +01:00
committed by Alex Pláte
parent da6736f24a
commit 5bb0c4f7cb
4 changed files with 11 additions and 22 deletions
src/main/java/com/maddyhome/idea/vim/action/change/delete
vim-engine/src/main/kotlin/com/maddyhome/idea/vim/api

@@ -40,7 +40,7 @@ class DeleteJoinLinesAction : ChangeEditorActionHandler.ConditionalSingleExecuti
): Boolean {
injector.editorGroup.notifyIdeaJoin(editor)
return injector.changeGroup.deleteJoinLines(editor, caret, operatorArguments.count1, false, operatorArguments)
return injector.changeGroup.deleteJoinLines(editor, caret, operatorArguments.count1, false)
}
override fun execute(

@@ -35,7 +35,7 @@ class DeleteJoinLinesSpacesAction : ChangeEditorActionHandler.SingleExecution()
injector.editorGroup.notifyIdeaJoin(editor)
var res = true
editor.nativeCarets().sortedByDescending { it.offset }.forEach { caret ->
if (!injector.changeGroup.deleteJoinLines(editor, caret, operatorArguments.count1, true, operatorArguments)) {
if (!injector.changeGroup.deleteJoinLines(editor, caret, operatorArguments.count1, true)) {
res = false
}
}

@@ -74,13 +74,7 @@ interface VimChangeGroup {
fun deleteEndOfLine(editor: VimEditor, caret: VimCaret, count: Int, operatorArguments: OperatorArguments): Boolean
fun deleteJoinLines(
editor: VimEditor,
caret: VimCaret,
count: Int,
spaces: Boolean,
operatorArguments: OperatorArguments,
): Boolean
fun deleteJoinLines(editor: VimEditor, caret: VimCaret, count: Int, spaces: Boolean): Boolean
fun processKey(editor: VimEditor, key: KeyStroke, processResultBuilder: KeyProcessResult.KeyProcessResultBuilder): Boolean

@@ -111,7 +111,6 @@ abstract class VimChangeGroupBase : VimChangeGroup {
TextRange(caret.offset, endOffset.offset),
SelectionType.CHARACTER_WISE,
caret,
operatorArguments,
)
val pos = caret.offset
val norm = editor.normalizeOffset(caret.getBufferPosition().line, pos, isChange)
@@ -162,7 +161,6 @@ abstract class VimChangeGroupBase : VimChangeGroup {
range: TextRange,
type: SelectionType?,
caret: VimCaret,
operatorArguments: OperatorArguments,
saveToRegister: Boolean = true,
): Boolean {
var updatedRange = range
@@ -178,8 +176,7 @@ abstract class VimChangeGroupBase : VimChangeGroup {
}
}
val mode = operatorArguments.mode
val isInsertMode = mode == Mode.INSERT || mode == Mode.REPLACE
val isInsertMode = editor.mode == Mode.INSERT || editor.mode == Mode.REPLACE
val shouldYank = type != null && !isInsertMode && saveToRegister
if (shouldYank && !caret.registerStorage.storeText(editor, updatedRange, type, isDelete = true)) {
return false
@@ -685,7 +682,7 @@ abstract class VimChangeGroupBase : VimChangeGroup {
val rangeToDelete = TextRange(startOffset, offset)
editor.nativeCarets().filter { it != caret && rangeToDelete.contains(it.offset) }
.forEach { editor.removeCaret(it) }
val res = deleteText(editor, rangeToDelete, SelectionType.CHARACTER_WISE, caret, operatorArguments)
val res = deleteText(editor, rangeToDelete, SelectionType.CHARACTER_WISE, caret)
if (editor.usesVirtualSpace) {
caret.moveToOffset(startOffset)
} else {
@@ -712,7 +709,6 @@ abstract class VimChangeGroupBase : VimChangeGroup {
caret: VimCaret,
count: Int,
spaces: Boolean,
operatorArguments: OperatorArguments,
): Boolean {
var myCount = count
if (myCount < 2) myCount = 2
@@ -721,7 +717,7 @@ abstract class VimChangeGroupBase : VimChangeGroup {
return if (lline + myCount > total) {
false
} else {
deleteJoinNLines(editor, caret, lline, myCount, spaces, operatorArguments)
deleteJoinNLines(editor, caret, lline, myCount, spaces)
}
}
@@ -794,7 +790,7 @@ abstract class VimChangeGroupBase : VimChangeGroup {
logger.debug("offset=$offset")
}
if (offset != -1) {
val res = deleteText(editor, TextRange(start, offset), SelectionType.LINE_WISE, caret, operatorArguments)
val res = deleteText(editor, TextRange(start, offset), SelectionType.LINE_WISE, caret)
if (res && caret.offset >= editor.fileSize() && caret.offset != 0) {
caret.moveToOffset(
injector.motion.moveCaretToRelativeLineStartSkipLeading(
@@ -847,7 +843,7 @@ abstract class VimChangeGroupBase : VimChangeGroup {
val endLine = editor.offsetToBufferPosition(range.endOffset).line
var count = endLine - startLine + 1
if (count < 2) count = 2
return deleteJoinNLines(editor, caret, startLine, count, spaces, operatorArguments)
return deleteJoinNLines(editor, caret, startLine, count, spaces)
}
override fun joinViaIdeaBySelections(
@@ -928,7 +924,7 @@ abstract class VimChangeGroupBase : VimChangeGroup {
val intendedColumn = caret.vimLastColumn
val removeLastNewLine = removeLastNewLine(editor, range, type)
val res = deleteText(editor, range, type, caret, operatorArguments, saveToRegister)
val res = deleteText(editor, range, type, caret, saveToRegister)
var processedCaret = editor.findLastVersionOfCaret(caret) ?: caret
if (removeLastNewLine) {
val textLength = editor.fileSize().toInt()
@@ -1047,7 +1043,6 @@ abstract class VimChangeGroupBase : VimChangeGroup {
startLine: Int,
count: Int,
spaces: Boolean,
operatorArguments: OperatorArguments,
): Boolean {
// Don't move the caret until we've successfully deleted text. If we're on the last line, we don't want to move the
// caret and then be unable to delete
@@ -1064,7 +1059,7 @@ abstract class VimChangeGroupBase : VimChangeGroup {
return i > 1
}
// Note that caret isn't moved here; it's only used for register + mark storage
deleteText(editor, TextRange(startOffset, endOffset), null, caret, operatorArguments)
deleteText(editor, TextRange(startOffset, endOffset), null, caret)
if (spaces && !hasTrailingWhitespace) {
insertText(editor, caret, startOffset, " ")
}
@@ -1932,7 +1927,7 @@ abstract class VimChangeGroupBase : VimChangeGroup {
pos++
}
if (pos > wsoff) {
deleteText(editor, TextRange(wsoff, pos), null, caret, operatorArguments, true)
deleteText(editor, TextRange(wsoff, pos), null, caret, true)
}
}
}