branch: elpa/haskell-tng-mode commit 4b0ab715f1168459d2454caeac13285f3b31af7e Author: Tseen She <ts33n....@gmail.com> Commit: Tseen She <ts33n....@gmail.com>
indent type signatures on separate lines --- haskell-tng-smie.el | 15 ++++++++++++++- test/src/indentation.hs | 6 ++++++ test/src/indentation.hs.append.indent | 12 ++++++++++++ test/src/indentation.hs.insert.indent | 12 ++++++++++++ 4 files changed, 44 insertions(+), 1 deletion(-) diff --git a/haskell-tng-smie.el b/haskell-tng-smie.el index b5eefbf..081b7f4 100644 --- a/haskell-tng-smie.el +++ b/haskell-tng-smie.el @@ -263,6 +263,10 @@ information, to aid in the creation of new rules." (< (--count (equal it "=>") prevline) 2)) "=>") + ((haskell-tng--smie-search-prev-line + (concat "^" haskell-tng--rx-c-varid "$")) + "::") + ((equal parent "deriving") ";") @@ -492,10 +496,19 @@ Inspired by `smie-indent--parent', which can only be used in (let ((eol (line-end-position)) tokens) (while (< (point) eol) - (when-let (tok (smie-indent-forward-token)) + (let ((tok (smie-indent-forward-token))) + ;; intentionally include non-tokens (push (car tok) tokens))) (reverse tokens)))) +(defun haskell-tng--smie-search-prev-line (regexp) + "Search forward on the previous non-empty line" + (save-excursion + (beginning-of-line) + (forward-comment (- (point))) + (beginning-of-line) + (re-search-forward regexp (line-end-position) t))) + ;; TODO smie-powered non-indentation features, e.g. sort-list ;; SMIE wishlist, in order of desirability: diff --git a/test/src/indentation.hs b/test/src/indentation.hs index c9865cd..89e0541 100644 --- a/test/src/indentation.hs +++ b/test/src/indentation.hs @@ -135,6 +135,12 @@ types2 :: (Monad m, MemberLogger m) -> b -> c +types2b + :: (Monad m, MemberLogger m) + => a + -> b + -> c + types3 :: (Monad m, MonadReader Foo m) => (?log :: HasLogger m) => a -> b -> c diff --git a/test/src/indentation.hs.append.indent b/test/src/indentation.hs.append.indent index 8252d25..14ee722 100644 --- a/test/src/indentation.hs.append.indent +++ b/test/src/indentation.hs.append.indent @@ -272,6 +272,18 @@ types2 :: (Monad m, MemberLogger m) 1 v 1 v +types2b +1 v + :: (Monad m, MemberLogger m) +1 v + => a +1 v + -> b +1 v + -> c +1 v + +1 v types3 :: (Monad m, MonadReader Foo m) => 1 v (?log :: HasLogger m) => diff --git a/test/src/indentation.hs.insert.indent b/test/src/indentation.hs.insert.indent index 13e6dad..ea3b0c7 100644 --- a/test/src/indentation.hs.insert.indent +++ b/test/src/indentation.hs.insert.indent @@ -272,6 +272,18 @@ types2 :: (Monad m, MemberLogger m) 1 v v 1 +types2b +1 v + :: (Monad m, MemberLogger m) +1 v + => a +1 v + -> b +1 v + -> c +1 v + +v 1 types3 :: (Monad m, MonadReader Foo m) => 1 v (?log :: HasLogger m) =>