summaryrefslogtreecommitdiffstats
path: root/indent/haskell.vim
diff options
context:
space:
mode:
Diffstat (limited to 'indent/haskell.vim')
-rw-r--r--indent/haskell.vim58
1 files changed, 24 insertions, 34 deletions
diff --git a/indent/haskell.vim b/indent/haskell.vim
index b1e1bdc4..43dc97a6 100644
--- a/indent/haskell.vim
+++ b/indent/haskell.vim
@@ -13,12 +13,16 @@ if exists('b:did_indent')
finish
endif
-let b:did_indent = 1
-
if !exists('g:haskell_indent_disable')
let g:haskell_indent_disable = 0
endif
+if g:haskell_indent_disable != 0
+ finish
+endif
+
+let b:did_indent = 1
+
if !exists('g:haskell_indent_if')
" if x
" >>>then ...
@@ -63,22 +67,16 @@ if !exists('g:haskell_indent_guard')
let g:haskell_indent_guard = 2
endif
-if exists("g:haskell_indent_disable") && g:haskell_indent_disable == 0
- setlocal indentexpr=GetHaskellIndent()
- setlocal indentkeys=0{,0},0(,0),0[,0],!^F,o,O,0\=,0=where,0=let,0=deriving,<space>
-else
- setlocal nocindent
- setlocal nosmartindent
- setlocal autoindent
-endif
+setlocal indentexpr=GetHaskellIndent()
+setlocal indentkeys=0},0),0],!^F,o,O,0\=,0=where,0=let,0=deriving,<space>
function! s:isInBlock(hlstack)
- return index(a:hlstack, 'haskellParens') > -1 || index(a:hlstack, 'haskellBrackets') > -1 || index(a:hlstack, 'haskellBlock') > -1 || index(a:hlstack, 'haskellBlockComment') > -1 || index(a:hlstack, 'haskellPragma') > -1
+ return index(a:hlstack, 'haskellDelimiter') > -1 || index(a:hlstack, 'haskellParens') > -1 || index(a:hlstack, 'haskellBrackets') > -1 || index(a:hlstack, 'haskellBlock') > -1 || index(a:hlstack, 'haskellBlockComment') > -1 || index(a:hlstack, 'haskellPragma') > -1
endfunction
-function! s:stripTrailingComment(line)
- if a:line =~ '^\s*--\(-\+\|\s\+\)' || a:line =~ '^\s*{-'
- return a:line
+function! s:stripComment(line)
+ if a:line =~ '^\s*--\(-*\s\+\|$\)'
+ return ''
else
let l:stripped = split(a:line, '-- ')
if len(l:stripped) > 1
@@ -144,7 +142,7 @@ function! GetHaskellIndent()
return -1
endif
- let l:prevline = s:stripTrailingComment(getline(v:lnum - 1))
+ let l:prevline = s:stripComment(getline(v:lnum - 1))
let l:line = getline(v:lnum)
" indent multiline strings
@@ -161,13 +159,14 @@ function! GetHaskellIndent()
return 0
endif
- " comment indentation
- if l:line =~ '^\s*--'
- return match(l:prevline, '-- ')
- endif
- if l:prevline =~ '^\s*--'
- return match(l:prevline, '\S')
- endif
+ " " comment indentation
+ " if l:line =~ '^\s*--'
+ " let l:s = match(l:prevline, '-- ')
+ " if l:s > -1
+ " endif
+ " " if l:prevline =~ '^\s*--'
+ " " return match(l:prevline, '\S')
+ " " endif
" { foo :: Int
" >>,
@@ -176,7 +175,7 @@ function! GetHaskellIndent()
" ...
" >>,
if l:line =~ '^\s*,'
- if s:isInBlock(l:hlstack)
+ if s:isInBlock(s:getHLStack(line('.'), col('.')))
normal! 0
call search(',', 'cW')
let l:n = s:getNesting(s:getHLStack(line('.'), col('.')))
@@ -395,7 +394,7 @@ function! GetHaskellIndent()
" foo
" >>{
- if l:line =~ '^\s*{' && l:prevline !~ '^{'
+ if l:line =~ '^\s*{ '
let l:s = match(l:prevline, '\S')
if l:s >= 0
return l:s + &shiftwidth
@@ -477,16 +476,7 @@ function! GetHaskellIndent()
return s:indentMatching(']')
endif
- " do not reindent indented lines
- if match(l:prevline, '\S') < match(l:line, '\S')
- return -1
- endif
-
- if l:line !~ '^\s*[=-]>\s' && l:line =~ '^\s*[!#$%&*+./<>?@\\^|~-]\+'
- return -1
- endif
-
- return match(l:prevline, '\S')
+ return -1
endfunction
endif