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

Reformat code

This commit is contained in:
Alex Plate 2025-01-10 12:25:51 +03:00
parent 36556d559f
commit ad584d553c
No known key found for this signature in database
GPG Key ID: 0B97153C8FFEC09F
424 changed files with 4985 additions and 1875 deletions
src
main
java/com/maddyhome/idea/vim
resources
test/java/org/jetbrains/plugins/ideavim

View File

@ -215,7 +215,8 @@ public class VimPlugin implements PersistentStateComponent<Element>, Disposable
if (enabled) {
VimInjectorKt.getInjector().getListenersNotifier().notifyPluginTurnedOn();
} else {
}
else {
VimInjectorKt.getInjector().getListenersNotifier().notifyPluginTurnedOff();
}

View File

@ -44,7 +44,12 @@ class VimTypedActionHandler(origHandler: TypedActionHandler) : TypedActionHandle
LOG.trace("Before execute for typed action")
if (editor.isIdeaVimDisabledHere) {
LOG.trace("IdeaVim disabled here, finish")
(KeyHandlerKeeper.getInstance().originalHandler as? TypedActionHandlerEx)?.beforeExecute(editor, charTyped, context, plan)
(KeyHandlerKeeper.getInstance().originalHandler as? TypedActionHandlerEx)?.beforeExecute(
editor,
charTyped,
context,
plan
)
return
}

View File

