language-server: Support simple semantic queries. (#7639)

Add support for "jump to declaration", "find references", type
information on hover. This support is strictly single-file for now; only
references and declarations within the same file are found. We could go
a bit beyond that, but to properly handle cross-file references we'll
need to build an index and a compilation database, which is beyond the
scope of this change.

On hover, we provide the type information for the instruction under the
cursor as-is. This is frequently not very useful, as the type of a
function F is simply "<type of F>", but is a starting point for richer
information.

Assisted-by: Claude Code
This commit is contained in:
Richard Smith
2026-08-19 14:35:05 +00:00
committed by GitHub
parent a872123a73
commit c78751338b
35 changed files with 1256 additions and 51 deletions
+12
View File
@@ -205,10 +205,22 @@ Context::Context(const InstallPaths* installation,
vfs_ = vfs;
}
auto Context::File::sem_ir_index() const -> const SemIRIndex* {
if (!sem_ir_index_) {
const auto* sem_ir = this->sem_ir();
if (!sem_ir) {
return nullptr;
}
sem_ir_index_.emplace(*sem_ir, tree_and_subtrees());
}
return &*sem_ir_index_;
}
auto Context::File::SetText(Context& context, std::optional<int64_t> version,
llvm::StringRef text) -> void {
// Clear state dependent on the source text.
compile_driver_.reset();
sem_ir_index_.reset();
text_ = text.str();