LINUX.ORG.RU

Как установить phpactor в neovim, или что выбрать вместо него?

 ,


0

2

Возникла ситуация, что не получается установить phpactor в neovim посредством пакетного менеджера Lazy.

Многочисленные поиски сводятся к тому, что вместо него устанавливается intelephense через npm

npm i intelephense -g

Но это условно-бесплатная альтернатива, т.е. больше функционала доступно лишь по подписке, а оно мне не нужно.

Версии исполняемых файлов

  • Composer 2.7.8
  • PHP 8.3.11
  • Phpactor 2024.06.30.0

Cтруктура init.lua

-- Basic
require('core.plugins')
require('core.mappings')
require('core.configs')

-- Plugins
require('plugins.treesitter')
require('plugins.lspconfig')
require('plugins.cmp')
require('plugins.lint')
require('plugins.mason')
require('plugins.lualine')

Cтруктура lspconfig.lua

-- Setup language servers.
local lspconfig = require('lspconfig')
lspconfig.pylsp.setup {}
lspconfig.clangd.setup {}
lspconfig.phpactor.setup {
	on_attach = on_attach,
    init_options = {
        ["language_server_phpstan.enabled"] = false,
        ["language_server_psalm.enabled"] = false,
    }
}
lspconfig.html.setup {}

-- Global mappings.
-- See `:help vim.diagnostic.*` for documentation on any of the below functions
vim.keymap.set('n', '<space>e', vim.diagnostic.open_float)
vim.keymap.set('n', '[d', vim.diagnostic.goto_prev)
vim.keymap.set('n', ']d', vim.diagnostic.goto_next)
vim.keymap.set('n', '<space>q', vim.diagnostic.setloclist)

-- Use LspAttach autocommand to only map the following keys
-- after the language server attaches to the current buffer
vim.api.nvim_create_autocmd('LspAttach', {
  group = vim.api.nvim_create_augroup('UserLspConfig', {}),
  callback = function(ev)
    -- Enable completion triggered by <c-x><c-o>
    vim.bo[ev.buf].omnifunc = 'v:lua.vim.lsp.omnifunc'

    -- Buffer local mappings.
    -- See `:help vim.lsp.*` for documentation on any of the below functions
    local opts = { buffer = ev.buf }
    vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, opts)
    vim.keymap.set('n', 'gd', vim.lsp.buf.definition, opts)
    vim.keymap.set('n', 'K', vim.lsp.buf.hover, opts)
    vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, opts)
    vim.keymap.set('n', '<C-k>', vim.lsp.buf.signature_help, opts)
    vim.keymap.set('n', '<space>wa', vim.lsp.buf.add_workspace_folder, opts)
    vim.keymap.set('n', '<space>wr', vim.lsp.buf.remove_workspace_folder, opts)
    vim.keymap.set('n', '<space>wl', function()
      print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
    end, opts)
    vim.keymap.set('n', '<space>D', vim.lsp.buf.type_definition, opts)
    vim.keymap.set('n', '<space>rn', vim.lsp.buf.rename, opts)
    vim.keymap.set({ 'n', 'v' }, '<space>ca', vim.lsp.buf.code_action, opts)
    vim.keymap.set('n', 'gr', vim.lsp.buf.references, opts)
    vim.keymap.set('n', '<space>f', function()
      vim.lsp.buf.format { async = true }
    end, opts)
  end,
})

Конфигурация plugins.lua (конфигурация урезана в целях компактности)

require("lazy").setup({
{ 'nvim-treesitter/nvim-treesitter' },
{ 'neovim/nvim-lspconfig', },
-- mason
{ "williamboman/mason.nvim", },
{ "williamboman/mason-lspconfig.nvim" }
-- completion
{ 'hrsh7th/cmp-nvim-lsp' },
{ 'hrsh7th/cmp-buffer' },
{ 'hrsh7th/cmp-path' },
{ 'hrsh7th/cmp-cmdline' },
{ 'hrsh7th/nvim-cmp' },
})

Как можно заметить, у меня установлен mason.nvim, через него установлен phpactor, который лежит в ~/.local/share/nvim/mason/packages/phpactor/phpactor.

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

Фрагмент файла cmp.lua

