diff options
Diffstat (limited to 'src/lsp/lsp.zig')
| -rw-r--r-- | src/lsp/lsp.zig | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/lsp/lsp.zig b/src/lsp/lsp.zig index 33e95570..8dc4da4f 100644 --- a/src/lsp/lsp.zig +++ b/src/lsp/lsp.zig @@ -31,11 +31,26 @@ pub const Req = struct { offset: u32, arg: []const u8 = "", root: []const u8 = "", + /// The other files open in the editor, for a query whose answer can + /// reach them (a rename, references): the server is told of each first, + /// or it answers from what it has seen and misses the rest. + others: []const Doc = &.{}, /// For `explain`: the query it narrates, read from `arg` (`<kind> /// <arg>`) by `explaining`; a definition when none was asked before. explains: Kind = .definition, }; +pub const Doc = struct { path: []const u8, source: [:0]const u8 }; + +/// Whether a query's answer can name places in other files, so every open +/// file of the server's language is synced before it is asked. +pub fn reachesOtherFiles(kind: Kind) bool { + return switch (kind) { + .rename, .references, .implementation, .workspace_symbols, .incoming_calls, .outgoing_calls, .supertypes, .subtypes => true, + else => false, + }; +} + /// An `explain` request made the one it narrates: `explains` and `arg` set /// from its `<kind> <arg>`; any other request as it is. pub fn explaining(req: Req) Req { |
