Запуск языка сервера с командой: lua-language-server

Вопрос или проблема

Я недавно перешел с менеджера плагинов Packer на Lazy.

Использую LSP, LspConfig, Mason, MasonLspConfig с несколькими языковыми серверами для программирования.

Проблема в том, что Neovim испытывает трудности с доступом к этим серверам. Это работало с менеджером пакетов Packer. Возможно, я что-то неправильно сконфигурировал, но я не имею представления, в чем может быть проблема.

Языковые серверы установлены и добавлены в PATH.

Запуск языкового сервера с командой: `lua-language-server` не удался с сообщением об ошибке: EACCES: доступ запрещен

Команда “lua-language-server” как таковая доступна.

Я использую Fish shell в качестве стандартного шелла.

Вот мой файл конфигурации плагинов:

return {
    { "lvimuser/lsp-inlayhints.nvim" },
    { 
        "neovim/nvim-lspconfig",
        dependencies = { "lvimuser/lsp-inlayhints.nvim" },
        config = function()
          local lspconfig = require("lspconfig")

          lspconfig.gopls.setup({
            on_attach = function(client, bufnr)
              require("settings/shared").on_attach(client, bufnr)
              require("lsp-inlayhints").setup({
                inlay_hints = {
                  type_hints = {
                    prefix = "=> "
                  },
                },
              })
              require("lsp-inlayhints").on_attach(client, bufnr)
              require("illuminate").on_attach(client)
            end,
            settings = {
              gopls = {
                analyses = {
                  nilness = true,
                  unusedparams = true,
                  unusedwrite = true,
                  useany = true,
                },
                experimentalPostfixCompletions = true,
                gofumpt = true,
                staticcheck = true,
                usePlaceholders = true,
                hints = {
                  assignVariableTypes = true,
                  compositeLiteralFields = true,
                  compositeLiteralTypes = true,
                  constantValues = true,
                  functionTypeParameters = true,
                  parameterNames = true,
                  rangeVariableTypes = true,
                }
              },
            },
        })
        end
      },

      { "williamboman/mason.nvim" },
      { "Afourcat/treesitter-terraform-doc.nvim" },
      { "williamboman/mason-lspconfig.nvim", 
          dependencies = { "williamboman/mason.nvim" },
          config = function()
              local mason_lspconfig = require("mason-lspconfig")

              mason_lspconfig.setup({
                  PATH = "prepend",
                  ensure_installed = {
                    "eslint",
                    "gopls", -- ВНИМАНИЕ: Это может быть проблема с переключением goenv.
                    "marksman",
                    "rust_analyzer",
                    "sumneko_lua",
                    "terraformls",
                    "tflint",
                    "tsserver",
                    "yamlls",
                  }
              })

              mason_lspconfig.setup_handlers({
                  function(server_name)
                      require("lspconfig")[server_name].setup({
                      on_attach = function(client, bufnr)
                          require("settings/shared").on_attach(client, bufnr)
                          require("illuminate").on_attach(client)

                          if server_name == "terraformls" then
                          require("treesitter-terraform-doc").setup()
                          end
                      end
                    })
                  end
                  })
              end
              },

    { "simrat39/symbols-outline.nvim",
      config = function()
        require("symbols-outline").setup({
          auto_close = false,
          highlight_hovered_item = true,
          position = "left",
          width = 15,
          symbols = {
            File = { icon = "", hl = "GruvboxAqua" },
            Module = { icon = "", hl = "GruvboxBlue" },
            Namespace = { icon = "", hl = "GruvboxBlue" },
            Package = { icon = "", hl = "GruvboxBlue" },
            Class = { icon = "𝓒", hl = "GruvboxGreen" },
            Method = { icon = "ƒ", hl = "GruvboxOrange" },
            Property = { icon = "", hl = "GruvboxOrange" },
            Field = { icon = "", hl = "GruvboxRed" },
            Constructor = { icon = "", hl = "TSConstructor" },
            Enum = { icon = "ℰ", hl = "GruvboxGreen" },
            Interface = { icon = "ﰮ", hl = "GruvboxGreen" },
            Function = { icon = "", hl = "GruvboxYellow" },
            Variable = { icon = "", hl = "GruvboxPurple" },
            Constant = { icon = "", hl = "GruvboxPurple" },
            String = { icon = "𝓐", hl = "GruvboxGray" },
            Number = { icon = "#", hl = "TSNumber" },
            Boolean = { icon = "⊨", hl = "TSBoolean" },
            Array = { icon = "", hl = "GruvboxPurple" },
            Object = { icon = "⦿", hl = "GruvboxGreen" },
            Key = { icon = "🔐", hl = "GruvboxGreen" },
            Null = { icon = "NULL", hl = "GruvboxGreen" },
            EnumMember = { icon = "", hl = "GruvboxRed" },
            Struct = { icon = "𝓢", hl = "GruvboxGreen" },
            Event = { icon = "🗲", hl = "GruvboxGreen" },
            Operator = { icon = "+", hl = "TSOperator" },
            TypeParameter = { icon = "𝙏", hl = "GruvboxRed" }
          },
        })
      end
    },

    { "mfussenegger/nvim-lint",
      config = function()
        local lint = require("lint")
        lint.linters_by_ft = {
          go = { "golangcilint" },
        }
      end
    },
}

