diff options
| author | Adam Stankiewicz <sheerun@sher.pl> | 2016-05-02 11:35:06 +0200 | 
|---|---|---|
| committer | Adam Stankiewicz <sheerun@sher.pl> | 2016-05-02 11:35:06 +0200 | 
| commit | 2ae1aab49bac10c19dc2fe4fae483240f29f5bca (patch) | |
| tree | e3d0814b234d593f044571967bacf01732ab877c | |
| parent | 554ae93ef1728c1b031eb2a6f8013e74bc1a7786 (diff) | |
| download | vim-polyglot-2ae1aab49bac10c19dc2fe4fae483240f29f5bca.tar.gz vim-polyglot-2ae1aab49bac10c19dc2fe4fae483240f29f5bca.zip | |
Add purescript support, closes #110
Diffstat (limited to '')
| -rw-r--r-- | README.md | 1 | ||||
| -rwxr-xr-x | build | 1 | ||||
| -rw-r--r-- | ftdetect/polyglot.vim | 5 | ||||
| -rw-r--r-- | indent/purescript.vim | 141 | ||||
| -rw-r--r-- | syntax/purescript.vim | 56 | 
5 files changed, 204 insertions, 0 deletions
| @@ -82,6 +82,7 @@ Optionally download one of the [releases](https://github.com/sheerun/vim-polyglo  - [powershell](https://github.com/Persistent13/vim-ps1) (syntax, indent, ftplugin, ftdetect)  - [protobuf](https://github.com/uarun/vim-protobuf) (syntax, ftdetect)  - [puppet](https://github.com/voxpupuli/vim-puppet) (syntax, indent, ftplugin, ftdetect) +- [purescript](https://github.com/raichoo/purescript-vim) (syntax, indent, ftdetect)  - [python](https://github.com/mitsuhiko/vim-python-combined) (syntax, indent)  - [qml](https://github.com/peterhoeg/vim-qml) (syntax, indent, ftplugin, ftdetect)  - [r-lang](https://github.com/vim-scripts/R.vim) (syntax, ftplugin) @@ -153,6 +153,7 @@ PACKS="    powershell:Persistent13/vim-ps1    protobuf:uarun/vim-protobuf    puppet:voxpupuli/vim-puppet +  purescript:raichoo/purescript-vim    python:mitsuhiko/vim-python-combined    qml:peterhoeg/vim-qml    r-lang:vim-scripts/R.vim diff --git a/ftdetect/polyglot.vim b/ftdetect/polyglot.vim index afe8ce44..799b7c64 100644 --- a/ftdetect/polyglot.vim +++ b/ftdetect/polyglot.vim @@ -383,6 +383,11 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'puppet') == -1  au! BufRead,BufNewFile *.pp setfiletype puppet  au! BufRead,BufNewFile Puppetfile setfiletype ruby  endif +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'purescript') == -1 +   +au BufNewFile,BufRead *.purs setf purescript +au FileType purescript let &l:commentstring='{--%s--}' +endif  if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'qml') == -1  autocmd BufRead,BufNewFile *.qml setfiletype qml diff --git a/indent/purescript.vim b/indent/purescript.vim new file mode 100644 index 00000000..c456c608 --- /dev/null +++ b/indent/purescript.vim @@ -0,0 +1,141 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'purescript') == -1 +   +" indentation for purescript +" +" Based on idris indentation +" +" author: raichoo (raichoo@googlemail.com) +" +" Modify g:purescript_indent_if and g:purescript_indent_case to +" change indentation for `if'(default 3) and `case'(default 5). +" Example (in .vimrc): +" > let g:purescript_indent_if = 2 + +if exists('b:did_indent') +  finish +endif + +let b:did_indent = 1 + +if !exists('g:purescript_indent_if') +  " if bool +  " >>>then ... +  " >>>else ... +  let g:purescript_indent_if = 3 +endif + +if !exists('g:purescript_indent_case') +  " case xs of +  " >>>>>[]     -> ... +  " >>>>>(y:ys) -> ... +  let g:purescript_indent_case = 5 +endif + +if !exists('g:purescript_indent_let') +  " let x = 0 in +  " >>>>x +  let g:purescript_indent_let = 4 +endif + +if !exists('g:purescript_indent_where') +  " where f :: Int -> Int +  " >>>>>>f x = x +  let g:purescript_indent_where = 6 +endif + +if !exists('g:purescript_indent_do') +  " do x <- a +  " >>>y <- b +  let g:purescript_indent_do = 3 +endif + +setlocal indentexpr=GetPurescriptIndent() +setlocal indentkeys=!^F,o,O,},=where,=in + +function! GetPurescriptIndent() +  let prevline = getline(v:lnum - 1) +  let line = getline(v:lnum) + +  if line =~ '^\s*\<where\>' +    let s = match(prevline, '\S') +    return s + 2 +  endif + +  if line =~ '^\s*\<in\>' +    let n = v:lnum +    let s = 0 + +    while s <= 0 && n > 0 +      let n = n - 1 +      let s = match(getline(n),'\<let\>') +    endwhile + +    return s + 1 +  endif + +  if prevline =~ '[!#$%&*+./<>?@\\^|~-]\s*$' +    let s = match(prevline, '=') +    if s > 0 +      return s + 2 +    endif + +    let s = match(prevline, ':') +    if s > 0 +      return s + 3 +    else +      return match(prevline, '\S') +    endif +  endif + +  if prevline =~ '[{([][^})\]]\+$' +    return match(prevline, '[{([]') +  endif + +  if prevline =~ '\<let\>\s\+.\+\(\<in\>\)\?\s*$' +    return match(prevline, '\<let\>') + g:purescript_indent_let +  endif + +  if prevline !~ '\<else\>' +    let s = match(prevline, '\<if\>.*\&.*\zs\<then\>') +    if s > 0 +      return s +    endif + +    let s = match(prevline, '\<if\>') +    if s > 0 +      return s + g:purescript_indent_if +    endif +  endif + +  if prevline =~ '\(\<where\>\|\<do\>\|=\|[{([]\)\s*$' +    return match(prevline, '\S') + &shiftwidth +  endif + +  if prevline =~ '\<where\>\s\+\S\+.*$' +    return match(prevline, '\<where\>') + g:purescript_indent_where +  endif + +  if prevline =~ '\<do\>\s\+\S\+.*$' +    return match(prevline, '\<do\>') + g:purescript_indent_do +  endif + +  if prevline =~ '^\s*\<data\>\s\+[^=]\+\s\+=\s\+\S\+.*$' +    return match(prevline, '=') +  endif + +  if prevline =~ '\<case\>\s\+.\+\<of\>\s*$' +    return match(prevline, '\<case\>') + g:purescript_indent_case +  endif + +  if prevline =~ '^\s*\<\data\>\s\+\S\+\s*$' +    return match(prevline, '\<data\>') + &shiftwidth +  endif + +  if (line =~ '^\s*}\s*' && prevline !~ '^\s*;') +    return match(prevline, '\S') - &shiftwidth +  endif + +  return match(prevline, '\S') +endfunction + +endif diff --git a/syntax/purescript.vim b/syntax/purescript.vim new file mode 100644 index 00000000..298a3008 --- /dev/null +++ b/syntax/purescript.vim @@ -0,0 +1,56 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'purescript') == -1 +   +" syntax highlighting for purescript +" +" Heavily modified version of the purescript syntax +" highlighter to support purescript. +" +" author: raichoo (raichoo@googlemail.com) + +if exists("b:current_syntax") +  finish +endif + +syn keyword purescriptModule module +syn keyword purescriptImport foreign import hiding +syn region purescriptQualifiedImport start="\<qualified\>" contains=purescriptType,purescriptDot end="\<as\>" +syn keyword purescriptStructure data newtype type class instance derive where +syn keyword purescriptStatement forall do case of let in +syn keyword purescriptConditional if then else +syn match purescriptNumber "\<[0-9]\+\>\|\<0[xX][0-9a-fA-F]\+\>\|\<0[oO][0-7]\+\>" +syn match purescriptFloat "\<[0-9]\+\.[0-9]\+\([eE][-+]\=[0-9]\+\)\=\>" +syn match purescriptDelimiter  "[(),;[\]{}]" +syn keyword purescriptInfix infix infixl infixr +syn match purescriptOperators "\([-!#$%&\*\+/<=>\?@\\^|~:]\|\<_\>\)" +syn match purescriptDot "\." +syn match purescriptType "\<\([A-Z][a-zA-Z0-9_]*\|_|_\)\>" +syn match purescriptLineComment "---*\([^-!#$%&\*\+./<=>\?@\\^|~].*\)\?$" +syn match purescriptChar "'[^'\\]'\|'\\.'\|'\\u[0-9a-fA-F]\{4}'" +syn match purescriptBacktick "`[A-Za-z][A-Za-z0-9_]*`" +syn region purescriptString start=+"+ skip=+\\\\\|\\"+ end=+"+ +syn region purescriptMultilineString start=+"""+ end=+"""+ +syn region purescriptBlockComment start="{-" end="-}" contains=purescriptBlockComment + +highlight def link purescriptImport Structure +highlight def link purescriptQualifiedImport Structure +highlight def link purescriptModule Structure +highlight def link purescriptStructure Structure +highlight def link purescriptStatement Statement +highlight def link purescriptConditional Conditional +highlight def link purescriptNumber Number +highlight def link purescriptFloat Float +highlight def link purescriptDelimiter Delimiter +highlight def link purescriptInfix PreProc +highlight def link purescriptOperators Operator +highlight def link purescriptDot Operator +highlight def link purescriptType Include +highlight def link purescriptLineComment Comment +highlight def link purescriptBlockComment Comment +highlight def link purescriptString String +highlight def link purescriptMultilineString String +highlight def link purescriptChar String +highlight def link purescriptBacktick Operator + +let b:current_syntax = "purescript" + +endif | 
