tools-lsp-tree-sitter
LSP and tree-sitter
A language server resolves symbols the way the compiler does: it knows the real definition, every reference, the implementations of an interface, and the diagnostics the toolchain reports. tree-sitter parses syntax without resolution — fast, language-agnostic, but it cannot tell you what a name resolves to. Reach for LSP when you need semantic truth; fall back to tree-sitter when no server is configured.
Evidence dimensions: semantic (LSP) and structural (tree-sitter).
When to use
Use LSP to confirm a real call/reference relationship before claiming coupling, to find every implementation of a boundary interface, to verify callers/callees at a seam, and to surface compiler diagnostics. Use tree-sitter syntax queries when LSP is unavailable or when the question is purely syntactic (find all functions, all type declarations) and a server would be overkill.