add paramSlice
helper function
This commit is contained in:
parent
b958b258a3
commit
a2de5bf2e6
@ -991,6 +991,15 @@ pub fn paramLastToken(tree: Ast, param: Ast.full.FnProto.Param) Ast.TokenIndex {
|
|||||||
return param.anytype_ellipsis3 orelse tree.lastToken(param.type_expr);
|
return param.anytype_ellipsis3 orelse tree.lastToken(param.type_expr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn paramSlice(tree: Ast, param: Ast.full.FnProto.Param) []const u8 {
|
||||||
|
const first_token = paramFirstToken(tree, param);
|
||||||
|
const last_token = paramLastToken(tree, param);
|
||||||
|
|
||||||
|
const start = offsets.tokenToIndex(tree, first_token);
|
||||||
|
const end = offsets.tokenToLoc(tree, last_token).end;
|
||||||
|
return tree.source[start..end];
|
||||||
|
}
|
||||||
|
|
||||||
pub fn isContainer(tree: Ast, node: Ast.Node.Index) bool {
|
pub fn isContainer(tree: Ast, node: Ast.Node.Index) bool {
|
||||||
return switch (tree.nodes.items(.tag)[node]) {
|
return switch (tree.nodes.items(.tag)[node]) {
|
||||||
.container_decl,
|
.container_decl,
|
||||||
|
@ -370,14 +370,11 @@ fn declToCompletion(context: DeclToCompletionContext, decl_handle: Analyser.Decl
|
|||||||
try Analyser.collectDocComments(allocator, tree, doc_comments, doc_kind, false),
|
try Analyser.collectDocComments(allocator, tree, doc_comments, doc_kind, false),
|
||||||
} } else null;
|
} } else null;
|
||||||
|
|
||||||
const first_token = ast.paramFirstToken(tree, param);
|
|
||||||
const last_token = ast.paramLastToken(tree, param);
|
|
||||||
|
|
||||||
try context.completions.append(allocator, .{
|
try context.completions.append(allocator, .{
|
||||||
.label = tree.tokenSlice(param.name_token.?),
|
.label = tree.tokenSlice(param.name_token.?),
|
||||||
.kind = .Constant,
|
.kind = .Constant,
|
||||||
.documentation = doc,
|
.documentation = doc,
|
||||||
.detail = tree.source[offsets.tokenToIndex(tree, first_token)..offsets.tokenToLoc(tree, last_token).end],
|
.detail = ast.paramSlice(tree, param),
|
||||||
.insertText = tree.tokenSlice(param.name_token.?),
|
.insertText = tree.tokenSlice(param.name_token.?),
|
||||||
.insertTextFormat = .PlainText,
|
.insertTextFormat = .PlainText,
|
||||||
});
|
});
|
||||||
|
@ -48,12 +48,7 @@ pub fn hoverSymbol(server: *Server, decl_handle: Analyser.DeclWithHandle, markup
|
|||||||
doc_str = try Analyser.collectDocComments(server.arena.allocator(), handle.tree, doc_comments, markup_kind, false);
|
doc_str = try Analyser.collectDocComments(server.arena.allocator(), handle.tree, doc_comments, markup_kind, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
const first_token = ast.paramFirstToken(tree, param);
|
break :def ast.paramSlice(tree, param);
|
||||||
const last_token = ast.paramLastToken(tree, param);
|
|
||||||
|
|
||||||
const start = offsets.tokenToIndex(tree, first_token);
|
|
||||||
const end = offsets.tokenToLoc(tree, last_token).end;
|
|
||||||
break :def tree.source[start..end];
|
|
||||||
},
|
},
|
||||||
.pointer_payload,
|
.pointer_payload,
|
||||||
.array_payload,
|
.array_payload,
|
||||||
|
@ -7,12 +7,12 @@ const DocumentStore = @import("../DocumentStore.zig");
|
|||||||
const types = @import("../lsp.zig");
|
const types = @import("../lsp.zig");
|
||||||
const Server = @import("../Server.zig");
|
const Server = @import("../Server.zig");
|
||||||
const ast = @import("../ast.zig");
|
const ast = @import("../ast.zig");
|
||||||
|
const offsets = @import("../offsets.zig");
|
||||||
|
|
||||||
const data = @import("../data/data.zig");
|
const data = @import("../data/data.zig");
|
||||||
|
|
||||||
fn fnProtoToSignatureInfo(analyser: *Analyser, alloc: std.mem.Allocator, commas: u32, skip_self_param: bool, handle: *const DocumentStore.Handle, fn_node: Ast.Node.Index, proto: Ast.full.FnProto) !types.SignatureInformation {
|
fn fnProtoToSignatureInfo(analyser: *Analyser, alloc: std.mem.Allocator, commas: u32, skip_self_param: bool, handle: *const DocumentStore.Handle, fn_node: Ast.Node.Index, proto: Ast.full.FnProto) !types.SignatureInformation {
|
||||||
const tree = handle.tree;
|
const tree = handle.tree;
|
||||||
const token_starts = tree.tokens.items(.start);
|
|
||||||
const label = Analyser.getFunctionSignature(tree, proto);
|
const label = Analyser.getFunctionSignature(tree, proto);
|
||||||
const proto_comments = (try Analyser.getDocComments(alloc, tree, fn_node, .markdown)) orelse "";
|
const proto_comments = (try Analyser.getDocComments(alloc, tree, fn_node, .markdown)) orelse "";
|
||||||
|
|
||||||
@ -29,32 +29,8 @@ fn fnProtoToSignatureInfo(analyser: *Analyser, alloc: std.mem.Allocator, commas:
|
|||||||
else
|
else
|
||||||
"";
|
"";
|
||||||
|
|
||||||
var param_label_start: usize = 0;
|
|
||||||
var param_label_end: usize = 0;
|
|
||||||
if (param.comptime_noalias) |cn| {
|
|
||||||
param_label_start = token_starts[cn];
|
|
||||||
param_label_end = param_label_start + tree.tokenSlice(cn).len;
|
|
||||||
}
|
|
||||||
if (param.name_token) |nt| {
|
|
||||||
if (param_label_start == 0)
|
|
||||||
param_label_start = token_starts[nt];
|
|
||||||
param_label_end = token_starts[nt] + tree.tokenSlice(nt).len;
|
|
||||||
}
|
|
||||||
if (param.anytype_ellipsis3) |ae| {
|
|
||||||
if (param_label_start == 0)
|
|
||||||
param_label_start = token_starts[ae];
|
|
||||||
param_label_end = token_starts[ae] + tree.tokenSlice(ae).len;
|
|
||||||
}
|
|
||||||
if (param.type_expr != 0) {
|
|
||||||
if (param_label_start == 0)
|
|
||||||
param_label_start = token_starts[tree.firstToken(param.type_expr)];
|
|
||||||
|
|
||||||
const last_param_tok = ast.lastToken(tree, param.type_expr);
|
|
||||||
param_label_end = token_starts[last_param_tok] + tree.tokenSlice(last_param_tok).len;
|
|
||||||
}
|
|
||||||
const param_label = tree.source[param_label_start..param_label_end];
|
|
||||||
try params.append(alloc, .{
|
try params.append(alloc, .{
|
||||||
.label = .{ .string = param_label },
|
.label = .{ .string = ast.paramSlice(tree, param) },
|
||||||
.documentation = .{ .MarkupContent = .{
|
.documentation = .{ .MarkupContent = .{
|
||||||
.kind = .markdown,
|
.kind = .markdown,
|
||||||
.value = param_comments,
|
.value = param_comments,
|
||||||
|
Loading…
Reference in New Issue
Block a user