58758fee61
* 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>
105 lines
2.4 KiB
Rust
105 lines
2.4 KiB
Rust
use std::{
|
|
io::{self, stdout, Stdout, Write},
|
|
path::PathBuf,
|
|
sync::Arc,
|
|
time::Duration,
|
|
};
|
|
mod test {
|
|
fn hello_world() {
|
|
1 + 1;
|
|
|
|
let does_indentation_work = 1;
|
|
|
|
let mut really_long_variable_name_using_up_the_line =
|
|
really_long_fn_that_should_definitely_go_on_the_next_line();
|
|
really_long_variable_name_using_up_the_line =
|
|
really_long_fn_that_should_definitely_go_on_the_next_line();
|
|
really_long_variable_name_using_up_the_line |=
|
|
really_long_fn_that_should_definitely_go_on_the_next_line();
|
|
|
|
let (
|
|
a_long_variable_name_in_this_tuple,
|
|
b_long_variable_name_in_this_tuple,
|
|
c_long_variable_name_in_this_tuple,
|
|
d_long_variable_name_in_this_tuple,
|
|
e_long_variable_name_in_this_tuple,
|
|
): (usize, usize, usize, usize, usize) =
|
|
if really_long_fn_that_should_definitely_go_on_the_next_line() {
|
|
(
|
|
03294239434,
|
|
1213412342314,
|
|
21231234134,
|
|
834534234549898789,
|
|
9879234234543853457,
|
|
)
|
|
} else {
|
|
(0, 1, 2, 3, 4)
|
|
};
|
|
|
|
let test_function = function_with_param(this_param,
|
|
that_param
|
|
);
|
|
|
|
let test_function = function_with_param(
|
|
this_param,
|
|
that_param
|
|
);
|
|
|
|
let test_function = function_with_proper_indent(param1,
|
|
param2,
|
|
);
|
|
|
|
let selection = Selection::new(
|
|
changes
|
|
.clone()
|
|
.map(|(start, end, text): (usize, usize, Option<Tendril>)| {
|
|
let len = text.map(|text| text.len()).unwrap() - 1; // minus newline
|
|
let pos = start + len;
|
|
Range::new(pos, pos)
|
|
})
|
|
.collect(),
|
|
0,
|
|
);
|
|
|
|
return;
|
|
}
|
|
}
|
|
|
|
impl<A, D> MyTrait<A, D> for YourType
|
|
where
|
|
A: TraitB + TraitC,
|
|
D: TraitE + TraitF,
|
|
{
|
|
|
|
}
|
|
#[test]
|
|
//
|
|
match test {
|
|
Some(a) => 1,
|
|
None => {
|
|
unimplemented!()
|
|
}
|
|
}
|
|
std::panic::set_hook(Box::new(move |info| {
|
|
hook(info);
|
|
}));
|
|
|
|
{ { {
|
|
1
|
|
}}}
|
|
|
|
pub fn change<I>(document: &Document, changes: I) -> Self
|
|
where
|
|
I: IntoIterator<Item = Change> + ExactSizeIterator,
|
|
{
|
|
[
|
|
1,
|
|
2,
|
|
3,
|
|
];
|
|
(
|
|
1,
|
|
2
|
|
);
|
|
true
|
|
}
|