Commit Graph
9697 Commits
Author SHA1 Message Date
Alex Plate 747e4053ba Update codebase maintenance workflow to skip PR creation when no changes are made
Previously the workflow instructed Claude to always create a PR even when no
issues were found. This resulted in unnecessary PRs documenting inspections
where no changes were needed.

Now the workflow only creates PRs when actual changes are made to the codebase.
2025-10-09 13:10:41 +02:00
Alex Plate 448c19af47 Fix SortCommand to use caret selection instead of editor selection model
The SortCommand was incorrectly using editor.getSelectionModel() which
returns the editor's global selection model. This is problematic in
multi-caret scenarios where each caret has its own independent selection.

Changed to use caret.hasSelection(), caret.selectionStart, and
caret.selectionEnd directly, which correctly handles per-caret selections.

This also removes the only meaningful usage of VimEditor.getSelectionModel()
in vim-engine, making that interface a candidate for removal in future
cleanup.
2025-10-09 13:09:38 +02:00
Alex Plate f0edc797dc Add codebase maintenance workflow
This workflow enables automated codebase maintenance by randomly selecting
and inspecting parts of the codebase for quality issues, bugs, and
improvements.

Key features:
- Random file/area selection for inspection
- Comprehensive code review guidelines (style, quality, bugs, architecture)
- Focus on genuine improvements, not pedantic changes
- Always creates PR to document inspection results
- Runs weekly on Mondays, can be triggered manually

The maintenance instructions cover:
- What to check: code style, null safety, test coverage, IdeaVim-specific issues
- When to make changes vs document issues
- Commit best practices (split complex changes into multiple commits)
- IdeaVim-specific considerations (enablement checks, Vim compatibility)
2025-10-09 13:04:55 +02:00
Alex Plate bdc29c3eb4 Add support for count(), index(), min(), max(), and range() vimscript functions
Implements five new vimscript list functions:
- count(): counts occurrences of a value in a list/dict
- index(): finds first index of a value in a list
- min()/max(): finds minimum/maximum value in a list/dict
- range(): generates a list of numbers with optional stride

Includes error handling for edge cases like zero stride and invalid ranges.
2025-10-03 20:59:29 +03:00
Alex Plate d46eb39635 Add support for repeat(), char2nr(), nr2char(), trim(), and reverse() vimscript functions
Implement five commonly used vimscript functions:

- repeat(expr, count): Repeats strings or lists multiple times
- char2nr(char): Converts character to Unicode code point
- nr2char(number): Converts code point to character
- trim(text, [mask], [dir]): Trims whitespace or custom characters
- reverse(object): Reverses lists in-place or returns reversed string

