branch: elpa/haskell-tng-mode commit cfbdae1f66d040bdded70b5325712c760aa17e2b Author: Tseen She <ts33n....@gmail.com> Commit: Tseen She <ts33n....@gmail.com>
simplify the lexer assertion language --- haskell-tng-lexer.el | 1 + test/haskell-tng-lexer-test.el | 49 ++++++++++--------- test/src/layout.hs.lexer | 18 +++---- test/src/medley.hs.lexer | 106 ++++++++++++++++++++--------------------- 4 files changed, 89 insertions(+), 85 deletions(-) diff --git a/haskell-tng-lexer.el b/haskell-tng-lexer.el index f2a5973..98023e5 100644 --- a/haskell-tng-lexer.el +++ b/haskell-tng-lexer.el @@ -89,6 +89,7 @@ the lexer." ((looking-at haskell-tng:regexp:conid) (haskell-tng-lexer:last-match nil "CONID")) ;; TODO symid + ;; TODO literals ((or ;; known identifiers diff --git a/test/haskell-tng-lexer-test.el b/test/haskell-tng-lexer-test.el index 1128761..fba496a 100644 --- a/test/haskell-tng-lexer-test.el +++ b/test/haskell-tng-lexer-test.el @@ -29,7 +29,7 @@ (goto-char 317) (should (equal (haskell-tng-lexer-test:indent-forward-token) ";")) (should (equal (haskell-tng-lexer-test:indent-forward-token) "VARID")) - (should (equal (haskell-tng-lexer-test:indent-forward-token) "_(")) + (should (equal (haskell-tng-lexer-test:indent-forward-token) "«")) ;; repeating the above, but with a user edit, should reset the state (goto-char 317) @@ -39,7 +39,7 @@ (insert " ")) (should (equal (haskell-tng-lexer-test:indent-forward-token) ";")) (should (equal (haskell-tng-lexer-test:indent-forward-token) "VARID")) - (should (equal (haskell-tng-lexer-test:indent-forward-token) "_(")) + (should (equal (haskell-tng-lexer-test:indent-forward-token) "«")) ;; repeating again, but jumping the lexer, should reset the state (goto-char 317) @@ -49,13 +49,13 @@ (goto-char 317) (should (equal (haskell-tng-lexer-test:indent-forward-token) ";")) (should (equal (haskell-tng-lexer-test:indent-forward-token) "VARID")) - (should (equal (haskell-tng-lexer-test:indent-forward-token) "_(")) + (should (equal (haskell-tng-lexer-test:indent-forward-token) "«")) ;; repeating those tests, but for the backward lexer (goto-char 317) (should (equal (haskell-tng-lexer-test:indent-backward-token) ";")) - (should (equal (haskell-tng-lexer-test:indent-backward-token) "_]")) - (should (equal (haskell-tng-lexer-test:indent-backward-token) "_[")) + (should (equal (haskell-tng-lexer-test:indent-backward-token) "»")) + (should (equal (haskell-tng-lexer-test:indent-backward-token) "«")) (goto-char 317) (should (equal (haskell-tng-lexer-test:indent-backward-token) ";")) @@ -63,17 +63,17 @@ (goto-char (point-max)) (insert " ")) (should (equal (haskell-tng-lexer-test:indent-backward-token) ";")) - (should (equal (haskell-tng-lexer-test:indent-backward-token) "_]")) - (should (equal (haskell-tng-lexer-test:indent-backward-token) "_[")) + (should (equal (haskell-tng-lexer-test:indent-backward-token) "»")) + (should (equal (haskell-tng-lexer-test:indent-backward-token) "«")) (goto-char 317) (should (equal (haskell-tng-lexer-test:indent-backward-token) ";")) (goto-char 327) - (should (equal (haskell-tng-lexer-test:indent-backward-token) "_(")) + (should (equal (haskell-tng-lexer-test:indent-backward-token) "«")) (goto-char 317) (should (equal (haskell-tng-lexer-test:indent-backward-token) ";")) - (should (equal (haskell-tng-lexer-test:indent-backward-token) "_]")) - (should (equal (haskell-tng-lexer-test:indent-backward-token) "_[")) + (should (equal (haskell-tng-lexer-test:indent-backward-token) "»")) + (should (equal (haskell-tng-lexer-test:indent-backward-token) "«")) ;; jumping between forward and backward at point should reset state (goto-char 317) @@ -93,14 +93,16 @@ (cond ((< 0 (length tok)) tok) ((eobp) nil) - ((looking-at (rx (| (syntax open-parenthesis) - (syntax close-parenthesis)))) - (concat "_" (haskell-tng-lexer:last-match))) + ((looking-at (rx (syntax open-parenthesis))) + (haskell-tng-lexer:last-match) + "«") + ((looking-at (rx (syntax close-parenthesis))) + (haskell-tng-lexer:last-match) + "»") ((looking-at (rx (| (syntax string-quote) (syntax string-delimiter)))) - (let ((start (point))) - (forward-sexp 1) - (concat "_" (buffer-substring-no-properties start (point))))) + (forward-sexp 1) + "§") (t (error "Bumped into unknown token"))))) ;; same as above, but for `smie-indent-backward-token' @@ -109,16 +111,17 @@ (cond ((< 0 (length tok)) tok) ((bobp) nil) - ((looking-back (rx (| (syntax open-parenthesis) - (syntax close-parenthesis))) - (- (point) 1)) - (concat "_" (haskell-tng-lexer:last-match 'reverse))) + ((looking-back (rx (syntax open-parenthesis)) (- (point) 1)) + (haskell-tng-lexer:last-match 'reverse) + "«") + ((looking-back (rx (syntax close-parenthesis)) (- (point) 1)) + (haskell-tng-lexer:last-match 'reverse) + "»") ((looking-back (rx (| (syntax string-quote) (syntax string-delimiter))) (- (point) 1)) - (let ((start (point))) - (backward-sexp 1) - (concat "_" (buffer-substring-no-properties (point) start)))) + (backward-sexp 1) + "§") (t (error "Bumped into unknown token"))))) (defun haskell-tng-lexer-test:tokens (&optional reverse) diff --git a/test/src/layout.hs.lexer b/test/src/layout.hs.lexer index 96ba575..921d495 100644 --- a/test/src/layout.hs.lexer +++ b/test/src/layout.hs.lexer @@ -1,20 +1,20 @@ -module CONID _( CONID , VARID , VARID , VARID , VARID _) where +module CONID « CONID , VARID , VARID , VARID , VARID » where { data CONID VARID = CONID -| CONID VARID _( CONID VARID _) +| CONID VARID « CONID VARID » ; VARID :: VARID -> CONID VARID -> CONID VARID ; VARID VARID VARID = CONID VARID VARID ; VARID :: CONID VARID -> CONID -; VARID VARID = VARID _( VARID VARID _) where -{ VARID CONID = _[ _] -; VARID _( CONID VARID VARID _) = x:xs where { VARID = VARID VARID +; VARID VARID = VARID « VARID VARID » where +{ VARID CONID = « » +; VARID « CONID VARID VARID » = x:xs where { VARID = VARID VARID -} } ; VARID :: CONID VARID -> _( VARID , CONID VARID _) -; VARID _( CONID VARID VARID _) -= _( VARID , case VARID of { VARID -> VARID VARID where { VARID VARID = VARID } } _) +} } ; VARID :: CONID VARID -> « VARID , CONID VARID » +; VARID « CONID VARID VARID » += « VARID , case VARID of { VARID -> VARID VARID where { VARID VARID = VARID } } » ; VARID :: CONID VARID -> VARID -; VARID _( CONID VARID VARID _) = VARID +; VARID « CONID VARID VARID » = VARID } diff --git a/test/src/medley.hs.lexer b/test/src/medley.hs.lexer index 647ab47..7070521 100644 --- a/test/src/medley.hs.lexer +++ b/test/src/medley.hs.lexer @@ -3,64 +3,64 @@ module CONID -_( CONID _( .. _) , CONID _( CONID , _( !!! _) _) , CONID +« CONID « .. » , CONID « CONID , « !!! » » , CONID , VARID , VARID , module CONID -_) where +» where -{ import CONID _( VARID , VARID , VARID , _( <*> _) , _( <|> _) _) -; import CONID _( VARID _) -; import CONID _( _( <$> _) _) -; import CONID _( VARID _) -; import CONID _( _( <> _) _) +{ import CONID « VARID , VARID , VARID , « <*> » , « <|> » » +; import CONID « VARID » +; import CONID « « <$> » » +; import CONID « VARID » +; import CONID « « <> » » ; import VARID CONID ; import VARID CONID VARID CONID ; import VARID CONID VARID CONID -; import VARID CONID VARID _( VARID , VARID , VARID _) -; import CONID _( VARID , VARID , VARID _) -; import CONID VARID _( VARID , VARID , VARID _) -; import VARID CONID _( VARID , VARID , VARID _) -; import CONID _( CONID _( .. _) , VARID , VARID , +; import VARID CONID VARID « VARID , VARID , VARID » +; import CONID « VARID , VARID , VARID » +; import CONID VARID « VARID , VARID , VARID » +; import VARID CONID « VARID , VARID , VARID » +; import CONID « CONID « .. » , VARID , VARID , CONID , VARID , -CONID _) -; import CONID _( VARID , CONID _( CONID , _( :< _) _) -; import CONID _( CONID _( .. _) , VARID , VARID , +CONID » +; import CONID « VARID , CONID « CONID , « :< » » +; import CONID « CONID « .. » , VARID , VARID , VARID , VARID , VARID , VARID , -VARID , CONID _) -; import CONID _( CONID _( .. _) , CONID _( .. _) , -VARID , VARID , VARID _) +VARID , CONID » +; import CONID « CONID « .. » , CONID « .. » , +VARID , VARID , VARID » -; VARID = _[ _'c' , _'\n' , _'\'' _] +; VARID = « § , § , § » -; VARID = _"wobble (wibble)" +; VARID = § ; class CONID VARID VARID where { VARID :: CONID VARID -> VARID -} ; instance CONID VARID _( VARID ': VARID _) where -{ VARID _( CONID VARID _ _) = VARID +} ; instance CONID VARID « VARID ': VARID » where +{ VARID « CONID VARID _ » = VARID -} ; instance CONID VARID VARID => CONID VARID _( VARID ': VARID _) where -{ VARID _( CONID _ VARID _) = VARID VARID +} ; instance CONID VARID VARID => CONID VARID « VARID ': VARID » where +{ VARID « CONID _ VARID » = VARID VARID } ; data CONID = CONID -_{ VARID :: CONID +« VARID :: CONID , VARID :: CONID CONID , VARID :: CONID CONID -, VARID :: _[ CONID _] -_} deriving _( CONID , CONID _) +, VARID :: « CONID » +» deriving « CONID , CONID » -; class _( CONID VARID _) => CONID VARID where -{ _( < _) , _( <= _) , _( >= _) , _( > _) :: VARID -> VARID -> CONID +; class « CONID VARID » => CONID VARID where +{ « < » , « <= » , « >= » , « > » :: VARID -> VARID -> CONID ; VARID @Foo , VARID :: VARID -> VARID -> VARID -} ; instance _( CONID VARID _) => CONID _( CONID VARID _) where +} ; instance « CONID VARID » => CONID « CONID VARID » where { CONID VARID == CONID VARID = VARID == VARID -; _( CONID VARID VARID _) == _( CONID VARID VARID _) = _( l1==l2 _) && _( r1==r2 _) +; « CONID VARID VARID » == « CONID VARID VARID » = « l1==l2 » && « r1==r2 » ; _ == _ = CONID } ; data CONID = CONID @@ -68,16 +68,16 @@ _} deriving _( CONID , CONID _) | CONID | CONID | CONID -deriving _( CONID , CONID _) +deriving « CONID , CONID » ; type VARID CONID VARID where { CONID CONID = CONID ; CONID VARID = CONID } ; data CONID = CONID -deriving _( CONID _) VARID _( CONID _( CONID CONID _) _) -deriving VARID _( CONID _) -deriving VARID _( CONID , CONID _) +deriving « CONID » VARID « CONID « CONID CONID » » +deriving VARID « CONID » +deriving VARID « CONID , CONID » ; newtype CONID = CONID @@ -86,41 +86,41 @@ CONID -> CONID -> CONID -> CONID --> _( VARID :: CONID _) --> _( CONID -VARID VARID VARID _) +-> « VARID :: CONID » +-> « CONID +VARID VARID VARID » -; _( VARID :: _( CONID CONID _) _) VARID +; « VARID :: « CONID CONID » » VARID ; newtype CONID -_( VARID :: CONID _) -_( VARID :: CONID _) +« VARID :: CONID » +« VARID :: CONID » VARID VARID = CONID VARID ; VARID :: CONID CONID ; VARID = CONID -<$> _( VARID CONID _( VARID _"alloc" <> VARID _"wibble" _) -<|> VARID CONID _( VARID _"entry" <> VARID _"wobble" _) -<|> VARID CONID _( VARID _"bytes" <> VARID _"i'm a fish" _) _) +<$> « VARID CONID « VARID § <> VARID § » +<|> VARID CONID « VARID § <> VARID § » +<|> VARID CONID « VARID § <> VARID § » » <*> VARID -_( VARID -_( VARID _"MY-FILE" <> -VARID _"meh" _) _) +« VARID +« VARID § <> +VARID § » » ; type CONID ; type CONID = -_"thing" :> CONID _"bar" CONID :> CONID _"wibble" CONID -:> CONID _"wobble" CONID +§ :> CONID § CONID :> CONID § CONID +:> CONID § CONID :> CONID CONID CONID :> CONID -:> CONID ' _[ CONID _] _( CONID CONID _) -:<|> _"thing" :> CONID ' _[ CONID _] CONID +:> CONID ' « CONID » « CONID CONID » +:<|> § :> CONID ' « CONID » CONID :> CONID CONID CONID :> CONID -:> CONID ' _[ CONID _] _( CONID CONID _) +:> CONID ' « CONID » « CONID CONID » ; deriving instance CONID CONID ; deriving VARID instance CONID CONID @@ -130,5 +130,5 @@ _"thing" :> CONID _"bar" CONID :> CONID _"wibble" CONID where { VARID = _ -; _( + _) = _ +; « + » = _ } }