aboutsummaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorAshkan Kiani <ashkan.k.kiani@gmail.com>2019-11-17 09:58:52 -0800
committerGitHub <noreply@github.com>2019-11-17 09:58:52 -0800
commitac3df47ffd418b0f3aec49612d9862364820ed8d (patch)
treebc3e3a0a688b6a36b7ccd462395db7c86e8af2ea /scripts
parent[docgen] Update README.md (diff)
downloadnvim-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')
-rw-r--r--scripts/README_template.md174
-rw-r--r--scripts/docgen.lua40
2 files changed, 195 insertions, 19 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}}
diff --git a/scripts/docgen.lua b/scripts/docgen.lua
index e33e88d0..a430e70b 100644
--- a/scripts/docgen.lua
+++ b/scripts/docgen.lua
@@ -53,7 +53,7 @@ local skeleton_keys = vim.tbl_keys(skeleton)
table.sort(skeleton_keys)
local function make_lsp_sections()
- return map_list(skeleton_keys, function(k)
+ local sections = map_list(skeleton_keys, function(k)
local v = skeleton[k]
local tconf = v.template_config
@@ -123,30 +123,32 @@ nvim_lsp#setup("{{template_name}}", {config})
```
]], params)
end)
+ return table.concat(sections, '\n')
end
-local function make_readme_preamble()
- local data = io.open("README_preamble.md"):read("*a")
- local implemented_server_marker = "Implemented language servers:"
- return data:gsub(implemented_server_marker, function()
- local lines = vim.tbl_flatten {
- implemented_server_marker;
- map_list(skeleton_keys, function(k)
- return template("- [{{server}}](https://github.com/neovim/nvim-lsp#{{server}})", {server=k})
- end)
- }
- return table.concat(lines, '\n')
+local function make_implemented_servers_list()
+ local parts = map_list(skeleton_keys, function(k)
+ return template("- [{{server}}](https://github.com/neovim/nvim-lsp#{{server}})", {server=k})
end)
+ return table.concat(parts, '\n')
end
-local writer = io.open("README.md", "w")
+local function generate_readme(params)
+ vim.validate {
+ lsp_server_details = {params.lsp_server_details, 's'};
+ implemented_servers_list = {params.implemented_servers_list, 's'};
+ }
+ local input_template = io.open("scripts/README_template.md"):read("*a")
+ local readme_data = template(input_template, params)
-local parts = vim.tbl_flatten {
- make_readme_preamble();
- make_lsp_sections();
-}
+ local writer = io.open("README.md", "w")
+ writer:write(readme_data)
+ writer:close()
+end
-writer:write(table.concat(parts, '\n'))
-writer:close()
+generate_readme {
+ implemented_servers_list = make_implemented_servers_list();
+ lsp_server_details = make_lsp_sections();
+}
-- vim:et ts=2 sw=2