Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions ale_linters/ocamlinterface/merlin.vim
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
" Author: Andrey Popp -- @andreypopp
" Description: Report errors in OCaml code with Merlin

if !exists('g:merlin')
finish
endif

function! ale_linters#ocamlinterface#merlin#Handle(buffer, lines) abort
return merlin#ErrorLocList()
endfunction

call ale#linter#Define('ocamlinterface', {
\ 'name': 'merlin',
\ 'executable': 'ocamlmerlin',
\ 'command': 'true',
\ 'callback': 'ale_linters#ocamlinterface#merlin#Handle',
\})
13 changes: 13 additions & 0 deletions ale_linters/ocamlinterface/ocamllsp.vim
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
" Author: Risto Stevcev <[email protected]>
" Description: The official language server for OCaml

call ale#Set('ocaml_ocamllsp_use_opam', 1)

call ale#linter#Define('ocamlinterface', {
\ 'name': 'ocamllsp',
\ 'lsp': 'stdio',
\ 'executable': function('ale#handlers#ocamllsp#GetExecutable'),
\ 'command': function('ale#handlers#ocamllsp#GetCommand'),
\ 'language': function('ale#handlers#ocamllsp#GetLanguage'),
\ 'project_root': function('ale#handlers#ocamllsp#GetProjectRoot'),
\})
4 changes: 2 additions & 2 deletions autoload/ale/fix/registry.vim
Original file line number Diff line number Diff line change
Expand Up @@ -303,12 +303,12 @@ let s:default_registry = {
\ },
\ 'ocamlformat': {
\ 'function': 'ale#fixers#ocamlformat#Fix',
\ 'suggested_filetypes': ['ocaml'],
\ 'suggested_filetypes': ['ocaml', 'ocamlinterface'],
\ 'description': 'Fix OCaml files with ocamlformat.',
\ },
\ 'ocp-indent': {
\ 'function': 'ale#fixers#ocp_indent#Fix',
\ 'suggested_filetypes': ['ocaml'],
\ 'suggested_filetypes': ['ocaml', 'ocamlinterface'],
\ 'description': 'Fix OCaml files with ocp-indent.',
\ },
\ 'refmt': {
Expand Down
9 changes: 8 additions & 1 deletion autoload/ale/handlers/ocamllsp.vim
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
" Author: Risto Stevcev <[email protected]>
" Description: Handlers for the official OCaml language server

let s:language_id_of_filetype = {
\ 'menhir': 'ocaml.menhir',
\ 'ocaml': 'ocaml',
\ 'ocamlinterface': 'ocaml.interface',
\ 'ocamllex': 'ocaml.lex'
\}

function! ale#handlers#ocamllsp#GetExecutable(buffer) abort
return 'ocamllsp'
endfunction
Expand All @@ -13,7 +20,7 @@ function! ale#handlers#ocamllsp#GetCommand(buffer) abort
endfunction

function! ale#handlers#ocamllsp#GetLanguage(buffer) abort
return getbufvar(a:buffer, '&filetype')
return s:language_id_of_filetype[getbufvar(a:buffer, '&filetype')]
endfunction

function! ale#handlers#ocamllsp#GetProjectRoot(buffer) abort
Expand Down
29 changes: 29 additions & 0 deletions test/linter/test_ocamlinterface_ocamllsp.vader
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
Before:
call ale#assert#SetUpLinterTest('ocamlinterface', 'ocamllsp')

Save &filetype
let &filetype = 'ocamlinterface'

After:
call ale#assert#TearDownLinterTest()

Execute(The language string should be correct):
AssertLSPLanguage 'ocaml.interface'

Execute(The project root should be detected correctly):
AssertLSPProject ''

call ale#test#SetFilename('../test-files/ocamllsp/file.ml')

AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/ocamllsp')

Execute(The executable should be run using opam exec by default):
call ale#test#SetFilename('../test-files/ocamllsp/file.ml')

AssertLinter 'ocamllsp', 'opam config exec -- ocamllsp'

Execute(The executable should be run directly if use_opam flag is disabled):
let g:ale_ocaml_ocamllsp_use_opam = 0
call ale#test#SetFilename('../test-files/ocamllsp/file.ml')

AssertLinter 'ocamllsp', 'ocamllsp'