aboutsummaryrefslogtreecommitdiffstats
path: root/CONTRIBUTING.md
blob: 7d0ba53009b4aa0f0286d95e3d6419ed1a14b6a7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# Requirements

- [Neovim](https://neovim.io/) :P
- `scripts/docgen.lua` expects a unix system.
- Lint task requires [luacheck](https://github.com/mpeterv/luacheck#installation).

# Generating docs

> Note: Github Actions automatically generates the docs, so only modify
> `README_template.md` or the `docs` object on the server config.
> Don't modify `README.md` directly.

To preview the generated `README.md` locally, run `scripts/docgen.lua` from
`nvim` (from the project root):

    nvim -R -Es +'set rtp+=$PWD' +'luafile scripts/docgen.lua'

# Configs

The `configs` module is a singleton where configs are defined. In `vim.validate`
parlance here is the "spec":

    configs.SERVER_NAME = {
      default_config = {'t'};
      on_new_config = {'f', true};
      on_attach = {'f', true};
      commands = {'t', true};
      docs = {'t', true};
    }
    docs = {
      description = {'s', true};
      default_config = {'t', true};
    }

- Keys in `docs.default_config` match those of
  `configs.SERVER_NAME.default_config`, and can be used to specify custom
  documentation. This is useful for functions, whose docs cannot be easily
  auto-generated.
- `commands` is a map of `name:definition` key:value pairs, where `definition`
  is a list whose first value is a function implementing the command and the
  rest are either array values which will be formed into flags for the command
  or special keys like `description`. Example:
  ```
  commands = {
    TexlabBuild = {
      function()
        buf_build(0)
      end;
      "-range";
      description = "Build the current buffer";
    };
  };
  ```

The `configs.__newindex` metamethod consumes the config definition and returns
an object with a `setup()` method, to be invoked by users:

    require'nvim_lsp'.SERVER_NAME.setup{}

After you set `configs.SERVER_NAME` you can add arbitrary language-specific
functions to it if necessary.

Example:

    configs.texlab.buf_build = buf_build

## Auto-install

Configs may optionally provide `install()` and `install_info()` functions. This
will be discovered by `:LspInstall` and `:LspInstallInfo`.

`function install()` is the signature and it is expected that it will create
any data in `util.base_install_dir/{server_name}`.

`function install_info()` should return a table with at least `is_installed`
which indicates the current status of installation (if it is installed by us).
It can contain any other additional data that the user may find useful.

Function `util.npm_installer()` can be used for`npm`-installable language
servers. See `elmls.lua`, `tsserver.lua`, `bashls.lua` for examples.

## Lint

When you create a pull request and push commit, Github Action run luacheck automaticaly.
If you want to run luacheck on your local, you can use `make lint`.