aboutsummaryrefslogtreecommitdiffstats
path: root/lua/lspconfig/vala_ls.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua/lspconfig/vala_ls.lua')
-rw-r--r--lua/lspconfig/vala_ls.lua27
1 files changed, 24 insertions, 3 deletions
diff --git a/lua/lspconfig/vala_ls.lua b/lua/lspconfig/vala_ls.lua
index 3b19786c..f2aba74b 100644
--- a/lua/lspconfig/vala_ls.lua
+++ b/lua/lspconfig/vala_ls.lua
@@ -1,13 +1,34 @@
local configs = require 'lspconfig/configs'
local util = require 'lspconfig/util'
+local meson_matcher = function (path)
+ local pattern = "meson.build"
+ local f = vim.fn.glob(util.path.join(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
+
configs.vala_ls = {
default_config = {
cmd = {'vala-language-server'},
filetypes = {'vala', 'genie'},
- root_dir = function(fname)
- return util.root_pattern("meson.build")(fname)
- or util.find_git_ancestor(fname)
+ root_dir = function (fname)
+ local root = util.search_ancestors(fname, meson_matcher)
+ return root or util.find_git_ancestor(fname)
end,
},
docs = {