aboutsummaryrefslogtreecommitdiff
path: root/.config/nvim/lsp/gh_actions_ls.lua
diff options
context:
space:
mode:
Diffstat (limited to '.config/nvim/lsp/gh_actions_ls.lua')
-rw-r--r--.config/nvim/lsp/gh_actions_ls.lua57
1 files changed, 57 insertions, 0 deletions
diff --git a/.config/nvim/lsp/gh_actions_ls.lua b/.config/nvim/lsp/gh_actions_ls.lua
new file mode 100644
index 0000000..f029ea7
--- /dev/null
+++ b/.config/nvim/lsp/gh_actions_ls.lua
@@ -0,0 +1,57 @@
+---@brief
+--- https://github.com/lttb/gh-actions-language-server
+---
+--- Language server for GitHub Actions.
+---
+--- The projects [forgejo](https://forgejo.org/) and [gitea](https://about.gitea.com/)
+--- design their actions to be as compatible to github as possible
+--- with only [a few differences](https://docs.gitea.com/usage/actions/comparison#unsupported-workflows-syntax) between the systems.
+--- The `gh_actions_ls` is therefore enabled for those `yaml` files as well.
+---
+--- The `gh-actions-language-server` can be installed via `npm`:
+---
+--- ```sh
+--- npm install -g gh-actions-language-server
+--- ```
+
+---@type vim.lsp.Config
+return {
+ cmd = { 'gh-actions-language-server', '--stdio' },
+ filetypes = { 'yaml' },
+
+ -- `root_dir` ensures that the LSP does not attach to all yaml files
+ root_dir = function(bufnr, on_dir)
+ local parent = vim.fs.dirname(vim.api.nvim_buf_get_name(bufnr))
+ if
+ vim.endswith(parent, '/.github/workflows')
+ or vim.endswith(parent, '/.forgejo/workflows')
+ or vim.endswith(parent, '/.gitea/workflows')
+ then
+ on_dir(parent)
+ end
+ end,
+ handlers = {
+ ['actions/readFile'] = function(_, result)
+ if type(result.path) ~= 'string' then
+ return nil, nil
+ end
+ local file_path = vim.uri_to_fname(result.path)
+ if vim.fn.filereadable(file_path) == 1 then
+ local f = assert(io.open(file_path, 'r'))
+ local text = f:read('*a')
+ f:close()
+
+ return text, nil
+ end
+ return nil, nil
+ end,
+ },
+ init_options = {}, -- needs to be present https://github.com/neovim/nvim-lspconfig/pull/3713#issuecomment-2857394868
+ capabilities = {
+ workspace = {
+ didChangeWorkspaceFolders = {
+ dynamicRegistration = true,
+ },
+ },
+ },
+}