All functions include comprehensive test coverage and follow vim's
official behavior including edge cases.
2025-10-03 19:08:57 +03:00
Alex Plate a6c71d90bb Fix(VIM-4050): Implement getline vim function 2025-10-03 18:41:34 +03:00
Alex Plate 62de460264 Execute the processor with a proper mode after closing the exEntryPanel
Now, the inputProcessor will be called after all closing is finished. This includes the mode that won't be CMD_LINE anymore, but the one that was used before entering CMD_LINE
2025-10-03 15:33:27 +03:00
Alex Plate 2d02327665 Rename method to get the panel
Kotlin has some hard incremental compilation issues when keeping the old name. No other reason for the rename
2025-10-03 15:32:53 +03:00
Alex Plate 91b5a705d4 Fix issues with null variables during swing initialization 2025-10-03 15:16:04 +03:00
Alex Plate b7c3bc2875 Migrate ExOutputPanel from Java to Kotlin and update related references 2025-10-03 13:30:20 +03:00
Alex Plate 70922f5fc5 Rename .java to .kt 2025-10-03 13:30:19 +03:00
Alex Plate 13e4d0ce2b Migrate ExTextField from Java to Kotlin and update related references 2025-10-03 13:30:19 +03:00
Alex Plate 3990b6475e Rename .java to .kt 2025-10-03 13:30:19 +03:00
Alex Plate 63c65c8b93 Migrate ExEntryPanel from Java to Kotlin and update related references 2025-10-03 13:30:19 +03:00
Alex Plate ba2ffa6955 Rename .java to .kt 2025-10-03 13:30:19 +03:00
Alex Plate 411b6eaf48 Refactor ExDocument: Migrate from Java to Kotlin 2025-10-03 13:30:18 +03:00
Alex Plate b5ecb05382 Rename .java to .kt 2025-10-03 13:30:18 +03:00
IdeaVim Bot a5e4b8515d Add magidc, magidc to contributors list 2025-10-03 09:01:54 +00:00
Alex Plate 330f24bf74 Update JUnit to version 6 and improve null safety in test utilities 2025-10-02 18:04:30 +03:00
Alex Plate 36dfce695a Fix the compatibility with the latest idea EAP 2025-10-02 17:55:55 +03:00
Matt EllisandAlex Plãte 6defddd24c Extract variable expression assignment 2025-10-02 17:26:38 +03:00
Matt EllisandAlex Plãte a916b4de9c Rename Variable to VariableExpression 2025-10-02 17:26:38 +03:00
Matt EllisandAlex Plãte 8a0bdfd18f Improve sublist expression compatibility 2025-10-02 17:26:38 +03:00
Matt EllisandAlex Plãte 3eb0ac9207 Remove tests for indexed expressions 2025-10-02 17:26:38 +03:00
Matt EllisandAlex Plãte d71b99b8d5 Update SublistExpressionTest.kt 2025-10-02 17:26:38 +03:00
Matt EllisandAlex Plãte db8736dcf4 Extract sublist expression assignment 2025-10-02 17:26:38 +03:00
Matt EllisandAlex Plãte 4c3cefc1e6 Add typename for reporting purposes 2025-10-02 17:26:38 +03:00
Matt EllisandAlex Plãte b11fc4895b Support assigning to negative index 2025-10-02 17:26:38 +03:00
Matt EllisandAlex Plãte b7ce946af3 Extract sublist expression assignment
Also allows whitespace inside indexed expression
2025-10-02 17:26:38 +03:00
Matt EllisandAlex Plãte 5a45f6d945 Improve evaluating indexed expressions
Support negative indexes, float indexes, and indexing numbers
2025-10-02 17:26:38 +03:00
Matt EllisandAlex Plãte 6622f15ea3 Allow dictionary to be indexed by Float 2025-10-02 17:26:38 +03:00
Matt EllisandAlex Plãte fd1fe51633 Extract indexed expression assignment 2025-10-02 17:26:38 +03:00
Matt EllisandAlex Plãte 91459edf6c Rename OneElementSublistExpression 2025-10-02 17:26:38 +03:00
Matt EllisandAlex Plãte 01d92acd40 Improve validation for concatenation 2025-10-02 17:26:38 +03:00
Matt EllisandAlex Plãte 6d18288883 Fix validation for modulo operator 2025-10-02 17:26:38 +03:00
Matt EllisandAlex Plãte 7ffca59450 Support double-dot concatenation assignment 2025-10-02 17:26:38 +03:00
Matt EllisandAlex Plãte 61df4f342d Support Float in concatenation handler
Surprisingly Float is converted to String, and then concatenated. But this is only supported for the binary concatenation operator, not the compound assignment concatenation operator. This lead to improved validation and behaviour closer to Vim.
2025-10-02 17:26:38 +03:00
Matt EllisandAlex Plãte cb1c0298ff Improve exception handling in tests 2025-10-02 17:26:38 +03:00
Matt EllisandAlex Plãte 56d5af6bc9 Allow assigning Float to Register 2025-10-02 17:26:38 +03:00
Matt EllisandAlex Plãte 1dbe3e4aa1 Update RegisterExpression to assign value 2025-10-02 17:26:38 +03:00
Matt EllisandAlex Plãte 7256731572 Rename Register to RegisterExpression 2025-10-02 17:26:38 +03:00
Matt EllisandAlex Plãte dc5b45a52d Update OptionExpression to match Vim behaviour 2025-10-02 17:26:38 +03:00
Matt EllisandAlex Plãte 063317b0c9 Introduce LValueExpression, update OptionExpression 2025-10-02 17:26:38 +03:00
Matt EllisandAlex Plãte 37b6768148 Rename LetCommand.variable to lvalue 2025-10-02 17:26:38 +03:00
Matt EllisandAlex Plãte 5ce2887391 Extract and add tests for sublist expressions 2025-10-02 17:26:38 +03:00
Matt EllisandAlex Plãte 4ab91150d6 Extract and add tests for indexed expressions 2025-10-02 17:26:38 +03:00
Matt EllisandAlex Plãte 9ddd074916 Extract tests for let command with register lvalue 2025-10-02 17:26:38 +03:00
Matt EllisandAlex Plãte a321bb28c0 Extract tests for let command with option lvalue 2025-10-02 17:26:38 +03:00
Matt EllisandAlex Plãte 8c9df332aa Add tests for let command with variable lvalue 2025-10-02 17:26:38 +03:00
Matt EllisandAlex Plãte 356a748181 Add tests for let command operators 2025-10-02 17:26:38 +03:00