Skip to content

Commit ff22709

Browse files
committed
fix treesitter
1 parent 13cccdc commit ff22709

2 files changed

Lines changed: 82 additions & 26 deletions

File tree

fnl/mods/lsp/lsp.fnl

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,8 @@
133133
:test true}
134134
:staticcheck true
135135
:usePlaceholders true}}}
136-
:lua_ls {:settings {:Lua {:diagnostics {:globals [:vim]}}}}
136+
:lua_ls {:filetypes [:lua]
137+
:settings {:Lua {:diagnostics {:globals [:vim]}}}}
137138
;:fennel_language_server {:default_config {:cmd [:$HOME/.local/bin/fennel-language-server]
138139
; :filetypes [:fennel]
139140
; :single_file_support true
@@ -142,7 +143,8 @@
142143
; :diagnostics {:globals [:vim
143144
; :module
144145
; :autoload]}}}}}
145-
:pylsp {:settings {:pylsp {:plugins {:pycodestyle {:enable false
146+
:pylsp {:filetypes [:python]
147+
:settings {:pylsp {:plugins {:pycodestyle {:enable false
146148
:ignore [;; continuation line indentation is not a multiple of four
147149
:E121
148150
;; expected 2 blank lines, found 1
@@ -160,12 +162,21 @@
160162
:pylsp_mypy {:enabled true
161163
:live_mode true}}}}
162164
:plugins {:rope_autoimport {:enabled true}}}
165+
:bashls {:filetypes [:bash :sh :zsh]}
166+
:dockerls {:filetypes [:dockerfile]}
167+
:jsonls {:filetypes [:json :jsonc]}
168+
:sqlls {:filetypes [:sql]}
169+
:jdtls {:filetypes [:java]}
170+
:rust_analyzer {:filetypes [:rust]}
163171
:clangd {:autostart true
164172
:capabilities {:offsetEncoding :utf-8}
165173
:filetypes [:c :cpp :cuda]}})
166174

167175
(local default_lsp_capabilities (cmp_nvim_lsp.default_capabilities))
168176

177+
(local enabled_servers [])
178+
(local ft_to_servers {})
179+
169180
(let [installed ((. masonlsp :get_installed_servers))]
170181
(each [_ server (ipairs installed)]
171182
(let [opts (or (. lsp_opt server) {})]
@@ -174,4 +185,25 @@
174185
default_lsp_capabilities
175186
(or (. opts :capabilities) {})))
176187
(vim.lsp.config server opts)
177-
(vim.lsp.enable server))))
188+
(let [filetypes (or (. opts :filetypes)
189+
(. (. vim.lsp.config server) :filetypes)
190+
[])]
191+
(each [_ ft (ipairs filetypes)]
192+
(when (not (. ft_to_servers ft))
193+
(tset ft_to_servers ft []))
194+
(table.insert (. ft_to_servers ft) server))))))
195+
196+
(vim.api.nvim_create_autocmd :FileType
197+
{:group (vim.api.nvim_create_augroup :lsp-enable
198+
{:clear true})
199+
:callback (fn [ev]
200+
(let [servers (or (. ft_to_servers
201+
(. ev :match))
202+
[])]
203+
(each [_ server (ipairs servers)]
204+
(when (not (. enabled_servers
205+
server))
206+
(vim.lsp.enable server)
207+
(tset enabled_servers
208+
server
209+
true)))))} )

fnl/mods/tools/treesitter.fnl

Lines changed: 47 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,24 @@
11
(module mods.tools.treesitter {autoload {treesitter nvim-treesitter}})
22

3+
(local parsers [:commonlisp
4+
:fennel
5+
:go
6+
:gomod
7+
:gowork
8+
:cpp
9+
:python
10+
:lua
11+
:vim
12+
:vimdoc
13+
:bash
14+
:gitcommit
15+
:gitignore
16+
:make
17+
:diff
18+
:dockerfile
19+
:yaml
20+
:json])
21+
322
(fn is-large-file [_ bufnr]
423
(or (> (vim.fn.getfsize (vim.fn.bufname bufnr)) (* 1024 1024))
524
; 1MB is rarely source code
@@ -11,26 +30,31 @@
1130
(fn disable-indent [ft bufnr]
1231
(or (is-large-file ft bufnr) (is-filetype ft bufnr)))
1332

14-
(treesitter.setup {:ensure_installed [:commonlisp
15-
:fennel
16-
:go
17-
:gomod
18-
:gowork
19-
:cpp
20-
:python
21-
:lua
22-
:vim
23-
:vimdoc
24-
:bash
25-
:gitcommit
26-
:gitignore
27-
:make
28-
:diff
29-
:dockerfile
30-
:yaml
31-
:json]
32-
:sync_install false
33-
:indent {:enable true :disable disable-indent}
34-
:highlight {:enable true
35-
:disable is-large-file
36-
:additional_vim_regex_highlighting false}})
33+
(fn maybe-start-highlighter [bufnr]
34+
(when (not (is-large-file nil bufnr))
35+
(vim.api.nvim_buf_call bufnr
36+
(fn []
37+
(pcall vim.treesitter.start)))))
38+
39+
(treesitter.setup)
40+
(treesitter.install parsers)
41+
42+
(vim.api.nvim_create_autocmd :FileType
43+
{:group (vim.api.nvim_create_augroup :treesitter
44+
{:clear true})
45+
:callback (fn [ev]
46+
(let [bufnr (. ev :buf)
47+
ft (vim.api.nvim_get_option_value :filetype
48+
{:buf bufnr})
49+
indentexpr "v:lua.require'nvim-treesitter'.indentexpr()"]
50+
(maybe-start-highlighter bufnr)
51+
(if (disable-indent ft bufnr)
52+
(when (= (vim.api.nvim_get_option_value :indentexpr
53+
{:buf bufnr})
54+
indentexpr)
55+
(vim.api.nvim_set_option_value :indentexpr
56+
""
57+
{:buf bufnr}))
58+
(vim.api.nvim_set_option_value :indentexpr
59+
indentexpr
60+
{:buf bufnr}))))})

0 commit comments

Comments
 (0)