fix folding range on multi line function declaration
This commit is contained in:
parent
97f7fd77c6
commit
4b0da6f6ae
@ -178,12 +178,16 @@ pub fn generateFoldingRanges(allocator: std.mem.Allocator, tree: Ast, encoding:
|
|||||||
var buffer: [1]Ast.Node.Index = undefined;
|
var buffer: [1]Ast.Node.Index = undefined;
|
||||||
const fn_proto = tree.fullFnProto(&buffer, node).?;
|
const fn_proto = tree.fullFnProto(&buffer, node).?;
|
||||||
|
|
||||||
|
if (fn_proto.ast.params.len != 0) {
|
||||||
const list_start_tok = fn_proto.lparen;
|
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()`
|
if (list_start_tok > list_end_tok) continue; // Incomplete, ie `fn a()`
|
||||||
|
try builder.add(null, list_start_tok, list_end_tok, .exclusive, .inclusive);
|
||||||
try builder.add(null, list_start_tok, list_end_tok, .exclusive, .exclusive);
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
.block_two,
|
.block_two,
|
||||||
|
@ -115,12 +115,15 @@ test "foldingRange - function" {
|
|||||||
try testFoldingRange(
|
try testFoldingRange(
|
||||||
\\fn main(
|
\\fn main(
|
||||||
\\ a: ?u32,
|
\\ a: ?u32,
|
||||||
\\) u32 {
|
\\) !u32 {
|
||||||
\\ return 1 + 1;
|
\\ return 1 + 1;
|
||||||
\\}
|
\\}
|
||||||
, &.{
|
, &.{
|
||||||
.{ .startLine = 0, .startCharacter = 8, .endLine = 2, .endCharacter = 0 },
|
.{ .startLine = 0, .startCharacter = 8, .endLine = 1, .endCharacter = 10 },
|
||||||
.{ .startLine = 2, .startCharacter = 7, .endLine = 4, .endCharacter = 0 },
|
.{ .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 = 0, .startCharacter = 0, .endLine = 1, .endCharacter = 14, .kind = .comment },
|
||||||
.{ .startLine = 5, .startCharacter = 4, .endLine = 6, .endCharacter = 33, .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 },
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user