Commit Graph

122 Commits (77a74feb2420fb25544d2145f8e4d75e9697b976)

Author SHA1 Message Date
Nik Revenco 77a74feb24 feat: solve merge conflicts and make tests more modular 2025-05-14 18:33:05 +01:00
Nik Revenco d0ca96c566 Merge branch 'master' into determine-comment-tokens 2025-05-14 17:07:54 +01:00
Nikita Revenco 4c5ceb5bed test: add test for continuing comment in injection layers 2025-03-25 14:41:27 +00:00
Nikita Revenco 99d16170dc fix: commenting full lines 2025-03-25 14:41:27 +00:00
Nikita Revenco 3714fc0cee chore: remove unused imports 2025-03-25 14:41:27 +00:00
Nikita Revenco c22eba38d5 chore: move all comment integration tests into a separate module 2025-03-25 14:41:27 +00:00
Nikita Revenco 570911e589 fix: many single width selections panic 2025-03-25 14:41:27 +00:00
Nikita Revenco bbd7cb7bfb fix: incorrect order of index additions 2025-03-25 14:41:27 +00:00
Nikita Revenco 76b3e6778d chore: remove log statement 2025-03-25 14:41:27 +00:00
Nikita Revenco 31e2f739ee fix: panic as no ranges were inserted 2025-03-25 14:41:27 +00:00
Nikita Revenco b94d3a70e7 fix: multiple selections having incorrect range and not properly accounting for comment tokens 2025-03-25 14:41:27 +00:00
Nikita Revenco 621dec74be test: write more tests for toggle comment, and add tests for toggle block comment 2025-03-25 14:41:27 +00:00
Nikita Revenco 7c24110061 feat: add integration tests for commenting through injection layers 2025-03-25 14:41:27 +00:00
Michael Davis b38eae1f98
minor: Fix native line-ending handling in trimming integration tests 2025-03-10 11:09:46 -04:00
Michael Davis 67879a1e5b
Avoid inserting final newlines in empty files
This matches the behavior described by the EditorConfig spec for its
`insert_final_newline` option:

> Editors must not insert newlines in empty files when saving those
> files, even if `insert_final_newline = true`.

Co-authored-by: Axlefublr <101342105+Axlefublr@users.noreply.github.com>
2025-03-10 10:38:11 -04:00
Michael Davis aa20eb8e7f
Add config for trimming trailing whitespace and newlines on write
These match the equivalent options in VSCode. `trim_trailing_whitespace`
is also the name used by EditorConfig.

* `trim-final-newlines` trims any extra line endings after the final one
* `trim-trailing-whitespace` trims any trailing whitespace (but not
  empty lines)
