aboutsummaryrefslogtreecommitdiff
path: root/.config/nvim/lsp/vala_ls.lua
diff options
context:
space:
mode:
Diffstat (limited to '.config/nvim/lsp/vala_ls.lua')
-rw-r--r--.config/nvim/lsp/vala_ls.lua35
1 files changed, 35 insertions, 0 deletions
diff --git a/.config/nvim/lsp/vala_ls.lua b/.config/nvim/lsp/vala_ls.lua
new file mode 100644
index 0000000..f67034e
--- /dev/null
+++ b/.config/nvim/lsp/vala_ls.lua
@@ -0,0 +1,35 @@
+---@brief
+---
+--- https://github.com/Prince781/vala-language-server
+
+local meson_matcher = function(path)
+ local pattern = 'meson.build'
+ local f = vim.fn.glob(table.concat({ path, pattern }, '/'))
+ if f == '' then
+ return nil
+ end
+ for line in io.lines(f) do
+ -- skip meson comments
+ if not line:match '^%s*#.*' then
+ local str = line:gsub('%s+', '')
+ if str ~= '' then
+ if str:match '^project%(' then
+ return path
+ else
+ break
+ end
+ end
+ end
+ end
+end
+
+---@type vim.lsp.Config
+return {
+ cmd = { 'vala-language-server' },
+ filetypes = { 'vala', 'genie' },
+ root_dir = function(bufnr, on_dir)
+ local fname = vim.api.nvim_buf_get_name(bufnr)
+ local root = vim.iter(vim.fs.parents(fname)):find(meson_matcher)
+ on_dir(root or vim.fs.dirname(vim.fs.find('.git', { path = fname, upward = true })[1]))
+ end,
+}