-
-
Notifications
You must be signed in to change notification settings - Fork 2.9k
Continue line comments #10996
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
the-mikedavis
merged 65 commits into
helix-editor:master
from
TornaxO7:continue-single-comment
Oct 19, 2024
Merged
Continue line comments #10996
Changes from all commits
Commits
Show all changes
65 commits
Select commit
Hold shift + click to select a range
3844eb7
Add `continue_comment` function
seanchen1991 3d31e66
Add test for `get_comment_token` fn
seanchen1991 129ecae
Fix incorrect assertion
seanchen1991 2449622
Wire up continue comment functionality
seanchen1991 036e2bf
Add `comment-tokens` field to languages.toml
seanchen1991 adda266
Add additional comment tokens for Rust
seanchen1991 be9224e
Match all comment-tokens fields with comment-token fields
seanchen1991 e77d15d
Refactor continue comment function to also return position of comment…
seanchen1991 751d15d
Update calls to find_first_non_whitespace_char
seanchen1991 4315906
Continue single comments with indentation
seanchen1991 0d224e5
Implement `count_whitespace_after` fn
seanchen1991 ee9c015
Get tests for continue comment logic passing
seanchen1991 e44d55a
Don't count newlines when counting whitespace
seanchen1991 d816982
Rename a variable
seanchen1991 e6a492b
Add `continue-comment` config parameter
seanchen1991 c3a6190
Contiue comments in insert mode based on config
seanchen1991 d25c959
Merge branch 'helix-editor:master' into feature/continue-comment
seanchen1991 cbd05dc
Use pre-existing indentation functions to indent comment lines
seanchen1991 d73cd87
Merge branch 'feature/continue-comment' of https://github.com/seanche…
seanchen1991 e170d40
Clean up for PR submission
seanchen1991 d52dae9
Fix merge conflict in languages.toml
seanchen1991 b03f870
Remove changes in indent.rs
seanchen1991 57261e5
Remove incorrect unit test
seanchen1991 e51c288
Merge branch 'feature/continue-comment' of github.com:seanchen1991/he…
TornaxO7 8fa3cc9
add `has_line_comment` method and fix `starts_with` for RopeSlice
TornaxO7 c70acf7
make clippy happy
TornaxO7 345ee7c
Merge branch 'master' of github.com:helix-editor/helix into continue-…
TornaxO7 38bc94b
continue-line-comment: add explanation
TornaxO7 fa50e51
single-line-comment: improve performance
TornaxO7 e318a30
comment: Add invariant to comment-tokens in config
TornaxO7 76a42d9
continue-comment: improve continue comment when opening new lines wit…
TornaxO7 b5f3dd4
continue-comment: improve continue comment when writing new line
TornaxO7 22734da
continue-comment: add hepler function to reduce LOC and improve reada…
TornaxO7 de5ebe6
comment.rs: revamp tests
TornaxO7 dc6411d
comments: remove some if-guards
TornaxO7 ca6ee48
comments: add special case if the text is empty it won't be considere…
TornaxO7 1a95d40
continue-comment: fix token finding
TornaxO7 dc92500
make clippy happy
TornaxO7 1e18f1b
config: fix tests
TornaxO7 f68cf64
continue-comments: add some docs
TornaxO7 4cc5148
continue-comment: remove unwraps
TornaxO7 830f148
Merge branch 'master' of github.com:helix-editor/helix into continue-…
TornaxO7 da2a444
continue-comment: removing indent_heuristic function
TornaxO7 1eb963d
Revert "continue-comment: removing indent_heuristic function"
TornaxO7 9c09141
Reapply "continue-comment: removing indent_heuristic function"
TornaxO7 d4b1dfb
Revert "continue-comment: removing indent_heuristic function"
TornaxO7 f53ec12
continue-comment: set default value for continue comments to false
TornaxO7 372550d
continue-comment: enable by default and use hybrid indentation
TornaxO7 83093f8
continue-comments: fix indent-logic if continue-comments wants to pla…
TornaxO7 b842fdb
continue-comment: improve code readability
TornaxO7 b5003e9
continue-comment: add some comments and remove unused code
TornaxO7 835b4ba
revert unecessary variable renaming
TornaxO7 310b6dd
remove config option for continue-comments
TornaxO7 45f230e
continue-comments: update parameter types of `get_comment_token`
TornaxO7 ce5d174
continue-comments: restructure `get_comment_token`
TornaxO7 170c8c2
continue-comments: simplify code
TornaxO7 843b9b4
style-nit: reduce nested blocks
TornaxO7 a5d7f52
continue-comments: improve jumping behaviour
TornaxO7 d7ca450
continue-comments: improve local_offs variable calculation
TornaxO7 e9ef838
fix warnings
TornaxO7 aca48e8
improve code format
TornaxO7 b7f9780
continue-comments: Fix panic case and add test
TornaxO7 5b9613c
continue-comments: adding test
TornaxO7 898f231
improve code structure
TornaxO7 12a8b3e
comment: reverting small bug fix
TornaxO7 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -22,8 +22,8 @@ use helix_core::{ | |
encoding, find_workspace, | ||
graphemes::{self, next_grapheme_boundary, RevRopeGraphemes}, | ||
history::UndoKind, | ||
increment, indent, | ||
indent::IndentStyle, | ||
increment, | ||
indent::{self, IndentStyle}, | ||
line_ending::{get_line_ending_of_str, line_end_char_index}, | ||
match_brackets, | ||
movement::{self, move_vertically_visual, Direction}, | ||
|
@@ -3424,31 +3424,51 @@ fn open(cx: &mut Context, open: Open) { | |
) | ||
}; | ||
|
||
let indent = indent::indent_for_newline( | ||
doc.language_config(), | ||
doc.syntax(), | ||
&doc.config.load().indent_heuristic, | ||
&doc.indent_style, | ||
doc.tab_width(), | ||
text, | ||
line_num, | ||
line_end_index, | ||
cursor_line, | ||
); | ||
let continue_comment_token = doc | ||
.language_config() | ||
.and_then(|config| config.comment_tokens.as_ref()) | ||
.and_then(|tokens| comment::get_comment_token(text, tokens, cursor_line)); | ||
|
||
let line = text.line(cursor_line); | ||
let indent = match line.first_non_whitespace_char() { | ||
Some(pos) if continue_comment_token.is_some() => line.slice(..pos).to_string(), | ||
_ => indent::indent_for_newline( | ||
doc.language_config(), | ||
doc.syntax(), | ||
&doc.config.load().indent_heuristic, | ||
&doc.indent_style, | ||
doc.tab_width(), | ||
text, | ||
line_num, | ||
line_end_index, | ||
cursor_line, | ||
), | ||
}; | ||
|
||
let indent_len = indent.len(); | ||
let mut text = String::with_capacity(1 + indent_len); | ||
text.push_str(doc.line_ending.as_str()); | ||
text.push_str(&indent); | ||
|
||
if let Some(token) = continue_comment_token { | ||
text.push_str(token); | ||
text.push(' '); | ||
} | ||
|
||
let text = text.repeat(count); | ||
|
||
// calculate new selection ranges | ||
let pos = offs + line_end_index + line_end_offset_width; | ||
let comment_len = continue_comment_token | ||
.map(|token| token.len() + 1) // `+ 1` for the extra space added | ||
.unwrap_or_default(); | ||
for i in 0..count { | ||
// pos -> beginning of reference line, | ||
// + (i * (1+indent_len)) -> beginning of i'th line from pos | ||
// + indent_len -> -> indent for i'th line | ||
ranges.push(Range::point(pos + (i * (1 + indent_len)) + indent_len)); | ||
// + (i * (1+indent_len + comment_len)) -> beginning of i'th line from pos (possibly including comment token) | ||
// + indent_len + comment_len -> -> indent for i'th line | ||
ranges.push(Range::point( | ||
pos + (i * (1 + indent_len + comment_len)) + indent_len + comment_len, | ||
)); | ||
} | ||
|
||
offs += text.chars().count(); | ||
|
@@ -3886,6 +3906,11 @@ pub mod insert { | |
|
||
let mut new_text = String::new(); | ||
|
||
let continue_comment_token = doc | ||
.language_config() | ||
.and_then(|config| config.comment_tokens.as_ref()) | ||
.and_then(|tokens| comment::get_comment_token(text, tokens, current_line)); | ||
|
||
// If the current line is all whitespace, insert a line ending at the beginning of | ||
// the current line. This makes the current line empty and the new line contain the | ||
// indentation of the old line. | ||
|
@@ -3895,17 +3920,22 @@ pub mod insert { | |
|
||
(line_start, line_start, new_text.chars().count()) | ||
} else { | ||
let indent = indent::indent_for_newline( | ||
doc.language_config(), | ||
doc.syntax(), | ||
&doc.config.load().indent_heuristic, | ||
&doc.indent_style, | ||
doc.tab_width(), | ||
text, | ||
current_line, | ||
pos, | ||
current_line, | ||
); | ||
let line = text.line(current_line); | ||
|
||
let indent = match line.first_non_whitespace_char() { | ||
Some(pos) if continue_comment_token.is_some() => line.slice(..pos).to_string(), | ||
_ => indent::indent_for_newline( | ||
doc.language_config(), | ||
doc.syntax(), | ||
&doc.config.load().indent_heuristic, | ||
&doc.indent_style, | ||
doc.tab_width(), | ||
text, | ||
current_line, | ||
pos, | ||
current_line, | ||
), | ||
}; | ||
|
||
// If we are between pairs (such as brackets), we want to | ||
// insert an additional line which is indented one level | ||
|
@@ -3915,19 +3945,30 @@ pub mod insert { | |
.and_then(|pairs| pairs.get(prev)) | ||
.map_or(false, |pair| pair.open == prev && pair.close == curr); | ||
|
||
let local_offs = if on_auto_pair { | ||
let local_offs = if let Some(token) = continue_comment_token { | ||
new_text.push_str(doc.line_ending.as_str()); | ||
new_text.push_str(&indent); | ||
new_text.push_str(token); | ||
new_text.push(' '); | ||
new_text.chars().count() | ||
} else if on_auto_pair { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I don't think this is a limitation we want to have in thr lognterm but usually autopairs within comments are a bit niche and likely hard to fix until some other changss land so this is probably fine for now. |
||
// line where the cursor will be | ||
let inner_indent = indent.clone() + doc.indent_style.as_str(); | ||
new_text.reserve_exact(2 + indent.len() + inner_indent.len()); | ||
new_text.push_str(doc.line_ending.as_str()); | ||
new_text.push_str(&inner_indent); | ||
|
||
// line where the matching pair will be | ||
let local_offs = new_text.chars().count(); | ||
new_text.push_str(doc.line_ending.as_str()); | ||
new_text.push_str(&indent); | ||
|
||
local_offs | ||
} else { | ||
new_text.reserve_exact(1 + indent.len()); | ||
new_text.push_str(doc.line_ending.as_str()); | ||
new_text.push_str(&indent); | ||
|
||
new_text.chars().count() | ||
}; | ||
|
||
|
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.