Skip to content
Ryan Olson edited this page Jan 7, 2019 · 16 revisions

The typescript-language-server is capable of giving intelligent LSP functionality for both TypeScript and JavaScript.

Installing server

Note: tsserver is searched in workspace node_modules followed by global install. Use -g to install globally.

npm install -g typescript typescript-language-server

Once the typescript-language-server is installed, you can either:

  1. Install vim-lsp-typescript (which automatically registers the language server for TypeScript and JavaScript) OR
  2. Register the typescript-language-server yourself in your .vimrc

Installing vim-lsp-typescript

If you'd like the vim-lsp-typescript plugin to register the typescript-language-server for you, install the vim-lsp-typescript plugin:

" After vim-lsp, etc
Plug 'ryanolsonx/vim-lsp-typescript'

Registering in .vimrc

Here's an example that shows how to manually setup a language server for TypeScript.

if executable('typescript-language-server')
    au User lsp_setup call lsp#register_server({
        \ 'name': 'typescript-language-server',
        \ 'cmd': {server_info->[&shell, &shellcmdflag, 'typescript-language-server --stdio']},
        \ 'root_uri':{server_info->lsp#utils#path_to_uri(lsp#utils#find_nearest_parent_file_directory(lsp#utils#get_buffer_path(), 'tsconfig.json'))},
        \ 'whitelist': ['typescript', 'typescript.tsx'],
        \ })
endif

Registering for JavaScript

JavaScript is TypeScript, so the language server would provide you with some utility for JavaScript projects as well. Since the .tsconfig.json file is missing you can set it up the following way:

if executable('typescript-language-server')
    au User lsp_setup call lsp#register_server({
      \ 'name': 'typescript-language-server',
      \ 'cmd': { server_info->[&shell, &shellcmdflag, 'typescript-language-server --stdio']},
      \ 'root_uri': { server_info->lsp#utils#path_to_uri(lsp#utils#find_nearest_parent_directory(lsp#utils#get_buffer_path(), '.git/..'))},
      \ 'whitelist': ['typescript', 'javascript', 'javascript.jsx']
      \ })
endif