@ -205,6 +205,7 @@ class VimShortcutKeyAction : AnAction(), DumbAware/*, LightEditCompatible*/ {
ShortcutOwner.VIM -> {
return ActionEnableStatus.yes("Owner is vim", LogLevel.DEBUG)
}
ShortcutOwner.IDE -> {
if (!isShortcutConflict(keyStroke)) {
ActionEnableStatus.yes("Owner is IDE, but no actionve shortcut conflict", LogLevel.DEBUG)
@ -212,6 +213,7 @@ class VimShortcutKeyAction : AnAction(), DumbAware/*, LightEditCompatible*/ {
ActionEnableStatus.no("Owner is IDE", LogLevel.DEBUG)
}
}
else -> {
if (isShortcutConflict(keyStroke)) {
savedShortcutConflicts[keyStroke] = ShortcutOwnerInfo.allUndefined
@ -224,7 +226,8 @@ class VimShortcutKeyAction : AnAction(), DumbAware/*, LightEditCompatible*/ {
}
private fun isEnabledForEscape(editor: Editor): Boolean {
val ideaVimSupportDialog = injector.globalIjOptions().ideavimsupport.contains(IjOptionConstants.ideavimsupport_dialog)
val ideaVimSupportDialog =
injector.globalIjOptions().ideavimsupport.contains(IjOptionConstants.ideavimsupport_dialog)
return editor.isPrimaryEditor() ||
EditorHelper.isFileEditor(editor) && !editor.vim.mode.inNormalMode ||
ideaVimSupportDialog && !editor.vim.mode.inNormalMode

View File

@ -37,7 +37,12 @@ import com.maddyhome.idea.vim.vimscript.model.expressions.FunctionCallExpression
import com.maddyhome.idea.vim.vimscript.model.expressions.SimpleExpression
// todo make it multicaret
private fun doOperatorAction(editor: VimEditor, context: ExecutionContext, textRange: TextRange, motionType: SelectionType): Boolean {
private fun doOperatorAction(
editor: VimEditor,
context: ExecutionContext,
textRange: TextRange,
motionType: SelectionType,
): Boolean {
val func = injector.globalOptions().operatorfunc
if (func.isEmpty()) {
VimPlugin.showMessage(MessageHelper.message("E774"))
@ -61,8 +66,7 @@ private fun doOperatorAction(editor: VimEditor, context: ExecutionContext, textR
// Get the argument for function('...') or funcref('...') for the error message
val functionName = if (expression is FunctionCallExpression && expression.arguments.isNotEmpty()) {
expression.arguments[0].evaluate(editor, context, scriptContext).toString()
}
else {
} else {
func
}
@ -100,7 +104,12 @@ internal class OperatorAction : VimActionHandler.SingleExecution() {
override val argumentType: Argument.Type = Argument.Type.MOTION
override fun execute(editor: VimEditor, context: ExecutionContext, cmd: Command, operatorArguments: OperatorArguments): Boolean {
override fun execute(
editor: VimEditor,
context: ExecutionContext,
cmd: Command,
operatorArguments: OperatorArguments,
): Boolean {
val argument = cmd.argument as? Argument.Motion ?: return false
if (!editor.inRepeatMode) {
argumentCaptured = argument

View File

@ -23,7 +23,12 @@ import com.maddyhome.idea.vim.newapi.ij
internal class RepeatChangeAction : VimActionHandler.SingleExecution() {
override val type: Command.Type = Command.Type.OTHER_WRITABLE
override fun execute(editor: VimEditor, context: ExecutionContext, cmd: Command, operatorArguments: OperatorArguments): Boolean {
override fun execute(
editor: VimEditor,
context: ExecutionContext,
cmd: Command,
operatorArguments: OperatorArguments,
): Boolean {
val state = injector.vimState
var lastCommand = VimRepeater.lastChangeCommand

View File

@ -38,7 +38,7 @@ internal class VimEditorDown : IdeActionHandler(IdeActions.ACTION_EDITOR_MOVE_CA
editor: VimEditor,
context: ExecutionContext,
cmd: Command,
operatorArguments: OperatorArguments
operatorArguments: OperatorArguments,
): Boolean {
val undo = injector.undo
when (undo) {
@ -67,7 +67,7 @@ internal class VimEditorUp : IdeActionHandler(IdeActions.ACTION_EDITOR_MOVE_CARE
editor: VimEditor,
context: ExecutionContext,
cmd: Command,
operatorArguments: OperatorArguments
operatorArguments: OperatorArguments,
): Boolean {
val undo = injector.undo
when (undo) {
@ -85,7 +85,12 @@ internal class VimEditorUp : IdeActionHandler(IdeActions.ACTION_EDITOR_MOVE_CARE
internal class VimQuickJavaDoc : VimActionHandler.SingleExecution() {
override val type: Command.Type = Command.Type.OTHER_READONLY
override fun execute(editor: VimEditor, context: ExecutionContext, cmd: Command, operatorArguments: OperatorArguments): Boolean {
override fun execute(
editor: VimEditor,
context: ExecutionContext,
cmd: Command,
operatorArguments: OperatorArguments,
): Boolean {
injector.actionExecutor.executeAction(editor, IdeActions.ACTION_QUICK_JAVADOC, context)
return true
}

View File

@ -36,7 +36,8 @@ class CommandState(private val machine: VimStateMachine) {
}
}
@get:Deprecated("Use `KeyHandler.keyHandlerState.commandBuilder", ReplaceWith(
@get:Deprecated(
"Use `KeyHandler.keyHandlerState.commandBuilder", ReplaceWith(
"KeyHandler.getInstance().keyHandlerState.commandBuilder",
"com.maddyhome.idea.vim.KeyHandler"
)
@ -45,7 +46,8 @@ class CommandState(private val machine: VimStateMachine) {
val commandBuilder: CommandBuilder
get() = KeyHandler.getInstance().keyHandlerState.commandBuilder
@Deprecated("Use `KeyHandler.keyHandlerState.mappingState", ReplaceWith(
@Deprecated(
"Use `KeyHandler.keyHandlerState.mappingState", ReplaceWith(
"KeyHandler.getInstance().keyHandlerState.mappingState",
"com.maddyhome.idea.vim.KeyHandler"
)

View File

@ -14,7 +14,7 @@ import com.intellij.openapi.project.Project
import com.intellij.psi.codeStyle.CommonCodeStyleSettings.IndentOptions
import com.maddyhome.idea.vim.api.VimIndentConfig
internal class IndentConfig private constructor(indentOptions: IndentOptions): VimIndentConfig {
internal class IndentConfig private constructor(indentOptions: IndentOptions) : VimIndentConfig {
private val indentSize = indentOptions.INDENT_SIZE
private val tabSize = indentOptions.TAB_SIZE
private val isUseTabs = indentOptions.USE_TAB_CHARACTER

View File

@ -127,8 +127,7 @@ class ExOutputModel(private val myEditor: WeakReference<Editor>) : VimOutputPane
override fun close() {
if (!ApplicationManager.getApplication().isUnitTestMode) {
editor?.let { ExOutputPanel.getInstance(it).close() }
}
else {
} else {
isActiveInTestMode = false
}
}

View File

@ -69,7 +69,8 @@ object VimExtensionFacade {
@JvmStatic
@Deprecated("Use VimPlugin.getKey().putKeyMapping(modes, fromKeys, pluginOwner, extensionHandler, recursive)",
@Deprecated(
"Use VimPlugin.getKey().putKeyMapping(modes, fromKeys, pluginOwner, extensionHandler, recursive)",
ReplaceWith(
"VimPlugin.getKey().putKeyMapping(modes, fromKeys, pluginOwner, extensionHandler, recursive)",
"com.maddyhome.idea.vim.VimPlugin"
@ -189,12 +190,18 @@ object VimExtensionFacade {
/** Get the current contents of the given register similar to 'getreg()'. */
@JvmStatic
fun getRegister(editor: VimEditor, register: Char): List<KeyStroke>? {
val reg = VimPlugin.getRegister().getRegister(editor, injector.executionContextManager.getEditorExecutionContext(editor), register) ?: return null
val reg = VimPlugin.getRegister()
.getRegister(editor, injector.executionContextManager.getEditorExecutionContext(editor), register) ?: return null
return reg.keys
}
@JvmStatic
fun getRegisterForCaret(editor: VimEditor, context: ExecutionContext, register: Char, caret: VimCaret): List<KeyStroke>? {
fun getRegisterForCaret(
editor: VimEditor,
context: ExecutionContext,
register: Char,
caret: VimCaret,
): List<KeyStroke>? {
val reg = caret.registerStorage.getRegister(editor, context, register) ?: return null
return reg.keys
}
@ -225,7 +232,7 @@ object VimExtensionFacade {
defaultArgs: List<Pair<String, Expression>>,
hasOptionalArguments: Boolean,
flags: EnumSet<FunctionFlag>,
function: ScriptFunction
function: ScriptFunction,
) {
var functionDeclaration: FunctionDeclaration? = null
val body = listOf(object : Executable {
@ -255,8 +262,7 @@ object VimExtensionFacade {
}
fun VimExtensionFacade.exportOperatorFunction(name: String, function: OperatorFunction) {
exportScriptFunction(null, name, listOf("type"), emptyList(), false, noneOfEnum()) {
editor, context, args ->
exportScriptFunction(null, name, listOf("type"), emptyList(), false, noneOfEnum()) { editor, context, args ->
val type = args["type"]?.asString()
val selectionType = when (type) {
@ -268,8 +274,7 @@ fun VimExtensionFacade.exportOperatorFunction(name: String, function: OperatorFu
if (function.apply(editor, context, selectionType)) {
ExecutionResult.Success
}
else {
} else {
ExecutionResult.Error
}
}

View File

@ -186,12 +186,24 @@ class ChangeGroup : VimChangeGroupBase() {
}
}
@Deprecated(message = "Please use listenersNotifier", replaceWith = ReplaceWith("injector.listenersNotifier.modeChangeListeners.add", imports = ["import com.maddyhome.idea.vim.api.injector"]))
@Deprecated(
message = "Please use listenersNotifier",
replaceWith = ReplaceWith(
"injector.listenersNotifier.modeChangeListeners.add",
imports = ["import com.maddyhome.idea.vim.api.injector"]
)
)
fun addInsertListener(listener: VimInsertListener) {
injector.listenersNotifier.modeChangeListeners.add(listener)
}
@Deprecated(message = "Please use listenersNotifier", replaceWith = ReplaceWith("injector.listenersNotifier.modeChangeListeners.remove", imports = ["import com.maddyhome.idea.vim.api.injector"]))
@Deprecated(
message = "Please use listenersNotifier",
replaceWith = ReplaceWith(
"injector.listenersNotifier.modeChangeListeners.remove",
imports = ["import com.maddyhome.idea.vim.api.injector"]
)
)
fun removeInsertListener(listener: VimInsertListener) {
injector.listenersNotifier.modeChangeListeners.remove(listener)
}

View File

@ -156,7 +156,8 @@ public class EditorGroup implements PersistentStateComponent<Element>, VimEditor
private static void repaintRelativeLineNumbers(final @NotNull Editor editor) {
final EditorGutter gutter = editor.getGutter();
final EditorGutterComponentEx gutterComponent = gutter instanceof EditorGutterComponentEx ? (EditorGutterComponentEx) gutter : null;
final EditorGutterComponentEx gutterComponent =
gutter instanceof EditorGutterComponentEx ? (EditorGutterComponentEx)gutter : null;
if (gutterComponent != null) {
gutterComponent.repaint();
}
@ -251,18 +252,18 @@ public class EditorGroup implements PersistentStateComponent<Element>, VimEditor
@Override
public void notifyIdeaJoin(@NotNull VimEditor editor) {
notifyIdeaJoin(((IjVimEditor) editor).getEditor().getProject(), editor);
notifyIdeaJoin(((IjVimEditor)editor).getEditor().getProject(), editor);
}
@Override
public void updateCaretsVisualAttributes(@NotNull VimEditor editor) {
Editor ijEditor = ((IjVimEditor) editor).getEditor();
Editor ijEditor = ((IjVimEditor)editor).getEditor();
CaretVisualAttributesHelperKt.updateCaretsVisualAttributes(ijEditor);
}
@Override
public void updateCaretsVisualPosition(@NotNull VimEditor editor) {
Editor ijEditor = ((IjVimEditor) editor).getEditor();
Editor ijEditor = ((IjVimEditor)editor).getEditor();
CaretVisualAttributesHelperKt.updateCaretsVisualAttributes(ijEditor);
}
@ -309,26 +310,21 @@ public class EditorGroup implements PersistentStateComponent<Element>, VimEditor
@Override
public @NotNull Collection<VimEditor> getEditorsRaw() {
return getLocalEditors()
.map(IjVimEditor::new)
.collect(Collectors.toList());
return getLocalEditors().map(IjVimEditor::new).collect(Collectors.toList());
}
@Override
public @NotNull Collection<VimEditor> getEditors() {
return getLocalEditors()
.filter(UserDataManager::getVimInitialised)
.map(IjVimEditor::new)
return getLocalEditors().filter(UserDataManager::getVimInitialised).map(IjVimEditor::new)
.collect(Collectors.toList());
}
@Override
public @NotNull Collection<VimEditor> getEditors(@NotNull VimDocument buffer) {
final Document document = ((IjVimDocument)buffer).getDocument();
return getLocalEditors()
.filter(editor -> UserDataManager.getVimInitialised(editor) && editor.getDocument().equals(document))
.map(IjVimEditor::new)
.collect(Collectors.toList());
return getLocalEditors().filter(
editor -> UserDataManager.getVimInitialised(editor) && editor.getDocument().equals(document))
.map(IjVimEditor::new).collect(Collectors.toList());
}
private Stream<Editor> getLocalEditors() {

View File

@ -28,8 +28,7 @@ import java.util.List;
import static com.maddyhome.idea.vim.history.HistoryConstants.*;
@State(name = "VimHistorySettings", storages = {
@Storage(value = "$APP_CONFIG$/vim_settings_local.xml", roamingType = RoamingType.DISABLED)
})
@Storage(value = "$APP_CONFIG$/vim_settings_local.xml", roamingType = RoamingType.DISABLED)})
public class HistoryGroup extends VimHistoryBase implements PersistentStateComponent<Element> {
public void saveData(@NotNull Element element) {
@ -108,7 +107,7 @@ public class HistoryGroup extends VimHistoryBase implements PersistentStateCompo
return INPUT;
}
if (type instanceof VimHistory.Type.Custom) {
return ((Type.Custom) type).getId();
return ((Type.Custom)type).getId();
}
return "unreachable";
}

View File

@ -42,7 +42,7 @@ open class GlobalIjOptions(scope: OptionAccessScope) : OptionsPropertiesBase(sco
*
* As a convenience, this class also provides access to the IntelliJ specific global options, via inheritance.
*/
class EffectiveIjOptions(scope: OptionAccessScope.EFFECTIVE): GlobalIjOptions(scope) {
class EffectiveIjOptions(scope: OptionAccessScope.EFFECTIVE) : GlobalIjOptions(scope) {
// Vim options that are implemented purely by existing IntelliJ features and not used by vim-engine
var breakindent: Boolean by optionProperty(IjOptions.breakindent)
val colorcolumn: StringListOptionValue by optionProperty(IjOptions.colorcolumn)

View File

@ -122,6 +122,7 @@ object IjOptions {
IjOptionConstants.ideavimsupportValues
)
)
@JvmField
val ideawrite: StringOption = addOption(
StringOption("ideawrite", GLOBAL, "ideawrite", "all", IjOptionConstants.ideaWriteValues)
@ -131,17 +132,21 @@ object IjOptions {
"lookupkeys",
GLOBAL,
"lookupkeys",
"<Tab>,<Down>,<Up>,<Enter>,<Left>,<Right>,<C-Down>,<C-Up>,<PageUp>,<PageDown>,<C-J>,<C-Q>")
"<Tab>,<Down>,<Up>,<Enter>,<Left>,<Right>,<C-Down>,<C-Up>,<PageUp>,<PageDown>,<C-J>,<C-Q>"
)
)
val trackactionids: ToggleOption = addOption(ToggleOption("trackactionids", GLOBAL, "tai", false))
val visualdelay: UnsignedNumberOption = addOption(UnsignedNumberOption("visualdelay", GLOBAL, "visualdelay", 100))
// Temporary feature flags during development, not really intended for external use
val closenotebooks: ToggleOption = addOption(ToggleOption("closenotebooks", GLOBAL, "closenotebooks", true, isHidden = true))
val commandOrMotionAnnotation: ToggleOption = addOption(ToggleOption("commandormotionannotation", GLOBAL, "commandormotionannotation", true, isHidden = true))
val closenotebooks: ToggleOption =
addOption(ToggleOption("closenotebooks", GLOBAL, "closenotebooks", true, isHidden = true))
val commandOrMotionAnnotation: ToggleOption =
addOption(ToggleOption("commandormotionannotation", GLOBAL, "commandormotionannotation", true, isHidden = true))
val oldundo: ToggleOption = addOption(ToggleOption("oldundo", GLOBAL, "oldundo", false, isHidden = true))
val unifyjumps: ToggleOption = addOption(ToggleOption("unifyjumps", GLOBAL, "unifyjumps", true, isHidden = true))
val vimscriptFunctionAnnotation: ToggleOption = addOption(ToggleOption("vimscriptfunctionannotation", GLOBAL, "vimscriptfunctionannotation", true, isHidden = true))
val vimscriptFunctionAnnotation: ToggleOption =
addOption(ToggleOption("vimscriptfunctionannotation", GLOBAL, "vimscriptfunctionannotation", true, isHidden = true))
// This needs to be Option<out VimDataType> so that it can work with derived option types, such as NumberOption, which
// derives from Option<VimInt>

View File

@ -21,7 +21,7 @@ import com.maddyhome.idea.vim.newapi.ij
import com.maddyhome.idea.vim.newapi.vim
@Service
class IjVimPsiService: VimPsiService {
class IjVimPsiService : VimPsiService {
override fun getCommentAtPos(editor: VimEditor, pos: Int): Pair<TextRange, Pair<String, String>?>? {
val psiFile = PsiHelper.getFile(editor.ij) ?: return null
val psiElement = psiFile.findElementAt(pos) ?: return null

View File

@ -42,7 +42,7 @@ internal class IjVimStorageService : VimStorageServiceBase() {
private val ijKeys = mutableMapOf<String, Key<out Any?>>()
@Suppress("UNCHECKED_CAST")
private val <T> com.maddyhome.idea.vim.api.Key<T>.ij : Key<T>
private val <T> com.maddyhome.idea.vim.api.Key<T>.ij: Key<T>
get(): Key<T> {
val storedIjKey = ijKeys[this.name]
if (storedIjKey != null) {

View File

@ -49,7 +49,7 @@ import static java.util.stream.Collectors.toList;
* @author vlan
*/
@State(name = "VimKeySettings", storages = {@Storage(value = "$APP_CONFIG$/vim_settings.xml")})
public class KeyGroup extends VimKeyGroupBase implements PersistentStateComponent<Element>{
public class KeyGroup extends VimKeyGroupBase implements PersistentStateComponent<Element> {
public static final @NonNls String SHORTCUT_CONFLICTS_ELEMENT = "shortcut-conflicts";
private static final @NonNls String SHORTCUT_CONFLICT_ELEMENT = "shortcut-conflict";
private static final @NonNls String OWNER_ATTRIBUTE = "owner";
@ -303,8 +303,8 @@ public class KeyGroup extends VimKeyGroupBase implements PersistentStateComponen
@Override
public @NotNull List<NativeAction> getActions(@NotNull VimEditor editor, @NotNull KeyStroke keyStroke) {
return getActions(((IjVimEditor)editor).getEditor().getComponent(), keyStroke).stream()
.map(IjNativeAction::new).collect(toList());
return getActions(((IjVimEditor)editor).getEditor().getComponent(), keyStroke).stream().map(IjNativeAction::new)
.collect(toList());
}
private static @NotNull List<AnAction> getLocalActions(@NotNull Component component, @NotNull KeyStroke keyStroke) {
@ -355,21 +355,26 @@ public class KeyGroup extends VimKeyGroupBase implements PersistentStateComponen
}
@Override
public boolean showKeyMappings(@NotNull Set<? extends MappingMode> modes, @NotNull List<? extends KeyStroke> prefix, @NotNull VimEditor editor) {
public boolean showKeyMappings(@NotNull Set<? extends MappingMode> modes,
@NotNull List<? extends KeyStroke> prefix,
@NotNull VimEditor editor) {
List<Pair<Set<MappingMode>, MappingInfo>> rows = getKeyMappingRows(modes, prefix);
final StringBuilder builder = new StringBuilder();
for (Pair<Set<MappingMode>, MappingInfo> row : rows) {
MappingInfo mappingInfo = row.getSecond();
builder.append(StringsKt.padEnd(getModesStringCode(row.getFirst()), 3, ' '));
builder.append(StringsKt.padEnd(VimInjectorKt.getInjector().getParser().toKeyNotation(mappingInfo.getFromKeys()) + " ", 12, ' '));
builder.append(
StringsKt.padEnd(VimInjectorKt.getInjector().getParser().toKeyNotation(mappingInfo.getFromKeys()) + " ", 12,
' '));
builder.append(mappingInfo.isRecursive() ? " " : "*"); // Or `&` if script-local mappings being recursive
builder.append(" "); // Should be `@` if it's a buffer-local mapping
builder.append(mappingInfo.getPresentableString());
builder.append("\n");
}
VimOutputPanel outputPanel = injector.getOutputPanel().getOrCreate(editor, injector.getExecutionContextManager().getEditorExecutionContext(editor));
VimOutputPanel outputPanel = injector.getOutputPanel()
.getOrCreate(editor, injector.getExecutionContextManager().getEditorExecutionContext(editor));
outputPanel.addText(builder.toString(), true);
outputPanel.show();
return true;

View File

@ -318,11 +318,13 @@ internal class MotionGroup : VimMotionGroupBase() {
vimEditor.exitVisualMode()
KeyHandler.getInstance().reset(vimEditor)
}
is Mode.CMD_LINE -> {
val commandLine = injector.commandLine.getActiveCommandLine() ?: return
commandLine.close(refocusOwningEditor = false, resetCaret = false)
injector.outputPanel.getCurrentOutputPanel()?.close()
}
else -> {}
}
}

View File

@ -215,6 +215,7 @@ internal class NotificationService(private val project: Project?) {
is KeyMapIssue.AddShortcut -> {
appendLine("- ${it.key} key is not assigned to the ${it.action} action.<br/>")
}
is KeyMapIssue.RemoveShortcut -> {
appendLine("- ${it.shortcut} key is incorrectly assigned to the ${it.action} action.<br/>")
}
@ -296,7 +297,8 @@ internal class NotificationService(private val project: Project?) {
}
} + "<small>See the ${ActionCenter.getToolwindowName()} tool window for previous IDs</small>"
notification = Notification(IDEAVIM_NOTIFICATION_ID, IDEAVIM_NOTIFICATION_TITLE, content, NotificationType.INFORMATION).also {
notification =
Notification(IDEAVIM_NOTIFICATION_ID, IDEAVIM_NOTIFICATION_TITLE, content, NotificationType.INFORMATION).also {
it.whenExpired { notification = null }
it.addAction(StopTracking())
@ -312,7 +314,8 @@ internal class NotificationService(private val project: Project?) {
}
}
class CopyActionId(val id: String?, val project: Project?) : DumbAwareAction(MessageHelper.message("action.copy.action.id.text")) {
class CopyActionId(val id: String?, val project: Project?) :
DumbAwareAction(MessageHelper.message("action.copy.action.id.text")) {
override fun actionPerformed(e: AnActionEvent) {
CopyPasteManager.getInstance().setContents(StringSelection(id ?: ""))
if (id != null) {

View File

@ -66,7 +66,7 @@ import java.nio.charset.Charset
import java.nio.charset.StandardCharsets
import java.util.*
internal interface IjVimOptionGroup: VimOptionGroup {
internal interface IjVimOptionGroup : VimOptionGroup {
/**
* Return an accessor for options that only have a global value
*/
@ -151,7 +151,7 @@ internal class OptionGroup : VimOptionGroupBase(), IjVimOptionGroup, InternalOpt
override fun <T : VimDataType> setOptionValueInternal(
option: Option<T>,
scope: OptionAccessScope,
value: OptionValue<T>
value: OptionValue<T>,
) {
super.setOptionValueInternal(option, scope, value)
}
@ -391,7 +391,6 @@ private abstract class GlobalLocalOptionToGlobalLocalIdeaSettingMapper<T : VimDa
}
/**
* Maps the `'bomb'` local-to-buffer Vim option to the file's current byte order mark
*
@ -425,7 +424,8 @@ private class BombOptionMapper : LocalOptionValueOverride<VimInt> {
// Use IntelliJ's own actions to modify the BOM. This will change the BOM stored in the virtual file, update the
// file contents and save it
val actionId = if (hasBom) "RemoveBom" else "AddBom"
val action = injector.actionExecutor.getAction(actionId) ?: throw ExException("Cannot find native action: $actionId")
val action =
injector.actionExecutor.getAction(actionId) ?: throw ExException("Cannot find native action: $actionId")
val context = injector.executionContextManager.getEditorExecutionContext(editor)
injector.actionExecutor.executeAction(editor, action, context)
return true
@ -463,8 +463,8 @@ private class BreakIndentOptionMapper(
*
* TODO: This is a code style setting - how can we react to changes?
*/
private class ColorColumnOptionValueProvider(private val colorColumnOption: StringListOption)
: LocalOptionToGlobalLocalExternalSettingMapper<VimString>(colorColumnOption) {
private class ColorColumnOptionValueProvider(private val colorColumnOption: StringListOption) :
LocalOptionToGlobalLocalExternalSettingMapper<VimString>(colorColumnOption) {
// The IntelliJ setting is in practice global, from the user's perspective
override val canUserModifyExternalLocalValue: Boolean = false
@ -510,8 +510,7 @@ private class ColorColumnOptionValueProvider(private val colorColumnOption: Stri
// Given an empty string, hide the margin.
if (value == VimString.EMPTY) {
editor.ij.settings.isRightMarginShown = false
}
else {
} else {
editor.ij.settings.isRightMarginShown = true
val softMargins = mutableListOf<Int>()
@ -524,8 +523,7 @@ private class ColorColumnOptionValueProvider(private val colorColumnOption: Stri
// We could perhaps add a property change listener from editor settings state?
// (editor.ij as EditorImpl).state.addPropertyChangeListener(...)
// (editor.ij.settings as SettingsImpl).getState().addPropertyChangeListener(...)
}
else {
} else {
it.toIntOrNull()?.let(softMargins::add)
}
}
@ -559,8 +557,8 @@ private class ColorColumnOptionValueProvider(private val colorColumnOption: Stri
*
* Note that there isn't a global IntelliJ setting for this option.
*/
private class CursorLineOptionMapper(cursorLineOption: ToggleOption)
: LocalOptionToGlobalLocalExternalSettingMapper<VimInt>(cursorLineOption) {
private class CursorLineOptionMapper(cursorLineOption: ToggleOption) :
LocalOptionToGlobalLocalExternalSettingMapper<VimInt>(cursorLineOption) {
// The IntelliJ setting is in practice global, from the user's perspective
override val canUserModifyExternalLocalValue: Boolean = false
@ -667,7 +665,12 @@ private class FileEncodingOptionMapper : LocalOptionValueOverride<VimString> {
}
}
private fun isSafeToReloadIn(virtualFile: VirtualFile, text: CharSequence, bytes: ByteArray, charset: Charset): Magic8 {
private fun isSafeToReloadIn(
virtualFile: VirtualFile,
text: CharSequence,
bytes: ByteArray,
charset: Charset,
): Magic8 {
val bom = virtualFile.bom
if (bom != null && !CharsetToolkit.canHaveBom(charset, bom)) return Magic8.NO_WAY
@ -680,11 +683,9 @@ private class FileEncodingOptionMapper : LocalOptionValueOverride<VimString> {
var bytesToSave = try {
StringUtil.convertLineSeparators(loaded, separator).toByteArray(charset)
}
catch (e: UnsupportedOperationException) {
} catch (e: UnsupportedOperationException) {
return Magic8.NO_WAY
}
catch (e: NullPointerException) {
} catch (e: NullPointerException) {
return Magic8.NO_WAY
}
if (bom != null && !ArrayUtil.startsWith(bytesToSave, bom)) {
@ -718,12 +719,14 @@ private class FileFormatOptionMapper : LocalOptionValueOverride<VimString> {
// We should have a virtual file for most scenarios, e.g., scratch files, commit message dialog, etc.
// The fallback window (TextComponentEditorImpl) does not have a virtual file
val separator = editor.ij.virtualFile?.let { LoadTextUtil.detectLineSeparator(it, false) }
val value = VimString(when (separator) {
val value = VimString(
when (separator) {
LineSeparator.LF.separatorString -> "unix"
LineSeparator.CR.separatorString -> "mac"
LineSeparator.CRLF.separatorString -> "dos"
else -> if (injector.systemInfoService.isWindows) "dos" else "unix"
})
}
)
// There is no difference between user/external/default - the file is always just one format
return OptionValue.User(value)
@ -762,8 +765,8 @@ private class FileFormatOptionMapper : LocalOptionValueOverride<VimString> {
/**
* Maps the `'list'` local-to-window Vim option to the IntelliJ global-local whitespace setting
*/
private class ListOptionMapper(listOption: ToggleOption, internalOptionValueAccessor: InternalOptionValueAccessor)
: LocalOptionToGlobalLocalIdeaSettingMapper<VimInt>(listOption, internalOptionValueAccessor) {
private class ListOptionMapper(listOption: ToggleOption, internalOptionValueAccessor: InternalOptionValueAccessor) :
LocalOptionToGlobalLocalIdeaSettingMapper<VimInt>(listOption, internalOptionValueAccessor) {
override val ideaPropertyName: String = EditorSettingsExternalizable.PropNames.PROP_IS_WHITESPACES_SHOWN
@ -787,8 +790,8 @@ private class ListOptionMapper(listOption: ToggleOption, internalOptionValueAcce
*
* Note that this must work with `'relativenumber'` to correctly handle the hybrid modes.
*/
private class NumberOptionMapper(numberOption: ToggleOption, internalOptionValueAccessor: InternalOptionValueAccessor)
: LocalOptionToGlobalLocalIdeaSettingMapper<VimInt>(numberOption, internalOptionValueAccessor) {
private class NumberOptionMapper(numberOption: ToggleOption, internalOptionValueAccessor: InternalOptionValueAccessor) :
LocalOptionToGlobalLocalIdeaSettingMapper<VimInt>(numberOption, internalOptionValueAccessor) {
// This is a global-local setting, and can be modified by the user via _View | Active Editor | Show Line Numbers_
override val canUserModifyExternalLocalValue: Boolean = true
@ -808,13 +811,11 @@ private class NumberOptionMapper(numberOption: ToggleOption, internalOptionValue
if (isShowingRelativeLineNumbers(editor.ij.settings.lineNumerationType)) {
editor.ij.settings.lineNumerationType = LineNumerationType.HYBRID
}
}
else {
} else {
editor.ij.settings.isLineNumbersShown = true
editor.ij.settings.lineNumerationType = LineNumerationType.ABSOLUTE
}
}
else {
} else {
// Turn off 'number'. Hide lines if 'relativenumber' is not set, else switch to relative
if (editor.ij.settings.isLineNumbersShown) {
if (isShowingRelativeLineNumbers(editor.ij.settings.lineNumerationType)) {
@ -828,7 +829,8 @@ private class NumberOptionMapper(numberOption: ToggleOption, internalOptionValue
override fun onGlobalIdeaValueChanged(propertyName: String) {
if (propertyName == EditorSettingsExternalizable.PropNames.PROP_ARE_LINE_NUMBERS_SHOWN
|| propertyName == EditorSettingsExternalizable.PropNames.PROP_LINE_NUMERATION) {
|| propertyName == EditorSettingsExternalizable.PropNames.PROP_LINE_NUMERATION
) {
doOnGlobalIdeaValueChanged()
}
}
@ -863,13 +865,11 @@ private class RelativeNumberOptionMapper(
if (isShowingAbsoluteLineNumbers(editor.ij.settings.lineNumerationType)) {
editor.ij.settings.lineNumerationType = LineNumerationType.HYBRID
}
}
else {
} else {
editor.ij.settings.isLineNumbersShown = true
editor.ij.settings.lineNumerationType = LineNumerationType.RELATIVE
}
}
else {
} else {
// Turn off 'relativenumber'. Hide lines if 'number' is not set, else switch to relative
if (editor.ij.settings.isLineNumbersShown) {
if (isShowingAbsoluteLineNumbers(editor.ij.settings.lineNumerationType)) {
@ -883,7 +883,8 @@ private class RelativeNumberOptionMapper(
override fun onGlobalIdeaValueChanged(propertyName: String) {
if (propertyName == EditorSettingsExternalizable.PropNames.PROP_ARE_LINE_NUMBERS_SHOWN
|| propertyName == EditorSettingsExternalizable.PropNames.PROP_LINE_NUMERATION) {
|| propertyName == EditorSettingsExternalizable.PropNames.PROP_LINE_NUMERATION
) {
doOnGlobalIdeaValueChanged()
}
}
@ -914,8 +915,8 @@ private fun isShowingRelativeLineNumbers(lineNumerationType: LineNumerationType)
* We can also clear the overridden IDE setting value by setting it to `-1`. So when the user resets the Vim option to
* defaults, it will again map to the global IDE value. It's a shame not all IDE settings do this.
*/
private class ScrollJumpOptionMapper(option: NumberOption, internalOptionValueAccessor: InternalOptionValueAccessor)
: GlobalOptionToGlobalLocalIdeaSettingMapper<VimInt>(option, internalOptionValueAccessor) {
private class ScrollJumpOptionMapper(option: NumberOption, internalOptionValueAccessor: InternalOptionValueAccessor) :
GlobalOptionToGlobalLocalIdeaSettingMapper<VimInt>(option, internalOptionValueAccessor) {
override val ideaPropertyName: String = EditorSettingsExternalizable.PropNames.PROP_VERTICAL_SCROLL_JUMP
@ -949,8 +950,8 @@ private class ScrollJumpOptionMapper(option: NumberOption, internalOptionValueAc
* We can also clear the overridden IDE setting value by setting it to `-1`. So when the user resets the Vim option to
* defaults, it will again map to the global IDE value. It's a shame not all IDE settings do this.
*/
private class SideScrollOptionMapper(option: NumberOption, internalOptionValueAccessor: InternalOptionValueAccessor)
: GlobalOptionToGlobalLocalIdeaSettingMapper<VimInt>(option, internalOptionValueAccessor) {
private class SideScrollOptionMapper(option: NumberOption, internalOptionValueAccessor: InternalOptionValueAccessor) :
GlobalOptionToGlobalLocalIdeaSettingMapper<VimInt>(option, internalOptionValueAccessor) {
override val ideaPropertyName: String = EditorSettingsExternalizable.PropNames.PROP_HORIZONTAL_SCROLL_JUMP
@ -1140,8 +1141,8 @@ private abstract class OneWayGlobalLocalOptionToGlobalLocalIdeaSettingMapper<T :
* (window) overrides. The [LocalOptionToGlobalLocalExternalSettingMapper] base class will handle this by calling
* [setLocalExternalValue] for all open editors for the changed buffer.
*/
private class TextWidthOptionMapper(textWidthOption: NumberOption)
: LocalOptionToGlobalLocalExternalSettingMapper<VimInt>(textWidthOption) {
private class TextWidthOptionMapper(textWidthOption: NumberOption) :
LocalOptionToGlobalLocalExternalSettingMapper<VimInt>(textWidthOption) {
// The IntelliJ setting is in practice global, from the user's perspective
override val canUserModifyExternalLocalValue: Boolean = false
@ -1168,8 +1169,7 @@ private class TextWidthOptionMapper(textWidthOption: NumberOption)
val project = ijEditor.project ?: ProjectManager.getInstance().defaultProject
return if (ijEditor.settings.isWrapWhenTypingReachesRightMargin(project)) {
ijEditor.settings.getRightMargin(ijEditor.project).asVimInt()
}
else {
} else {
VimInt.ZERO
}
}
@ -1215,8 +1215,8 @@ private class TextWidthOptionMapper(textWidthOption: NumberOption)
/**
* Maps the `'wrap'` Vim option to the IntelliJ soft wrap settings
*/
private class WrapOptionMapper(wrapOption: ToggleOption, internalOptionValueAccessor: InternalOptionValueAccessor)
: LocalOptionToGlobalLocalIdeaSettingMapper<VimInt>(wrapOption, internalOptionValueAccessor) {
private class WrapOptionMapper(wrapOption: ToggleOption, internalOptionValueAccessor: InternalOptionValueAccessor) :
LocalOptionToGlobalLocalIdeaSettingMapper<VimInt>(wrapOption, internalOptionValueAccessor) {
// This is a global-local setting, and can be modified by the user via _View | Active Editor | Soft-Wrap_
override val canUserModifyExternalLocalValue: Boolean = true
@ -1245,7 +1245,9 @@ private class WrapOptionMapper(wrapOption: ToggleOption, internalOptionValueAcce
fun editorKindToSoftWrapAppliancesPlace(kind: EditorKind) = when (kind) {
EditorKind.UNTYPED,
EditorKind.DIFF,
EditorKind.MAIN_EDITOR -> SoftWrapAppliancePlaces.MAIN_EDITOR
EditorKind.MAIN_EDITOR,
-> SoftWrapAppliancePlaces.MAIN_EDITOR
EditorKind.CONSOLE -> SoftWrapAppliancePlaces.CONSOLE
// Treat PREVIEW as a kind of MAIN_EDITOR instead of SWAP.PREVIEW. There are fewer noticeable differences
EditorKind.PREVIEW -> SoftWrapAppliancePlaces.MAIN_EDITOR
@ -1261,7 +1263,9 @@ private class WrapOptionMapper(wrapOption: ToggleOption, internalOptionValueAcce
val softWrapAppliancePlace = when (editor.ij.editorKind) {
EditorKind.UNTYPED,
EditorKind.DIFF,
EditorKind.MAIN_EDITOR -> SoftWrapAppliancePlaces.MAIN_EDITOR
EditorKind.MAIN_EDITOR,
-> SoftWrapAppliancePlaces.MAIN_EDITOR
EditorKind.CONSOLE -> SoftWrapAppliancePlaces.CONSOLE
EditorKind.PREVIEW -> SoftWrapAppliancePlaces.PREVIEW
}
@ -1304,7 +1308,8 @@ private class WrapOptionMapper(wrapOption: ToggleOption, internalOptionValueAcce
override fun onGlobalIdeaValueChanged(propertyName: String) {
if (propertyName == EditorSettingsExternalizable.PropNames.PROP_USE_SOFT_WRAPS
|| propertyName == EditorSettingsExternalizable.PropNames.PROP_SOFT_WRAP_FILE_MASKS) {
|| propertyName == EditorSettingsExternalizable.PropNames.PROP_SOFT_WRAP_FILE_MASKS
) {
doOnGlobalIdeaValueChanged()
}
}
@ -1331,8 +1336,10 @@ class IjOptionConstants {
const val ideawrite_file: String = "file"
val ideaStatusIconValues: Set<String> = setOf(ideastatusicon_enabled, ideastatusicon_gray, ideastatusicon_disabled)
val ideaRefactorModeValues: Set<String> = setOf(idearefactormode_keep, idearefactormode_select, idearefactormode_visual)
val ideaRefactorModeValues: Set<String> =
setOf(idearefactormode_keep, idearefactormode_select, idearefactormode_visual)
val ideaWriteValues: Set<String> = setOf(ideawrite_all, ideawrite_file)
val ideavimsupportValues: Set<String> = setOf(ideavimsupport_dialog, ideavimsupport_singleline, ideavimsupport_dialoglegacy)
val ideavimsupportValues: Set<String> =
setOf(ideavimsupport_dialog, ideavimsupport_singleline, ideavimsupport_dialoglegacy)
}
}

View File

@ -37,7 +37,7 @@ class ProcessGroup : VimProcessGroupBase() {
editor: VimEditor,
command: String,
input: CharSequence?,
currentDirectoryPath: String?
currentDirectoryPath: String?,
): String? {
// This is a much simplified version of how Vim does this. We're using stdin/stdout directly, while Vim will
// redirect to temp files ('shellredir' and 'shelltemp') or use pipes. We don't support 'shellquote', because we're

View File

@ -33,8 +33,7 @@ import static com.maddyhome.idea.vim.api.VimInjectorKt.injector;
* This group works with command associated with copying and pasting text
*/
@State(name = "VimRegisterSettings", storages = {
@Storage(value = "$APP_CONFIG$/vim_settings_local.xml", roamingType = RoamingType.DISABLED)
})
@Storage(value = "$APP_CONFIG$/vim_settings_local.xml", roamingType = RoamingType.DISABLED)})
public class RegisterGroup extends VimRegisterGroupBase implements PersistentStateComponent<Element> {
static {
@ -146,9 +145,8 @@ public class RegisterGroup extends VimRegisterGroupBase implements PersistentSta
final int modifiers = Integer.parseInt(keyElement.getAttributeValue("mods"));
final char c = (char)Integer.parseInt(keyElement.getAttributeValue("char"));
//noinspection MagicConstant
strokes.add(c == KeyEvent.CHAR_UNDEFINED ?
KeyStroke.getKeyStroke(code, modifiers) :
KeyStroke.getKeyStroke(c));
strokes.add(
c == KeyEvent.CHAR_UNDEFINED ? KeyStroke.getKeyStroke(code, modifiers) : KeyStroke.getKeyStroke(c));
}
register = new Register(key, type, strokes);
}

View File

@ -28,11 +28,15 @@ import com.maddyhome.idea.vim.newapi.ij
import com.maddyhome.idea.vim.newapi.initInjector
import org.jdom.Element
@State(name = "VimJumpsSettings", storages = [Storage(value = "\$APP_CONFIG$/vim_settings_local.xml", roamingType = RoamingType.DISABLED)])
@State(
name = "VimJumpsSettings",
storages = [Storage(value = "\$APP_CONFIG$/vim_settings_local.xml", roamingType = RoamingType.DISABLED)]
)
internal class VimJumpServiceImpl : VimJumpServiceBase(), PersistentStateComponent<Element?> {
companion object {
private val logger = vimLogger<VimJumpServiceImpl>()
}
override var lastJumpTimeStamp: Long = 0
override fun includeCurrentCommandAsNavigation(editor: VimEditor) {

View File

@ -45,7 +45,10 @@ import java.util.*
// todo sync vim jumps with ide jumps
// todo exception after moving to global mark after deleting it via IDE (impossible to receive markChar)
@State(name = "VimMarksSettings", storages = [Storage(value = "\$APP_CONFIG$/vim_settings_local.xml", roamingType = RoamingType.DISABLED)])
@State(
name = "VimMarksSettings",
storages = [Storage(value = "\$APP_CONFIG$/vim_settings_local.xml", roamingType = RoamingType.DISABLED)]
)
internal class VimMarkServiceImpl : VimMarkServiceBase(), PersistentStateComponent<Element?> {
private fun createOrGetSystemMark(ch: Char, line: Int, col: Int, editor: VimEditor): Mark? {
val ijEditor = (editor as IjVimEditor).editor
@ -71,7 +74,8 @@ internal class VimMarkServiceImpl : VimMarkServiceBase(), PersistentStateCompone
}
element.addContent(globalMarksElement)
val localMarksElement = Element("localmarks")
var files: List<LocalMarks<Char, Mark>> = filepathToLocalMarks.values.sortedWith(Comparator.comparing(LocalMarks<Char, Mark>::myTimestamp))
var files: List<LocalMarks<Char, Mark>> =
filepathToLocalMarks.values.sortedWith(Comparator.comparing(LocalMarks<Char, Mark>::myTimestamp))
if (files.size > SAVE_MARK_COUNT) {
files = files.subList(files.size - SAVE_MARK_COUNT, files.size)
}
@ -85,7 +89,12 @@ internal class VimMarkServiceImpl : VimMarkServiceBase(), PersistentStateCompone
fileMarkElem.setAttribute("name", file)
fileMarkElem.setAttribute("timestamp", java.lang.Long.toString(marks.myTimestamp.time))
for (mark in marks.values) {
if (!Character.isUpperCase(mark.key) && injector.markService.isValidMark(mark.key, VimMarkService.Operation.SAVE, true)) {
if (!Character.isUpperCase(mark.key) && injector.markService.isValidMark(
mark.key,
VimMarkService.Operation.SAVE,
true
)
) {
val markElem = Element("mark")
markElem.setAttribute("key", mark.key.toString())
markElem.setAttribute("line", mark.line.toString())

View File

@ -56,7 +56,7 @@ public class WindowGroup extends WindowGroupBase {
}
public void closeAll(@NotNull ExecutionContext context) {
getFileEditorManager(((IjEditorExecutionContext) context).getContext()).closeAllFiles();
getFileEditorManager(((IjEditorExecutionContext)context).getContext()).closeAllFiles();
}
@Override
@ -105,8 +105,11 @@ public class WindowGroup extends WindowGroupBase {
@Override
@RWLockLabel.Readonly
@RequiresReadLock
public void selectWindowInRow(@NotNull VimCaret caret, @NotNull ExecutionContext context, int relativePosition, boolean vertical) {
final Caret ijCaret = ((IjVimCaret) caret).getCaret();
public void selectWindowInRow(@NotNull VimCaret caret,
@NotNull ExecutionContext context,
int relativePosition,
boolean vertical) {
final Caret ijCaret = ((IjVimCaret)caret).getCaret();
final FileEditorManagerEx fileEditorManager = getFileEditorManager(((DataContext)context.getContext()));
final EditorWindow currentWindow = fileEditorManager.getCurrentWindow();
if (currentWindow != null) {
@ -116,7 +119,8 @@ public class WindowGroup extends WindowGroupBase {
}
}
private void selectWindow(@NotNull EditorWindow currentWindow, @NotNull List<EditorWindow> windows,
private void selectWindow(@NotNull EditorWindow currentWindow,
@NotNull List<EditorWindow> windows,
int relativePosition) {
final int pos = windows.indexOf(currentWindow);
final int selected = pos + relativePosition;
@ -126,7 +130,8 @@ public class WindowGroup extends WindowGroupBase {
private static @NotNull List<EditorWindow> findWindowsInRow(@NotNull Caret caret,
@NotNull EditorWindow editorWindow,
@NotNull List<EditorWindow> windows, final boolean vertical) {
@NotNull List<EditorWindow> windows,
final boolean vertical) {
final Point anchorPoint = getCaretPoint(caret);
if (anchorPoint != null) {
final List<EditorWindow> result = new ArrayList<>();

View File

@ -181,7 +181,8 @@ internal class PutGroup : VimPutBase() {
val firstItemBefore = allContentsBefore.firstOrNull()
logger.debug { "Copied text: ${text.copiedText}" }
val (textContent, transferableData) = text.copiedText as IjVimCopiedText
val origContent: TextBlockTransferable = injector.clipboardManager.setClipboardText(textContent, textContent, transferableData) as TextBlockTransferable
val origContent: TextBlockTransferable =
injector.clipboardManager.setClipboardText(textContent, textContent, transferableData) as TextBlockTransferable
val allContentsAfter = CopyPasteManager.getInstance().allContents
val sizeAfterInsert = allContentsAfter.size
try {

View File

@ -159,18 +159,22 @@ internal object IdeaSelectionControl {
if (logReason) logger.debug("Enter select mode. Reason: one line mode")
Mode.SELECT(VimPlugin.getVisualMotion().detectSelectionType(editor.vim))
}
selectionSource == VimListenerManager.SelectionSource.MOUSE && OptionConstants.selectmode_mouse in selectmode -> {
if (logReason) logger.debug("Enter select mode. Selection source is mouse and selectMode option has mouse")
Mode.SELECT(VimPlugin.getVisualMotion().detectSelectionType(editor.vim))
}
editor.isTemplateActive() && editor.vim.isIdeaRefactorModeSelect -> {
if (logReason) logger.debug("Enter select mode. Template is active and selectMode has template")
Mode.SELECT(VimPlugin.getVisualMotion().detectSelectionType(editor.vim))
}
selectionSource == VimListenerManager.SelectionSource.OTHER && OptionConstants.selectmode_ideaselection in selectmode -> {
if (logReason) logger.debug("Enter select mode. Selection source is OTHER and selectMode has refactoring")
Mode.SELECT(VimPlugin.getVisualMotion().detectSelectionType(editor.vim))
}
else -> {
if (logReason) logger.debug("Enter visual mode")
Mode.VISUAL(VimPlugin.getVisualMotion().detectSelectionType(editor.vim))

View File

@ -31,7 +31,7 @@ import kotlinx.coroutines.launch
// We use alarm with delay to avoid many actions in case many events are fired at the same time
internal val correctorRequester = MutableSharedFlow<Unit>(replay=1, onBufferOverflow = BufferOverflow.DROP_OLDEST)
internal val correctorRequester = MutableSharedFlow<Unit>(replay = 1, onBufferOverflow = BufferOverflow.DROP_OLDEST)
private val LOG = logger<CopilotKeymapCorrector>()
@ -106,8 +106,7 @@ private fun correctCopilotKeymap() {
keymap.removeShortcut("copilot.disposeInlays", escapeShortcut)
copilotHideActionMap[keymap.name] = Unit
LOG.info("Remove copilot escape shortcut from keymap ${keymap.name}")
}
else {
} else {
copilotHideActionMap.forEach { (name, _) ->
val keymap = KeymapManagerEx.getInstanceEx().getKeymap(name) ?: return@forEach
val currentShortcuts = keymap.getShortcuts("copilot.disposeInlays")

View File

@ -18,7 +18,12 @@ import com.maddyhome.idea.vim.command.OperatorArguments
* Base class for Vim commands handled by existing IDE actions.
*/
internal abstract class IdeActionHandler(private val actionName: String) : VimActionHandler.SingleExecution() {
override fun execute(editor: VimEditor, context: ExecutionContext, cmd: Command, operatorArguments: OperatorArguments): Boolean {
override fun execute(
editor: VimEditor,
context: ExecutionContext,
cmd: Command,
operatorArguments: OperatorArguments,
): Boolean {
injector.actionExecutor.executeAction(editor, name = actionName, context = context)
injector.scroll.scrollCaretIntoView(editor)
return true

View File

@ -31,7 +31,7 @@ import kotlinx.coroutines.launch
import javax.swing.KeyStroke
// We use alarm with delay to avoid many notifications in case many events are fired at the same time
internal val keyCheckRequests = MutableSharedFlow<Unit>(replay=1, onBufferOverflow = BufferOverflow.DROP_OLDEST)
internal val keyCheckRequests = MutableSharedFlow<Unit>(replay = 1, onBufferOverflow = BufferOverflow.DROP_OLDEST)
/**
* This checker verifies that the keymap has a correct configuration that is required for IdeaVim plugin
@ -152,5 +152,5 @@ internal sealed interface KeyMapIssue {
val action: String,
val actionId: String,
val shortcut: Shortcut,
): KeyMapIssue
) : KeyMapIssue
}

View File

@ -111,9 +111,12 @@ private fun Editor.updateSecondaryCaretsVisualAttributes() {
}
}
private val HIDDEN = CaretVisualAttributes(null, CaretVisualAttributes.Weight.NORMAL, CaretVisualAttributes.Shape.BAR, 0F)
private val BLOCK = CaretVisualAttributes(null, CaretVisualAttributes.Weight.NORMAL, CaretVisualAttributes.Shape.BLOCK, 1.0F)
private val BAR = CaretVisualAttributes(null, CaretVisualAttributes.Weight.NORMAL, CaretVisualAttributes.Shape.BAR, 0.25F)
private val HIDDEN =
CaretVisualAttributes(null, CaretVisualAttributes.Weight.NORMAL, CaretVisualAttributes.Shape.BAR, 0F)
private val BLOCK =
CaretVisualAttributes(null, CaretVisualAttributes.Weight.NORMAL, CaretVisualAttributes.Shape.BLOCK, 1.0F)
private val BAR =
CaretVisualAttributes(null, CaretVisualAttributes.Weight.NORMAL, CaretVisualAttributes.Shape.BAR, 0.25F)
private object AttributesCache {
private var lastGuicursorValue = ""

View File

@ -79,7 +79,8 @@ public class EditorHelper {
public static int getVisualLineAtMiddleOfScreen(final @NotNull Editor editor) {
// The editor will return line numbers of virtual space if the text doesn't reach the end of the visible area
// (either because it's too short, or it's been scrolled up)
final int lastLineBaseline = editor.logicalPositionToXY(new LogicalPosition(new IjVimEditor(editor).lineCount(), 0)).y;
final int lastLineBaseline =
editor.logicalPositionToXY(new LogicalPosition(new IjVimEditor(editor).lineCount(), 0)).y;
final Rectangle visibleArea = getVisibleArea(editor);
final int height = min(lastLineBaseline - visibleArea.y, visibleArea.height);
return editor.yToVisualLine(visibleArea.y + (height / 2));
@ -91,8 +92,7 @@ public class EditorHelper {
// Adjust available height if the ex entry text field is visible
final Rectangle visibleArea = getVisibleArea(editor);
final int height = visibleArea.height - getExEntryHeight() - getHorizontalScrollbarHeight(editor);
return getFullVisualLine(editor, visibleArea.y + height, visibleArea.y,
visibleArea.y + height);
return getFullVisualLine(editor, visibleArea.y + height, visibleArea.y, visibleArea.y + height);
}
public static int getVisualLineAtBottomOfScreen(final @NotNull Editor editor) {
@ -288,7 +288,8 @@ public class EditorHelper {
// virtual space at the bottom of the screen
final @NotNull VimEditor editor1 = new IjVimEditor(editor);
final int lastVisualLine = EngineEditorHelperKt.getVisualLineCount(editor1) - 1;
final int yBottomLineOffset = max(getOffsetToScrollVisualLineToBottomOfScreen(editor, lastVisualLine), visibleArea.y);
final int yBottomLineOffset =
max(getOffsetToScrollVisualLineToBottomOfScreen(editor, lastVisualLine), visibleArea.y);
scrollVertically(editor, min(yVisualLine - caretScreenOffset - inlayOffset, yBottomLineOffset));
}
@ -331,7 +332,9 @@ public class EditorHelper {
* @param editor The editor to scroll
* @param visualLine The visual line to place in the middle of the current window
*/
public static void scrollVisualLineToMiddleOfScreen(@NotNull Editor editor, int visualLine, boolean allowVirtualSpace) {
public static void scrollVisualLineToMiddleOfScreen(@NotNull Editor editor,
int visualLine,
boolean allowVirtualSpace) {
final int y = editor.visualLineToY(EngineEditorHelperKt.normalizeVisualLine(new IjVimEditor(editor), visualLine));
final Rectangle visibleArea = getVisibleArea(editor);
final int screenHeight = visibleArea.height;
@ -423,7 +426,8 @@ public class EditorHelper {
}
}
final int columnLeftX = (int) Math.round(editor.visualPositionToPoint2D(new VisualPosition(visualLine, targetVisualColumn)).getX());
final int columnLeftX =
(int)Math.round(editor.visualPositionToPoint2D(new VisualPosition(visualLine, targetVisualColumn)).getX());
scrollHorizontally(editor, columnLeftX);
}
@ -435,8 +439,8 @@ public class EditorHelper {
// of columns. It also works with inline inlays and folds. It is slightly inaccurate for proportional fonts, but is
// still a good solution. Besides, what kind of monster uses Vim with proportional fonts?
final float standardColumnWidth = EditorHelper.getPlainSpaceWidthFloat(editor);
final int screenMidColumn = (int) (screenWidth / standardColumnWidth / 2);
final int x = max(0, (int) Math.round(point.getX() - (screenMidColumn * standardColumnWidth)));
final int screenMidColumn = (int)(screenWidth / standardColumnWidth / 2);
final int x = max(0, (int)Math.round(point.getX() - (screenMidColumn * standardColumnWidth)));
scrollHorizontally(editor, x);
}
@ -461,7 +465,8 @@ public class EditorHelper {
}
// Scroll to the left edge of the target column, minus a screenwidth, and adjusted for inlays
final int targetColumnRightX = (int) Math.round(editor.visualPositionToPoint2D(new VisualPosition(visualLine, targetVisualColumn + 1)).getX());
final int targetColumnRightX =
(int)Math.round(editor.visualPositionToPoint2D(new VisualPosition(visualLine, targetVisualColumn + 1)).getX());
final int screenWidth = getVisibleArea(editor).width;
scrollHorizontally(editor, targetColumnRightX - screenWidth);
}
@ -596,7 +601,8 @@ public class EditorHelper {
}
if (xActualLeft >= leftBound) {
final VisualPosition nextVisualPosition = new VisualPosition(closestVisualPosition.line, closestVisualPosition.column + 1);
final VisualPosition nextVisualPosition =
new VisualPosition(closestVisualPosition.line, closestVisualPosition.column + 1);
final long xActualRight = Math.round(editor.visualPositionToPoint2D(nextVisualPosition).getX()) - 1;
if (xActualRight <= rightBound) {
return closestVisualPosition.column;

View File

@ -56,7 +56,8 @@ internal class HandlerInjector {
// only true in command mode.
// Set by `org.jetbrains.plugins.notebooks.ui.editor.actions.command.mode.NotebookEditorModeListenerAdapter`
// appears to be null in non Notebook editors
val allow_plain_letter_shortcuts = editor.contentComponent.getClientProperty(ActionUtil.ALLOW_PlAIN_LETTER_SHORTCUTS)
val allow_plain_letter_shortcuts =
editor.contentComponent.getClientProperty(ActionUtil.ALLOW_PlAIN_LETTER_SHORTCUTS)
inEditor && (allow_plain_letter_shortcuts != null && allow_plain_letter_shortcuts as Boolean)
}
} else {

View File

@ -197,4 +197,5 @@ private fun skip(iterator: IntIterator, n: Int) {
class CountPosition(val count: Int, val position: Int)
private val logger = logger<SearchLogger>()
private class SearchLogger

View File

@ -48,8 +48,7 @@ internal fun updateIncsearchHighlights(
): Int {
val searchStartOffset = if (searchRange != null && searchRange.startLine < editor.document.lineCount) {
editor.vim.getLineStartOffset(searchRange.startLine)
}
else {
} else {
caretOffset
}
val showHighlights = injector.options(editor.vim).hlsearch
@ -218,8 +217,7 @@ private fun findClosestMatch(
}
val closestIndex = if (forwards) {
sortedResults.indexOfFirst { it.startOffset > initialOffset }
}
else {
} else {
sortedResults.indexOfFirst { it.startOffset < initialOffset }
}
@ -235,7 +233,12 @@ private fun findClosestMatch(
return sortedResults[nextIndex % results.size].startOffset
}
internal fun highlightSearchResults(editor: Editor, pattern: String, results: List<TextRange>, currentMatchOffset: Int) {
internal fun highlightSearchResults(
editor: Editor,
pattern: String,
results: List<TextRange>,
currentMatchOffset: Int,
) {
var highlighters = editor.vimLastHighlighters
if (highlighters == null) {
highlighters = mutableListOf()

View File

@ -81,9 +81,11 @@ internal var Caret.vimLastColumn: Int
_vimLastColumn = value
_vimLastColumnPos = visualPosition
}
internal fun Caret.resetVimLastColumn() {
_vimLastColumnPos = null
}
private var Caret._vimLastColumn: Int by userDataCaretToEditorOr { (this as Caret).inlayAwareVisualColumn }
private var Caret._vimLastColumnPos: VisualPosition? by userDataCaretToEditor()

View File

@ -72,7 +72,8 @@ internal object IdeaSpecifics {
val isVimAction = (action as? AnActionWrapper)?.delegate is VimShortcutKeyAction
if (!isVimAction && injector.globalIjOptions().trackactionids) {
if (action !is NotificationService.ActionIdNotifier.CopyActionId && action !is NotificationService.ActionIdNotifier.StopTracking) {
val id: String? = ActionManager.getInstance().getId(action) ?: (action.shortcutSet as? ProxyShortcutSet)?.actionId
val id: String? =
ActionManager.getInstance().getId(action) ?: (action.shortcutSet as? ProxyShortcutSet)?.actionId
val candidates = if (id == null) {
// Some actions are specific to the component they're registered for, and are copies of a global action,
// reusing the action ID and shortcuts (e.g. `NextTab` is different for editor tabs and tool window tabs).
@ -83,8 +84,7 @@ internal object IdeaSpecifics {
// action. Note that we might return duplicate IDs because the keymap might have multiple shortcuts mapped
// to the same action. The notifier will handle de-duplication and sorting as a presentation detail.
action.shortcutSet.shortcuts.flatMap { KeymapManager.getInstance().activeKeymap.getActionIdList(it) }
}
else {
} else {
emptyList()
}
@ -125,7 +125,14 @@ internal object IdeaSpecifics {
val caretShift = addedTextLength - (editor.caretModel.primaryCaret.offset - prevDocumentOffset)
val leftArrow = KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, 0)
register.recordText(editor.document.getText(TextRange(prevDocumentOffset, prevDocumentOffset + addedTextLength)))
register.recordText(
editor.document.getText(
TextRange(
prevDocumentOffset,
prevDocumentOffset + addedTextLength
)
)
)
repeat(caretShift.coerceAtLeast(0)) {
register.recordKeyStroke(leftArrow)
}

View File

@ -14,7 +14,10 @@ import com.maddyhome.idea.vim.common.ModeChangeListener
import com.maddyhome.idea.vim.newapi.ij
import com.maddyhome.idea.vim.state.mode.Mode
@Deprecated(message = "Please use ModeChangeListener", replaceWith = ReplaceWith("ModeChangeListener", imports = ["import com.maddyhome.idea.vim.common.ModeChangeListener"]))
@Deprecated(
message = "Please use ModeChangeListener",
replaceWith = ReplaceWith("ModeChangeListener", imports = ["import com.maddyhome.idea.vim.common.ModeChangeListener"])
)
interface VimInsertListener : ModeChangeListener {
override fun modeChanged(editor: VimEditor, oldMode: Mode) {
if (editor.mode == Mode.INSERT) {

View File

@ -197,7 +197,10 @@ internal object VimListenerManager {
val optionGroup = VimPlugin.getOptionGroup()
optionGroup.addEffectiveOptionValueChangeListener(Options.number, EditorGroup.NumberChangeListener.INSTANCE)
optionGroup.addEffectiveOptionValueChangeListener(IjOptions.relativenumber, EditorGroup.NumberChangeListener.INSTANCE)
optionGroup.addEffectiveOptionValueChangeListener(
IjOptions.relativenumber,
EditorGroup.NumberChangeListener.INSTANCE
)
optionGroup.addEffectiveOptionValueChangeListener(Options.scrolloff, ScrollGroup.ScrollOptionsChangeListener)
optionGroup.addEffectiveOptionValueChangeListener(Options.guicursor, GuicursorChangeListener)
optionGroup.addGlobalOptionChangeListener(Options.showcmd, ShowCmdOptionChangeListener)
@ -209,8 +212,10 @@ internal object VimListenerManager {
macroWidgetOptionListener.onGlobalOptionChanged()
// Listen for and initialise new editors
EventFacade.getInstance().addEditorFactoryListener(VimEditorFactoryListener, VimPlugin.getInstance().onOffDisposable)
val busConnection = ApplicationManager.getApplication().messageBus.connect(VimPlugin.getInstance().onOffDisposable)
EventFacade.getInstance()
.addEditorFactoryListener(VimEditorFactoryListener, VimPlugin.getInstance().onOffDisposable)
val busConnection =
ApplicationManager.getApplication().messageBus.connect(VimPlugin.getInstance().onOffDisposable)
busConnection.subscribe(FileOpenedSyncListener.TOPIC, VimEditorFactoryListener)
}
@ -219,7 +224,10 @@ internal object VimListenerManager {
val optionGroup = VimPlugin.getOptionGroup()
optionGroup.removeEffectiveOptionValueChangeListener(Options.number, EditorGroup.NumberChangeListener.INSTANCE)
optionGroup.removeEffectiveOptionValueChangeListener(IjOptions.relativenumber, EditorGroup.NumberChangeListener.INSTANCE)
optionGroup.removeEffectiveOptionValueChangeListener(
IjOptions.relativenumber,
EditorGroup.NumberChangeListener.INSTANCE
)
optionGroup.removeEffectiveOptionValueChangeListener(Options.scrolloff, ScrollGroup.ScrollOptionsChangeListener)
optionGroup.removeGlobalOptionChangeListener(Options.showcmd, ShowCmdOptionChangeListener)
optionGroup.removeGlobalOptionChangeListener(Options.showmode, modeWidgetOptionListener)
@ -327,8 +335,7 @@ internal object VimListenerManager {
val editorDisposable = editor.removeUserData(editorListenersDisposableKey)
if (editorDisposable != null) {
Disposer.dispose(editorDisposable)
}
else {
} else {
// We definitely do not expect this to happen
StrictMode.fail("Editor doesn't have disposable attached. $editor")
}
@ -447,8 +454,7 @@ internal object VimListenerManager {
}
EditorListeners.add(event.editor, openingEditor?.vim ?: injector.fallbackWindow, scenario)
firstEditorInitialised = true
}
else {
} else {
// We've got a virtual file, so FileOpenedSyncListener will be called. Save data
val project = openingEditor.project ?: return
val virtualFile = openingEditor.virtualFile ?: return
@ -469,7 +475,10 @@ internal object VimListenerManager {
// editor has been closed. This is nullable, but should always have a value
val owningEditorWindow = getOwningEditorWindow(openingEditor)
event.editor.putUserData(openingEditorKey, OpeningEditor(openingEditor, owningEditorWindow, isPreview, canBeReused))
event.editor.putUserData(
openingEditorKey,
OpeningEditor(openingEditor, owningEditorWindow, isPreview, canBeReused)
)
}
VimStandalonePluginUpdateChecker.getInstance().pluginUsed()
@ -525,7 +534,7 @@ internal object VimListenerManager {
// Sometimes the platform will not reuse a tab when you expect it to, e.g. when reuse tabs is enabled and
// navigating to derived class. We'll confirm our heuristics by checking to see if the editor is still around
val openingEditorIsClosed = editor.project?.let { p ->
FileEditorManagerEx.getInstanceEx(p).allEditors.filterIsInstance(TextEditor::class.java).all { textEditor ->
FileEditorManagerEx.getInstanceEx(p).allEditors.filterIsInstance<TextEditor>().all { textEditor ->
textEditor.editor != openingEditor?.editor
}
} ?: false
@ -547,7 +556,7 @@ internal object VimListenerManager {
private fun getOwningEditorWindow(editor: Editor) = editor.project?.let { p ->
FileEditorManagerEx.getInstanceEx(p).windows.find { editorWindow ->
editorWindow.allComposites.any { composite ->
composite.allEditors.filterIsInstance(TextEditor::class.java).any { it.editor == editor }
composite.allEditors.filterIsInstance<TextEditor>().any { it.editor == editor }
}
}
}
@ -584,7 +593,8 @@ internal object VimListenerManager {
// TODO: It is very confusing that this logic is split between EditorSelectionHandler and EditorMouseHandler
if (MouseEventsDataHolder.dragEventCount < MouseEventsDataHolder.allowedSkippedDragEvents
&& lineStart != lineEnd && startOffset == caretOffset) {
&& lineStart != lineEnd && startOffset == caretOffset
) {
if (lineEnd == endOffset - 1) {
// When starting on an empty line and dragging vertically upwards onto
// another line, the selection should include the entirety of the empty line

View File

@ -32,8 +32,7 @@ internal class IntellijMark(bookmark: LineBookmark, override val col: Int, proje
}
private fun getMark(): LineBookmark? =
getProject()?.let {
project ->
getProject()?.let { project ->
BookmarksManager.getInstance(project)?.getBookmark(BookmarkType.get(key)) as? LineBookmark
}

View File

@ -64,7 +64,11 @@ internal class IjClipboardManager : VimClipboardManager {
override fun setClipboardContent(editor: VimEditor, context: ExecutionContext, textData: VimCopiedText): Boolean {
require(textData is IjVimCopiedText)
return handleTextSetting(textData.text, textData.text, textData.transferableData) { content -> setContents(content) } != null
return handleTextSetting(
textData.text,
textData.text,
textData.transferableData
) { content -> setContents(content) } != null
}
// TODO prefer methods with ranges, because they collect and preprocess for us
@ -129,7 +133,12 @@ internal class IjClipboardManager : VimClipboardManager {
}
}
override fun collectCopiedText(editor: VimEditor, context: ExecutionContext, range: TextRange, text: String): VimCopiedText {
override fun collectCopiedText(
editor: VimEditor,
context: ExecutionContext,
range: TextRange,
text: String,
): VimCopiedText {
val transferableData = getTransferableData(editor, range)
val preprocessedText = preprocessText(editor, range, text, transferableData)
return IjVimCopiedText(preprocessedText, transferableData)
@ -140,7 +149,12 @@ internal class IjClipboardManager : VimClipboardManager {
}
@Suppress("UNCHECKED_CAST")
private fun handleTextSetting(text: String, rawText: String, transferableData: List<Any>, setContent: (TextBlockTransferable) -> Unit?): Transferable? {
private fun handleTextSetting(
text: String,
rawText: String,
transferableData: List<Any>,
setContent: (TextBlockTransferable) -> Unit?,
): Transferable? {
val mutableTransferableData = (transferableData as List<TextBlockTransferableData>).toMutableList()
try {
val s = TextBlockTransferable.convertLineSeparators(text, "\n", mutableTransferableData)
@ -182,7 +196,12 @@ internal class IjClipboardManager : VimClipboardManager {
}
}
}
transferableData.add(CaretStateTransferableData(intArrayOf(0), intArrayOf(textRange.endOffset - textRange.startOffset)))
transferableData.add(
CaretStateTransferableData(
intArrayOf(0),
intArrayOf(textRange.endOffset - textRange.startOffset)
)
)
// These data provided by {@link com.intellij.openapi.editor.richcopy.TextWithMarkupProcessor} doesn't work with
// IdeaVim and I don't see a way to fix it
@ -241,6 +260,6 @@ internal class IjClipboardManager : VimClipboardManager {
}
}
data class IjVimCopiedText(override val text: String, val transferableData: List<Any>): VimCopiedText {
data class IjVimCopiedText(override val text: String, val transferableData: List<Any>) : VimCopiedText {
override fun updateText(newText: String): VimCopiedText = IjVimCopiedText(newText, transferableData)
}

View File

@ -86,6 +86,7 @@ internal class IjVimCaret(val caret: Caret) : VimCaretBase() {
set(value) {
caret.vimLastColumn = value
}
override fun resetLastColumn() = caret.resetVimLastColumn()
override val selectionStart: Int
get() = caret.selectionStart

View File

@ -386,7 +386,7 @@ internal class IjVimEditor(editor: Editor) : MutableLinearEditor, VimEditorBase(
}
override fun extractProtocol(): String? {
return EditorHelper.getVirtualFile(editor)?.getUrl()?.let { VirtualFileManager.extractProtocol(it) }
return EditorHelper.getVirtualFile(editor)?.url?.let { VirtualFileManager.extractProtocol(it) }
}
override val projectId = editor.project?.let { injector.file.getProjectId(it) } ?: DEFAULT_PROJECT_ID
@ -536,7 +536,7 @@ val VimEditor.ij: Editor
val com.intellij.openapi.util.TextRange.vim: TextRange
get() = TextRange(this.startOffset, this.endOffset)
internal class InsertTimeRecorder: ModeChangeListener {
internal class InsertTimeRecorder : ModeChangeListener {
override fun modeChanged(editor: VimEditor, oldMode: Mode) {
editor as IjVimEditor
if (oldMode == Mode.INSERT) {

View File

@ -41,8 +41,7 @@ internal class IjVimMessages : VimMessagesBase() {
val project = editor?.ij?.project
if (project != null) {
setStatusBarMessage(project, message)
}
else {
} else {
// TODO: We really shouldn't set the status bar text for other projects. That's rude.
ProjectManager.getInstance().openProjects.forEach {
setStatusBarMessage(it, message)

View File

@ -277,7 +277,11 @@ open class IjVimSearchGroup : VimSearchGroupBase(), PersistentStateComponent<Ele
}
}
(injector.searchGroup as VimSearchGroupBase).highlightSearchLines(editor.vim, startPosition.line, endPosition.line)
(injector.searchGroup as VimSearchGroupBase).highlightSearchLines(
editor.vim,
startPosition.line,
endPosition.line
)
if (logger.isDebug()) {
existingHighlighters = editor.vimLastHighlighters!!

View File

@ -45,8 +45,7 @@ internal class IjVimSearchHelper : VimSearchHelperBase() {
endOffset = caret.offset - 1
skipCount = -count - 1
offsetOrdering = IntComparators.OPPOSITE_COMPARATOR
}
else {
} else {
startOffset = caret.offset + 1
endOffset = editor.ij.document.textLength
skipCount = count - 1

View File

@ -29,7 +29,13 @@ internal class ShortcutConflictState : ApplicationUsagesCollector() {
val metrics = mutableSetOf<MetricEvent>()
keyStrokes.forEach { keystroke ->
getHandlersForShortcut(keystroke)
.filter { !setOf(HandledModes.INSERT_UNDEFINED, HandledModes.NORMAL_UNDEFINED, HandledModes.VISUAL_AND_SELECT_UNDEFINED).contains(it) }
.filter {
!setOf(
HandledModes.INSERT_UNDEFINED,
HandledModes.NORMAL_UNDEFINED,
HandledModes.VISUAL_AND_SELECT_UNDEFINED
).contains(it)
}
.forEach { mode ->
metrics += HANDLER.metric(keystroke.toReadableString(), mode)
}
@ -38,14 +44,32 @@ internal class ShortcutConflictState : ApplicationUsagesCollector() {
}
private fun getHandlersForShortcut(shortcut: KeyStroke): List<HandledModes> {
val modes = VimPlugin.getKey().shortcutConflicts[shortcut] ?: return listOf(HandledModes.NORMAL_UNDEFINED, HandledModes.INSERT_UNDEFINED, HandledModes.VISUAL_AND_SELECT_UNDEFINED)
val modes = VimPlugin.getKey().shortcutConflicts[shortcut] ?: return listOf(
HandledModes.NORMAL_UNDEFINED,
HandledModes.INSERT_UNDEFINED,
HandledModes.VISUAL_AND_SELECT_UNDEFINED
)
return when (modes) {
is ShortcutOwnerInfo.AllModes -> {
when (modes.owner) {
ShortcutOwner.IDE -> listOf(HandledModes.NORMAL_IDE, HandledModes.INSERT_IDE, HandledModes.VISUAL_AND_SELECT_IDE)
ShortcutOwner.VIM -> listOf(HandledModes.NORMAL_VIM, HandledModes.INSERT_VIM, HandledModes.VISUAL_AND_SELECT_VIM)
ShortcutOwner.UNDEFINED -> listOf(HandledModes.NORMAL_UNDEFINED, HandledModes.INSERT_UNDEFINED, HandledModes.VISUAL_AND_SELECT_UNDEFINED)
ShortcutOwner.IDE -> listOf(
HandledModes.NORMAL_IDE,
HandledModes.INSERT_IDE,
HandledModes.VISUAL_AND_SELECT_IDE
)
ShortcutOwner.VIM -> listOf(
HandledModes.NORMAL_VIM,
HandledModes.INSERT_VIM,
HandledModes.VISUAL_AND_SELECT_VIM
)
ShortcutOwner.UNDEFINED -> listOf(
HandledModes.NORMAL_UNDEFINED,
HandledModes.INSERT_UNDEFINED,
HandledModes.VISUAL_AND_SELECT_UNDEFINED
)
}
}

View File

@ -29,7 +29,8 @@ internal class VimscriptState : ApplicationUsagesCollector() {
return setOf(
VIMSCRIPT.metric(
SOURCED_FILES with Util.sourcedFiles.size,
IDEAVIMRC_SIZE with (VimRcService.findIdeaVimRc()?.readLines()?.filter { !it.matches(Regex("\\s*\".*")) && it.isNotBlank() }?.size ?: -1),
IDEAVIMRC_SIZE with (VimRcService.findIdeaVimRc()?.readLines()
?.filter { !it.matches(Regex("\\s*\".*")) && it.isNotBlank() }?.size ?: -1),
EXTENSIONS_ENABLED_BY_SET with (PluginState.Util.enabledExtensions - Util.extensionsEnabledWithPlug).toList(),
EXTENSIONS_ENABLED_BY_PLUG with Util.extensionsEnabledWithPlug.toList(),
IS_IDE_SPECIFIC_CONFIGURATION_USED with Util.isIDESpecificConfigurationUsed,

View File

@ -58,8 +58,10 @@ class WidgetState : ApplicationUsagesCollector() {
private val GROUP = EventLogGroup("vim.widget", 1, "FUS")
private val IS_MODE_WIDGET_SHOWN = EventFields.Boolean("is-mode-widget-shown")
private val MODE_WIDGET_THEME_LIGHT = EventFields.String("mode-widget-theme-light", listOf("TERM", "COLORLESS", "ADVANCED CUSTOMIZATION"))
private val MODE_WIDGET_THEME_DARK = EventFields.String("mode-widget-theme-dark", listOf("TERM", "COLORLESS", "ADVANCED CUSTOMIZATION"))
private val MODE_WIDGET_THEME_LIGHT =
EventFields.String("mode-widget-theme-light", listOf("TERM", "COLORLESS", "ADVANCED CUSTOMIZATION"))
private val MODE_WIDGET_THEME_DARK =
EventFields.String("mode-widget-theme-dark", listOf("TERM", "COLORLESS", "ADVANCED CUSTOMIZATION"))
private val WIDGET: VarargEventId = GROUP.registerVarargEvent(
"vim.widget",

View File

@ -259,7 +259,8 @@ public class ExOutputPanel extends JPanel {
public boolean isAtEnd() {
int val = myScrollPane.getVerticalScrollBar().getValue();
return val >= myScrollPane.getVerticalScrollBar().getMaximum() - myScrollPane.getVerticalScrollBar().getVisibleAmount();
return val >=
myScrollPane.getVerticalScrollBar().getMaximum() - myScrollPane.getVerticalScrollBar().getVisibleAmount();
}
private void positionPanel() {
@ -316,8 +317,10 @@ public class ExOutputPanel extends JPanel {
KeyHandler.getInstance().getKeyStack().dump());
}
KeyHandler.getInstance().getKeyStack().addKeys(keys);
ExecutionContext context = injector.getExecutionContextManager().getEditorExecutionContext(new IjVimEditor(myEditor));
injector.getApplication().runWriteAction(() -> { VimPlugin.getMacro().playbackKeys(new IjVimEditor(myEditor), context, 1);
ExecutionContext context =
injector.getExecutionContextManager().getEditorExecutionContext(new IjVimEditor(myEditor));
injector.getApplication().runWriteAction(() -> {
VimPlugin.getMacro().playbackKeys(new IjVimEditor(myEditor), context, 1);
return null;
});
}
@ -342,7 +345,9 @@ public class ExOutputPanel extends JPanel {
int keyCode = e.getKeyCode();
Character keyChar = e.getKeyChar();
int modifiers = e.getModifiersEx();
KeyStroke keyStroke = (keyChar == KeyEvent.CHAR_UNDEFINED) ? KeyStroke.getKeyStroke(keyCode, modifiers) : KeyStroke.getKeyStroke(keyChar, modifiers);
KeyStroke keyStroke = (keyChar == KeyEvent.CHAR_UNDEFINED)
? KeyStroke.getKeyStroke(keyCode, modifiers)
: KeyStroke.getKeyStroke(keyChar, modifiers);
currentPanel.handleKey(keyStroke);
}
}

View File

@ -267,7 +267,8 @@ private class HelpLink(
}
}
private object ShortcutConflictsSettings : DumbAwareAction(MessageHelper.message("action.settings.text"))/*, LightEditCompatible*/ {
private object ShortcutConflictsSettings :
DumbAwareAction(MessageHelper.message("action.settings.text"))/*, LightEditCompatible*/ {
override fun actionPerformed(e: AnActionEvent) {
ShowSettingsUtil.getInstance().showSettingsDialog(e.project, VimEmulationConfigurable::class.java)
}

View File

@ -120,7 +120,7 @@ internal class VimEmulationConfigurable : Configurable {
}
}
return rowsToChange;
return rowsToChange
}
fun addHelpLine(model: VimShortcutConflictsTable.Model) {

View File

@ -34,7 +34,7 @@ public class ExDocument extends PlainDocument {
void toggleInsertReplace() {
VimCommandLine commandLine = injector.getCommandLine().getActiveCommandLine();
if (commandLine != null) {
((ExEntryPanel) commandLine).isReplaceMode = !((ExEntryPanel)commandLine).isReplaceMode;
((ExEntryPanel)commandLine).isReplaceMode = !((ExEntryPanel)commandLine).isReplaceMode;
}
overwrite = !overwrite;
}

View File

@ -49,7 +49,9 @@ internal object ExEditorKit : DefaultEditorKit() {
val c = key.keyChar
if (c.code > 0) {
if (target.useHandleKeyFromEx) {
val panel = ((injector.commandLine.getActiveCommandLine() as? ExEntryPanel) ?: (injector.modalInput.getCurrentModalInput() as? WrappedAsModalInputExEntryPanel)?.exEntryPanel) ?: return
val panel = ((injector.commandLine.getActiveCommandLine() as? ExEntryPanel)
?: (injector.modalInput.getCurrentModalInput() as? WrappedAsModalInputExEntryPanel)?.exEntryPanel)
?: return
val entry = panel.entry
val editor = entry.editor
val keyHandler = KeyHandler.getInstance()

View File

@ -88,11 +88,8 @@ public class ExEntryPanel extends JPanel implements VimCommandLine {
add(entry);
// This does not need to be unregistered, it's registered as a custom UI property on this
EventFacade.getInstance().registerCustomShortcutSet(
VimShortcutKeyAction.getInstance(),
toShortcutSet(((VimKeyGroupBase) injector.getKeyGroup()).getRequiredShortcutKeys()),
entry
);
EventFacade.getInstance().registerCustomShortcutSet(VimShortcutKeyAction.getInstance(), toShortcutSet(
((VimKeyGroupBase)injector.getKeyGroup()).getRequiredShortcutKeys()), entry);
new ExShortcutKeyAction(this).registerCustomShortcutSet();
updateUI();
@ -148,7 +145,8 @@ public class ExEntryPanel extends JPanel implements VimCommandLine {
public void setEditor(@Nullable Editor editor) {
if (editor == null) {
weakEditor = null;
} else {
}
else {
weakEditor = new WeakReference<>(editor);
}
}
@ -385,7 +383,7 @@ public class ExEntryPanel extends JPanel implements VimCommandLine {
return exCommand;
}
}
catch(Exception e) {
catch (Exception e) {
logger.warn("Cannot parse command for incsearch", e);
}
@ -533,7 +531,7 @@ public class ExEntryPanel extends JPanel implements VimCommandLine {
@Override
public @NotNull VimCommandLineCaret getCaret() {
return (VimCommandLineCaret) entry.getCaret();
return (VimCommandLineCaret)entry.getCaret();
}
@Override

View File

@ -72,17 +72,20 @@ class ExEntryPanelService : VimCommandLineServiceBase(), VimModalInputService {
commandLine.deactivate(refocusOwningEditor = true, resetCaret = true)
false
}
key.keyCode == KeyEvent.VK_ENTER -> {
text = commandLine.actualText
commandLine.deactivate(refocusOwningEditor = true, resetCaret = true)
false
}
finishOn != null && key.keyChar == finishOn -> {
commandLine.handleKey(key)
text = commandLine.actualText
commandLine.deactivate(refocusOwningEditor = true, resetCaret = true)
false
}
else -> {
commandLine.handleKey(key)
true
@ -126,7 +129,12 @@ class ExEntryPanelService : VimCommandLineServiceBase(), VimModalInputService {
panel.activate(editor.ij, context.ij, prompt, "")
}
override fun createPanel(editor: VimEditor, context: ExecutionContext, label: String, initText: String): VimCommandLine {
override fun createPanel(
editor: VimEditor,
context: ExecutionContext,
label: String,
initText: String,
): VimCommandLine {
val panel = ExEntryPanel.getInstance()
panel.activate(editor.ij, context.ij, label, initText)
return panel
@ -137,10 +145,16 @@ class ExEntryPanelService : VimCommandLineServiceBase(), VimModalInputService {
}
override fun getCurrentModalInput(): VimModalInput? {
return ExEntryPanel.getInstanceWithoutShortcuts()?.takeIf { it.isActive && it.inputInterceptor != null }?.let { WrappedAsModalInputExEntryPanel(it) }
return ExEntryPanel.getInstanceWithoutShortcuts()?.takeIf { it.isActive && it.inputInterceptor != null }
?.let { WrappedAsModalInputExEntryPanel(it) }
}
override fun create(editor: VimEditor, context: ExecutionContext, label: String, inputInterceptor: VimInputInterceptor<*>): VimModalInput {
override fun create(
editor: VimEditor,
context: ExecutionContext,
label: String,
inputInterceptor: VimInputInterceptor<*>,
): VimModalInput {
val panel = ExEntryPanel.getInstanceWithoutShortcuts()
panel.inputInterceptor = inputInterceptor
panel.activate(editor.ij, context.ij, label, "")
@ -151,7 +165,9 @@ class ExEntryPanelService : VimCommandLineServiceBase(), VimModalInputService {
internal class WrappedAsModalInputExEntryPanel(internal val exEntryPanel: ExEntryPanel) : VimModalInputBase() {
override var inputInterceptor: VimInputInterceptor<*>
get() = exEntryPanel.inputInterceptor!!
set(value) { exEntryPanel.inputInterceptor = value }
set(value) {
exEntryPanel.inputInterceptor = value
}
override val caret: VimCommandLineCaret = exEntryPanel.caret
override val label: String = exEntryPanel.label

View File

@ -239,14 +239,16 @@ public class ExTextField extends JTextField {
// This gets called for ALL events, before the IDE starts to process key events for the action system. We can add a
// dispatcher that checks that the plugin is enabled, checks that the component with the focus is ExTextField,
// dispatch to ExEntryPanel#handleKey and if it's processed, mark the event as consumed.
KeyEvent event = new KeyEvent(this, keyChar != KeyEvent.CHAR_UNDEFINED ? KeyEvent.KEY_TYPED :
(stroke.isOnKeyRelease() ? KeyEvent.KEY_RELEASED : KeyEvent.KEY_PRESSED),
KeyEvent event = new KeyEvent(this, keyChar != KeyEvent.CHAR_UNDEFINED
? KeyEvent.KEY_TYPED
: (stroke.isOnKeyRelease() ? KeyEvent.KEY_RELEASED : KeyEvent.KEY_PRESSED),
(new Date()).getTime(), modifiers, keyCode, c);
useHandleKeyFromEx = false;
try {
super.processKeyEvent(event);
} finally {
}
finally {
useHandleKeyFromEx = true;
}
}
@ -311,7 +313,8 @@ public class ExTextField extends JTextField {
}
private void resetCaret() {
if (getCaretPosition() == super.getText().length() || currentActionPromptCharacterOffset == super.getText().length() - 1) {
if (getCaretPosition() == super.getText().length() ||
currentActionPromptCharacterOffset == super.getText().length() - 1) {
setNormalModeCaret();
}
else {
@ -388,7 +391,7 @@ public class ExTextField extends JTextField {
if (!isVisible()) return;
// Take a copy of the graphics, so we can mess around with it without having to reset after
final Graphics2D g2d = (Graphics2D) g.create();
final Graphics2D g2d = (Graphics2D)g.create();
try {
final JTextComponent component = getComponent();
@ -414,10 +417,12 @@ public class ExTextField extends JTextField {
// when the caret has not yet been moved or changed
final FontMetrics fm = component.getFontMetrics(component.getFont());
if (!hasFocus) {
final float outlineThickness = (float) PaintUtil.alignToInt(1.0, g2d);
final float outlineThickness = (float)PaintUtil.alignToInt(1.0, g2d);
final double caretWidth = getCaretWidth(fm, r.getX(), 100);
final Area area = new Area(new Rectangle2D.Double(r.getX(), r.getY(), caretWidth, r.getHeight()));
area.subtract(new Area(new Rectangle2D.Double(r.getX() + outlineThickness, r.getY() + outlineThickness, caretWidth - (2 * outlineThickness), r.getHeight() - (2 * outlineThickness))));
area.subtract(new Area(new Rectangle2D.Double(r.getX() + outlineThickness, r.getY() + outlineThickness,
caretWidth - (2 * outlineThickness),
r.getHeight() - (2 * outlineThickness))));
g2d.fill(area);
}
else {
@ -516,7 +521,7 @@ public class ExTextField extends JTextField {
@TestOnly
public @NonNls String getCaretShape() {
CommandLineCaret caret = (CommandLineCaret) getCaret();
CommandLineCaret caret = (CommandLineCaret)getCaret();
return String.format("%s %d", caret.mode, caret.thickness);
}

View File

@ -148,14 +148,20 @@ class ModeWidgetPopup : AnAction() {
val panel = panel {
lateinit var advancedSettings: Cell<JBCheckBox>
row {
advancedSettings = checkBox(MessageHelper.getMessage("widget.mode.popup.field.advanced.settings")).bindSelected(modeColors::isFullCustomization)
advancedSettings =
checkBox(MessageHelper.getMessage("widget.mode.popup.field.advanced.settings")).bindSelected(modeColors::isFullCustomization)
}
group {
row {
label(MessageHelper.getMessage("widget.mode.popup.field.theme"))
comboBox(ModeWidgetTheme.entries).bindItem(modeColors::theme.toNullableProperty())
}
row { browserLink("Suggest your theme", "https://youtrack.jetbrains.com/issue/VIM-1377/Normal-mode-needs-to-be-more-obvious") }
row {
browserLink(
"Suggest your theme",
"https://youtrack.jetbrains.com/issue/VIM-1377/Normal-mode-needs-to-be-more-obvious"
)
}
}.topGap(TopGap.NONE).visibleIf(!advancedSettings.selected)
group(MessageHelper.getMessage("widget.mode.popup.group.title.full.customization")) {
row { text(MessageHelper.getMessage("widget.mode.popup.color.instruction")) }
@ -279,7 +285,8 @@ class ModeWidgetPopup : AnAction() {
}
private fun JComponent.addScrollPane(): JComponent {
val scrollPane = JBScrollPane(this, JBScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JBScrollPane.HORIZONTAL_SCROLLBAR_NEVER)
val scrollPane =
JBScrollPane(this, JBScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JBScrollPane.HORIZONTAL_SCROLLBAR_NEVER)
scrollPane.border = BorderFactory.createEmptyBorder()
return scrollPane
}
@ -317,7 +324,7 @@ class ModeWidgetPopup : AnAction() {
var selectBlockBg: String by VimScopeStringVariable(selectBlockBgKey)
var selectBlockFg: String by VimScopeStringVariable(selectBlockFgKey)
private class VimScopeBooleanVariable(private var key: String): ReadWriteProperty<ModeColors, Boolean> {
private class VimScopeBooleanVariable(private var key: String) : ReadWriteProperty<ModeColors, Boolean> {
override fun getValue(thisRef: ModeColors, property: KProperty<*>): Boolean {
return injector.variableService.getVimVariable(key)?.asBoolean() ?: false
}
@ -327,7 +334,7 @@ class ModeWidgetPopup : AnAction() {
}
}
private class VimScopeStringVariable(private var key: String): ReadWriteProperty<ModeColors, String> {
private class VimScopeStringVariable(private var key: String) : ReadWriteProperty<ModeColors, String> {
override fun getValue(thisRef: ModeColors, property: KProperty<*>): String {
return injector.variableService.getVimVariable(key)?.asString() ?: ""
}
@ -337,9 +344,10 @@ class ModeWidgetPopup : AnAction() {
}
}
private class VimScopeThemeVariable(private var key: String): ReadWriteProperty<ModeColors, ModeWidgetTheme> {
private class VimScopeThemeVariable(private var key: String) : ReadWriteProperty<ModeColors, ModeWidgetTheme> {
override fun getValue(thisRef: ModeColors, property: KProperty<*>): ModeWidgetTheme {
val themeString = injector.variableService.getVimVariable(key)?.asString() ?: return ModeWidgetTheme.getDefaultTheme()
val themeString =
injector.variableService.getVimVariable(key)?.asString() ?: return ModeWidgetTheme.getDefaultTheme()
return ModeWidgetTheme.parseString(themeString) ?: ModeWidgetTheme.getDefaultTheme()
}

View File

@ -31,6 +31,7 @@ fun getModeBackground(mode: Mode?): Color {
is Mode.OP_PENDING, null -> UIUtil.getPanelBackground()
}
}
ModeWidgetTheme.DRACULA -> {
return when (mode) {
Mode.INSERT -> Color.decode("#50FA7B")
@ -41,6 +42,7 @@ fun getModeBackground(mode: Mode?): Color {
is Mode.OP_PENDING, null -> UIUtil.getPanelBackground()
}
}
ModeWidgetTheme.COLORLESS -> {
return UIUtil.getPanelBackground()
}
@ -55,18 +57,26 @@ fun getModeBackground(mode: Mode?): Color {
val visualModeBackground = injector.variableService.getVimVariable("widget_mode_visual_background$keyPostfix")
when (mode.selectionType) {
SelectionType.CHARACTER_WISE -> visualModeBackground
SelectionType.LINE_WISE -> injector.variableService.getVimVariable("widget_mode_visual_line_background$keyPostfix") ?: visualModeBackground
SelectionType.BLOCK_WISE -> injector.variableService.getVimVariable("widget_mode_visual_block_background$keyPostfix") ?: visualModeBackground
SelectionType.LINE_WISE -> injector.variableService.getVimVariable("widget_mode_visual_line_background$keyPostfix")
?: visualModeBackground
SelectionType.BLOCK_WISE -> injector.variableService.getVimVariable("widget_mode_visual_block_background$keyPostfix")
?: visualModeBackground
}
}
is Mode.SELECT -> {
val selectModeBackground = injector.variableService.getVimVariable("widget_mode_select_background$keyPostfix")
when (mode.selectionType) {
SelectionType.CHARACTER_WISE -> selectModeBackground
SelectionType.LINE_WISE -> injector.variableService.getVimVariable("widget_mode_select_line_background$keyPostfix") ?: selectModeBackground
SelectionType.BLOCK_WISE -> injector.variableService.getVimVariable("widget_mode_select_block_background$keyPostfix") ?: selectModeBackground
SelectionType.LINE_WISE -> injector.variableService.getVimVariable("widget_mode_select_line_background$keyPostfix")
?: selectModeBackground
SelectionType.BLOCK_WISE -> injector.variableService.getVimVariable("widget_mode_select_block_background$keyPostfix")
?: selectModeBackground
}
}
is Mode.OP_PENDING, null -> null
}?.asString()
val defaultColor = UIUtil.getPanelBackground()
@ -77,7 +87,11 @@ fun getModeBackground(mode: Mode?): Color {
if (colorString == null) {
defaultColor
} else {
try { Color.decode(colorString) } catch (e: Exception) { defaultColor }
try {
Color.decode(colorString)
} catch (e: Exception) {
defaultColor
}
}
}
}
@ -106,18 +120,26 @@ fun getModeForeground(mode: Mode?): Color {
val visualModeBackground = injector.variableService.getVimVariable("widget_mode_visual_foreground$keyPostfix")
when (mode.selectionType) {
SelectionType.CHARACTER_WISE -> visualModeBackground
SelectionType.LINE_WISE -> injector.variableService.getVimVariable("widget_mode_visual_line_foreground$keyPostfix") ?: visualModeBackground
SelectionType.BLOCK_WISE -> injector.variableService.getVimVariable("widget_mode_visual_block_foreground$keyPostfix") ?: visualModeBackground
SelectionType.LINE_WISE -> injector.variableService.getVimVariable("widget_mode_visual_line_foreground$keyPostfix")
?: visualModeBackground
SelectionType.BLOCK_WISE -> injector.variableService.getVimVariable("widget_mode_visual_block_foreground$keyPostfix")
?: visualModeBackground
}
}
is Mode.SELECT -> {
val selectModeBackground = injector.variableService.getVimVariable("widget_mode_select_foreground$keyPostfix")
when (mode.selectionType) {
SelectionType.CHARACTER_WISE -> selectModeBackground
SelectionType.LINE_WISE -> injector.variableService.getVimVariable("widget_mode_select_line_foreground$keyPostfix") ?: selectModeBackground
SelectionType.BLOCK_WISE -> injector.variableService.getVimVariable("widget_mode_select_block_foreground$keyPostfix") ?: selectModeBackground
SelectionType.LINE_WISE -> injector.variableService.getVimVariable("widget_mode_select_line_foreground$keyPostfix")
?: selectModeBackground
SelectionType.BLOCK_WISE -> injector.variableService.getVimVariable("widget_mode_select_block_foreground$keyPostfix")
?: selectModeBackground
}
}
is Mode.OP_PENDING, null -> null
}?.asString()
val defaultColor = UIUtil.getLabelForeground()
@ -128,7 +150,11 @@ fun getModeForeground(mode: Mode?): Color {
if (colorString == null) {
defaultColor
} else {
try { Color.decode(colorString) } catch (e: Exception) { defaultColor }
try {
Color.decode(colorString)
} catch (e: Exception) {
defaultColor
}
}
}
}

View File

@ -161,7 +161,7 @@ class VimModeWidget(val project: Project) : CustomStatusBarWidget, VimStatusBarW
return fileEditorManager.selectedTextEditor
}
private class JBLabelWiderThan(private val words: Collection<String>): JBLabel("", CENTER) {
private class JBLabelWiderThan(private val words: Collection<String>) : JBLabel("", CENTER) {
private val wordWidth: Int
get() {
val fontMetrics = getFontMetrics(font)

View File

@ -25,7 +25,7 @@ import com.maddyhome.idea.vim.ui.widgets.mode.ModeWidgetFactory
import com.maddyhome.idea.vim.ui.widgets.mode.VimModeWidget
import com.maddyhome.idea.vim.ui.widgets.mode.updateModeWidget
internal class ModeWidgetListener: ModeChangeListener, EditorListener, VimWidgetListener({ updateModeWidget()}) {
internal class ModeWidgetListener : ModeChangeListener, EditorListener, VimWidgetListener({ updateModeWidget() }) {
override fun modeChanged(editor: VimEditor, oldMode: Mode) {
val modeWidget = getWidget(editor) ?: return
val editorMode = editor.mode

View File

@ -29,7 +29,11 @@ internal data class ActionListCommand(val range: Range, val modifier: CommandMod
override val argFlags = flags(RangeFlag.RANGE_FORBIDDEN, ArgumentFlag.ARGUMENT_OPTIONAL, Access.READ_ONLY)
override fun processCommand(editor: VimEditor, context: ExecutionContext, operatorArguments: OperatorArguments): ExecutionResult {
override fun processCommand(
editor: VimEditor,
context: ExecutionContext,
operatorArguments: OperatorArguments,
): ExecutionResult {
val lineSeparator = "\n"
val searchPattern = argument.trim().lowercase(Locale.getDefault()).split("*")
val actionManager = ActionManager.getInstance()

View File

@ -32,7 +32,11 @@ internal data class BufferCommand(val range: Range, val modifier: CommandModifie
override val argFlags = flags(RangeFlag.RANGE_FORBIDDEN, ArgumentFlag.ARGUMENT_OPTIONAL, Access.READ_ONLY)
override fun processCommand(editor: VimEditor, context: ExecutionContext, operatorArguments: OperatorArguments): ExecutionResult {
override fun processCommand(
editor: VimEditor,
context: ExecutionContext,
operatorArguments: OperatorArguments,
): ExecutionResult {
val overrideModified = modifier == CommandModifier.BANG
val buffer = argument.trim()
var result = true
@ -55,6 +59,7 @@ internal data class BufferCommand(val range: Range, val modifier: CommandModifie
VimPlugin.showMessage(MessageHelper.message("no.matching.buffer.for.0", buffer))
result = false
}
1 -> {
if (EditorHelper.hasUnsavedChanges(editor.ij) && !overrideModified) {
VimPlugin.showMessage(MessageHelper.message("no.write.since.last.change.add.to.override"))
@ -63,6 +68,7 @@ internal data class BufferCommand(val range: Range, val modifier: CommandModifie
VimPlugin.getFile().openFile(EditorHelper.getVirtualFile(editors[0].ij)!!.name, context)
}
}
else -> {
VimPlugin.showMessage(MessageHelper.message("more.than.one.match.for.0", buffer))
result = false

View File

@ -42,7 +42,11 @@ internal data class BufferListCommand(val range: Range, val modifier: CommandMod
val SUPPORTED_FILTERS = setOf('+', '=', 'a', '%', '#')
}
override fun processCommand(editor: VimEditor, context: ExecutionContext, operatorArguments: OperatorArguments): ExecutionResult {
override fun processCommand(
editor: VimEditor,
context: ExecutionContext,
operatorArguments: OperatorArguments,
): ExecutionResult {
val arg = argument.trim()
val filter = pruneUnsupportedFilters(arg)
val bufferList = getBufferList(context, filter)

View File

@ -29,12 +29,16 @@ import com.maddyhome.idea.vim.vimscript.model.ExecutionResult
* see "h :!"
*/
@ExCommand(command = "!")
internal data class CmdFilterCommand(val range: Range, val modifier: CommandModifier, val argument: String)
: Command.SingleExecution(range, modifier) {
internal data class CmdFilterCommand(val range: Range, val modifier: CommandModifier, val argument: String) :
Command.SingleExecution(range, modifier) {
override val argFlags = flags(RangeFlag.RANGE_OPTIONAL, ArgumentFlag.ARGUMENT_OPTIONAL, Access.SELF_SYNCHRONIZED)
override fun processCommand(editor: VimEditor, context: ExecutionContext, operatorArguments: OperatorArguments): ExecutionResult {
override fun processCommand(
editor: VimEditor,
context: ExecutionContext,
operatorArguments: OperatorArguments,
): ExecutionResult {
logger.debug("execute")
val command = buildString {
var inBackslash = false
@ -48,6 +52,7 @@ internal data class CmdFilterCommand(val range: Range, val modifier: CommandModi
}
append(last)
}
!inBackslash && c == '%' -> {
val virtualFile = EditorHelper.getVirtualFile(editor.ij)
if (virtualFile == null) {
@ -60,6 +65,7 @@ internal data class CmdFilterCommand(val range: Range, val modifier: CommandModi
}
append(virtualFile.path)
}
else -> append(c)
}

View File

@ -29,7 +29,11 @@ internal data class HelpCommand(val range: Range, val modifier: CommandModifier,
override val argFlags = flags(RangeFlag.RANGE_OPTIONAL, ArgumentFlag.ARGUMENT_OPTIONAL, Access.READ_ONLY)
override fun processCommand(editor: VimEditor, context: ExecutionContext, operatorArguments: OperatorArguments): ExecutionResult {
override fun processCommand(
editor: VimEditor,
context: ExecutionContext,
operatorArguments: OperatorArguments,
): ExecutionResult {
BrowserUtil.browse(helpTopicUrl(argument))
return ExecutionResult.Success
}

View File

@ -14,5 +14,6 @@ import com.maddyhome.idea.vim.vimscript.model.functions.IntellijFunctionProvider
import com.maddyhome.idea.vim.vimscript.model.functions.VimscriptFunctionProvider
internal class FunctionStorage : VimScriptFunctionServiceBase() {
override val functionProviders: List<VimscriptFunctionProvider> = listOf(EngineFunctionProvider, IntellijFunctionProvider)
override val functionProviders: List<VimscriptFunctionProvider> =
listOf(EngineFunctionProvider, IntellijFunctionProvider)
}

View File

@ -28,9 +28,18 @@ import com.maddyhome.idea.vim.vimscript.model.expressions.Scope
import com.maddyhome.idea.vim.vimscript.model.expressions.Variable
import org.jdom.Element
@State(name = "VimVariables", storages = [Storage(value = "\$APP_CONFIG$/vim_settings_local.xml", roamingType = RoamingType.DISABLED)])
@State(
name = "VimVariables",
storages = [Storage(value = "\$APP_CONFIG$/vim_settings_local.xml", roamingType = RoamingType.DISABLED)]
)
internal class IjVariableService : VimVariableServiceBase(), PersistentStateComponent<Element?> {
override fun storeVariable(variable: Variable, value: VimDataType, editor: VimEditor, context: ExecutionContext, vimContext: VimLContext) {
override fun storeVariable(
variable: Variable,
value: VimDataType,
editor: VimEditor,
context: ExecutionContext,
vimContext: VimLContext,
) {
super.storeVariable(variable, value, editor, context, vimContext)
val scope = variable.scope ?: getDefaultVariableScope(vimContext)
@ -92,6 +101,7 @@ internal class IjVariableService : VimVariableServiceBase(), PersistentStateComp
"string" -> {
vimVariables[variableElement.getAttributeValue("key")] = VimString(variableElement.getAttributeValue("value"))
}
"int" -> {
vimVariables[variableElement.getAttributeValue("key")] = VimInt(variableElement.getAttributeValue("value"))
}

View File

@ -99,7 +99,8 @@
</aliases>
</vimExtension>
<vimExtension implementation="com.maddyhome.idea.vim.extension.paragraphmotion.ParagraphMotion" name="vim-paragraph-motion">
<vimExtension implementation="com.maddyhome.idea.vim.extension.paragraphmotion.ParagraphMotion"
name="vim-paragraph-motion">
<aliases>
<alias name="https://github.com/dbakker/vim-paragraph-motion"/>
<alias name="dbakker/vim-paragraph-motion"/>

View File

@ -13,5 +13,6 @@
<stop offset="100%" stop-color="#087CFA"/>
</linearGradient>
</defs>
<polygon fill="url(#ideavim_plugin-a)" fill-rule="evenodd" points="28.019 4 15.988 24.119 15.988 4 4 4 4 36 17.953 36 36 4"/>
<polygon fill="url(#ideavim_plugin-a)" fill-rule="evenodd"
points="28.019 4 15.988 24.119 15.988 4 4 4 4 36 17.953 36 36 4"/>
</svg>

Before

(image error) Size: 667 B

After

(image error) Size: 678 B

View File

@ -6,6 +6,7 @@
- https://opensource.org/licenses/MIT.
-->
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 40 40" fill-opacity="0" stroke="#6E6E6E" stroke-width="3">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 40 40" fill-opacity="0" stroke="#6E6E6E"
stroke-width="3">
<path d="M 28.019 4 L 15.988 24.119 L 15.988 4 L 4 4 L 4 36 L 17.953 36 L 36 4z"/>
</svg>

Before

(image error) Size: 446 B

After

(image error) Size: 449 B

View File

@ -8,5 +8,6 @@
-->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 26 26" width="16" height="16" fill="#000000">
<path fill="#1DA1F2" d="M 25.855469 5.574219 C 24.914063 5.992188 23.902344 6.273438 22.839844 6.402344 C 23.921875 5.75 24.757813 4.722656 25.148438 3.496094 C 24.132813 4.097656 23.007813 4.535156 21.8125 4.769531 C 20.855469 3.75 19.492188 3.113281 17.980469 3.113281 C 15.082031 3.113281 12.730469 5.464844 12.730469 8.363281 C 12.730469 8.773438 12.777344 9.175781 12.867188 9.558594 C 8.503906 9.339844 4.636719 7.246094 2.046875 4.070313 C 1.59375 4.847656 1.335938 5.75 1.335938 6.714844 C 1.335938 8.535156 2.261719 10.140625 3.671875 11.082031 C 2.808594 11.054688 2 10.820313 1.292969 10.425781 C 1.292969 10.449219 1.292969 10.46875 1.292969 10.492188 C 1.292969 13.035156 3.101563 15.15625 5.503906 15.640625 C 5.0625 15.761719 4.601563 15.824219 4.121094 15.824219 C 3.78125 15.824219 3.453125 15.792969 3.132813 15.730469 C 3.800781 17.8125 5.738281 19.335938 8.035156 19.375 C 6.242188 20.785156 3.976563 21.621094 1.515625 21.621094 C 1.089844 21.621094 0.675781 21.597656 0.265625 21.550781 C 2.585938 23.039063 5.347656 23.90625 8.3125 23.90625 C 17.96875 23.90625 23.25 15.90625 23.25 8.972656 C 23.25 8.742188 23.246094 8.515625 23.234375 8.289063 C 24.261719 7.554688 25.152344 6.628906 25.855469 5.574219"/>
<path fill="#1DA1F2"
d="M 25.855469 5.574219 C 24.914063 5.992188 23.902344 6.273438 22.839844 6.402344 C 23.921875 5.75 24.757813 4.722656 25.148438 3.496094 C 24.132813 4.097656 23.007813 4.535156 21.8125 4.769531 C 20.855469 3.75 19.492188 3.113281 17.980469 3.113281 C 15.082031 3.113281 12.730469 5.464844 12.730469 8.363281 C 12.730469 8.773438 12.777344 9.175781 12.867188 9.558594 C 8.503906 9.339844 4.636719 7.246094 2.046875 4.070313 C 1.59375 4.847656 1.335938 5.75 1.335938 6.714844 C 1.335938 8.535156 2.261719 10.140625 3.671875 11.082031 C 2.808594 11.054688 2 10.820313 1.292969 10.425781 C 1.292969 10.449219 1.292969 10.46875 1.292969 10.492188 C 1.292969 13.035156 3.101563 15.15625 5.503906 15.640625 C 5.0625 15.761719 4.601563 15.824219 4.121094 15.824219 C 3.78125 15.824219 3.453125 15.792969 3.132813 15.730469 C 3.800781 17.8125 5.738281 19.335938 8.035156 19.375 C 6.242188 20.785156 3.976563 21.621094 1.515625 21.621094 C 1.089844 21.621094 0.675781 21.597656 0.265625 21.550781 C 2.585938 23.039063 5.347656 23.90625 8.3125 23.90625 C 17.96875 23.90625 23.25 15.90625 23.25 8.972656 C 23.25 8.742188 23.246094 8.515625 23.234375 8.289063 C 24.261719 7.554688 25.152344 6.628906 25.855469 5.574219"/>
</svg>

Before

(image error) Size: 1.6 KiB

After

(image error) Size: 1.6 KiB

View File

@ -159,14 +159,16 @@ class MacroActionTest : VimTestCase() {
)
assertRegister('b', "6@a")
assertState("""
assertState(
"""
Lorem Ipsum
Lorem ipsum dolor ${c}sit amet,
consectetur adipiscing elit
Sed in orci mauris.
Cras id tellus in ex imperdiet egestas.
""".trimIndent())
""".trimIndent()
)
}
@Test
@ -191,14 +193,16 @@ class MacroActionTest : VimTestCase() {
assertRegister('b', "3@a")
assertRegister('c', "2@b")
assertState("""
assertState(
"""
Lorem Ipsum
Lorem ipsum dolor ${c}sit amet,
consectetur adipiscing elit
Sed in orci mauris.
Cras id tellus in ex imperdiet egestas.
""".trimIndent())
""".trimIndent()
)
}
@Test

View File

@ -45,7 +45,10 @@ class MacroWithEditingTest : VimTestCase() {
typeTextInFile(injector.parser.parseKeys("^v\$h\"wy"), "\u0001")
val vimEditor = fixture.editor.vim
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
kotlin.test.assertEquals(injector.parser.parseKeys("<C-A>"), injector.registerGroup.getRegister(vimEditor, context, 'w')!!.keys)
kotlin.test.assertEquals(
injector.parser.parseKeys("<C-A>"),
injector.registerGroup.getRegister(vimEditor, context, 'w')!!.keys
)
setText("1")
typeText(injector.parser.parseKeys("@w"))
waitAndAssert {

View File

@ -614,7 +614,7 @@ class MotionActionTest : VimTestCase() {
doTest(keys, before, after, Mode.NORMAL())
}
// VIM-2733
// VIM-2733
@Test
fun testDeleteOuterQuoteEmptyString2() {
val keys = listOf("da'")
@ -665,7 +665,7 @@ class MotionActionTest : VimTestCase() {
doTest(keys, before, after, Mode.NORMAL())
}
// VIM-1427
// VIM-1427
@Test
fun testDeleteOuterTagWithCount() {
val keys = listOf("d2at")

View File

@ -2181,7 +2181,14 @@ rtyfg${c}hzxc"""
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
injector.registerGroup.storeText(vimEditor, context, '*', "fgh")
VimPlugin.getRegister()
.storeText(IjVimEditor(editor), context, editor.vim.primaryCaret(), TextRange(16, 19), SelectionType.CHARACTER_WISE, false)
.storeText(
IjVimEditor(editor),
context,
editor.vim.primaryCaret(),
TextRange(16, 19),
SelectionType.CHARACTER_WISE,
false
)
typeText(injector.parser.parseKeys("\"*P"))
val after = "fg${c}hqfg${c}hwe asd zxc rty fg${c}hfgh vbn"
assertState(after)

View File

@ -29,77 +29,93 @@ class OperatorActionTest : VimTestCase() {
@Test
fun `test operator action with function name`() {
doTest("gxe",
doTest(
"gxe",
"lorem ipsum dolor sit amet",
"xxxxx ipsum dolor sit amet"
) {
executeVimscript("""function! Redact(type)
executeVimscript(
"""function! Redact(type)
| execute "normal `[v`]rx"
|endfunction
""".trimMargin())
""".trimMargin()
)
enterCommand("noremap gx :set opfunc=Redact<CR>g@")
}
}
@Test
fun `test operator action with character wise motion`() {
doTest("gxe",
doTest(
"gxe",
"lorem ipsum dolor sit amet",
"charlorem ipsum dolor sit amet"
) {
executeVimscript("""function! Redact(type)
executeVimscript(
"""function! Redact(type)
| execute "normal i" . a:type
|endfunction
""".trimMargin())
""".trimMargin()
)
enterCommand("noremap gx :set opfunc=Redact<CR>g@")
}
}
@Test
fun `test operator action with linewise motion`() {
doTest("Vgx",
doTest(
"Vgx",
"lorem ipsum dolor sit amet",
"linelorem ipsum dolor sit amet"
) {
executeVimscript("""function! Redact(type)
executeVimscript(
"""function! Redact(type)
| execute "normal i" . a:type
|endfunction
""".trimMargin())
""".trimMargin()
)
enterCommand("noremap gx <Esc>:set opfunc=Redact<CR>gvg@")
}
}
@Test
fun `test operator action with blockwise motion`() {
doTest("<C-V>gx",
doTest(
"<C-V>gx",
"lorem ipsum dolor sit amet",
"blocklorem ipsum dolor sit amet"
) {
executeVimscript("""function! Redact(type)
executeVimscript(
"""function! Redact(type)
| execute "normal i" . a:type
|endfunction
""".trimMargin())
""".trimMargin()
)
enterCommand("noremap gx <Esc>:set opfunc=Redact<CR>gvg@")
}
}
@Test
fun `test operator action with function`() {
doTest("gxe",
doTest(
"gxe",
"lorem ipsum dolor sit amet",
"xxxxx ipsum dolor sit amet"
) {
executeVimscript("""function! Redact(type)
executeVimscript(
"""function! Redact(type)
| execute "normal `[v`]rx"
|endfunction
""".trimMargin())
""".trimMargin()
)
enterCommand("noremap gx :set opfunc=function('Redact')<CR>g@")
}
}
@Test
fun `test operator action throws error with unknown function`() {
doTest("gxe",
doTest(
"gxe",
"lorem ipsum dolor sit amet",
"lorem ipsum dolor sit amet"
) {
@ -110,21 +126,25 @@ class OperatorActionTest : VimTestCase() {
@Test
fun `test operator function with funcref`() {
doTest("gxe",
doTest(
"gxe",
"lorem ipsum dolor sit amet",
"xxxxx ipsum dolor sit amet"
) {
executeVimscript("""function! Redact(type)
executeVimscript(
"""function! Redact(type)
| execute "normal `[v`]rx"
|endfunction
""".trimMargin())
""".trimMargin()
)
enterCommand("noremap gx :set opfunc=funcref('Redact')<CR>g@")
}
}
@Test
fun `test operator action throws error with unknown function ref`() {
doTest("gxe",
doTest(
"gxe",
"lorem ipsum dolor sit amet",
"lorem ipsum dolor sit amet"
) {
@ -140,7 +160,8 @@ class OperatorActionTest : VimTestCase() {
// The map command is properly handled - the `<CR>g@` is correctly understood, and the full lambda is passed to the
// parser, but the parser does not fully handle the text
fun `test operator function with lambda`() {
doTest("gxe",
doTest(
"gxe",
"lorem ipsum dolor sit amet",
"lorem ipsum dolor sit amet"
) {

View File

@ -351,7 +351,8 @@ class RepeatChangeActionTest : VimTestCase() {
@Test
@TestFor(issues = ["VIM-481"])
fun `test dot after overwrite mode`() {
configureByText("""
configureByText(
"""
/**
* @param array ${'$'}arr_footers
* @param array ${'$'}arr_totals_data
@ -361,9 +362,11 @@ class RepeatChangeActionTest : VimTestCase() {
*
* @return array
*/
""".trimIndent())
""".trimIndent()
)
typeText("Rarray<C-[>", "jgell.")
assertState("""
assertState(
"""
/**
* @param array ${'$'}arr_footers
* @param array ${'$'}arr_totals_data
@ -373,6 +376,7 @@ class RepeatChangeActionTest : VimTestCase() {
*
* @return array
*/
""".trimIndent())
""".trimIndent()
)
}
}

View File

@ -41,7 +41,7 @@ class ChangeLineActionTest : VimTestCase() {
Lorem ipsum dolor sit amet,
$c
""".trimIndent(),
Mode.INSERT,
Mode.INSERT,
)
}
@ -59,7 +59,7 @@ Mode.INSERT,
$c
""".trimIndent(),
Mode.INSERT,
Mode.INSERT,
)
}
@ -75,7 +75,7 @@ Mode.INSERT,
Lorem ipsum dolor sit amet,
$c
""".trimIndent(),
Mode.INSERT,
Mode.INSERT,
)
}
@ -93,7 +93,7 @@ Mode.INSERT,
$c
""".trimIndent(),
Mode.INSERT,
Mode.INSERT,
)
}
@ -109,7 +109,7 @@ Mode.INSERT,
$c
consectetur adipiscing elit
""".trimIndent(),
Mode.INSERT,
Mode.INSERT,
)
}
@ -127,7 +127,7 @@ Mode.INSERT,
$c
""".trimIndent(),
Mode.INSERT,
Mode.INSERT,
)
}
@ -145,7 +145,7 @@ Mode.INSERT,
consectetur adipiscing elit
$c
""".trimIndent(),
Mode.INSERT,
Mode.INSERT,
)
}
@ -183,7 +183,7 @@ Mode.INSERT,
that priceless mote now dimpling the convex
and limpid teardrop on a lighted slide.
""".trimIndent(),
Mode.INSERT,
Mode.INSERT,
)
}
}

View File

@ -35,7 +35,7 @@ class ChangeMotionActionTest : VimTestCase() {
"cc",
"foo\n" + "${c}bar\n",
"foo\n${c}" + "\n",
Mode.INSERT,
Mode.INSERT,
)
}
@ -54,7 +54,7 @@ Mode.INSERT,
....${c}
}
""".trimIndent().dotToSpace(),
Mode.INSERT,
Mode.INSERT,
)
}
@ -65,7 +65,7 @@ Mode.INSERT,
"ccbaz",
"${c}foo\n" + "bar\n",
"baz\n" + "bar\n",
Mode.INSERT,
Mode.INSERT,
)
}
@ -83,7 +83,7 @@ Mode.INSERT,
${c}
""".trimIndent(),
Mode.INSERT,
Mode.INSERT,
)
}
@ -93,7 +93,7 @@ Mode.INSERT,
"c_baz",
"${c}foo\n" + "bar\n",
"baz\n" + "bar\n",
Mode.INSERT,
Mode.INSERT,
)
}
@ -104,7 +104,7 @@ Mode.INSERT,
"cw",
"on${c}e two three\n",
"on${c} two three\n",
Mode.INSERT,
Mode.INSERT,
)
}
@ -115,7 +115,7 @@ Mode.INSERT,
"c2w",
"on${c}e two three\n",
"on${c} three\n",
Mode.INSERT,
Mode.INSERT,
)
}
@ -134,7 +134,7 @@ Mode.INSERT,
}
""".trimIndent(),
Mode.INSERT,
Mode.INSERT,
)
}
@ -145,7 +145,7 @@ Mode.INSERT,
"cT(",
"if (condition) ${c}{\n" + "}\n",
"if ({\n" + "}\n",
Mode.INSERT,
Mode.INSERT,
)
}
@ -158,7 +158,7 @@ Mode.INSERT,
"cFc",
"if (condition) {${c}\n" + "}\n",
"if (\n" + "}\n",
Mode.INSERT,
Mode.INSERT,
)
}
@ -169,7 +169,7 @@ Mode.INSERT,
"cw",
"ab.${c}cd\n",
"ab.${c}\n",
Mode.INSERT,
Mode.INSERT,
)
}
@ -180,7 +180,7 @@ Mode.INSERT,
listOf("c", "iw", "baz"),
"foo bar bo${c}o\n",
"foo bar baz\n",
Mode.INSERT,
Mode.INSERT,
)
}
@ -198,12 +198,14 @@ Mode.INSERT,
// VIM-3729
@Test
fun `test change with count applies only to motion when repeated`() {
doTest(listOf("2c3l", "foo<Esc>", "w", "."),
doTest(
listOf("2c3l", "foo<Esc>", "w", "."),
"""
banana banana
""".trimIndent(),
"""
foo foo
""".trimIndent())
""".trimIndent()
)
}
}

View File

@ -42,7 +42,7 @@ class InsertDeletePreviousWordActionTest : VimTestCase() {
"""
I ${c} it in a legendary land
""".trimIndent(),
Mode.INSERT,
Mode.INSERT,
)
}
@ -56,7 +56,7 @@ Mode.INSERT,
"""
I ${c} in a legendary land
""".trimIndent(),
Mode.INSERT,
Mode.INSERT,
)
}
@ -72,7 +72,7 @@ Mode.INSERT,
"""
Lorem Ipsum${c} found it in a legendary land
""".trimIndent(),
Mode.INSERT,
Mode.INSERT,
)
}
@ -102,7 +102,7 @@ Mode.INSERT,
legendary
${c}
""".trimIndent(),
Mode.INSERT,
Mode.INSERT,
)
}
@ -113,7 +113,7 @@ Mode.INSERT,
listOf("a", "<C-W>"),
"this is a sentence<caret>.\n",
"this is a sentence<caret>\n",
Mode.INSERT,
Mode.INSERT,
)
}
@ -124,7 +124,7 @@ Mode.INSERT,
listOf("A", "<C-W>"),
"<caret>this is a sentence\n",
"this is a <caret>\n",
Mode.INSERT,
Mode.INSERT,
)
}
@ -135,7 +135,7 @@ Mode.INSERT,
listOf("A", "<C-W>"),
"<caret>\$variable\n",
"$<caret>\n",
Mode.INSERT,
Mode.INSERT,
)
}

View File

@ -168,7 +168,7 @@ class VisualBlockInsertActionTest : VimTestCase() {
listOf("<C-V>", "lll", "I"),
before.trimIndent(),
before.trimIndent(),
Mode.INSERT,
Mode.INSERT,
)
}
}

View File

@ -34,7 +34,14 @@ class IdeaPutNotificationsTest : VimTestCase() {
val vimEditor = fixture.editor.vim
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), before rangeOf "legendary", SelectionType.CHARACTER_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
before rangeOf "legendary",
SelectionType.CHARACTER_WISE,
false
)
typeText(injector.parser.parseKeys("p"))
val notification = notifications().last()
@ -55,7 +62,14 @@ class IdeaPutNotificationsTest : VimTestCase() {
val vimEditor = fixture.editor.vim
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), before rangeOf "legendary", SelectionType.CHARACTER_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
before rangeOf "legendary",
SelectionType.CHARACTER_WISE,
false
)
typeText(injector.parser.parseKeys("p"))
val notifications = notifications()
@ -74,7 +88,14 @@ class IdeaPutNotificationsTest : VimTestCase() {
val vimEditor = fixture.editor.vim
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), before rangeOf "legendary", SelectionType.CHARACTER_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
before rangeOf "legendary",
SelectionType.CHARACTER_WISE,
false
)
typeText(injector.parser.parseKeys("p"))
val notifications = EventLog.getLogModel(fixture.project).notifications

View File

@ -88,7 +88,14 @@ class PutTestAfterCursorActionTest : VimTestCase() {
val vimEditor = editor.vim
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), before rangeOf "A Discovery\n", SelectionType.LINE_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
before rangeOf "A Discovery\n",
SelectionType.LINE_WISE,
false
)
typeText(injector.parser.parseKeys("p"))
val after = """
A Discovery
@ -161,7 +168,14 @@ class PutTestAfterCursorActionTest : VimTestCase() {
val vimEditor = editor.vim
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), before rangeOf "Discovery", SelectionType.CHARACTER_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
before rangeOf "Discovery",
SelectionType.CHARACTER_WISE,
false
)
typeText(injector.parser.parseKeys("vep"))
val after = """
A Discovery

View File

@ -33,7 +33,14 @@ class PutTextBeforeCursorActionTest : VimTestCase() {
val vimEditor = editor.vim
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), before rangeOf "Discovery", SelectionType.CHARACTER_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
before rangeOf "Discovery",
SelectionType.CHARACTER_WISE,
false
)
typeText(injector.parser.parseKeys("V" + "P"))
typeText(injector.parser.parseKeys("V" + "P"))
val after = """

View File

@ -58,7 +58,14 @@ class PutViaIdeaTest : VimTestCase() {
val vimEditor = fixture.editor.vim
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), before rangeOf "legendary", SelectionType.CHARACTER_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
before rangeOf "legendary",
SelectionType.CHARACTER_WISE,
false
)
typeText("ppp")
val after = "Ilegendarylegendarylegendar${c}y found it in a legendary land"

View File

@ -78,7 +78,14 @@ class PutVisualTextActionTest : VimTestCase() {
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), before rangeOf "legendary", SelectionType.CHARACTER_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
before rangeOf "legendary",
SelectionType.CHARACTER_WISE,
false
)
typeText(injector.parser.parseKeys("ve" + "p"))
val after = "legendar${c}y it in a legendary land"
assertState(after)
@ -94,7 +101,14 @@ class PutVisualTextActionTest : VimTestCase() {
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), before rangeOf "legendary", SelectionType.CHARACTER_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
before rangeOf "legendary",
SelectionType.CHARACTER_WISE,
false
)
typeText(injector.parser.parseKeys("v2e" + "2p"))
val after = "legendarylegendar${c}y in a legendary land"
assertState(after)
@ -110,7 +124,14 @@ class PutVisualTextActionTest : VimTestCase() {
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), before rangeOf "legendary", SelectionType.CHARACTER_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
before rangeOf "legendary",
SelectionType.CHARACTER_WISE,
false
)
typeText(injector.parser.parseKeys("v$" + "2p"))
val after = "legendarylegendar${c}y"
assertState(after)
@ -123,7 +144,7 @@ class PutVisualTextActionTest : VimTestCase() {
configureByText(before)
val vimEditor = fixture.editor.vim
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
injector.registerGroup.storeText(vimEditor, context,'+', "legendary", SelectionType.CHARACTER_WISE)
injector.registerGroup.storeText(vimEditor, context, '+', "legendary", SelectionType.CHARACTER_WISE)
typeText(injector.parser.parseKeys("ve" + "\"+p"))
val after = "legendar${c}y legendar${c}y in a legendar${c}y land"
assertState(after)
@ -136,7 +157,7 @@ class PutVisualTextActionTest : VimTestCase() {
configureByText(before)
val vimEditor = fixture.editor.vim
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
injector.registerGroup.storeText(vimEditor, context,'+', "legendary", SelectionType.CHARACTER_WISE)
injector.registerGroup.storeText(vimEditor, context, '+', "legendary", SelectionType.CHARACTER_WISE)
typeText(injector.parser.parseKeys("ve" + "\"+p"))
val after = "legendar${c}y legendar${c}y in a legendar${c}y land"
assertState(after)
@ -152,7 +173,14 @@ class PutVisualTextActionTest : VimTestCase() {
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), before rangeOf "legendary", SelectionType.CHARACTER_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
before rangeOf "legendary",
SelectionType.CHARACTER_WISE,
false
)
typeText(injector.parser.parseKeys("vb" + "p"))
val after = "I legendar${c}y it in a legendary land"
assertState(after)
@ -177,7 +205,14 @@ class PutVisualTextActionTest : VimTestCase() {
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), before rangeOf "A Discovery\n", SelectionType.LINE_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
before rangeOf "A Discovery\n",
SelectionType.LINE_WISE,
false
)
typeText(injector.parser.parseKeys("ve" + "p"))
val after = """
A Discovery
@ -209,7 +244,14 @@ class PutVisualTextActionTest : VimTestCase() {
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), before rangeOf "A Discovery\n", SelectionType.LINE_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
before rangeOf "A Discovery\n",
SelectionType.LINE_WISE,
false
)
typeText(injector.parser.parseKeys("ve" + "p"))
val after = """
A Discovery
@ -241,7 +283,14 @@ class PutVisualTextActionTest : VimTestCase() {
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), before rangeOf "A Discovery\n", SelectionType.LINE_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
before rangeOf "A Discovery\n",
SelectionType.LINE_WISE,
false
)
typeText(injector.parser.parseKeys("ve" + "p"))
val after = """
A Discovery
@ -273,7 +322,14 @@ class PutVisualTextActionTest : VimTestCase() {
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), before rangeOf "A Discovery\n", SelectionType.LINE_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
before rangeOf "A Discovery\n",
SelectionType.LINE_WISE,
false
)
typeText(injector.parser.parseKeys("v$" + "p"))
val after = """
A Discovery
@ -302,7 +358,7 @@ class PutVisualTextActionTest : VimTestCase() {
configureByText(before)
val vimEditor = fixture.editor.vim
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
injector.registerGroup.storeText(vimEditor, context,'*', "A Discovery\n", SelectionType.LINE_WISE)
injector.registerGroup.storeText(vimEditor, context, '*', "A Discovery\n", SelectionType.LINE_WISE)
typeText(injector.parser.parseKeys("ve" + "\"*p"))
val after = """
A Discovery
@ -335,7 +391,7 @@ class PutVisualTextActionTest : VimTestCase() {
configureByText(before)
val vimEditor = fixture.editor.vim
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
injector.registerGroup.storeText(vimEditor, context,'+', "A Discovery\n", SelectionType.LINE_WISE)
injector.registerGroup.storeText(vimEditor, context, '+', "A Discovery\n", SelectionType.LINE_WISE)
typeText(injector.parser.parseKeys("ve" + "\"+p"))
val after = """
A Discovery
@ -368,7 +424,7 @@ class PutVisualTextActionTest : VimTestCase() {
configureByText(before)
val vimEditor = fixture.editor.vim
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
injector.registerGroup.storeText(vimEditor, context,'+', "A Discovery\n", SelectionType.LINE_WISE)
injector.registerGroup.storeText(vimEditor, context, '+', "A Discovery\n", SelectionType.LINE_WISE)
typeText(injector.parser.parseKeys("ve" + "\"+p"))
val after = """
A Discovery
@ -399,7 +455,7 @@ class PutVisualTextActionTest : VimTestCase() {
configureByText(before)
val vimEditor = fixture.editor.vim
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
injector.registerGroup.storeText(vimEditor, context,'+', "A Discovery\n", SelectionType.LINE_WISE)
injector.registerGroup.storeText(vimEditor, context, '+', "A Discovery\n", SelectionType.LINE_WISE)
typeText(injector.parser.parseKeys("ve" + "\"+p"))
val after = """
A Discovery
@ -430,7 +486,7 @@ class PutVisualTextActionTest : VimTestCase() {
configureByText(before)
val vimEditor = fixture.editor.vim
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
injector.registerGroup.storeText(vimEditor, context,'+', "A Discovery\n", SelectionType.LINE_WISE)
injector.registerGroup.storeText(vimEditor, context, '+', "A Discovery\n", SelectionType.LINE_WISE)
typeText(injector.parser.parseKeys("ve" + "2\"+p"))
val after = """
A Discovery
@ -463,7 +519,7 @@ class PutVisualTextActionTest : VimTestCase() {
configureByText(before)
val vimEditor = fixture.editor.vim
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
injector.registerGroup.storeText(vimEditor, context,'+', "A Discovery\n", SelectionType.LINE_WISE)
injector.registerGroup.storeText(vimEditor, context, '+', "A Discovery\n", SelectionType.LINE_WISE)
typeText(injector.parser.parseKeys("ve" + "2\"+p"))
val after = """
A Discovery
@ -506,7 +562,14 @@ class PutVisualTextActionTest : VimTestCase() {
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), editor.rangeOf("|found|", 2), SelectionType.BLOCK_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
editor.rangeOf("|found|", 2),
SelectionType.BLOCK_WISE,
false
)
typeText(injector.parser.parseKeys("ve" + "p"))
val after = """
A Discovery
@ -546,7 +609,14 @@ class PutVisualTextActionTest : VimTestCase() {
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), editor.rangeOf("|found|", 2), SelectionType.BLOCK_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
editor.rangeOf("|found|", 2),
SelectionType.BLOCK_WISE,
false
)
typeText(injector.parser.parseKeys("ve" + "p"))
val after = """
A Discovery
@ -588,7 +658,14 @@ class PutVisualTextActionTest : VimTestCase() {
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), editor.rangeOf("|found|", 2), SelectionType.BLOCK_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
editor.rangeOf("|found|", 2),
SelectionType.BLOCK_WISE,
false
)
typeText(injector.parser.parseKeys("ve" + "2p"))
val after = """
A Discovery
@ -627,7 +704,7 @@ class PutVisualTextActionTest : VimTestCase() {
configureByText(before)
val vimEditor = fixture.editor.vim
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
injector.registerGroup.storeText(vimEditor, context,'+', "|found|\n|l roc|\n|ere i|", SelectionType.BLOCK_WISE)
injector.registerGroup.storeText(vimEditor, context, '+', "|found|\n|l roc|\n|ere i|", SelectionType.BLOCK_WISE)
// registerService.storeText(editor.vim context,, editor.rangeOf("|found|", 2), SelectionType.BLOCK_WISE, false)
typeText(injector.parser.parseKeys("ve" + "\"+p"))
val after = """
@ -667,7 +744,7 @@ class PutVisualTextActionTest : VimTestCase() {
configureByText(before)
val vimEditor = fixture.editor.vim
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
injector.registerGroup.storeText(vimEditor, context,'+', "|found|\n|l roc|\n|ere i|", SelectionType.BLOCK_WISE)
injector.registerGroup.storeText(vimEditor, context, '+', "|found|\n|l roc|\n|ere i|", SelectionType.BLOCK_WISE)
// registerService.storeText(editor.vim context,, editor.rangeOf("|found|", 2), SelectionType.BLOCK_WISE, false)
typeText(injector.parser.parseKeys("ve" + "\"+p"))
val after = """
@ -707,7 +784,14 @@ class PutVisualTextActionTest : VimTestCase() {
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), before rangeOf "Discovery", SelectionType.CHARACTER_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
before rangeOf "Discovery",
SelectionType.CHARACTER_WISE,
false
)
typeText(injector.parser.parseKeys("V" + "p"))
val after = """
A Discovery
@ -737,7 +821,14 @@ class PutVisualTextActionTest : VimTestCase() {
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), before rangeOf "Discovery", SelectionType.CHARACTER_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
before rangeOf "Discovery",
SelectionType.CHARACTER_WISE,
false
)
typeText(injector.parser.parseKeys("V" + "2p"))
val after = """
A Discovery
@ -778,7 +869,14 @@ class PutVisualTextActionTest : VimTestCase() {
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), before rangeOf "Discovery", SelectionType.CHARACTER_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
before rangeOf "Discovery",
SelectionType.CHARACTER_WISE,
false
)
typeText(injector.parser.parseKeys("V" + "p"))
val after = """
A Discovery
@ -816,7 +914,7 @@ class PutVisualTextActionTest : VimTestCase() {
configureByText(before)
val vimEditor = fixture.editor.vim
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
injector.registerGroup.storeText(vimEditor, context,'*', "Discovery", SelectionType.CHARACTER_WISE)
injector.registerGroup.storeText(vimEditor, context, '*', "Discovery", SelectionType.CHARACTER_WISE)
typeText(injector.parser.parseKeys("V" + "\"*p"))
val after = """
A Discovery
@ -854,7 +952,7 @@ class PutVisualTextActionTest : VimTestCase() {
configureByText(before)
val vimEditor = fixture.editor.vim
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
injector.registerGroup.storeText(vimEditor, context,'+', "Discovery", SelectionType.CHARACTER_WISE)
injector.registerGroup.storeText(vimEditor, context, '+', "Discovery", SelectionType.CHARACTER_WISE)
typeText(injector.parser.parseKeys("V" + "\"+p"))
val after = """
A Discovery
@ -892,7 +990,7 @@ class PutVisualTextActionTest : VimTestCase() {
configureByText(before)
val vimEditor = fixture.editor.vim
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
injector.registerGroup.storeText(vimEditor, context,'+', "Discovery", SelectionType.CHARACTER_WISE)
injector.registerGroup.storeText(vimEditor, context, '+', "Discovery", SelectionType.CHARACTER_WISE)
typeText(injector.parser.parseKeys("V" + "\"+p"))
val after = """
A Discovery
@ -930,7 +1028,7 @@ class PutVisualTextActionTest : VimTestCase() {
configureByText(before)
val vimEditor = fixture.editor.vim
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
injector.registerGroup.storeText(vimEditor, context,'+', "Discovery", SelectionType.CHARACTER_WISE)
injector.registerGroup.storeText(vimEditor, context, '+', "Discovery", SelectionType.CHARACTER_WISE)
typeText(injector.parser.parseKeys("V" + "\"+p"))
val after = """
A Discovery
@ -963,7 +1061,14 @@ class PutVisualTextActionTest : VimTestCase() {
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), before rangeOf "A Discovery\n", SelectionType.LINE_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
before rangeOf "A Discovery\n",
SelectionType.LINE_WISE,
false
)
typeText(injector.parser.parseKeys("V" + "p"))
val after = """
A Discovery
@ -993,7 +1098,14 @@ class PutVisualTextActionTest : VimTestCase() {
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), before rangeOf "A Discovery\n", SelectionType.LINE_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
before rangeOf "A Discovery\n",
SelectionType.LINE_WISE,
false
)
typeText(injector.parser.parseKeys("V" + "2p"))
val after = """
A Discovery
@ -1034,7 +1146,14 @@ class PutVisualTextActionTest : VimTestCase() {
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), before rangeOf "A Discovery\n", SelectionType.LINE_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
before rangeOf "A Discovery\n",
SelectionType.LINE_WISE,
false
)
typeText(injector.parser.parseKeys("V" + "p"))
val after = """
A Discovery
@ -1072,7 +1191,7 @@ class PutVisualTextActionTest : VimTestCase() {
configureByText(before)
val vimEditor = fixture.editor.vim
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
injector.registerGroup.storeText(vimEditor, context,'*', "A Discovery\n", SelectionType.LINE_WISE)
injector.registerGroup.storeText(vimEditor, context, '*', "A Discovery\n", SelectionType.LINE_WISE)
typeText(injector.parser.parseKeys("V" + "\"*p"))
val after = """
A Discovery
@ -1110,7 +1229,7 @@ class PutVisualTextActionTest : VimTestCase() {
configureByText(before)
val vimEditor = fixture.editor.vim
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
injector.registerGroup.storeText(vimEditor, context,'+', "A Discovery\n", SelectionType.LINE_WISE)
injector.registerGroup.storeText(vimEditor, context, '+', "A Discovery\n", SelectionType.LINE_WISE)
typeText(injector.parser.parseKeys("V" + "\"+p"))
val after = """
A Discovery
@ -1148,7 +1267,7 @@ class PutVisualTextActionTest : VimTestCase() {
configureByText(before)
val vimEditor = fixture.editor.vim
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
injector.registerGroup.storeText(vimEditor, context,'+', "A Discovery\n", SelectionType.LINE_WISE)
injector.registerGroup.storeText(vimEditor, context, '+', "A Discovery\n", SelectionType.LINE_WISE)
typeText(injector.parser.parseKeys("V" + "\"+p"))
val after = """
A Discovery
@ -1186,7 +1305,7 @@ class PutVisualTextActionTest : VimTestCase() {
configureByText(before)
val vimEditor = fixture.editor.vim
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
injector.registerGroup.storeText(vimEditor, context,'+', "A Discovery\n", SelectionType.LINE_WISE)
injector.registerGroup.storeText(vimEditor, context, '+', "A Discovery\n", SelectionType.LINE_WISE)
typeText(injector.parser.parseKeys("V" + "\"+p"))
val after = """
A Discovery
@ -1224,7 +1343,14 @@ class PutVisualTextActionTest : VimTestCase() {
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), editor.rangeOf("|found|", 2), SelectionType.BLOCK_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
editor.rangeOf("|found|", 2),
SelectionType.BLOCK_WISE,
false
)
typeText(injector.parser.parseKeys("V" + "p"))
val after = """
A Discovery
@ -1283,7 +1409,14 @@ class PutVisualTextActionTest : VimTestCase() {
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), editor.rangeOf("|found|", 2), SelectionType.BLOCK_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
editor.rangeOf("|found|", 2),
SelectionType.BLOCK_WISE,
false
)
typeText(injector.parser.parseKeys("V" + "p"))
val after = """
A Discovery
@ -1348,7 +1481,14 @@ class PutVisualTextActionTest : VimTestCase() {
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), editor.rangeOf("|found|", 2), SelectionType.BLOCK_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
editor.rangeOf("|found|", 2),
SelectionType.BLOCK_WISE,
false
)
typeText(injector.parser.parseKeys("V" + "2p"))
val after = """
A Discovery
@ -1409,7 +1549,7 @@ class PutVisualTextActionTest : VimTestCase() {
configureByText(before)
val vimEditor = fixture.editor.vim
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
injector.registerGroup.storeText(vimEditor, context,'+', "|found|\n|l roc|\n|ere i|", SelectionType.BLOCK_WISE)
injector.registerGroup.storeText(vimEditor, context, '+', "|found|\n|l roc|\n|ere i|", SelectionType.BLOCK_WISE)
typeText(injector.parser.parseKeys("V" + "\"+p"))
val after = """
A Discovery
@ -1472,7 +1612,7 @@ class PutVisualTextActionTest : VimTestCase() {
configureByText(before)
val vimEditor = fixture.editor.vim
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
injector.registerGroup.storeText(vimEditor, context,'+', "|found|\n|l roc|\n|ere i|", SelectionType.BLOCK_WISE)
injector.registerGroup.storeText(vimEditor, context, '+', "|found|\n|l roc|\n|ere i|", SelectionType.BLOCK_WISE)
typeText(injector.parser.parseKeys("V" + "\"+p"))
val after = """
A Discovery
@ -1532,7 +1672,14 @@ class PutVisualTextActionTest : VimTestCase() {
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), before rangeOf "Discovery", SelectionType.CHARACTER_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
before rangeOf "Discovery",
SelectionType.CHARACTER_WISE,
false
)
typeText(injector.parser.parseKeys("<C-V>2e2j" + "p"))
val after = """
A Discovery
@ -1562,7 +1709,14 @@ class PutVisualTextActionTest : VimTestCase() {
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), before rangeOf "Discovery", SelectionType.CHARACTER_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
before rangeOf "Discovery",
SelectionType.CHARACTER_WISE,
false
)
typeText(injector.parser.parseKeys("<C-V>3e2k" + "p"))
val after = """
A Discovery
@ -1592,7 +1746,14 @@ class PutVisualTextActionTest : VimTestCase() {
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), before rangeOf "Discovery", SelectionType.CHARACTER_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
before rangeOf "Discovery",
SelectionType.CHARACTER_WISE,
false
)
typeText(injector.parser.parseKeys("<C-V>2e2j" + "2p"))
val after = """
A Discovery
@ -1622,7 +1783,14 @@ class PutVisualTextActionTest : VimTestCase() {
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), before rangeOf "Discovery", SelectionType.CHARACTER_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
before rangeOf "Discovery",
SelectionType.CHARACTER_WISE,
false
)
typeText(injector.parser.parseKeys("<C-V>3j$" + "p"))
val after = """
A Discovery
@ -1665,7 +1833,14 @@ class PutVisualTextActionTest : VimTestCase() {
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), before rangeOf "A Discovery\n", SelectionType.LINE_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
before rangeOf "A Discovery\n",
SelectionType.LINE_WISE,
false
)
typeText(injector.parser.parseKeys("<C-V>2e2j" + "p"))
val after = """
A Discovery
@ -1697,7 +1872,14 @@ class PutVisualTextActionTest : VimTestCase() {
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), before rangeOf "A Discovery\n", SelectionType.LINE_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
before rangeOf "A Discovery\n",
SelectionType.LINE_WISE,
false
)
typeText(injector.parser.parseKeys("<C-V>2e2j" + "P"))
val after = """
A Discovery
@ -1740,7 +1922,14 @@ class PutVisualTextActionTest : VimTestCase() {
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), before rangeOf "A Discovery\n", SelectionType.LINE_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
before rangeOf "A Discovery\n",
SelectionType.LINE_WISE,
false
)
typeText(injector.parser.parseKeys("<C-V>2e2j" + "2p"))
val after = """
A Discovery
@ -1784,7 +1973,14 @@ class PutVisualTextActionTest : VimTestCase() {
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), before rangeOf "A Discovery\n", SelectionType.LINE_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
before rangeOf "A Discovery\n",
SelectionType.LINE_WISE,
false
)
typeText(injector.parser.parseKeys("<C-V>2e3j" + "p"))
val after = """
A Discovery
@ -1827,7 +2023,14 @@ class PutVisualTextActionTest : VimTestCase() {
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), before rangeOf "A Discovery\n", SelectionType.LINE_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
before rangeOf "A Discovery\n",
SelectionType.LINE_WISE,
false
)
typeText(injector.parser.parseKeys("<C-V>2j$" + "p"))
val after = """
A Discovery
@ -1866,7 +2069,14 @@ class PutVisualTextActionTest : VimTestCase() {
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), editor.rangeOf("|found|", 2), SelectionType.BLOCK_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
editor.rangeOf("|found|", 2),
SelectionType.BLOCK_WISE,
false
)
typeText(injector.parser.parseKeys("<C-V>2e2j" + "p"))
val after = """
A Discovery
@ -1906,7 +2116,14 @@ class PutVisualTextActionTest : VimTestCase() {
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), editor.rangeOf("|found|", 2), SelectionType.BLOCK_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
editor.rangeOf("|found|", 2),
SelectionType.BLOCK_WISE,
false
)
typeText(injector.parser.parseKeys("<C-V>2e3j" + "p"))
val after = """
A Discovery
@ -1946,7 +2163,14 @@ class PutVisualTextActionTest : VimTestCase() {
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), editor.rangeOf("|found|", 2), SelectionType.BLOCK_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
editor.rangeOf("|found|", 2),
SelectionType.BLOCK_WISE,
false
)
typeText(injector.parser.parseKeys("<C-V>2ej" + "p"))
val after = """
A Discovery
@ -1985,7 +2209,14 @@ class PutVisualTextActionTest : VimTestCase() {
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), editor.rangeOf("|found|", 2), SelectionType.BLOCK_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
editor.rangeOf("|found|", 2),
SelectionType.BLOCK_WISE,
false
)
typeText(injector.parser.parseKeys("<C-V>elj" + "p"))
val after = """
A Discovery
@ -2026,7 +2257,14 @@ class PutVisualTextActionTest : VimTestCase() {
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), editor.rangeOf("|found|", 2), SelectionType.BLOCK_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
editor.rangeOf("|found|", 2),
SelectionType.BLOCK_WISE,
false
)
typeText(injector.parser.parseKeys("<C-V>2j$" + "p"))
val after = """
A Discovery

View File

@ -34,7 +34,14 @@ class PutVisualTextMoveCursorActionTest : VimTestCase() {
val vimEditor = editor.vim
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), TextRange(16, 25), SelectionType.CHARACTER_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
TextRange(16, 25),
SelectionType.CHARACTER_WISE,
false
)
typeText(injector.parser.parseKeys("v2e" + "2gp"))
val after = "legendarylegendary$c in a legendary land"
assertState(after)
@ -48,7 +55,14 @@ class PutVisualTextMoveCursorActionTest : VimTestCase() {
val vimEditor = editor.vim
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), TextRange(16, 25), SelectionType.LINE_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
TextRange(16, 25),
SelectionType.LINE_WISE,
false
)
typeText(injector.parser.parseKeys("v2e" + "gp"))
val after = """
@ -66,7 +80,14 @@ class PutVisualTextMoveCursorActionTest : VimTestCase() {
val vimEditor = editor.vim
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), TextRange(16, 25), SelectionType.CHARACTER_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
TextRange(16, 25),
SelectionType.CHARACTER_WISE,
false
)
typeText(injector.parser.parseKeys("V" + "gp"))
val after = "legendary\n$c"
assertState(after)
@ -95,7 +116,14 @@ class PutVisualTextMoveCursorActionTest : VimTestCase() {
val vimEditor = editor.vim
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), TextRange(2, 11), SelectionType.LINE_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
TextRange(2, 11),
SelectionType.LINE_WISE,
false
)
typeText(injector.parser.parseKeys("V" + "gp"))
assertState(newFile)
}
@ -143,7 +171,14 @@ class PutVisualTextMoveCursorActionTest : VimTestCase() {
val vimEditor = editor.vim
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), TextRange(16, 25), SelectionType.LINE_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
TextRange(16, 25),
SelectionType.LINE_WISE,
false
)
typeText(injector.parser.parseKeys("v2e" + "gP"))
val after = """
@ -161,7 +196,14 @@ class PutVisualTextMoveCursorActionTest : VimTestCase() {
val vimEditor = editor.vim
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), TextRange(16, 25), SelectionType.CHARACTER_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
TextRange(16, 25),
SelectionType.CHARACTER_WISE,
false
)
typeText(injector.parser.parseKeys("v2e" + "2gP"))
val after = "legendarylegendary$c in a legendary land"
assertState(after)
@ -175,7 +217,14 @@ class PutVisualTextMoveCursorActionTest : VimTestCase() {
val vimEditor = editor.vim
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), TextRange(16, 25), SelectionType.CHARACTER_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
TextRange(16, 25),
SelectionType.CHARACTER_WISE,
false
)
typeText(injector.parser.parseKeys("v$" + "2gP"))
val after = "legendarylegendar${c}y"
assertState(after)
@ -189,7 +238,14 @@ class PutVisualTextMoveCursorActionTest : VimTestCase() {
val vimEditor = editor.vim
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), TextRange(16, 25), SelectionType.CHARACTER_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
TextRange(16, 25),
SelectionType.CHARACTER_WISE,
false
)
typeText(injector.parser.parseKeys("V" + "gP"))
val after = "legendary\n$c"
assertState(after)
@ -294,7 +350,14 @@ class PutVisualTextMoveCursorActionTest : VimTestCase() {
val vimEditor = editor.vim
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), TextRange(16, 19), SelectionType.BLOCK_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
TextRange(16, 19),
SelectionType.BLOCK_WISE,
false
)
typeText(injector.parser.parseKeys("<S-v>" + "gp"))
val after = """
${c}fgh
@ -322,7 +385,14 @@ class PutVisualTextMoveCursorActionTest : VimTestCase() {
val vimEditor = editor.vim
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), TextRange(16, 19), SelectionType.LINE_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
TextRange(16, 19),
SelectionType.LINE_WISE,
false
)
typeText(injector.parser.parseKeys("<C-v>" + "h" + "gp"))
val after = """
q
@ -345,7 +415,14 @@ class PutVisualTextMoveCursorActionTest : VimTestCase() {
val vimEditor = editor.vim
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
registerService.storeText(vimEditor, context, vimEditor.primaryCaret(), TextRange(16, 19), SelectionType.CHARACTER_WISE, false)
registerService.storeText(
vimEditor,
context,
vimEditor.primaryCaret(),
TextRange(16, 19),
SelectionType.CHARACTER_WISE,
false
)
typeText(injector.parser.parseKeys("v2e" + "2gp"))
val after = "fghfgh$c fghfgh$c fghfgh$c"
assertState(after)

View File

@ -64,7 +64,12 @@ class YankAndPutTest : VimTestCase() {
)
}
@OptionTest(VimOption(TestOptionConstants.clipboard, limitedValues = [OptionConstants.clipboard_unnamedplus + "," + OptionConstants.clipboard_ideaput]))
@OptionTest(
VimOption(
TestOptionConstants.clipboard,
limitedValues = [OptionConstants.clipboard_unnamedplus + "," + OptionConstants.clipboard_ideaput]
)
)
fun `test yank to number register with unnamedplus and ideaput`() {
val before = """
I ${c}found it in a legendary land
@ -86,7 +91,12 @@ class YankAndPutTest : VimTestCase() {
)
}
@OptionTest(VimOption(TestOptionConstants.clipboard, limitedValues = [OptionConstants.clipboard_unnamed + "," + OptionConstants.clipboard_ideaput]))
@OptionTest(
VimOption(
TestOptionConstants.clipboard,
limitedValues = [OptionConstants.clipboard_unnamed + "," + OptionConstants.clipboard_ideaput]
)
)
@TestWithoutPrimaryClipboard
fun `test yank to number register with unnamed and ideaput`() {
val before = """

View File

@ -28,7 +28,8 @@ class YankMotionActionTest : VimTestCase() {
val vimEditor = fixture.editor.vim
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
val text = registerService.getRegister(vimEditor, context, registerService.lastRegisterChar)?.text ?: kotlin.test.fail()
val text =
registerService.getRegister(vimEditor, context, registerService.lastRegisterChar)?.text ?: kotlin.test.fail()
kotlin.test.assertEquals("and", text)
}
@ -127,7 +128,8 @@ class YankMotionActionTest : VimTestCase() {
val vimEditor = fixture.editor.vim
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
val text = registerService.getRegister(vimEditor, context, registerService.lastRegisterChar)?.text ?: kotlin.test.fail()
val text =
registerService.getRegister(vimEditor, context, registerService.lastRegisterChar)?.text ?: kotlin.test.fail()
kotlin.test.assertEquals("", text)
}
@ -147,7 +149,8 @@ class YankMotionActionTest : VimTestCase() {
val vimEditor = fixture.editor.vim
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
val text = registerService.getRegister(vimEditor, context, registerService.lastRegisterChar)?.text ?: kotlin.test.fail()
val text =
registerService.getRegister(vimEditor, context, registerService.lastRegisterChar)?.text ?: kotlin.test.fail()
kotlin.test.assertEquals("legendary", text)
}
@ -185,7 +188,8 @@ class YankMotionActionTest : VimTestCase() {
val vimEditor = fixture.editor.vim
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
val text = registerService.getRegister(vimEditor, context, registerService.lastRegisterChar)?.text ?: kotlin.test.fail()
val text =
registerService.getRegister(vimEditor, context, registerService.lastRegisterChar)?.text ?: kotlin.test.fail()
kotlin.test.assertEquals("hard by the torrent of a mountain pass.\n", text)
}

View File

@ -38,7 +38,8 @@ class YankVisualLinesActionTest : VimTestCase() {
val vimEditor = fixture.editor.vim
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
val savedText = registerService.getRegister(vimEditor, context, registerService.lastRegisterChar)?.text ?: kotlin.test.fail()
val savedText =
registerService.getRegister(vimEditor, context, registerService.lastRegisterChar)?.text ?: kotlin.test.fail()
kotlin.test.assertEquals(yankedTest, savedText)
}
@ -69,7 +70,8 @@ class YankVisualLinesActionTest : VimTestCase() {
val vimEditor = fixture.editor.vim
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
val savedText = registerService.getRegister(vimEditor, context, registerService.lastRegisterChar)?.text ?: kotlin.test.fail()
val savedText =
registerService.getRegister(vimEditor, context, registerService.lastRegisterChar)?.text ?: kotlin.test.fail()
kotlin.test.assertEquals(yankedTest, savedText)
}
@ -93,7 +95,8 @@ class YankVisualLinesActionTest : VimTestCase() {
val vimEditor = fixture.editor.vim
val context = injector.executionContextManager.getEditorExecutionContext(vimEditor)
val registerService = injector.registerGroup
val savedText = registerService.getRegister(vimEditor, context, registerService.lastRegisterChar)?.text ?: kotlin.test.fail()
val savedText =
registerService.getRegister(vimEditor, context, registerService.lastRegisterChar)?.text ?: kotlin.test.fail()
kotlin.test.assertEquals(yankedTest, savedText)
}
}

View File

@ -30,7 +30,7 @@ class MotionSentenceNextStartActionTest : VimTestCase() {
Cras id tellus in
""".trimIndent(),
Mode.INSERT,
Mode.INSERT,
)
}
}

View File

@ -146,7 +146,7 @@ class MotionDownActionTest : VimTestCase() {
wh|ere it was settled on some sodden sand[additional Chars]
hard by the torrent of a mountain pass.
""".trimIndent()
val after = """
"""
A Discovery
I |${s}found it in a legendary lan${c}d${se}
@ -172,7 +172,7 @@ class MotionDownActionTest : VimTestCase() {
wh|ere it was settled on some sodden sand[additional Chars]
hard by the torrent of a mountain pass.
""".trimIndent()
val after = """
"""
A Discovery
I |${s}found it in a legendary lan${c}d${se}

View File

@ -343,24 +343,32 @@ class MotionPercentOrMatchActionTest : VimTestCase() {
@Test
@TestFor(issues = ["VIM-3294"])
fun `test matching with braces inside of string`() {
configureByText("""
configureByText(
"""
$c("("")")
""".trimIndent())
""".trimIndent()
)
typeText("%")
assertState("""
assertState(
"""
("("")"$c)
""".trimIndent())
""".trimIndent()
)
}
@Test
@TestFor(issues = ["VIM-3294"])
fun `test matching with braces inside of string 2`() {
configureByText("""
configureByText(
"""
("("")"$c)
""".trimIndent())
""".trimIndent()
)
typeText("%")
assertState("""
assertState(
"""
$c("("")")
""".trimIndent())
""".trimIndent()
)
}
}

View File

@ -23,7 +23,7 @@ zl Move the view on the text [count] characters to the
class ScrollColumnLeftActionTest : VimTestCase() {
@TestWithoutNeovim(SkipNeovimReason.DIFFERENT)
@Test
fun`test scrolls column to left`() {
fun `test scrolls column to left`() {
configureByColumns(200)
typeText("100|", "zl")
assertPosition(0, 99)
@ -32,7 +32,7 @@ class ScrollColumnLeftActionTest : VimTestCase() {
@TestWithoutNeovim(SkipNeovimReason.DIFFERENT)
@Test
fun`test scrolls column to left with zRight`() {
fun `test scrolls column to left with zRight`() {
configureByColumns(200)
typeText("100|", "z<Right>")
assertPosition(0, 99)
@ -41,7 +41,7 @@ class ScrollColumnLeftActionTest : VimTestCase() {
@TestWithoutNeovim(SkipNeovimReason.DIFFERENT)
@Test
fun`test scroll first column to left moves cursor`() {
fun `test scroll first column to left moves cursor`() {
configureByColumns(200)
typeText("100|", "zs", "zl")
assertPosition(0, 100)
@ -50,7 +50,7 @@ class ScrollColumnLeftActionTest : VimTestCase() {
@TestWithoutNeovim(SkipNeovimReason.DIFFERENT)
@Test
fun`test scrolls count columns to left`() {
fun `test scrolls count columns to left`() {
configureByColumns(200)
typeText("100|", "10zl")
assertPosition(0, 99)
@ -59,7 +59,7 @@ class ScrollColumnLeftActionTest : VimTestCase() {
@TestWithoutNeovim(SkipNeovimReason.DIFFERENT)
@Test
fun`test scrolls count columns to left with zRight`() {
fun `test scrolls count columns to left with zRight`() {
configureByColumns(200)
typeText("100|", "10z<Right>")
assertPosition(0, 99)
@ -68,7 +68,7 @@ class ScrollColumnLeftActionTest : VimTestCase() {
@TestWithoutNeovim(SkipNeovimReason.DIFFERENT)
@Test
fun`test scrolls column to left with sidescrolloff moves cursor`() {
fun `test scrolls column to left with sidescrolloff moves cursor`() {
configureByColumns(200)
enterCommand("set sidescrolloff=10")
typeText("100|", "zs", "zl")
@ -78,7 +78,7 @@ class ScrollColumnLeftActionTest : VimTestCase() {
@TestWithoutNeovim(SkipNeovimReason.DIFFERENT)
@Test
fun`test scroll column to left ignores sidescroll`() {
fun `test scroll column to left ignores sidescroll`() {
configureByColumns(200)
enterCommand("set sidescroll=10")
typeText("100|")
@ -95,7 +95,7 @@ class ScrollColumnLeftActionTest : VimTestCase() {
@TestWithoutNeovim(SkipNeovimReason.DIFFERENT)
@Test
fun`test scroll column to left on last page enters virtual space`() {
fun `test scroll column to left on last page enters virtual space`() {
configureByColumns(200)
typeText("200|", "ze", "zl")
assertPosition(0, 199)
@ -111,7 +111,7 @@ class ScrollColumnLeftActionTest : VimTestCase() {
@VimBehaviorDiffers(description = "Vim has virtual space at end of line")
@TestWithoutNeovim(SkipNeovimReason.DIFFERENT)
@Test
fun`test scroll columns to left on last page does not have full virtual space`() {
fun `test scroll columns to left on last page does not have full virtual space`() {
configureByColumns(200)
typeText("200|", "ze", "50zl")
assertPosition(0, 199)
@ -122,7 +122,7 @@ class ScrollColumnLeftActionTest : VimTestCase() {
@TestWithoutNeovim(SkipNeovimReason.DIFFERENT)
@Test
fun`test scroll column to left correctly scrolls inline inlay associated with preceding text`() {
fun `test scroll column to left correctly scrolls inline inlay associated with preceding text`() {
configureByColumns(200)
addInlay(67, true, 5)
typeText("100|")
@ -136,7 +136,7 @@ class ScrollColumnLeftActionTest : VimTestCase() {
@TestWithoutNeovim(SkipNeovimReason.DIFFERENT)
@Test
fun`test scroll column to left correctly scrolls inline inlay associated with following text`() {
fun `test scroll column to left correctly scrolls inline inlay associated with following text`() {
configureByColumns(200)
addInlay(67, false, 5)
typeText("100|")

View File

@ -23,7 +23,7 @@ zh Move the view on the text [count] characters to the
class ScrollColumnRightActionTest : VimTestCase() {
@TestWithoutNeovim(SkipNeovimReason.SCROLL)
@Test
fun`test scrolls column to right`() {
fun `test scrolls column to right`() {
configureByColumns(200)
typeText("100|", "zh")
assertPosition(0, 99)
@ -32,7 +32,7 @@ class ScrollColumnRightActionTest : VimTestCase() {
@TestWithoutNeovim(SkipNeovimReason.SCROLL)
@Test
fun`test scrolls column to right with zLeft`() {
fun `test scrolls column to right with zLeft`() {
configureByColumns(200)
typeText("100|", "z<Left>")
assertPosition(0, 99)
@ -42,7 +42,7 @@ class ScrollColumnRightActionTest : VimTestCase() {
@VimBehaviorDiffers(description = "Vim has virtual space at the end of line. IdeaVim will scroll up to length of longest line")
@TestWithoutNeovim(SkipNeovimReason.SCROLL)
@Test
fun`test scroll last column to right moves cursor 1`() {
fun `test scroll last column to right moves cursor 1`() {
configureByColumns(200)
typeText("$")
// Assert we got initial scroll correct
@ -57,7 +57,7 @@ class ScrollColumnRightActionTest : VimTestCase() {
@VimBehaviorDiffers(description = "Vim has virtual space at the end of line. IdeaVim will scroll up to length of longest line")
@TestWithoutNeovim(SkipNeovimReason.SCROLL)
@Test
fun`test scroll last column to right moves cursor 2`() {
fun `test scroll last column to right moves cursor 2`() {
configureByText(
buildString {
repeat(300) { append("0") }
@ -79,7 +79,7 @@ class ScrollColumnRightActionTest : VimTestCase() {
@TestWithoutNeovim(SkipNeovimReason.SCROLL)
@Test
fun`test scrolls count columns to right`() {
fun `test scrolls count columns to right`() {
configureByColumns(200)
typeText("100|", "10zh")
assertPosition(0, 99)
@ -88,7 +88,7 @@ class ScrollColumnRightActionTest : VimTestCase() {
@TestWithoutNeovim(SkipNeovimReason.SCROLL)
@Test
fun`test scrolls count columns to right with zLeft`() {
fun `test scrolls count columns to right with zLeft`() {
configureByColumns(200)
typeText("100|", "10z<Left>")
assertPosition(0, 99)
@ -97,7 +97,7 @@ class ScrollColumnRightActionTest : VimTestCase() {
@TestWithoutNeovim(SkipNeovimReason.SCROLL)
@Test
fun`test scrolls column to right with sidescrolloff moves cursor`() {
fun `test scrolls column to right with sidescrolloff moves cursor`() {
configureByColumns(200)
enterCommand("set sidescrolloff=10")
typeText("100|", "ze", "zh")
@ -107,7 +107,7 @@ class ScrollColumnRightActionTest : VimTestCase() {
@TestWithoutNeovim(SkipNeovimReason.SCROLL)
@Test
fun`test scroll column to right ignores sidescroll`() {
fun `test scroll column to right ignores sidescroll`() {
configureByColumns(200)
enterCommand("set sidescroll=10")
typeText("100|")
@ -123,7 +123,7 @@ class ScrollColumnRightActionTest : VimTestCase() {
@TestWithoutNeovim(SkipNeovimReason.SCROLL)
@Test
fun`test scroll column to right on first page does nothing`() {
fun `test scroll column to right on first page does nothing`() {
configureByColumns(200)
typeText("10|", "zh")
assertPosition(0, 9)
@ -132,7 +132,7 @@ class ScrollColumnRightActionTest : VimTestCase() {
@TestWithoutNeovim(SkipNeovimReason.SCROLL)
@Test
fun`test scroll column to right correctly scrolls inline inlay associated with preceding text`() {
fun `test scroll column to right correctly scrolls inline inlay associated with preceding text`() {
configureByColumns(200)
addInlay(130, true, 5)
typeText("100|")
@ -148,7 +148,7 @@ class ScrollColumnRightActionTest : VimTestCase() {
@TestWithoutNeovim(SkipNeovimReason.SCROLL)
@Test
fun`test scroll column to right correctly scrolls inline inlay associated with following text`() {
fun `test scroll column to right correctly scrolls inline inlay associated with following text`() {
configureByColumns(200)
addInlay(130, false, 5)
typeText("100|")
@ -164,7 +164,7 @@ class ScrollColumnRightActionTest : VimTestCase() {
@TestWithoutNeovim(SkipNeovimReason.SCROLL)
@Test
fun`test scroll column to right with preceding inline inlay moves cursor at end of screen`() {
fun `test scroll column to right with preceding inline inlay moves cursor at end of screen`() {
configureByColumns(200)
addInlay(90, false, 5)
typeText("100|", "ze", "zh")

View File

@ -19,20 +19,24 @@ class CallCommandTest : VimTestCase() {
d
endfunction
""".trimIndent()
configureByText("""
configureByText(
"""
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas efficitur nec odio vel malesuada.
Nunc tincidunt viverra ligula non ${c}scelerisque. Aliquam erat volutpat. Praesent in fermentum orci.
Fusce sit amet mi ut purus volutpat vulputate vitae sed tortor. Aliquam felis neque, varius eu
accumsan vitae, facilisis ac nulla.
""".trimIndent())
""".trimIndent()
)
executeVimscript(function)
enterCommand("call DeleteLine()")
assertState("""
assertState(
"""
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas efficitur nec odio vel malesuada.
${c}Fusce sit amet mi ut purus volutpat vulputate vitae sed tortor. Aliquam felis neque, varius eu
accumsan vitae, facilisis ac nulla.
""".trimIndent())
""".trimIndent()
)
}
}

View File

@ -92,9 +92,11 @@ class ClearJumpsCommandTest : VimTestCase() {
enterCommand("clearju")
enterCommand("jumps")
assertExOutput("""
assertExOutput(
"""
| jump line col file/text
|>
""".trimMargin())
""".trimMargin()
)
}
}

View File

@ -16,20 +16,24 @@ import org.junit.jupiter.api.Test
class CopyCommandTest : VimTestCase() {
@Test
fun `test duplicate line below`() {
configureByText("""
configureByText(
"""
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas efficitur nec odio vel malesuada.
Nunc tincidunt viverra ligula non ${c}scelerisque. Aliquam erat volutpat. Praesent in fermentum orci.
Fusce sit amet mi ut purus volutpat vulputate vitae sed tortor. Aliquam felis neque, varius eu
accumsan vitae, facilisis ac nulla.
""".trimIndent())
""".trimIndent()
)
enterCommand("copy .")
assertState("""
assertState(
"""
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas efficitur nec odio vel malesuada.
Nunc tincidunt viverra ligula non scelerisque. Aliquam erat volutpat. Praesent in fermentum orci.
${c}Nunc tincidunt viverra ligula non scelerisque. Aliquam erat volutpat. Praesent in fermentum orci.
Fusce sit amet mi ut purus volutpat vulputate vitae sed tortor. Aliquam felis neque, varius eu
accumsan vitae, facilisis ac nulla.
""".trimIndent())
""".trimIndent()
)
}
@VimBehaviorDiffers(

Some files were not shown because too many files have changed in this diff Show More