diff --git a/indent/haskell.vim b/indent/haskell.vim index 54f244a..0f514f5 100644 --- a/indent/haskell.vim +++ b/indent/haskell.vim @@ -178,6 +178,14 @@ function! GetHaskellIndent() abort return match(line, '\v^\s*%(|.*)?\s*\zs') + &shiftwidth endif + if line =~# '\v\\\s*\s*%(--.*)?$' + return match(line, '\v^\s*%(|.*)?\s*\zs') + &shiftwidth + endif + + if line =~# '\v\\\s*\s*[[:alnum:](_\-\"'']' + return match(line, '\v\\\s*\s*\zs\S') + endif + if nonblankline =~# '\v^.*[^|]\|[^|].*\=' return s:after_guard() endif @@ -467,6 +475,8 @@ function! s:indent_bar() abort let line = getline(i) if line =~# '\v^[^[\]]*%([^[\]]*|\[[^[\]]*\])*\[%([^[\]]*|\[[^[\]]*\])*%(--.*)?$' return match(line, '\v^[^[\]]*%([^[\]]*|\[[^[\]]*\])*\zs\[([^[\]]*|\[[^[\]]*\])*%(--.*)?$') + &shiftwidth + elseif line =~# '\v\\\s*.*\|' + return match(line, '\v\\\s*.*\zs\|') elseif line =~# '\v^\s*%()?.*[^|]\|[^|].*\=' return match(line, '\v^\s*%()?.*[^|]\zs\|[^|].*\=') elseif line =~# '\v.*\=' diff --git a/test/case/cases.in.hs b/test/case/cases.in.hs new file mode 100644 index 0000000..789e112 --- /dev/null +++ b/test/case/cases.in.hs @@ -0,0 +1,6 @@ +printGender :: Language -> Gender -> Text +printGender = \cases +English Male -> "Male" +English Female -> "Female" +Chinese Male -> "男性" +Chinese Female -> "女性" diff --git a/test/case/cases.out.hs b/test/case/cases.out.hs new file mode 100644 index 0000000..ab356f5 --- /dev/null +++ b/test/case/cases.out.hs @@ -0,0 +1,6 @@ +printGender :: Language -> Gender -> Text +printGender = \cases + English Male -> "Male" + English Female -> "Female" + Chinese Male -> "男性" + Chinese Female -> "女性" diff --git a/test/case/cases_same_line.in.hs b/test/case/cases_same_line.in.hs new file mode 100644 index 0000000..b068e11 --- /dev/null +++ b/test/case/cases_same_line.in.hs @@ -0,0 +1,5 @@ +printGender :: Language -> Gender -> Text +printGender = \cases English Male -> "Male" +English Female -> "Female" +Chinese Male -> "男性" +Chinese Female -> "女性" diff --git a/test/case/cases_same_line.out.hs b/test/case/cases_same_line.out.hs new file mode 100644 index 0000000..ec54c47 --- /dev/null +++ b/test/case/cases_same_line.out.hs @@ -0,0 +1,5 @@ +printGender :: Language -> Gender -> Text +printGender = \cases English Male -> "Male" + English Female -> "Female" + Chinese Male -> "男性" + Chinese Female -> "女性" diff --git a/test/case/casesguard.in.hs b/test/case/casesguard.in.hs new file mode 100644 index 0000000..a919118 --- /dev/null +++ b/test/case/casesguard.in.hs @@ -0,0 +1,3 @@ +filter = \cases _ [] -> [] +p (x:xs) | p x -> x : filter p xs +| otherwise -> filter p xs diff --git a/test/case/casesguard.out.hs b/test/case/casesguard.out.hs new file mode 100644 index 0000000..07148b6 --- /dev/null +++ b/test/case/casesguard.out.hs @@ -0,0 +1,3 @@ +filter = \cases _ [] -> [] + p (x:xs) | p x -> x : filter p xs + | otherwise -> filter p xs