aboutsummaryrefslogtreecommitdiff
path: root/.config/nvim/lsp/gh_actions_ls.lua
diff options
context:
space:
mode:
authorawy <awy@awy.one>2025-10-14 18:27:29 +0300
committerawy <awy@awy.one>2025-10-14 18:27:29 +0300
commitde009fd679e10d053fdcc10785f91ad5317449ea (patch)
tree60918a488b579588596cf4d509fde298dccbf15d /.config/nvim/lsp/gh_actions_ls.lua
parent9ea6cf81adb5d6abc59843de1db45913210f9320 (diff)
downloadhyprdots-de009fd679e10d053fdcc10785f91ad5317449ea.tar.gz
nvim revamp
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,
+ },
+ },
+ },
+}