haskell-vim icon indicating copy to clipboard operation
haskell-vim copied to clipboard

do-block inside if/then confuses indentation of else block

Open DestyNova opened this issue 4 years ago • 2 comments

I typed in this example:

main = do
  let n = 1

  if n > 0
     then do
       print 1
       else print 2

The else is indented too far and should be directly under the then. If I use << to unindent the else line, it only moves left by one space and I have to manually delete a space from the beginning of the line. I'm not sure if there's a specific interaction between the do and the if-then-else.

However, another example shows if the else block doesn't immediately follow on the next line from the then, it doesn't indent properly. If I hit enter after the then, the cursor lines up at the same level as then. Hitting tab inserts a single space, then I type the number 123, hit enter and type else, which lines up with the 123, ending with a similar result to the do example:

  let n = 1
  if n > 0
     then
      123
      else
      0

DestyNova avatar Aug 02 '21 22:08 DestyNova

Update: I was able to make manual alignment easier with let g:haskell_indent_if = 2, although it still autoindents else too far after one or more newlines.

DestyNova avatar Aug 02 '21 22:08 DestyNova

I've added a testcase for this situation in PR #128, but I don't know enough vimscript to fix it ATM.

DestyNova avatar Aug 05 '21 00:08 DestyNova