diff options
| author | Ashkan Kiani <ashkan.k.kiani@gmail.com> | 2019-11-17 09:58:52 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-11-17 09:58:52 -0800 |
| commit | ac3df47ffd418b0f3aec49612d9862364820ed8d (patch) | |
| tree | bc3e3a0a688b6a36b7ccd462395db7c86e8af2ea /scripts/README_template.md | |
| parent | [docgen] Update README.md (diff) | |
| download | nvim-lspconfig-ac3df47ffd418b0f3aec49612d9862364820ed8d.tar nvim-lspconfig-ac3df47ffd418b0f3aec49612d9862364820ed8d.tar.gz nvim-lspconfig-ac3df47ffd418b0f3aec49612d9862364820ed8d.tar.bz2 nvim-lspconfig-ac3df47ffd418b0f3aec49612d9862364820ed8d.tar.lz nvim-lspconfig-ac3df47ffd418b0f3aec49612d9862364820ed8d.tar.xz nvim-lspconfig-ac3df47ffd418b0f3aec49612d9862364820ed8d.tar.zst nvim-lspconfig-ac3df47ffd418b0f3aec49612d9862364820ed8d.zip | |
Use a template for README.md (#28)
Diffstat (limited to 'scripts/README_template.md')
| -rw-r--r-- | scripts/README_template.md | 174 |
1 files changed, 174 insertions, 0 deletions
diff --git a/scripts/README_template.md b/scripts/README_template.md new file mode 100644 index 00000000..049101bd --- /dev/null +++ b/scripts/README_template.md @@ -0,0 +1,174 @@ +# nvim-lsp + +WIP Common configurations for Language Servers. + +This repository aims to be a central location to store configurations for +Language Servers which leverage Neovim's built-in LSP client `vim.lsp` as the +client backbone. The `vim.lsp` implementation is made to be customizable and +greatly extensible, but most users just want to get up and going. This +plugin/library is for those people, although it still lets you customize +things as much as you want in addition to the defaults that this provides. + +**NOTE**: Requires current Neovim master as of 2019-11-13 + +**CONTRIBUTIONS ARE WELCOME!** + +There's a lot of language servers in the world, and not enough time. See +[`lua/nvim_lsp/*.lua`](https://github.com/neovim/nvim-lsp/blob/master/lua/nvim_lsp/) +for examples and ask us questions in the [Neovim +Gitter](https://gitter.im/neovim/neovim) to help us complete configurations for +*all the LSPs!* Read `CONTRIBUTING.md` for some instructions. NOTE: don't +modify `README.md`; it is auto-generated. + +If you don't know where to start, you can pick one that's not in progress or +implemented from [this excellent list compiled by the coc.nvim +contributors](https://github.com/neoclide/coc.nvim/wiki/Language-servers) or +[this other excellent list from the emacs lsp-mode +contributors](https://github.com/emacs-lsp/lsp-mode#supported-languages) +and create a new file under `lua/nvim_lsp/SERVER_NAME.lua`. We recommend +looking at `lua/nvim_lsp/texlab.lua` for the most extensive example, but all of +them are good references. + +## Progress + +Implemented language servers: +{{implemented_servers_list}} + +Planned servers to implement (by me, but contributions welcome anyway): +- [ccls](https://github.com/MaskRay/ccls) +- [lua-language-server](https://github.com/sumneko/lua-language-server) +- [rust-analyzer](https://github.com/rust-analyzer/rust-analyzer) + +In progress: +- ... + +## Install + +`Plug 'neovim/nvim-lsp'` + +## Usage + +Servers configurations can be set up with a "setup function." These are +functions to set up servers more easily with some server specific defaults and +more server specific things like commands or different diagnostics. + +The "setup functions" are `call nvim_lsp#setup({name}, {config})` from vim and +`nvim_lsp[name].setup(config)` from Lua. + +Servers may define extra functions on the `nvim_lsp.SERVER` table, e.g. +`nvim_lsp.texlab.buf_build({bufnr})`. + +### Auto Installation + +Many servers can be automatically installed with the `:LspInstall` +command. Detailed installation info can be found +with the `:LspInstallInfo` command, which optionally accepts a specific server name. + +For example: +```vim +LspInstall elmls +silent LspInstall elmls " useful if you want to autoinstall in init.vim +LspInstallInfo +LspInstallInfo elmls +``` + +### Example + +From vim: +```vim +call nvim_lsp#setup("texlab", {}) +``` + +From Lua: +```lua +require 'nvim_lsp'.texlab.setup { + name = "texlab_fancy"; + log_level = vim.lsp.protocol.MessageType.Log; + settings = { + latex = { + build = { + onSave = true; + } + } + } +} + +local nvim_lsp = require 'nvim_lsp' + +-- Customize how to find the root_dir +nvim_lsp.gopls.setup { + root_dir = nvim_lsp.util.root_pattern(".git"); +} + +-- Build the current buffer. +require 'nvim_lsp'.texlab.buf_build(0) +``` + +### Setup function details + +The main setup signature will be: + +``` +nvim_lsp.SERVER.setup({config}) + + {config} is the same as |vim.lsp.start_client()|, but with some + additions and changes: + + {root_dir} + May be required (depending on the server). + `function(filename, bufnr)` which is called on new candidate buffers to + attach to and returns either a root_dir or nil. + + If a root_dir is returned, then this file will also be attached. You + can optionally use {filetype} to help pre-filter by filetype. + + If a root_dir is returned which is unique from any previously returned + root_dir, a new server will be spawned with that root_dir. + + If nil is returned, the buffer is skipped. + + See |nvim_lsp.util.search_ancestors()| and the functions which use it: + - |nvim_lsp.util.root_pattern(patterns...)| finds an ancestor which + - contains one of the files in `patterns...`. This is equivalent + to coc.nvim's "rootPatterns" + - More specific utilities: + - |nvim_lsp.util.find_git_root()| + - |nvim_lsp.util.find_node_modules_root()| + - |nvim_lsp.util.find_package_json_root()| + + {name} + Defaults to the server's name. + + {filetypes} + A set of filetypes to filter for consideration by {root_dir}. + Can be left empty. + A server may specify a default value. + + {log_level} + controls the level of logs to show from build processes and other + window/logMessage events. By default it is set to + vim.lsp.protocol.MessageType.Warning instead of + vim.lsp.protocol.MessageType.Log. + + {settings} + This is a table, and the keys are case sensitive. This is for the + window/configuration event responses. + Example: `settings = { keyName = { subKey = 1 } }` + + {on_attach} + `function(client)` will be executed with the current buffer as the + one the {client} is being attaching to. This is different from + |vim.lsp.start_client()|'s on_attach parameter, which passes the {bufnr} as + the second parameter instead. This is useful for running buffer local + commands. + + {on_new_config} + `function(new_config)` will be executed after a new configuration has been + created as a result of {root_dir} returning a unique value. You can use this + as an opportunity to further modify the new_config or use it before it is + sent to |vim.lsp.start_client()|. +``` + +# LSP Implementations + +{{lsp_server_details}} |
