purescript-emacs / purescript-mode

Emacs major mode and related tools for Purescript
20 stars 10 forks source link

matching with record syntax in `let` and `case` expressions breaks indentation #12

Open gomain opened 3 years ago

gomain commented 3 years ago

In let and case expressions

test1 a
  = let { x } = a
    in x -- parse error from here

test2 a
  = let { x: y } = a
    in y -- parse error from here

test3 a
  = case a of
    { x }
      -> x -- parse error from here

test4 a 
  = case a of
    { x: y }
      -> y -- parse error from here

In function argument it works fine

test { x }
  = x -- this works
purefunctor commented 3 years ago

I investigated this today and figured this seems to be leftover from haskell-mode's layouts code. I've only tested this patch minimally but it eliminates said parse errors.

diff --git a/purescript-indentation.el b/purescript-indentation.el
index 1040964..257c19e 100644
--- a/purescript-indentation.el
+++ b/purescript-indentation.el
@@ -765,9 +765,7 @@ autofill-mode."
            (throw 'parse-end nil)))))

 (defun purescript-indentation-layout (parser)
-  (if (string= current-token "{")
-      (purescript-indentation-list parser "}" ";" nil)
-    (purescript-indentation-implicit-layout-list parser)))
+  (purescript-indentation-implicit-layout-list parser))

 (defun purescript-indentation-expression-token (token)
   (member token '("if" "let" "do" "case" "\\" "(" "[" "{" "::"
umanwizard commented 1 year ago

The patch above fixes the issue for me.

@kritzcreek , any chance of this getting landed in the repo?

kritzcreek commented 1 year ago

Sure I can merge, I just can't test it on my own at the moment, I'll rely on your judgement then ;)

kritzcreek commented 1 year ago

Actually looks like the PR I merged fixes a separate syntax issue with indentation. If you can open a PR for the patch above I'm happy to merge that as well.

Hi-Angel commented 1 month ago

Though not fixed, but should be much better with this PR https://github.com/purescript-emacs/purescript-mode/pull/21