Skip to content

Commit f6b95a6

Browse files
committed
feat(core): support filetype syntax and lsp
Add a compiled Tree-sitter language registry for common file types and select highlighting by buffer extension. Extend LSP configuration with document selectors while preserving existing single-language server configs.
1 parent 650de27 commit f6b95a6

10 files changed

Lines changed: 780 additions & 81 deletions

File tree

Cargo.lock

Lines changed: 116 additions & 13 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,15 @@ textwrap = "0.16"
3030
thiserror = "1.0"
3131
tokio = { version = "1.41.0", features = ["full"] }
3232
toml = "0.8.10"
33-
tree-sitter = "0.20.10"
34-
tree-sitter-rust = "0.20.4"
33+
tree-sitter = "0.25"
34+
tree-sitter-javascript = "0.25.0"
35+
tree-sitter-json = "0.24.8"
36+
tree-sitter-md = "0.5.3"
37+
tree-sitter-python = "0.25.0"
38+
tree-sitter-rust = "0.24.2"
39+
tree-sitter-toml-ng = "0.7.0"
40+
tree-sitter-typescript = "0.23.2"
41+
tree-sitter-yaml = "0.7.2"
3542
unicode-segmentation = "1.12.0"
3643
unicode-width = "0.2"
3744
uuid = { version = "1.12.0", features = ["v4"] }
38-

README.md

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,12 +89,26 @@ cursor_line = true
8989
[lsp]
9090
enabled = true
9191

92+
# Built-in syntax highlighting covers Rust, Markdown, JavaScript,
93+
# TypeScript/TSX, JSON, TOML, YAML, and Python. LSP defaults are provided for
94+
# those file types and start only when a matching file is opened.
95+
9296
[lsp.servers.typescript]
9397
command = "typescript-language-server"
9498
args = ["--stdio"]
99+
root_markers = ["package.json", "tsconfig.json", "jsconfig.json", ".git"]
100+
101+
[[lsp.servers.typescript.documents]]
95102
language_id = "typescript"
96-
file_extensions = ["ts", "tsx"]
97-
root_markers = ["package.json", ".git"]
103+
file_extensions = ["ts"]
104+
105+
[[lsp.servers.typescript.documents]]
106+
language_id = "typescriptreact"
107+
file_extensions = ["tsx"]
108+
109+
[[lsp.servers.typescript.documents]]
110+
language_id = "javascript"
111+
file_extensions = ["js", "mjs", "cjs"]
98112

99113
# Plugin settings
100114
[plugins]

default_config.toml

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,32 @@ log_file = "/tmp/red.log"
2424
# them.
2525
#show_diagnostics = false
2626

27+
# Language servers are selected by file extension. The built-in defaults cover
28+
# Rust, Markdown, JavaScript/TypeScript, JSON, TOML, YAML, and Python. You can
29+
# override or add servers here. Existing single-language configs still work:
30+
#
31+
# [lsp.servers.rust]
32+
# command = "rust-analyzer"
33+
# args = ["-v"]
34+
# language_id = "rust"
35+
# file_extensions = ["rs"]
36+
# root_markers = ["Cargo.toml", ".git"]
37+
#
38+
# Servers that handle multiple language ids can use document selectors:
39+
#
40+
# [lsp.servers.typescript]
41+
# command = "typescript-language-server"
42+
# args = ["--stdio"]
43+
# root_markers = ["package.json", "tsconfig.json", "jsconfig.json", ".git"]
44+
#
45+
# [[lsp.servers.typescript.documents]]
46+
# language_id = "typescript"
47+
# file_extensions = ["ts"]
48+
#
49+
# [[lsp.servers.typescript.documents]]
50+
# language_id = "javascript"
51+
# file_extensions = ["js", "mjs", "cjs"]
52+
2753
[keys.insert]
2854
Enter = "InsertNewLine"
2955
Backspace = "DeletePreviousChar"

0 commit comments

Comments
 (0)