Use the correct tree to display semantic tokens
This commit is contained in:
parent
9224bbd4dc
commit
acc45b4efe
@ -983,7 +983,8 @@ pub const TypeWithHandle = struct {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn isContainerKind(self: TypeWithHandle, container_kind_tok: std.zig.Token.Tag, tree: ast.Tree) bool {
|
fn isContainerKind(self: TypeWithHandle, container_kind_tok: std.zig.Token.Tag) bool {
|
||||||
|
const tree = self.handle.tree;
|
||||||
const main_tokens = tree.nodes.items(.main_token);
|
const main_tokens = tree.nodes.items(.main_token);
|
||||||
const tags = tree.tokens.items(.tag);
|
const tags = tree.tokens.items(.tag);
|
||||||
switch (self.type.data) {
|
switch (self.type.data) {
|
||||||
@ -992,13 +993,13 @@ pub const TypeWithHandle = struct {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn isStructType(self: TypeWithHandle, tree: ast.Tree) bool {
|
pub fn isStructType(self: TypeWithHandle) bool {
|
||||||
return self.isContainerKind(.keyword_struct, tree) or self.isRoot();
|
return self.isContainerKind(.keyword_struct) or self.isRoot();
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn isNamespace(self: TypeWithHandle, tree: ast.Tree) bool {
|
pub fn isNamespace(self: TypeWithHandle) bool {
|
||||||
if (!self.isStructType(tree)) return false;
|
if (!self.isStructType()) return false;
|
||||||
|
const tree = self.handle.tree;
|
||||||
const node = self.type.data.other;
|
const node = self.type.data.other;
|
||||||
const tags = tree.nodes.items(.tag);
|
const tags = tree.nodes.items(.tag);
|
||||||
if (isContainer(tags[node])) {
|
if (isContainer(tags[node])) {
|
||||||
@ -1010,20 +1011,21 @@ pub const TypeWithHandle = struct {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn isEnumType(self: TypeWithHandle, tree: ast.Tree) bool {
|
pub fn isEnumType(self: TypeWithHandle) bool {
|
||||||
return self.isContainerKind(.keyword_enum, tree);
|
return self.isContainerKind(.keyword_enum);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn isUnionType(self: TypeWithHandle, tree: ast.Tree) bool {
|
pub fn isUnionType(self: TypeWithHandle) bool {
|
||||||
return self.isContainerKind(.keyword_union, tree);
|
return self.isContainerKind(.keyword_union);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn isOpaqueType(self: TypeWithHandle, tree: ast.Tree) bool {
|
pub fn isOpaqueType(self: TypeWithHandle) bool {
|
||||||
return self.isContainerKind(.keyword_opaque, tree);
|
return self.isContainerKind(.keyword_opaque);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn isTypeFunc(self: TypeWithHandle, tree: ast.Tree) bool {
|
pub fn isTypeFunc(self: TypeWithHandle) bool {
|
||||||
var buf: [1]ast.Node.Index = undefined;
|
var buf: [1]ast.Node.Index = undefined;
|
||||||
|
const tree = self.handle.tree;
|
||||||
return switch (self.type.data) {
|
return switch (self.type.data) {
|
||||||
.other => |n| if (fnProto(tree, n, &buf)) |fn_proto| blk: {
|
.other => |n| if (fnProto(tree, n, &buf)) |fn_proto| blk: {
|
||||||
break :blk isTypeFunction(tree, fn_proto);
|
break :blk isTypeFunction(tree, fn_proto);
|
||||||
@ -1032,8 +1034,9 @@ pub const TypeWithHandle = struct {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn isGenericFunc(self: TypeWithHandle, tree: ast.Tree) bool {
|
pub fn isGenericFunc(self: TypeWithHandle) bool {
|
||||||
var buf: [1]ast.Node.Index = undefined;
|
var buf: [1]ast.Node.Index = undefined;
|
||||||
|
const tree = self.handle.tree;
|
||||||
return switch (self.type.data) {
|
return switch (self.type.data) {
|
||||||
.other => |n| if (fnProto(tree, n, &buf)) |fn_proto| blk: {
|
.other => |n| if (fnProto(tree, n, &buf)) |fn_proto| blk: {
|
||||||
break :blk isGenericFunction(tree, fn_proto);
|
break :blk isGenericFunction(tree, fn_proto);
|
||||||
@ -1042,7 +1045,8 @@ pub const TypeWithHandle = struct {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn isFunc(self: TypeWithHandle, tree: ast.Tree) bool {
|
pub fn isFunc(self: TypeWithHandle) bool {
|
||||||
|
const tree = self.handle.tree;
|
||||||
const tags = tree.nodes.items(.tag);
|
const tags = tree.nodes.items(.tag);
|
||||||
return switch (self.type.data) {
|
return switch (self.type.data) {
|
||||||
.other => |n| switch (tags[n]) {
|
.other => |n| switch (tags[n]) {
|
||||||
@ -1867,16 +1871,6 @@ pub const DeclWithHandle = struct {
|
|||||||
}, bound_type_params)) orelse return null,
|
}, bound_type_params)) orelse return null,
|
||||||
bound_type_params,
|
bound_type_params,
|
||||||
),
|
),
|
||||||
// .array_payload => |pay| try resolveBracketAccessType(
|
|
||||||
// store,
|
|
||||||
// arena,
|
|
||||||
// (try resolveTypeOfNodeInternal(store, arena, .{
|
|
||||||
// .node = pay.array_expr,
|
|
||||||
// .handle = self.handle,
|
|
||||||
// }, bound_type_params)) orelse return null,
|
|
||||||
// .Single,
|
|
||||||
// bound_type_params,
|
|
||||||
// ),
|
|
||||||
.label_decl => return null,
|
.label_decl => return null,
|
||||||
.switch_payload => |pay| {
|
.switch_payload => |pay| {
|
||||||
if (pay.items.len == 0) return null;
|
if (pay.items.len == 0) return null;
|
||||||
@ -1885,7 +1879,7 @@ pub const DeclWithHandle = struct {
|
|||||||
.node = pay.switch_expr,
|
.node = pay.switch_expr,
|
||||||
.handle = self.handle,
|
.handle = self.handle,
|
||||||
}, bound_type_params)) orelse return null;
|
}, bound_type_params)) orelse return null;
|
||||||
if (!switch_expr_type.isUnionType(tree))
|
if (!switch_expr_type.isUnionType())
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
if (node_tags[pay.items[0]] == .enum_literal) {
|
if (node_tags[pay.items[0]] == .enum_literal) {
|
||||||
|
@ -199,23 +199,23 @@ fn colorIdentifierBasedOnType(builder: *Builder, type_node: analysis.TypeWithHan
|
|||||||
const tree = builder.handle.tree;
|
const tree = builder.handle.tree;
|
||||||
if (type_node.type.is_type_val) {
|
if (type_node.type.is_type_val) {
|
||||||
var new_tok_mod = tok_mod;
|
var new_tok_mod = tok_mod;
|
||||||
if (type_node.isNamespace(tree))
|
if (type_node.isNamespace())
|
||||||
new_tok_mod.set("namespace")
|
new_tok_mod.set("namespace")
|
||||||
else if (type_node.isStructType(tree))
|
else if (type_node.isStructType())
|
||||||
new_tok_mod.set("struct")
|
new_tok_mod.set("struct")
|
||||||
else if (type_node.isEnumType(tree))
|
else if (type_node.isEnumType())
|
||||||
new_tok_mod.set("enum")
|
new_tok_mod.set("enum")
|
||||||
else if (type_node.isUnionType(tree))
|
else if (type_node.isUnionType())
|
||||||
new_tok_mod.set("union")
|
new_tok_mod.set("union")
|
||||||
else if (type_node.isOpaqueType(tree))
|
else if (type_node.isOpaqueType())
|
||||||
new_tok_mod.set("opaque");
|
new_tok_mod.set("opaque");
|
||||||
|
|
||||||
try writeTokenMod(builder, target_tok, .type, new_tok_mod);
|
try writeTokenMod(builder, target_tok, .type, new_tok_mod);
|
||||||
} else if (type_node.isTypeFunc(tree)) {
|
} else if (type_node.isTypeFunc()) {
|
||||||
try writeTokenMod(builder, target_tok, .type, tok_mod);
|
try writeTokenMod(builder, target_tok, .type, tok_mod);
|
||||||
} else if (type_node.isFunc(tree)) {
|
} else if (type_node.isFunc()) {
|
||||||
var new_tok_mod = tok_mod;
|
var new_tok_mod = tok_mod;
|
||||||
if (type_node.isGenericFunc(tree)) {
|
if (type_node.isGenericFunc()) {
|
||||||
new_tok_mod.set("generic");
|
new_tok_mod.set("generic");
|
||||||
}
|
}
|
||||||
try writeTokenMod(builder, target_tok, .function, new_tok_mod);
|
try writeTokenMod(builder, target_tok, .function, new_tok_mod);
|
||||||
@ -277,6 +277,7 @@ fn writeNodeTokens(
|
|||||||
const main_tokens = tree.nodes.items(.main_token);
|
const main_tokens = tree.nodes.items(.main_token);
|
||||||
|
|
||||||
const node = maybe_node.?;
|
const node = maybe_node.?;
|
||||||
|
if (node > node_tags.len) return;
|
||||||
const tag = node_tags[node];
|
const tag = node_tags[node];
|
||||||
const main_token = main_tokens[node];
|
const main_token = main_tokens[node];
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user