Option to insert comment character(s) at the beginning of the line(s) (#19746)
Closes #19459 This PR adds the optional setting to insert comment character(s) at the beginning of the line(s) instead of after the indentation. It can be enabled via keybindings: ``` "ctrl-/": ["editor::ToggleComments", { "ignore_indent": true }] ``` As suggested by @notpeter in #19459, this is implemented in `toggle_comments` (editor.rs) taking the existing `advance_downwards` option as example. There's also a test case for the setting, which mimics the test case for the regular comment toggling behavior. --- I am not entirely happy with the name `ignore_indent`. The default would be a double negative now `ignore_indent=false`. A positive wording would probably easier to understand, but I could not think of anything concise. `insert_at_line_start` or just `at_line_start` might work, but didn't convince me either. That said, I am happy to change the name if there are better ideas. --- Release Notes: - Added optional setting to insert comment character(s) at the beginning of the line(s) instead of after the indentation. It can be used by changing the default mapping to toggle comments like this: `"ctrl-/": ["editor::ToggleComments", { "ignore_indent": true }]`
This commit is contained in:
parent
7fd334fddb
commit
633b665379
3 changed files with 149 additions and 2 deletions
|
@ -8664,14 +8664,22 @@ impl Editor {
|
|||
let snapshot = this.buffer.read(cx).read(cx);
|
||||
let empty_str: Arc<str> = Arc::default();
|
||||
let mut suffixes_inserted = Vec::new();
|
||||
let ignore_indent = action.ignore_indent;
|
||||
|
||||
fn comment_prefix_range(
|
||||
snapshot: &MultiBufferSnapshot,
|
||||
row: MultiBufferRow,
|
||||
comment_prefix: &str,
|
||||
comment_prefix_whitespace: &str,
|
||||
ignore_indent: bool,
|
||||
) -> Range<Point> {
|
||||
let start = Point::new(row.0, snapshot.indent_size_for_line(row).len);
|
||||
let indent_size = if ignore_indent {
|
||||
0
|
||||
} else {
|
||||
snapshot.indent_size_for_line(row).len
|
||||
};
|
||||
|
||||
let start = Point::new(row.0, indent_size);
|
||||
|
||||
let mut line_bytes = snapshot
|
||||
.bytes_in_range(start..snapshot.max_point())
|
||||
|
@ -8767,7 +8775,16 @@ impl Editor {
|
|||
}
|
||||
|
||||
// If the language has line comments, toggle those.
|
||||
let full_comment_prefixes = language.line_comment_prefixes();
|
||||
let mut full_comment_prefixes = language.line_comment_prefixes().to_vec();
|
||||
|
||||
// If ignore_indent is set, trim spaces from the right side of all full_comment_prefixes
|
||||
if ignore_indent {
|
||||
full_comment_prefixes = full_comment_prefixes
|
||||
.into_iter()
|
||||
.map(|s| Arc::from(s.trim_end()))
|
||||
.collect();
|
||||
}
|
||||
|
||||
if !full_comment_prefixes.is_empty() {
|
||||
let first_prefix = full_comment_prefixes
|
||||
.first()
|
||||
|
@ -8794,6 +8811,7 @@ impl Editor {
|
|||
row,
|
||||
&prefix[..trimmed_prefix_len],
|
||||
&prefix[trimmed_prefix_len..],
|
||||
ignore_indent,
|
||||
)
|
||||
})
|
||||
.max_by_key(|range| range.end.column - range.start.column)
|
||||
|
@ -8834,6 +8852,7 @@ impl Editor {
|
|||
start_row,
|
||||
comment_prefix,
|
||||
comment_prefix_whitespace,
|
||||
ignore_indent,
|
||||
);
|
||||
let suffix_range = comment_suffix_range(
|
||||
snapshot.deref(),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue