fix folding range on multi line function declaration

This commit is contained in:
Techarix 2023-02-25 01:35:00 +01:00 committed by Lee Cannon
parent 97f7fd77c6
commit 4b0da6f6ae
2 changed files with 16 additions and 9 deletions

View File

@ -178,12 +178,16 @@ pub fn generateFoldingRanges(allocator: std.mem.Allocator, tree: Ast, encoding:
var buffer: [1]Ast.Node.Index = undefined;
const fn_proto = tree.fullFnProto(&buffer, node).?;
if (fn_proto.ast.params.len != 0) {
const list_start_tok = fn_proto.lparen;
const list_end_tok = ast.lastToken(tree, node) -| 1;
const last_param = fn_proto.ast.params[fn_proto.ast.params.len - 1];
const last_param_tok = ast.lastToken(tree, last_param);
const param_has_comma = last_param_tok + 1 < tree.tokens.len and token_tags[last_param_tok + 1] == .comma;
const list_end_tok = last_param_tok + @boolToInt(param_has_comma);
if (list_start_tok > list_end_tok) continue; // Incomplete, ie `fn a()`
try builder.add(null, list_start_tok, list_end_tok, .exclusive, .exclusive);
try builder.add(null, list_start_tok, list_end_tok, .exclusive, .inclusive);
}
},
.block_two,

View File

@ -115,12 +115,15 @@ test "foldingRange - function" {
try testFoldingRange(
\\fn main(
\\ a: ?u32,
\\) u32 {
\\) !u32 {
\\ return 1 + 1;
\\}
, &.{
.{ .startLine = 0, .startCharacter = 8, .endLine = 2, .endCharacter = 0 },
.{ .startLine = 2, .startCharacter = 7, .endLine = 4, .endCharacter = 0 },
.{ .startLine = 0, .startCharacter = 8, .endLine = 1, .endCharacter = 10 },
.{ .startLine = 2, .startCharacter = 8, .endLine = 4, .endCharacter = 0 },
// TODO investigate why VS-Code doesn't show the second folding range
// .{ .startLine = 0, .startCharacter = 8, .endLine = 2, .endCharacter = 0 },
// .{ .startLine = 2, .startCharacter = 8, .endLine = 4, .endCharacter = 0 },
});
}
@ -138,7 +141,7 @@ test "foldingRange - function with doc comment" {
, &.{
.{ .startLine = 0, .startCharacter = 0, .endLine = 1, .endCharacter = 14, .kind = .comment },
.{ .startLine = 5, .startCharacter = 4, .endLine = 6, .endCharacter = 33, .kind = .comment },
.{ .startLine = 2, .startCharacter = 7, .endLine = 8, .endCharacter = 0 },
.{ .startLine = 2, .startCharacter = 7, .endLine = 7, .endCharacter = 11 },
});
}