Uses ast-grep, so tree-sitter, not LSP, but still potentially useful.