После перезагрузки системы lsp-config обнаружил lua-language-server.
Думаю, что PATH не был правильно подключен.

Для тех, у кого похожие проблемы — убедитесь, что языковые серверы установлены, добавлены в PATH правильно, и не забудьте подключить ваш файл конфигурации с переменными.

Вот мои переменные для lua-language-server и сервера gopls в формате fish shell:

# Lua
set -gx PATH ~/.config/lsp/lua-language-server/bin $PATH

# Go
set -gx GOPATH ~/go
set -gx PATH /usr/local/go/bin $PATH
set -gx PATH $GOPATH/bin $PATH

А вот они в формате bash:

# Lua
export PATH=$PATH:$HOME/.config/lsp/lua-language-server/bin

# Go
export GOPATH=$HOME/go
export PATH=$PATH:/usr/local/go/bin
export PATH=$PATH:$GOPATH/bin

Ответ или решение

Диагностика проблемы с запуском lua-language-server в Neovim и пути решения

Проблема, связанная с запуском lua-language-server через команду lua-language-server, сопровождаемая ошибкой EACCES: permission denied, указывает на то, что Neovim не может получить доступ к необходимым ресурсам из-за ограничений прав. Возможно, это связано с неправильной настройкой PATH или прав доступа к исполняемым файлам.

Анализ проблемной ситуации

Вы столкнулись с проблемой после перехода с менеджера плагинов Packer на Lazy, и хотя сам lua-language-server установлен и доступен в PATH, ошибка указывает на нарушение прав доступа. Важно убедиться в корректности переноса конфигурации и что все настройки произведены правильно в новой среде.

Шаги по устранению неисправностей

  1. Проверка прав доступа
    Убедитесь, что у fish shell есть необходимые права на исполняемый файл lua-language-server. Проверьте права с помощью команды ls -l, и если требуется, измените их через chmod +x.

  2. Назначение и проверка переменной PATH
    Убедитесь, что директория с lua-language-server действительно добавлена в PATH. В fish shell необходимо использовать команду:

    set -gx PATH ~/.config/lsp/lua-language-server/bin $PATH

    Перепроверьте текущие значения PATH через:

    echo $PATH

    Важной проверкой будет сравнение текущих настроек PATH с теми, которые были в Packer.

  3. Проверка конфигурации Neovim
    Отредактируйте конфигурационный файл для Neovim. Убедитесь, что mason-lspconfig и lspconfig правильно сконфигурированы для работы с lua-language-server:

    local lspconfig = require("lspconfig")
    lspconfig.sumneko_lua.setup({
       on_attach = on_attach,
       settings = {
           Lua = {
               runtime = {
                   version = 'LuaJIT',
               },
               diagnostics = {
                   globals = {'vim'},
               },
               workspace = {
                   library = vim.api.nvim_get_runtime_file("", true),
               },
               telemetry = {
                   enable = false,
               },
           },
       },
    })
  4. Перезапуск и проверка окружения
    После каждой правки конфигураций окружения перезапускайте fish shell или используйте команду source для применения изменений.

  5. Диагностика через bash
    Если проблема сохраняется, временно переключитесь на bash для проверки функциональности lua-language-server:

    export PATH=$PATH:$HOME/.config/lsp/lua-language-server/bin

    Если server запускается корректно, проблема может быть связана с использованием fish shell.

Рекомендации и последующие шаги

Для предотвращения подобных проблем в будущем, разработайте процедуру переноса конфигураций при смене менеджеров плагинов и добавлении новых плагинов. Это поможет сохранить интеграцию всех используемых инструментов и сред без сбоев в их работе.

Также рекомендуется документировать все изменения в конфигурациях и переменных сред окружения, чтобы в случае возникновения проблем можно было быстрее выявить и устранить их причину.

Заключение

Следуя вышеописанным шагам и рекомендациям, вы сможете устранить текущие проблемы с lua-language-server. Контроль прав доступа, корректность настроек пути PATH и конфигураций Neovim являются ключевыми действиями для функциональной работы LSP в среде разработки. Это обеспечит стабильный и надежный процесс разработки с использованием новых инструментов и плагинов.

Оцените материал
Добавить комментарий

Капча загружается...