53 lines
1.8 KiB
VimL
53 lines
1.8 KiB
VimL
|
" Author: w0rp <devw0rp@gmail.com>
|
||
|
" Description: tsserver integration for ALE
|
||
|
|
||
|
call ale#Set('html_angular_executable', 'ngserver')
|
||
|
call ale#Set('html_angular_use_global', get(g:, 'ale_use_global_executables', 0))
|
||
|
|
||
|
function! ale_linters#html#angular#GetProjectRoot(buffer) abort
|
||
|
return ale#path#Dirname(
|
||
|
\ ale#path#FindNearestDirectory(a:buffer, 'node_modules')
|
||
|
\)
|
||
|
endfunction
|
||
|
|
||
|
function! ale_linters#html#angular#GetExecutable(buffer) abort
|
||
|
return ale#node#FindExecutable(a:buffer, 'html_angular', [
|
||
|
\ 'node_modules/@angular/language-server/bin/ngserver',
|
||
|
\ 'node_modules/@angular/language-server/index.js',
|
||
|
\])
|
||
|
endfunction
|
||
|
|
||
|
function! ale_linters#html#angular#GetCommand(buffer) abort
|
||
|
let l:language_service_dir = ale#path#Simplify(
|
||
|
\ ale#path#FindNearestDirectory(
|
||
|
\ a:buffer,
|
||
|
\ 'node_modules/@angular/language-service'
|
||
|
\ )
|
||
|
\)
|
||
|
|
||
|
if empty(l:language_service_dir)
|
||
|
return ''
|
||
|
endif
|
||
|
|
||
|
let l:language_service_dir = fnamemodify(l:language_service_dir, ':h')
|
||
|
let l:typescript_dir = ale#path#Simplify(
|
||
|
\ fnamemodify(l:language_service_dir, ':h:h')
|
||
|
\ . '/typescript'
|
||
|
\)
|
||
|
let l:executable = ale_linters#html#angular#GetExecutable(a:buffer)
|
||
|
|
||
|
return ale#node#Executable(a:buffer, l:executable)
|
||
|
\ . ' --ngProbeLocations ' . ale#Escape(l:language_service_dir)
|
||
|
\ . ' --tsProbeLocations ' . ale#Escape(l:typescript_dir)
|
||
|
\ . ' --stdio'
|
||
|
endfunction
|
||
|
|
||
|
call ale#linter#Define('html', {
|
||
|
\ 'name': 'angular',
|
||
|
\ 'aliases': ['angular-language-server'],
|
||
|
\ 'lsp': 'stdio',
|
||
|
\ 'executable': function('ale_linters#html#angular#GetExecutable'),
|
||
|
\ 'command': function('ale_linters#html#angular#GetCommand'),
|
||
|
\ 'project_root': function('ale_linters#html#angular#GetProjectRoot'),
|
||
|
\})
|