local cmp = require'cmp'
cmp.setup({
    snippet = {
      expand = function(args)
        require('luasnip').lsp_expand(args.body) -- For `luasnip` users.
      end,
    },
    window = {
      -- completion = cmp.config.window.bordered(),
      -- documentation = cmp.config.window.bordered(),
    },
    mapping = cmp.mapping.preset.insert({
    ["<C-k>"] = cmp.mapping.select_prev_item(), -- previous suggestion
    ["<C-j>"] = cmp.mapping.select_next_item(), -- next suggestion
    ["<C-b>"] = cmp.mapping.scroll_docs(-4),
    ["<C-f>"] = cmp.mapping.scroll_docs(4),
    ["<C-Space>"] = cmp.mapping.complete(), -- show completion suggestions
    ["<C-e>"] = cmp.mapping.abort(), -- close completion window
    ["<CR>"] = cmp.mapping.confirm({ select = false }),
  }),
    sources = cmp.config.sources({
      { name = 'nvim_lsp' },
      { name = 'luasnip' }, -- For luasnip users.
      { name = 'buffer' },
      { name = 'path' }, -- For vsnip users. 
   }),
})


cmp.setup.cmdline({ '/', '?' }, {
    mapping = cmp.mapping.preset.cmdline(),
    sources = {
      { name = 'buffer' }
    }
  })

  cmp.setup.cmdline(':', {
    mapping = cmp.mapping.preset.cmdline(),
    sources = cmp.config.sources({ { name = 'path' } }, 
    { { name = 'cmdline' } })
  })

  -- Set up lspconfig.
  local capabilities = require('cmp_nvim_lsp').default_capabilities()
    
  local phpactor_capabilities = vim.lsp.protocol.make_client_capabilities()
        phpactor_capabilities.textDocument.foldingRange = {
        dynamicRegistration = false,
        lineFoldingOnly = true
    }

    phpactor_capabilities['textDocument']['codeAction'] = {}
  
    require('lspconfig')['phpactor'].setup {
        capabilities = phpactor_capabilities,
        on_attach = on_attach
  }

Структура configs.lua

vim.wo.number = true
vim.wo.relativenumber = true

vim.opt.shell = "/usr/bin/zsh"
vim.opt.number = true
vim.opt.swapfile = false
vim.opt.mouse = "a"
vim.opt.mousefocus = true
vim.opt.clipboard = "unnamedplus"

vim.opt.termguicolors = true
vim.cmd('colorscheme retrobox')

-- Indent Settings
vim.opt.expandtab = true
vim.opt.shiftwidth = 4
vim.opt.tabstop = 4
vim.opt.softtabstop = 4
vim.opt.smartindent = true

Послесловие. Возможно трудности с конфигурацией phpactor, которую так и не понял, либо composer.



Последнее исправление: yukiome (всего исправлений: 1)

Пробовал на чистом конфиге по инструкции с офф.сайта? Может другие плагины ломают. https://phpactor.readthedocs.io/en/master/lsp/vim.html

А вот тут есть vim с настроенным PHP:

https://www.jetbrains.com/ru-ru/phpstorm/

https://plugins.jetbrains.com/plugin/164-ideavim

По сравнению с ним phpactor и другие LSP серверы как notepad.exe, люблю открытое ПО, но это жестокая реальность

MOPKOBKA ★★★★
()
Последнее исправление: MOPKOBKA (всего исправлений: 4)
Ответ на: комментарий от MOPKOBKA

Часть с сайта https://phpactor.readthedocs.io/en/master/lsp/vim.html про установку в vim буквально в lspconfig.lua видоизменил, но для плюсов clangd ведь работает. Может и вправду дело в композере или в самом акторе.

P.S. А ideavim может устанавливаться отдельно или в самой intelli j ide?

yukiome
() автор топика
Ответ на: комментарий от yukiome

Да, вижу что ты оттуда взял, но думаю именно в сочетании с другими плагинами могло сломаться.

IdeaVIM это плагин, поэтому просто скачиваешь phpstorm по vpn если в россии, жмешь Start Trial, и туда ставишь IdeaVIM плагин. После окончания месячного триала удаляешь папку .java, .local/share/JetBrains и снова жмешь Start Trial. Если не в России то можешь купить.

MOPKOBKA ★★★★
()
Ответ на: комментарий от MOPKOBKA

Проблема решена.

Решил скачать гит-версию https://phpactor.readthedocs.io/en/master/usage/standalone.html#manual-installation и работает довольно хорошо с учетом настроек, приведенных в теме.

Правда нужна для этого инициализированная директория с композером, который подтянет нужное, в остальном базовые вещи выводит.

yukiome
() автор топика