diff options
Diffstat (limited to 'ftplugin')
-rw-r--r-- | ftplugin/elm.vim | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/ftplugin/elm.vim b/ftplugin/elm.vim new file mode 100644 index 00000000..7f121520 --- /dev/null +++ b/ftplugin/elm.vim @@ -0,0 +1,86 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'elm') == -1 + +" elm.vim - Plugin for the Elm programming language +" Maintainer: Alexander Noriega <http://lambdatoast.com/> +" Version: 0.4.3 + +" Plugin setup stuff + +if exists("b:did_ftplugin") + finish +endif + +let b:did_ftplugin = 1 + +" Compilation + +function! ElmMake(file) + let args = a:file + return elm#io#system("elm-make", args) +endfunction + +function! ElmMakeCurrentFile() + echo ElmMake(expand("%")) +endfunction + +function! ElmMakeMain() + echo ElmMake("Main.elm") +endfunction + +function! ElmMakeFile(file) + echo ElmMake(a:file) +endfunction + +" REPL + +function! ElmRepl() + !elm-repl +endfunction + +" Evaluation + +function! ElmEvalLine() + return ElmEval(getline(".")) +endfunction + +function! ElmEvalSelection() + let savedReg = @z + normal! `<v`>"zy + let res = ElmEval(substitute(getreg("z"), "\n", "\\\n", "g")) + let @z = savedReg + normal! gv +endfunction + +function! ElmEval(sourceCode) + let currentLine = a:sourceCode + let args = "echo '" . currentLine . "' | elm-repl" + let result = elm#io#system("echo", args) + let cleanResult = "-- " . join(s:Filtered(function("s:IsUsefulReplOutput"), split(result, "\n")), "") + put =cleanResult +endfunction + +function! s:IsUsefulReplOutput(str) + return a:str !~ "^Elm REPL" && a:str !~ "Type :help" && a:str !~ ">\\s*$" +endfunction + +" List processing + +function! s:Filtered(fn, l) + let new_list = deepcopy(a:l) + call filter(new_list, string(a:fn) . '(v:val)') + return new_list +endfunction + +command -buffer ElmEvalLine call ElmEvalLine() +command -buffer ElmEvalSelection call ElmEvalSelection() +command -buffer ElmMakeMain call ElmMakeMain() +command -buffer -nargs=1 ElmMakeFile call ElmMakeFile <args> +command -buffer ElmMakeCurrentFile call ElmMakeCurrentFile() +command -buffer ElmRepl call ElmRepl() + +" Define comment convention + +setlocal comments=:-- +setlocal commentstring=--%s + +endif |