diff options
author | Triton171 | 2022-03-30 15:08:07 +0000 |
---|---|---|
committer | GitHub | 2022-03-30 15:08:07 +0000 |
commit | 58758fee610a3808dfaeafddd1b4b4242a7e42cd (patch) | |
tree | 1ca1bc05978270080693c56d6cfb3beb6dd86e1a /helix-term/src | |
parent | c18de0e8f001041e234b2b9bb0f8fea122858ad3 (diff) |
Indentation rework (#1562)
* WIP: Rework indentation system
* Add ComplexNode for context-aware indentation (including a proof of concept for assignment statements in rust)
* Add switch statements to Go indents.toml (fixes the second half of issue #1523)
Remove commented-out code
* Migrate all existing indentation queries.
Add more options to ComplexNode and use them to improve C/C++ indentation.
* Add comments & replace Option<Vec<_>> with Vec<_>
* Add more detailed documentation for tree-sitter indentation
* Improve code style in indent.rs
* Use tree-sitter queries for indentation instead of TOML config.
Migrate existing indent queries.
* Add documentation for the new indent queries.
Change xtask docgen to look for indents.scm instead of indents.toml
* Improve code style in indent.rs.
Fix an issue with the rust indent query.
* Move indentation test sources to separate files.
Add `#not-kind-eq?`, `#same-line?` and `#not-same-line` custom predicates.
Improve the rust and c indent queries.
* Fix indent test.
Improve rust indent queries.
* Move indentation tests to integration test folder.
* Improve code style in indent.rs.
Reuse tree-sitter cursors for indentation queries.
* Migrate HCL indent query
* Replace custom loading in indent tests with a designated languages.toml
* Update indent query file name for --health command.
* Fix single-space formatting in indent queries.
* Add explanation for unwrapping.
Co-authored-by: Triton171 <triton0171@gmail.com>
Diffstat (limited to 'helix-term/src')
-rw-r--r-- | helix-term/src/commands.rs | 28 | ||||
-rw-r--r-- | helix-term/src/health.rs | 2 |
2 files changed, 13 insertions, 17 deletions
diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs index 4b4e834a..bd66f26a 100644 --- a/helix-term/src/commands.rs +++ b/helix-term/src/commands.rs @@ -2240,17 +2240,16 @@ fn open(cx: &mut Context, open: Open) { ) }; - // TODO: share logic with insert_newline for indentation - let indent_level = indent::suggested_indent_for_pos( + let indent = indent::indent_for_newline( doc.language_config(), doc.syntax(), + &doc.indent_style, + doc.tab_width(), text, - line_end_index, new_line.saturating_sub(1), - true, - ) - .unwrap_or_else(|| indent::indent_level_for_line(text.line(cursor_line), doc.tab_width())); - let indent = doc.indent_unit().repeat(indent_level); + 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()); @@ -2703,19 +2702,16 @@ pub mod insert { let curr = contents.get_char(pos).unwrap_or(' '); let current_line = text.char_to_line(pos); - let indent_level = indent::suggested_indent_for_pos( + let indent = indent::indent_for_newline( doc.language_config(), doc.syntax(), + &doc.indent_style, + doc.tab_width(), text, + current_line, pos, current_line, - true, - ) - .unwrap_or_else(|| { - indent::indent_level_for_line(text.line(current_line), doc.tab_width()) - }); - - let indent = doc.indent_unit().repeat(indent_level); + ); let mut text = String::new(); // If we are between pairs (such as brackets), we want to // insert an additional line which is indented one level @@ -2727,7 +2723,7 @@ pub mod insert { .is_some(); let new_head_pos = if on_auto_pair { - let inner_indent = doc.indent_unit().repeat(indent_level + 1); + let inner_indent = indent.clone() + doc.indent_style.as_str(); text.reserve_exact(2 + indent.len() + inner_indent.len()); text.push_str(doc.line_ending.as_str()); text.push_str(&inner_indent); diff --git a/helix-term/src/health.rs b/helix-term/src/health.rs index 80f59680..f73139fc 100644 --- a/helix-term/src/health.rs +++ b/helix-term/src/health.rs @@ -19,7 +19,7 @@ impl TsFeature { match *self { Self::Highlight => "highlights.scm", Self::TextObject => "textobjects.scm", - Self::AutoIndent => "indents.toml", + Self::AutoIndent => "indents.scm", } } |