2025-03-10 10:18:55 -04:00
Alexander Brassel 82f8ac208f
Improve %% escaping error message (#13018) 2025-03-04 10:03:11 -06:00
Michael Davis 0efa8207d8
Rewrite command line parsing, add flags and expansions (#12527)
Co-authored-by: Pascal Kuthe <pascalkuthe@pm.me>
2025-02-26 19:50:15 -06:00
renshyle 80dbe030a1
Do not record keys pressed by macros while recording a macro (#12733)
Co-authored-by: Michael Davis <mcarsondavis@gmail.com>
2025-01-30 18:14:04 -06:00
Nikita Revenco 168b11e091
feat: passing multile of the same files in the arguments places a cursor at each position (#12192)
Co-authored-by: Nikita Revenco <154856872+NikitaRevenco@users.noreply.github.com>
Co-authored-by: Michael Davis <mcarsondavis@gmail.com>
2025-01-23 14:04:02 -06:00
Michael Davis ccdb710431
minor: Rename '*' at eof integration test to be more specific 2025-01-21 09:08:36 -05:00
Nikita Revenco ba4793fca0
fix: panic when pressing `*` after the end of the file (#12611)
* fix: panic when pressing `*` at the end of the file

chore: remove incorrect additions

* docs: add info comment

* test: add new syntax to add a selection at the final character

* test: `*` panics when after the last char

* test: move into a more appopriate module

* test: fix failing

* test: account for Windows test suite

* test: choose a different strategy for custom syntax

* test: do not modify the syntax

* style: remove newline

---------

Co-authored-by: Nikita Revenco <154856872+NikitaRevenco@users.noreply.github.com>
2025-01-21 16:05:15 +09:00
Nikita Revenco 076d8bd173
fix: surprising behaviour when changing line above a comment (#12575)
Co-authored-by: Nikita Revenco <154856872+NikitaRevenco@users.noreply.github.com>
2025-01-17 15:29:39 -06:00
Michael Davis 4bd17e542e
Fix offset tracking in `insert_newline`
#12177 changed `insert_newline`'s behavior to trim any trailing
whitespace on a line which came before a cursor. `insert_newline` would
previously never delete text. Even the whitespace stripping behavior in
#4854 worked by inserting text - a line ending at the beginning of the
line. `global_offs`, a variable that tracks the number of characters
inserted between iterations over the existing selection ranges, was not
updated to also account for text deleted by the trimming behavior,
causing cursors to be offset by the amount of trailing space deleted
and causing panics in some cases.

To fix this we need to subtract the number of trimmed whitespace
characters from `global_offs`. `global_offs` must become an `isize`
(was a `usize`) because it may become negative in cases where a lot of
trailing whitespace is trimmed. Integration tests have been added for
each of these cases.

Fixes #12461
Fixes #12495
Fixes #12539
2025-01-15 10:36:29 -05:00
TornaxO7 60bff8feee
Fix `open_{below, above}` behaviour with multiple cursors (#12465) 2025-01-13 08:14:30 -06:00
rhogenson 931dd9c1dc
Fix a typo in join_selections (#12452)
Co-authored-by: Rose Hogenson <rosehogenson@posteo.net>
2025-01-08 08:42:41 -06:00
TornaxO7 89a7cde2f0
Fix continuing comment token for first line (#12215) 2024-12-10 13:24:34 -06:00
Michael Davis fd3e889927 Add integration tests for line comment continuation 2024-12-05 20:53:53 +09:00
Michael Davis 1e6fe00001 Trim all trailing whitespace on insert_newline 2024-12-05 20:53:53 +09:00
rhogenson 8b1764d164
Join single-line comments with J. (#11742)
Fixes #8565.

Co-authored-by: Rose Hogenson <rosehogenson@posteo.net>
2024-09-23 02:16:24 +09:00
Skyler Hawthorne face6a3268 Disable hard link integration test on Android
Non-rooted Android typically doesn't have permission to use hard links
at all, so this test fails on Android.
2024-07-27 22:34:41 -04:00
Kirawi e5372b04a1
Fix writing hardlinks (#11340)
* don't use backup files with hardlinks

* check if the inodes remain the same in the test

* move funcs to faccess and use AsRawHandle

* use a copy as a backup for hardlinks

* delete backup after copy
2024-07-27 12:21:52 -05:00
RoloEdits fd7b1a3e37
refactor(commands): trim end of `pipe`-like output (#10952) 2024-07-13 10:44:48 +09:00
Chris Pyles 03813bbc2e
Remove special handling of line ending characters in selection replacement (#10786)
* Remove special-casing of line ending characters in selection replacement

* Refactor line ending handling and integration test to address code review comments
2024-06-10 17:07:43 +02:00
Kirawi 5b9f5f9fdb
Handle relative symlinks on write (#10790)
try again

try

wip
2024-05-21 06:46:24 +09:00
Krishan 2301430e37
fix match bracket matching (#10777) 2024-05-16 13:50:01 -05:00
Pascal Kuthe 5b8b2f4b9b
improve match bracket matching (#10613) 2024-05-07 09:26:04 -05:00
woojiq 839ec4ad39 test: match around closest pair tree-sitter version 2024-04-24 16:36:13 -04:00
Krishan 89a9f2be78
specify direction for select_prev_sibling and select_next_sibling (#10542)
* specify direction for select_prev_sibling and select_next_sibling

* fix failing integration-test
2024-04-23 08:41:03 -05:00
Sean Perry 30baff907d
Implement read command (#10447)
Co-authored-by: Michael Davis <mcarsondavis@gmail.com>
Co-authored-by: Ibrahim Dursun <ibrahim@dursun.cc>
2024-04-17 17:57:57 -05:00
Kirawi 6d363a978d
Read symlink when writing files (#10339)
Co-authored-by: Pascal Kuthe <pascalkuthe@pm.me>
2024-04-11 20:49:16 -05:00
Skyler Hawthorne c99c333337 Use new in-crate TreeCursor 2024-04-09 10:33:15 -04:00
Skyler Hawthorne fa67c5c474 feat(command): select_all_children 2024-04-09 10:33:15 -04:00
Skyler Hawthorne 87c4161732 feat(command): select_all_siblings 2024-04-09 10:33:15 -04:00
TornaxO7 e69292e5eb
Improve `goto_file_impl` (#9065) 2024-04-06 16:27:29 -05:00
Kirawi 88d455afeb
Use a temporary file for writes (#9236)
Co-authored-by: Pascal Kuthe <pascalkuthe@pm.me>
2024-03-31 17:43:09 -05:00
Skyler Hawthorne f5991657f4
Factor out line ending handling in integration tests (#9921)
Prior to this change, every integration test which wanted its line
endings to be handled transparently across platforms, i.e. test with
the same input that has its platform's line feed characters, converting
the line endings was up to each individual test by calling the
`platform_line` helper function. This significantly increases the amount
of boilerplate one has to copy between all the tests.

However, there are some test cases that need to exert strict control
over the exact input text without being manipulated behind the scenes by
the test framework.

So, with this change, the line feed conversions are factored into
the `TestCase` struct. By default, line endings of the input text
are converted to the platform's native line feed ending, but one can
explicitly specify in their test case when the input text should be left
alone and tested as is.
2024-03-31 07:12:17 -05:00
Michael Davis 68b21578ac Reimplement tree motions in terms of syntax::TreeCursor
This uses the new TreeCursor type from the parent commit to reimplement
the tree-sitter motions (`A-p/o/i/n`). Other tree-sitter related
features like textobjects are not touched with this change and will
need a different, unrelated approach to solve.
2024-03-23 15:32:34 +09:00
Mike Trinkala cb01e52cd8
Fix panic in surround_replace/delete nested multi-cursor (#9815)
Test Document
-------------
```
{{

}
}

```

Steps To Reproduce
------------------
1. 2j  # move_visual_line_down
1. C   # copy_selection_on_next_line
1. mdm # surround_delete

Debug
-----
`assertion failed: last <= from', transaction.rs:597:13`

Release
-------
`called `Result::unwrap()` on an `Err` value: Char range out of bounds:
char range 18446744073709551614..18446744073709551615,
Rope/RopeSlice char length 7', ropey-1.6.1/src/rope.rs:546:37`

Description
-----------

Processing the surrounding pairs in order violates the assertion the
ranges are ordered. To handle nested surrounds all positions have to
be sorted. Also surround_replace has to track the proper replacement
character for each position.
2024-03-08 02:20:07 +09:00
Mike Trinkala 9267343830
Fix panic when using surround_replace/delete (#9796)
1. Create a document containing `{A}`
1. C-w v # vsplit
1. gl    # goto_line_end
1. b     # move_prev_word_start
1. `     # switch_to_lowercase
1. mrm(  # surround replace
1. C-w v # vsplit

In the debug build surround_replace/delete will immedately assert with
`assertion failed: last <= from', transaction.rs:597:13`. The splits and
lowercase conversion are not needed to trigger the bug.

In the release build the surround becomes `)a(` and the last vsplit
causes the transaction to panic.
`internal error: entered unreachable code:
(Some(Retain(18446744073709551573)))', transaction.rs:185:46`

Since the selection direction is backwards get_surround_pos returns the
pairs reversed but the downstream code assumes they are in the forward
direction.
2024-03-03 18:55:09 +01:00