aboutsummaryrefslogtreecommitdiff
path: root/helix-term/src
diff options
context:
space:
mode:
authorTriton1712022-03-30 15:08:07 +0000
committerGitHub2022-03-30 15:08:07 +0000
commit58758fee610a3808dfaeafddd1b4b4242a7e42cd (patch)
tree1ca1bc05978270080693c56d6cfb3beb6dd86e1a /helix-term/src
parentc18de0e8f001041e234b2b9bb0f8fea122858ad3 (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.rs28
-rw-r--r--helix-term/src/health.rs2
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",
}
}