Only return highlights for symbols in current document
This seems to only occur when highlighting "field access" symbols, e.g. "bar" in a statement such as `foo.bar`. This is because the `symbolReferencesInternal` function finds the reference to the field in the container even when the container is not in the current document.
This commit is contained in:
parent
8847ed54f9
commit
c4f3cd0efa
@ -1144,12 +1144,15 @@ fn referencesDefinitionGlobal(
|
|||||||
|
|
||||||
const result: types.ResponseParams = if (highlight) result: {
|
const result: types.ResponseParams = if (highlight) result: {
|
||||||
var highlights = try std.ArrayList(types.DocumentHighlight).initCapacity(server.arena.allocator(), locs.items.len);
|
var highlights = try std.ArrayList(types.DocumentHighlight).initCapacity(server.arena.allocator(), locs.items.len);
|
||||||
|
const uri = handle.uri();
|
||||||
for (locs.items) |loc| {
|
for (locs.items) |loc| {
|
||||||
|
if (std.mem.eql(u8, loc.uri, uri)) {
|
||||||
highlights.appendAssumeCapacity(.{
|
highlights.appendAssumeCapacity(.{
|
||||||
.range = loc.range,
|
.range = loc.range,
|
||||||
.kind = .Text,
|
.kind = .Text,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
}
|
||||||
break :result .{ .DocumentHighlight = highlights.items };
|
break :result .{ .DocumentHighlight = highlights.items };
|
||||||
} else .{ .Locations = locs.items };
|
} else .{ .Locations = locs.items };
|
||||||
|
|
||||||
@ -1187,12 +1190,15 @@ fn referencesDefinitionFieldAccess(
|
|||||||
);
|
);
|
||||||
const result: types.ResponseParams = if (highlight) result: {
|
const result: types.ResponseParams = if (highlight) result: {
|
||||||
var highlights = try std.ArrayList(types.DocumentHighlight).initCapacity(server.arena.allocator(), locs.items.len);
|
var highlights = try std.ArrayList(types.DocumentHighlight).initCapacity(server.arena.allocator(), locs.items.len);
|
||||||
|
const uri = handle.uri();
|
||||||
for (locs.items) |loc| {
|
for (locs.items) |loc| {
|
||||||
|
if (std.mem.eql(u8, loc.uri, uri)) {
|
||||||
highlights.appendAssumeCapacity(.{
|
highlights.appendAssumeCapacity(.{
|
||||||
.range = loc.range,
|
.range = loc.range,
|
||||||
.kind = .Text,
|
.kind = .Text,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
}
|
||||||
break :result .{ .DocumentHighlight = highlights.items };
|
break :result .{ .DocumentHighlight = highlights.items };
|
||||||
} else .{ .Locations = locs.items };
|
} else .{ .Locations = locs.items };
|
||||||
try send(writer, server.arena.allocator(), types.Response{
|
try send(writer, server.arena.allocator(), types.Response{
|
||||||
@ -1218,12 +1224,15 @@ fn referencesDefinitionLabel(
|
|||||||
try references.labelReferences(&server.arena, decl, server.offset_encoding, include_decl, &locs, std.ArrayList(types.Location).append);
|
try references.labelReferences(&server.arena, decl, server.offset_encoding, include_decl, &locs, std.ArrayList(types.Location).append);
|
||||||
const result: types.ResponseParams = if (highlight) result: {
|
const result: types.ResponseParams = if (highlight) result: {
|
||||||
var highlights = try std.ArrayList(types.DocumentHighlight).initCapacity(server.arena.allocator(), locs.items.len);
|
var highlights = try std.ArrayList(types.DocumentHighlight).initCapacity(server.arena.allocator(), locs.items.len);
|
||||||
|
const uri = handle.uri();
|
||||||
for (locs.items) |loc| {
|
for (locs.items) |loc| {
|
||||||
|
if (std.mem.eql(u8, loc.uri, uri)) {
|
||||||
highlights.appendAssumeCapacity(.{
|
highlights.appendAssumeCapacity(.{
|
||||||
.range = loc.range,
|
.range = loc.range,
|
||||||
.kind = .Text,
|
.kind = .Text,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
}
|
||||||
break :result .{ .DocumentHighlight = highlights.items };
|
break :result .{ .DocumentHighlight = highlights.items };
|
||||||
} else .{ .Locations = locs.items };
|
} else .{ .Locations = locs.items };
|
||||||
try send(writer, server.arena.allocator(), types.Response{
|
try send(writer, server.arena.allocator(), types.Response{
|
||||||
|
Loading…
Reference in New Issue
Block a user