aboutsummaryrefslogtreecommitdiffstats
path: root/lsp/ts_ls.lua
blob: 3fdf71b5aabf81dcc8053ad1308718c669225ffb (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
---@brief
---
-- https://github.com/typescript-language-server/typescript-language-server
--
-- `ts_ls`, aka `typescript-language-server`, is a Language Server Protocol implementation for TypeScript wrapping `tsserver`. Note that `ts_ls` is not `tsserver`.
--
-- `typescript-language-server` depends on `typescript`. Both packages can be installed via `npm`:
-- ```sh
-- npm install -g typescript typescript-language-server
-- ```
--
-- To configure typescript language server, add a
-- [`tsconfig.json`](https://www.typescriptlang.org/docs/handbook/tsconfig-json.html) or
-- [`jsconfig.json`](https://code.visualstudio.com/docs/languages/jsconfig) to the root of your
-- project.
--
-- Here's an example that disables type checking in JavaScript files.
--
-- ```json
-- {
--   "compilerOptions": {
--     "module": "commonjs",
--     "target": "es6",
--     "checkJs": false
--   },
--   "exclude": [
--     "node_modules"
--   ]
-- }
-- ```
--
-- ### Vue support
--
-- As of 2.0.0, Volar no longer supports TypeScript itself. Instead, a plugin
-- adds Vue support to this language server.
--
-- *IMPORTANT*: It is crucial to ensure that `@vue/typescript-plugin` and `volar `are of identical versions.
--
-- ```lua
-- vim.lsp.config('ts_ls', {
--   init_options = {
--     plugins = {
--       {
--         name = "@vue/typescript-plugin",
--         location = "/usr/local/lib/node_modules/@vue/typescript-plugin",
--         languages = {"javascript", "typescript", "vue"},
--       },
--     },
--   },
--   filetypes = {
--     "javascript",
--     "typescript",
--     "vue",
--   },
-- })
--
-- -- You must make sure volar is setup
-- -- e.g. require'lspconfig'.volar.setup{}
-- -- See volar's section for more information
-- ```
--
-- `location` MUST be defined. If the plugin is installed in `node_modules`,
-- `location` can have any value.
--
-- `languages` must include `vue` even if it is listed in `filetypes`.
--
-- `filetypes` is extended here to include Vue SFC.

return {
  init_options = { hostInfo = 'neovim' },
  cmd = { 'typescript-language-server', '--stdio' },
  filetypes = {
    'javascript',
    'javascriptreact',
    'javascript.jsx',
    'typescript',
    'typescriptreact',
    'typescript.tsx',
  },
  root_markers = { 'tsconfig.json', 'jsconfig.json', 'package.json', '.git' },
}