diff options
| author | Laurențiu Nicola <lnicola@users.noreply.github.com> | 2025-07-27 06:01:44 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-27 06:01:44 +0000 |
| commit | d941bc7d306e2a6b232342ff453e8196bc27195e (patch) | |
| tree | 26209ff2aef1a7f8eaf46422f96fb170bb6d54f2 | |
| parent | 3228fb735dbec2ea2f8c0cfd7c46cd14e970936e (diff) | |
| parent | 3b0988b6e9f92d9aadff2943e7a4004babcfdcb7 (diff) | |
Merge pull request #20302 from Young-Flash/fix_20240
fix fold doc comment for multiline param list fn
| -rwxr-xr-x | src/tools/rust-analyzer/crates/ide/src/folding_ranges.rs | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/src/tools/rust-analyzer/crates/ide/src/folding_ranges.rs b/src/tools/rust-analyzer/crates/ide/src/folding_ranges.rs index 698fd147789..1901bcc797e 100755 --- a/src/tools/rust-analyzer/crates/ide/src/folding_ranges.rs +++ b/src/tools/rust-analyzer/crates/ide/src/folding_ranges.rs @@ -73,11 +73,13 @@ pub(crate) fn folding_ranges(file: &SourceFile) -> Vec<Fold> { } if fn_node.body().is_some() { + // Get the actual start of the function (excluding doc comments) + let fn_start = fn_node + .fn_token() + .map(|token| token.text_range().start()) + .unwrap_or(node.text_range().start()); res.push(Fold { - range: TextRange::new( - node.text_range().start(), - node.text_range().end(), - ), + range: TextRange::new(fn_start, node.text_range().end()), kind: FoldKind::Function, }); continue; @@ -688,4 +690,21 @@ type Foo<T, U> = foo<fold arglist>< "#, ) } + + #[test] + fn test_fold_doc_comments_with_multiline_paramlist_function() { + check( + r#" +<fold comment>/// A very very very very very very very very very very very very very very very +/// very very very long description</fold> +<fold function>fn foo<fold arglist>( + very_long_parameter_name: u32, + another_very_long_parameter_name: u32, + third_very_long_param: u32, +)</fold> <fold block>{ + todo!() +}</fold></fold> +"#, + ); + } } |
