Some semantic tokens fixes
This commit is contained in:
parent
789f3b1781
commit
751f66068b
@ -634,10 +634,16 @@ fn writeNodeTokens(builder: *Builder, arena: *std.heap.ArenaAllocator, store: *D
|
||||
try await @asyncCall(child_frame, {}, writeNodeTokens, .{ builder, arena, store, test_decl.name });
|
||||
try await @asyncCall(child_frame, {}, writeNodeTokens, .{ builder, arena, store, test_decl.body_node });
|
||||
},
|
||||
.Catch => {
|
||||
const catch_expr = node.cast(ast.Node.Catch).?;
|
||||
try await @asyncCall(child_frame, {}, writeNodeTokens, .{ builder, arena, store, catch_expr.lhs });
|
||||
try writeToken(builder, catch_expr.op_token, .keyword);
|
||||
try await @asyncCall(child_frame, {}, writeNodeTokens, .{ builder, arena, store, catch_expr.rhs });
|
||||
},
|
||||
.Add, .AddWrap, .ArrayCat, .ArrayMult, .Assign, .AssignBitAnd, .AssignBitOr, .AssignBitShiftLeft, .AssignBitShiftRight, .AssignBitXor, .AssignDiv, .AssignSub, .AssignSubWrap, .AssignMod, .AssignAdd, .AssignAddWrap, .AssignMul, .AssignMulWrap, .BangEqual, .BitAnd, .BitOr, .BitShiftLeft, .BitShiftRight, .BitXor, .BoolAnd, .BoolOr, .Div, .EqualEqual, .ErrorUnion, .GreaterOrEqual, .GreaterThan, .LessOrEqual, .LessThan, .MergeErrorSets, .Mod, .Mul, .MulWrap, .Period, .Range, .Sub, .SubWrap, .OrElse => {
|
||||
const infix_op = node.cast(ast.Node.SimpleInfixOp).?;
|
||||
try await @asyncCall(child_frame, {}, writeNodeTokens, .{ builder, arena, store, infix_op.lhs });
|
||||
if (node.tag != .Period and node.tag != .Catch) {
|
||||
if (node.tag != .Period) {
|
||||
const token_type: TokenType = switch (node.tag) {
|
||||
.BoolAnd, .BoolOr, .OrElse => .keyword,
|
||||
else => .operator,
|
||||
@ -647,11 +653,6 @@ fn writeNodeTokens(builder: *Builder, arena: *std.heap.ArenaAllocator, store: *D
|
||||
try await @asyncCall(child_frame, {}, writeNodeTokens, .{ builder, arena, store, infix_op.rhs });
|
||||
}
|
||||
switch (node.tag) {
|
||||
.Catch => {
|
||||
try writeToken(builder, infix_op.op_token, .keyword);
|
||||
try await @asyncCall(child_frame, {}, writeNodeTokens, .{ builder, arena, store, infix_op.lhs });
|
||||
try await @asyncCall(child_frame, {}, writeNodeTokens, .{ builder, arena, store, infix_op.rhs });
|
||||
},
|
||||
.Period => {
|
||||
const rhs_str = handle.tree.tokenSlice(infix_op.rhs.firstToken());
|
||||
|
||||
@ -700,42 +701,48 @@ fn writeNodeTokens(builder: *Builder, arena: *std.heap.ArenaAllocator, store: *D
|
||||
else => {},
|
||||
}
|
||||
},
|
||||
.SliceType => {
|
||||
const slice_type = node.castTag(.SliceType).?;
|
||||
const ptr_info = slice_type.ptr_info;
|
||||
if (ptr_info.align_info) |align_info| {
|
||||
try writeToken(builder, slice_type.op_token + 2, .keyword);
|
||||
try await @asyncCall(child_frame, {}, writeNodeTokens, .{ builder, arena, store, align_info.node });
|
||||
}
|
||||
try writeToken(builder, ptr_info.const_token, .keyword);
|
||||
try writeToken(builder, ptr_info.volatile_token, .keyword);
|
||||
try writeToken(builder, ptr_info.allowzero_token, .keyword);
|
||||
try await @asyncCall(child_frame, {}, writeNodeTokens, .{ builder, arena, store, slice_type.rhs });
|
||||
},
|
||||
.PtrType => {
|
||||
const pointer_type = node.castTag(.PtrType).?;
|
||||
try writeToken(builder, pointer_type.op_token, .operator);
|
||||
const ptr_info = pointer_type.ptr_info;
|
||||
if (ptr_info.align_info) |align_info| {
|
||||
try writeToken(builder, pointer_type.op_token + 1, .keyword);
|
||||
try await @asyncCall(child_frame, {}, writeNodeTokens, .{ builder, arena, store, align_info.node });
|
||||
}
|
||||
try writeToken(builder, ptr_info.const_token, .keyword);
|
||||
try writeToken(builder, ptr_info.volatile_token, .keyword);
|
||||
try writeToken(builder, ptr_info.allowzero_token, .keyword);
|
||||
try await @asyncCall(child_frame, {}, writeNodeTokens, .{ builder, arena, store, pointer_type.rhs });
|
||||
},
|
||||
.ArrayType => {
|
||||
const array_type = node.castTag(.ArrayType).?;
|
||||
try await @asyncCall(child_frame, {}, writeNodeTokens, .{ builder, arena, store, array_type.len_expr });
|
||||
try await @asyncCall(child_frame, {}, writeNodeTokens, .{ builder, arena, store, array_type.rhs });
|
||||
},
|
||||
.ArrayTypeSentinel => {
|
||||
const array_type = node.castTag(.ArrayTypeSentinel).?;
|
||||
try await @asyncCall(child_frame, {}, writeNodeTokens, .{ builder, arena, store, array_type.len_expr });
|
||||
try await @asyncCall(child_frame, {}, writeNodeTokens, .{ builder, arena, store, array_type.sentinel });
|
||||
try await @asyncCall(child_frame, {}, writeNodeTokens, .{ builder, arena, store, array_type.rhs });
|
||||
},
|
||||
.AddressOf, .Await, .BitNot, .BoolNot, .OptionalType, .Negation, .NegationWrap, .Resume, .Try => {
|
||||
const prefix_op = node.cast(ast.Node.SimplePrefixOp).?;
|
||||
const tok_type: TokenType = switch (node.tag) {
|
||||
.Try, .Await, .Resume => .keyword,
|
||||
else => .operator,
|
||||
};
|
||||
|
||||
switch (node.tag) {
|
||||
.ArrayType => {
|
||||
const info = node.castTag(.ArrayType).?;
|
||||
try await @asyncCall(child_frame, {}, writeNodeTokens, .{ builder, arena, store, info.len_expr });
|
||||
},
|
||||
.SliceType, .PtrType => {
|
||||
const info = switch (node.tag) {
|
||||
.PtrType => node.castTag(.PtrType).?.ptr_info,
|
||||
.SliceType => node.castTag(.SliceType).?.ptr_info,
|
||||
else => return,
|
||||
};
|
||||
|
||||
if (node.tag == .PtrType) try writeToken(builder, prefix_op.op_token, tok_type);
|
||||
|
||||
if (info.align_info) |align_info| {
|
||||
if (node.tag == .PtrType) {
|
||||
try writeToken(builder, prefix_op.op_token + 1, .keyword);
|
||||
} else {
|
||||
try writeToken(builder, prefix_op.op_token + 2, .keyword);
|
||||
}
|
||||
try await @asyncCall(child_frame, {}, writeNodeTokens, .{ builder, arena, store, align_info.node });
|
||||
}
|
||||
try writeToken(builder, info.const_token, .keyword);
|
||||
try writeToken(builder, info.volatile_token, .keyword);
|
||||
try writeToken(builder, info.allowzero_token, .keyword);
|
||||
},
|
||||
else => try writeToken(builder, prefix_op.op_token, tok_type),
|
||||
}
|
||||
|
||||
try await @asyncCall(child_frame, {}, writeNodeTokens, .{ builder, arena, store, prefix_op.rhs });
|
||||
},
|
||||
else => {},
|
||||
|
Loading…
Reference in New Issue
Block a user