vim-config/after/ftplugin/haskell.vim

195 lines
4.7 KiB
VimL

setlocal ts=2 sw=2 expandtab
"set background=light
"set guifont=Neep\ Medium\ Semi-Condensed\ 18
" tags
call CmdAlias('hasktags', '!hasktags -c .<CR>')
" from
" https://raw.githubusercontent.com/begriffs/haskell-vim-now/master/git-hscope
call CmdAlias('codex', 'call system("haskell-ctags")<CR><CR>call LoadHscope()<CR>')
call CmdAlias('Cc', 'Clap commits<CR>')
map <leader>ctg :codex<CR>
set tags=tags;/,codex.tags;/
" classic ctags jump
" nnoremap <leader>gd <C-]>
" nnoremap <silent> <leader>cgd :cs find g <C-R>=expand("<cword>")<CR><CR>
nnoremap <silent> <C-\> :cs find c <C-R>=expand("<cword>")<CR><CR>
set cscopeprg=do_at_stack_root\ hscope
set csre
set csto=1 " search codex tags first
set nocst
" set cscopequickfix=s-,c-,d-,i-,t-,e-,a-
function! LoadHscope()
set nocscopeverbose " suppress 'duplicate connection' error
let hsf = findfile("hscope.out", ".;")
if filereadable(hsf)
exe "cs add " . hsf
elseif $HSCOPE_DB != ""
cs add $HSCOPE_DB
endif
set cscopeverbose
endfunction
au BufEnter /*.hs call LoadHscope()
"hoogle
nnoremap <leader>ho :Hoogle<CR>
nnoremap <leader>hc :HoogleClose<CR>
" haskell-vim
let g:haskell_classic_highlighting = 1
let g:haskell_indent_disable = 0
" let g:haskell_enable_quantification = 1
" let g:haskell_enable_recursivedo = 1
" let g:haskell_enable_arrowsyntax = 1
" let g:haskell_enable_pattern_synonyms = 1
" let g:haskell_enable_typeroles = 1
let g:haskell_indent_if = 0
let g:haskell_indent_case = 4
let g:haskell_indent_let = 4
let g:haskell_indent_where = 6
let g:haskell_indent_before_where = 2
let g:haskell_indent_after_bare_where = 2
let g:haskell_indent_do = 4
let g:haskell_indent_in = 0
let g:haskell_indent_guard = 4
" let g:haskell_disable_TH = 1
" vim-hindent
let g:hindent_on_save = 0
let g:hindent_indent_size = 4
let g:hindent_line_length = 80
" vim-stylishhask
let g:stylishask_on_save = 0
" haskellmode-vim
function! HaskellDocCurrentWord()
let word = expand("<cword>")
exe "IDoc " . word
endfunction
" done by LSP now
nmap <F7> :call HaskellDocCurrentWord()<CR><CR>
" nmap <silent> <F3> :silent update <bar> HsimportModule<CR>
" nmap <silent> <F4> :silent update <bar> HsimportSymbol<CR>
" liquid-types
let g:vim_annotations_offset = '/.liquid/'
" autocmd BufWritePost *.hs call s:check_and_lint()
" function! s:check_and_lint()
" let l:path = expand('%:p')
" let l:qflist = ghcmod#make('check', l:path)
" call extend(l:qflist, ghcmod#make('lint', l:path))
" call setqflist(l:qflist)
" cwindow
" if empty(l:qflist)
" echo "No errors found"
" endif
" endfunction
let g:ghcmod_hlint_options = ['--ignore=Eta reduce $']
" ALE
let g:ale_enabled = 0
let g:ale_linters = {'haskell':[], 'c':['clang']}
" let g:ale_linters = {'haskell':['ghc-mod', 'hdevtools', 'argon'], 'c':['clang']}
" let g:ale_fixers = {
" \ 'haskell': ['brittany'],
" \}
let g:ale_haskell_hdevtools_options = "-g '-Wall' -g '-Wno-orphans'"
let g:ale_haskell_argon_error_level = 14
let g:ale_haskell_argon_warn_level = 10
let g:ale_haskell_argon_info_level = 6
let g:neoformat_enabled_haskell = ['brittany']
" LSP
let g:LanguageClient_rootMarkers = ['cabal.project', '*.cabal', 'stack.yaml']
" \ 'haskell': ['ghcide', "--lsp"],
let g:LanguageClient_serverCommands = {
\ 'haskell': ['haskell-language-server-wrapper', '--lsp'],
\ }
let g:echodoc#enable_at_startup = 1
call deoplete#enable()
call deoplete#custom#source('LanguageClient',
\ 'min_pattern_length',
\ 2)
inoremap <expr><tab> pumvisible() ? "\<c-n>" : "\<tab>"
let g:tagbar_type_haskell = {
\ 'ctagsbin' : 'hasktags',
\ 'ctagsargs' : '-x -c -o-',
\ 'kinds' : [
\ 'm:modules:0:1',
\ 'd:data: 0:1',
\ 'd_gadt: data gadt:0:1',
\ 't:type names:0:1',
\ 'nt:new types:0:1',
\ 'c:classes:0:1',
\ 'cons:constructors:1:1',
\ 'c_gadt:constructor gadt:1:1',
\ 'c_a:constructor accessors:1:1',
\ 'ft:function types:1:1',
\ 'fi:function implementations:0:1',
\ 'i:instance:0:1',
\ 'o:others:0:1'
\ ],
\ 'sro' : '.',
\ 'kind2scope' : {
\ 'm' : 'module',
\ 'c' : 'class',
\ 'd' : 'data',
\ 't' : 'type',
\ 'i' : 'instance'
\ },
\ 'scope2kind' : {
\ 'module' : 'm',
\ 'class' : 'c',
\ 'data' : 'd',
\ 'type' : 't',
\ 'instance' : 'i'
\ }
\ }
" vista
let g:vista_ctags_cmd = {
\ 'haskell': 'hasktags -x -o - -c',
\ }
" vim-lsp
if executable('haskell-language-server-wrapper')
au User lsp_setup call lsp#register_server({
\ 'name': 'hls',
\ 'cmd': {server_info->['haskell-language-server-wrapper', '--lsp']},
\ 'allowlist': ['haskell'],
\ })
endif