Print "NEOVIM TESTING ENABLED" message when running tests with -Dnvim
flag so AI can verify Neovim testing is actually active.
Also fix skill documentation to use correct -Dnvim flag.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Similar to DIFFERENT, UNCLEAR is too vague and should be replaced
with a more specific reason after investigation.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Change `test negative lookbehind regression` to use IDEAVIM_API_USED
(test uses internal search() helper that calls VimPlugin API directly)
- Remove outdated TestWithoutNeovim annotations from 5 tests that now
pass with Neovim: smartcase/ignorecase search tests
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add a new package for functions that apply to both List and Dictionary, as well as some String functions (where a String is treated like a collection of characters). Trying to group some functions that shouldn't just sit at top level
Vim lists call() as part of List functions. We document it the same way so we can cross-reference, but it's not really a List function, so it's implemented with varFunctions
VimFuncref is no longer mutable, since the instance can be shared between variables. A dictionary function must be invoked with a Funcref that captures the dictionary; when accessing a dictionary entry that is a function, the returned value is a newly created partial function that captures the dictionary. This helps fix some issues when printing a dictionary and/or dictionary function with `echo`, including a stack overflow.
Replace UNCLEAR annotations with a properly documented reason explaining why backspace and other special keys fail in Neovim RPC testing. This makes the limitation clear for future developers and consolidates 8 tests under a single, well-explained reason.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Fixes repeatedly calling repaint while trying to paint the caret. This is due to a combination of the modelToView translation returning a location instead of a bounding box (the width can be zero) and a check that one rectangle contains another returning false when one rectangle has a width of zero.
Also fixes the caret not redrawing properly while flashing when first shown. This is due to the width and height not being properly initialised.
- Use `INTELLIJ_PLATFORM_INHERITED_DIFFERENCE` for skip reasons where IntelliJ Platform constraints lead to behavioral differences with Neovim.
- Introduce `@VimBehaviorDiffers` for reverse search test, providing a detailed description of the behavior and marking it for investigation.
- Implement comprehensive marks verification checking local (a-z),
global (A-Z), numbered (0-9), and special marks (<>'^")
- Add ignoredMarks configuration to allow test-specific exclusions
- Exclude '[' and ']' (change marks) from verification due to
VIM-4107: undo behavior differs between IdeaVim and Neovim
- Add test documenting the change marks undo behavior difference
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Introduces SEE_DESCRIPTION as a catch-all SkipNeovimReason for
case-specific differences that don't fit standard categories. This
reason requires a mandatory description parameter explaining why
the test cannot be compared with Neovim.
Removes the PLUG reason and replaces its only usage in testPlugMapping
with SEE_DESCRIPTION, explaining that Neovim represents <Plug> as a
single character, causing map state comparison failures.
Updates tests-maintenance skill documentation to reflect the new reason
and its usage guidelines.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
The test verifies behavior where deleting all lines results in an empty
buffer in IdeaVim, while Neovim always maintains at least one newline
character. This difference is inherited from the IntelliJ Platform's
editor implementation, which allows completely empty editors.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This skip reason is for cases where IdeaVim behavior differs from Neovim due
to constraints or design decisions inherited from the IntelliJ Platform.
Examples include:
- Empty buffer handling: Platform editors can be empty while Neovim buffers
always contain at least one newline character
- Position/offset calculations for newline characters
- Line/column indexing differences
The description parameter is mandatory and must explain what Platform behavior
causes the difference and how it manifests in the test.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>