Skip to content
This repository has been archived by the owner on Oct 16, 2021. It is now read-only.

Unable to add graphql-language-server #14

Closed
akinsho opened this issue Mar 26, 2021 · 5 comments
Closed

Unable to add graphql-language-server #14

akinsho opened this issue Mar 26, 2021 · 5 comments

Comments

@akinsho
Copy link
Contributor

akinsho commented Mar 26, 2021

Hey thanks for your work on this plugins 馃憤馃徔 .

I've just tried to add in an installer for graphql using the custom installer setup instructions and hit a blocking issue.

function as_utils.lsp.add_custom_installer()
  -- npm install -g graphql-language-service-cli
  local config = require('lspconfig').graphql.document_config
  require('lspconfig.configs').graphql = {default_config = {}} --This errors if nil is set <-------------
  config.default_config.cmd[1] = "./node_modules/.bin/graphql-language-service-cli"

  require('lspinstall.servers').graphql = vim.tbl_extend('error', config, {
      install_script = [[
      ! -f package.json && npm init -y --scope=lspinstall || true
      npm install graphql-language-service-cli@latest
      ]],
      uninstall_script = nil
    })
end

I do this before calling setup of the lspinstall plugin or doing any setup of the lsp itself using lspconfig however I /packer/opt/nvim-lspconfig/lua/lspconfig/configs.lua:10: attempt to index local 'config_def' (a nil value)
Looking at the code in lspconfig it seems to have a validation and looks like expects this field to not be nil so throws errors.
I tried setting it to an empty object which silences the error but doesn't give me the option to install the server

@kabouzeid
Copy link
Owner

Took me some time to debug. You need to change:
lspconfig.configs -> lspconfig/configs
lspinstall.servers -> lspinstall/servers

Don't ask me why. This could be a bug in neovim, but I'm not a lua expert.

@kabouzeid
Copy link
Owner

Internally nvim-lspinstall uses require("lspinstall/servers"). When you require("lspinstall.servers") it seems to compare the literal string values of the require call. Since they don't match, the module is loaded twice. Again, I'm not sure if this is a bug or expected behavior in Lua.

kabouzeid added a commit that referenced this issue Mar 26, 2021
@akinsho
Copy link
Contributor Author

akinsho commented Mar 27, 2021

@kabouzeid that's quite strange seems like an nvim bug potentially since I don't the choice of separators in a require should cause code to behave differently. Anyway that helped. It seems to work fine now. Just a couple of non blocking issues I noticed.

the -f flag in the example seems to cause an error if run from zsh so maybe somehow the shell used needs to be set explicitly to bash rather than the user's 馃し馃徔 not sure what that flag does anyway.

Also the script can be reloaded more than once without causing errors. I use packer and automatically reload my configs on change but if the custom installer setup is called more than once it seems to throw errors about the require('lspconfig').<langserver>. that access returns nil tbh this is probably just a packer related obscure bug so feel free to ignore that one.

@akinsho
Copy link
Contributor Author

akinsho commented Mar 27, 2021

I'm happy to contribute the gql installer if you'd like it's not particular different from any of the other npm installers

@kabouzeid
Copy link
Owner

This was a typo in the README, I fixed it now.

Replace ! -f package.json with [[ ! -f package.json ]] and also [[ with [=[ for the string literal delimiters.

This tests whether the file exists, and if not npm init -y --scope=lspinstall is executed. This works in any POSIX shell such as bash and zsh.

Not sure about the issue with packer, I'm still using Plug. If you send me a small packer config where this is happening, I can look into that.

How to add a bundled npm installer, see diagnosticls in this commit 94eb787

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants