[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/haskell-tng-mode 5306ae2 217/385: fix type faces with cons
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/haskell-tng-mode 5306ae2 217/385: fix type faces with constraints |
Date: |
Tue, 5 Oct 2021 23:59:34 -0400 (EDT) |
branch: elpa/haskell-tng-mode
commit 5306ae2b918cda092ffd781cd408c1286061b6e9
Author: Tseen She <ts33n.sh3@gmail.com>
Commit: Tseen She <ts33n.sh3@gmail.com>
fix type faces with constraints
---
haskell-tng-compile.el | 3 +
haskell-tng-util.el | 2 +-
test/haskell-tng-font-lock-test.el | 9 ++
test/src/indentation-options1.hs.faceup | 9 ++
test/src/indentation-options2.hs.faceup | 15 ++++
test/src/indentation.hs.faceup | 147 ++++++++++++++++++++++++++++++++
6 files changed, 184 insertions(+), 1 deletion(-)
diff --git a/haskell-tng-compile.el b/haskell-tng-compile.el
index e06e69f..6b1600a 100644
--- a/haskell-tng-compile.el
+++ b/haskell-tng-compile.el
@@ -18,6 +18,8 @@
;; TODO set compilation-directory when opening the file
;; TODO set compilation-environment to include TASTY envvars
+;; TODO support long running (ghcid) compile buffers
+;; TODO generic flycheck integration
https://emacs.stackexchange.com/questions/51894
(defvar haskell-tng-compilation-error-regexp-alist
(let ((file '(: (group (+ any) ".hs")))
@@ -116,6 +118,7 @@ will cause the subsequent call to prompt."
(ansi-color-apply-on-region compilation-filter-start (point-max)))
(define-compilation-mode haskell-tng-compilation-mode "haskell-tng-compilation"
+ ;; TODO add a hook to detect ghcid recompiles and clear the buffer
(add-hook 'compilation-filter-hook
'haskell-tng--compile-ansi-color nil t))
diff --git a/haskell-tng-util.el b/haskell-tng-util.el
index 46b7f44..041cec6 100644
--- a/haskell-tng-util.el
+++ b/haskell-tng-util.el
@@ -39,7 +39,7 @@
;; trivial, should just be called as an inline regexp
(save-excursion
(goto-char (or pos (point)))
- (re-search-forward (rx (| "<-" "=")) nil t)))
+ (re-search-forward (rx (| "<-" "=") symbol-end) nil t)))
(defun haskell-tng--util-next-where (&optional pos)
;; trivial, should just be called as an inline regexp
diff --git a/test/haskell-tng-font-lock-test.el
b/test/haskell-tng-font-lock-test.el
index f931ab4..291a68e 100644
--- a/test/haskell-tng-font-lock-test.el
+++ b/test/haskell-tng-font-lock-test.el
@@ -24,4 +24,13 @@
(ert-deftest haskell-tng-font-lock-file-tests:layout ()
(should (have-expected-faces (testdata "src/layout.hs"))))
+(ert-deftest haskell-tng-font-lock-file-tests:indentation ()
+ (should (have-expected-faces (testdata "src/indentation.hs"))))
+
+(ert-deftest haskell-tng-font-lock-file-tests:indentation1 ()
+ (should (have-expected-faces (testdata "src/indentation-options1.hs"))))
+
+(ert-deftest haskell-tng-font-lock-file-tests:indentation2 ()
+ (should (have-expected-faces (testdata "src/indentation-options2.hs"))))
+
;;; haskell-tng-font-lock-test.el ends here
diff --git a/test/src/indentation-options1.hs.faceup
b/test/src/indentation-options1.hs.faceup
new file mode 100644
index 0000000..6476e9e
--- /dev/null
+++ b/test/src/indentation-options1.hs.faceup
@@ -0,0 +1,9 @@
+«m:-- »«x:| Indentation scenarios to test indentation options.
+»«:haskell-tng-keyword-face:module» «:haskell-tng-module-face:Indentation»
«:haskell-tng-keyword-face:where»
+
+types4 «:haskell-tng-keyword-face:::»«:haskell-tng-type-face:
+ »«:haskell-tng-keyword-face:(»«:haskell-tng-type-face: Monad m
»«:haskell-tng-keyword-face:)»«:haskell-tng-type-face:
+ »«:haskell-tng-keyword-face:=>»«:haskell-tng-type-face: a
+ »«:haskell-tng-keyword-face:->»«:haskell-tng-type-face: b
+ »«:haskell-tng-keyword-face:->»«:haskell-tng-type-face: c
+»
\ No newline at end of file
diff --git a/test/src/indentation-options2.hs.faceup
b/test/src/indentation-options2.hs.faceup
new file mode 100644
index 0000000..ea8d94e
--- /dev/null
+++ b/test/src/indentation-options2.hs.faceup
@@ -0,0 +1,15 @@
+«m:-- »«x:| Indentation scenarios to test indentation options.
+»«:haskell-tng-keyword-face:module» «:haskell-tng-module-face:Indentation»
«:haskell-tng-keyword-face:where»
+
+types5 «:haskell-tng-keyword-face:::»«:haskell-tng-type-face: Monad m
+ »«:haskell-tng-keyword-face:=>»«:haskell-tng-type-face:
»«:haskell-tng-keyword-face:(»«:haskell-tng-type-face:?log
»«:haskell-tng-keyword-face:::»«:haskell-tng-type-face: HasLogger
m»«:haskell-tng-keyword-face:)»«:haskell-tng-type-face:
+ »«:haskell-tng-keyword-face:=>»«:haskell-tng-type-face: a
+ »«:haskell-tng-keyword-face:->»«:haskell-tng-type-face: b
+ »«:haskell-tng-keyword-face:->»«:haskell-tng-type-face: c
+»
+types6 «:haskell-tng-keyword-face:::»«:haskell-tng-type-face:
+ »«:haskell-tng-keyword-face:(»«:haskell-tng-type-face: Monad m
»«:haskell-tng-keyword-face:)»«:haskell-tng-type-face:
+ »«:haskell-tng-keyword-face:=>»«:haskell-tng-type-face: a
+ »«:haskell-tng-keyword-face:->»«:haskell-tng-type-face: b
+ »«:haskell-tng-keyword-face:->»«:haskell-tng-type-face: c
+»
\ No newline at end of file
diff --git a/test/src/indentation.hs.faceup b/test/src/indentation.hs.faceup
new file mode 100644
index 0000000..78d6621
--- /dev/null
+++ b/test/src/indentation.hs.faceup
@@ -0,0 +1,147 @@
+«m:-- »«x:| Idealised indentation scenarios.
+»«m:--»«x:
+»«m:-- »«x:Bugs and unexpected behaviour in (re-)indentation may be
documented here.
+»«m:--»«x:
+»«m:-- »«x:Lines marked "manual correction" indicate where we expect the
user to
+»«m:-- »«x:re-indent because it goes against our prediction. In some of
these cases,
+»«m:-- »«x:we could improve the guess with semantic information (e.g. if we
know that
+»«m:-- »«x:the RHS of a bind is only partially applied, then we probably
mean to
+»«m:-- »«x:continue that line instead of start a new one).
+»«:haskell-tng-keyword-face:module» «:haskell-tng-module-face:Indentation»
«:haskell-tng-keyword-face:where»
+
+«:haskell-tng-keyword-face:import» «:haskell-tng-module-face:Foo.Bar»
+«:haskell-tng-keyword-face:import» «:haskell-tng-module-face:Foo.Baz»
«:haskell-tng-keyword-face:hiding» «:haskell-tng-keyword-face:(»
gaz«:haskell-tng-keyword-face:,»
+ baz
+ «:haskell-tng-keyword-face:)»
+
+basic_do «:haskell-tng-keyword-face:=» «:haskell-tng-keyword-face:do»
+ foo «:haskell-tng-keyword-face:<-» blah blah blah
+ bar «:haskell-tng-keyword-face:<-» blah blah
+ blah «m:-- »«x:manual correction
+» blah «m:-- »«x:manual correction
+» sideeffect
+ sideeffect' blah
+ «:haskell-tng-keyword-face:let» baz «:haskell-tng-keyword-face:=» blah blah
+ blah «m:-- »«x:manual correction
+» gaz «:haskell-tng-keyword-face:=» blah
+ haz «:haskell-tng-keyword-face:=»
+ blah
+ pure faz «m:-- »«x:manual correction
+»
+nested_do «:haskell-tng-keyword-face:=» «m:-- »«x:manual correction
+» «:haskell-tng-keyword-face:do» foo «:haskell-tng-keyword-face:<-» blah
+ «:haskell-tng-keyword-face:do» bar «:haskell-tng-keyword-face:<-» blah
«m:-- »«x:same level as foo
+» baz «m:-- »«x:same level as bar
+»
+nested_where a b «:haskell-tng-keyword-face:=» foo a b
+ «:haskell-tng-keyword-face:where» «m:-- »«x:manual correction
+» foo «:haskell-tng-keyword-face:=» bar baz «m:-- »«x:indented
+» baz «:haskell-tng-keyword-face:=» blah blah «m:-- »«x:same level as foo
+» «:haskell-tng-keyword-face:where» «m:-- »«x:manual correction
+» gaz a «:haskell-tng-keyword-face:=» blah «m:-- »«x:indented
+» faz «:haskell-tng-keyword-face:=» blah «m:-- »«x:same level as gaz
+»
+let_in a b «:haskell-tng-keyword-face:=» «:haskell-tng-keyword-face:let»
+ blah «:haskell-tng-keyword-face:=» bloo
+ wobble «:haskell-tng-keyword-face:_» «:haskell-tng-keyword-face:=» fish
+ «:haskell-tng-keyword-face:in»
+ flibble blah
+
+implicit_let foo bar «:haskell-tng-keyword-face:=»
+ «:haskell-tng-keyword-face:let» ?foo «:haskell-tng-keyword-face:=» foo
+ ?bar «:haskell-tng-keyword-face:=» bar
+ «:haskell-tng-keyword-face:in» rar
+
+case_of wibble «:haskell-tng-keyword-face:=» «:haskell-tng-keyword-face:case»
wibble «:haskell-tng-keyword-face:of»
+ «:haskell-tng-conid-face:Nothing» «:haskell-tng-keyword-face:->»
+ «s:""»
+ «:haskell-tng-conid-face:Just» fish «:haskell-tng-keyword-face:->»
+ fish
+
+lambda_case «:haskell-tng-keyword-face:=» «:haskell-tng-keyword-face:\case»
+ «:haskell-tng-conid-face:Nothing» «:haskell-tng-keyword-face:->» «s:""»
+ «:haskell-tng-conid-face:Just» fish «:haskell-tng-keyword-face:->» fish
+
+dollars f «:haskell-tng-conid-face:Nothing» «:haskell-tng-keyword-face:=» f $
+ «s:""» «s:""»
+ «s:""»
+dollars f «:haskell-tng-keyword-face:(»«:haskell-tng-conid-face:Just»
a«:haskell-tng-keyword-face:)» «:haskell-tng-keyword-face:=» f $
«:haskell-tng-keyword-face:\»s «:haskell-tng-keyword-face:->»
+ a
+
+not_dollars «:haskell-tng-keyword-face:=» «:haskell-tng-keyword-face:do»
+ db' «:haskell-tng-keyword-face:<-» liftIO $ readMVar db
+ shouldGoHere <$>
+ here
+
+«:haskell-tng-keyword-face:data»«:haskell-tng-type-face: Wibble
»«:haskell-tng-keyword-face:=» «:haskell-tng-conid-face:Wibble»
«:haskell-tng-conid-face:Int»
+ «:haskell-tng-keyword-face:|» «:haskell-tng-conid-face:Wobble»
«:haskell-tng-conid-face:Int»
+ «:haskell-tng-keyword-face:|» «:haskell-tng-conid-face:Vibble»
«:haskell-tng-conid-face:Int»
+
+«:haskell-tng-keyword-face:data»«:haskell-tng-type-face: Record1
»«:haskell-tng-keyword-face:=» «:haskell-tng-conid-face:Record1»
«:haskell-tng-keyword-face:{»
+ fieldA «:haskell-tng-keyword-face:::»«:haskell-tng-type-face: String
+»«:haskell-tng-keyword-face:,» fieldB
«:haskell-tng-keyword-face:::»«:haskell-tng-type-face: String
+»«:haskell-tng-keyword-face:}»
+
+«:haskell-tng-keyword-face:data»«:haskell-tng-type-face: Record2
»«:haskell-tng-keyword-face:=» «:haskell-tng-conid-face:Record2»
+ «:haskell-tng-keyword-face:{» fieldA
«:haskell-tng-keyword-face:::»«:haskell-tng-type-face: String
+» «:haskell-tng-keyword-face:,» fieldB
«:haskell-tng-keyword-face:::»«:haskell-tng-type-face: String
+» «:haskell-tng-keyword-face:}»
+
+«:haskell-tng-keyword-face:data»«:haskell-tng-type-face: Record3
»«:haskell-tng-keyword-face:=» «:haskell-tng-conid-face:Record3»
«:haskell-tng-conid-face:String» «:haskell-tng-conid-face:Text»
+ «:haskell-tng-keyword-face:deriving»
«:haskell-tng-keyword-face:(»«:haskell-tng-type-face:Show»«:haskell-tng-keyword-face:)»
+
+«:haskell-tng-keyword-face:data»«:haskell-tng-type-face: Record4
»«:haskell-tng-keyword-face:=» «:haskell-tng-conid-face:Record3»
«:haskell-tng-conid-face:String» «:haskell-tng-conid-face:Text»
«:haskell-tng-keyword-face:deriving»
«:haskell-tng-keyword-face:(»«:haskell-tng-type-face:Show»«:haskell-tng-keyword-face:)»
+
+lists1 «:haskell-tng-keyword-face:=» «:haskell-tng-keyword-face:[» foo
+ «:haskell-tng-keyword-face:,» bar
+ «:haskell-tng-keyword-face:,» «:haskell-tng-keyword-face:[» blah
+ «:haskell-tng-keyword-face:,» blah
+ «:haskell-tng-keyword-face:,» blah «:haskell-tng-keyword-face:]»
+ «:haskell-tng-keyword-face:]»
+
+lists2 «:haskell-tng-keyword-face:=» «:haskell-tng-keyword-face:[»
+ foo
+«:haskell-tng-keyword-face:,» bar
+«:haskell-tng-keyword-face:]»
+
+lists3 «:haskell-tng-keyword-face:=» «:haskell-tng-keyword-face:[» foo
«:haskell-tng-keyword-face:,»
+ bar «:haskell-tng-keyword-face:]»
+
+tuples1 «:haskell-tng-keyword-face:=» «:haskell-tng-keyword-face:(» foo
+ «:haskell-tng-keyword-face:,» bar
+ «:haskell-tng-keyword-face:,» «:haskell-tng-keyword-face:(» blah
+ «:haskell-tng-keyword-face:,» blah
+ «:haskell-tng-keyword-face:,» blah «:haskell-tng-keyword-face:)»
+ «:haskell-tng-keyword-face:)»
+
+tuples2 «:haskell-tng-keyword-face:=» «:haskell-tng-keyword-face:(»
+ foo
+«:haskell-tng-keyword-face:,» bar
+«:haskell-tng-keyword-face:)»
+
+tuples3 «:haskell-tng-keyword-face:=» «:haskell-tng-keyword-face:(» foo
«:haskell-tng-keyword-face:,»
+ bar «:haskell-tng-keyword-face:)»
+
+typesig «:haskell-tng-keyword-face:::»«:haskell-tng-type-face: a
»«:haskell-tng-keyword-face:->»«:haskell-tng-type-face: b
»«:haskell-tng-keyword-face:->»«:haskell-tng-type-face: c
+»
+types1 «:haskell-tng-keyword-face:::»«:haskell-tng-type-face:
+ Monad m
+ »«:haskell-tng-keyword-face:=>»«:haskell-tng-type-face: a
+ »«:haskell-tng-keyword-face:->»«:haskell-tng-type-face: b
+ »«:haskell-tng-keyword-face:->»«:haskell-tng-type-face: c
+»
+types2 «:haskell-tng-keyword-face:::»«:haskell-tng-type-face:
»«:haskell-tng-keyword-face:(»«:haskell-tng-type-face:Monad
m»«:haskell-tng-keyword-face:,»«:haskell-tng-type-face: MemberLogger
m»«:haskell-tng-keyword-face:)»«:haskell-tng-type-face:
+ »«:haskell-tng-keyword-face:=>»«:haskell-tng-type-face: a
+ »«:haskell-tng-keyword-face:->»«:haskell-tng-type-face: b
+ »«:haskell-tng-keyword-face:->»«:haskell-tng-type-face: c
+»
+types2b
+ «:haskell-tng-keyword-face:::»«:haskell-tng-type-face:
»«:haskell-tng-keyword-face:(»«:haskell-tng-type-face:Monad
m»«:haskell-tng-keyword-face:,»«:haskell-tng-type-face: MemberLogger
m»«:haskell-tng-keyword-face:)»«:haskell-tng-type-face:
+ »«:haskell-tng-keyword-face:=>»«:haskell-tng-type-face: a
+ »«:haskell-tng-keyword-face:->»«:haskell-tng-type-face: b
+ »«:haskell-tng-keyword-face:->»«:haskell-tng-type-face: c
+»
+types3 «:haskell-tng-keyword-face:::»«:haskell-tng-type-face:
»«:haskell-tng-keyword-face:(»«:haskell-tng-type-face:Monad
m»«:haskell-tng-keyword-face:,»«:haskell-tng-type-face: MonadReader Foo
m»«:haskell-tng-keyword-face:)»«:haskell-tng-type-face:
»«:haskell-tng-keyword-face:=>»«:haskell-tng-type-face:
+ »«:haskell-tng-keyword-face:(»«:haskell-tng-type-face:?log
»«:haskell-tng-keyword-face:::»«:haskell-tng-type-face: HasLogger
m»«:haskell-tng-keyword-face:)»«:haskell-tng-type-face:
»«:haskell-tng-keyword-face:=>»«:haskell-tng-type-face:
+ a »«:haskell-tng-keyword-face:->»«:haskell-tng-type-face: b
»«:haskell-tng-keyword-face:->»«:haskell-tng-type-face: c
+»
\ No newline at end of file
- [nongnu] elpa/haskell-tng-mode 8bb3c34 363/385: the in-memory cache doesn't have to cache nil, (continued)
- [nongnu] elpa/haskell-tng-mode 8bb3c34 363/385: the in-memory cache doesn't have to cache nil, ELPA Syncer, 2021/10/06
- [nongnu] elpa/haskell-tng-mode f5977b6 339/385: bugfix for source downloading, ELPA Syncer, 2021/10/06
- [nongnu] elpa/haskell-tng-mode 9359c7b 349/385: cl-loop, ELPA Syncer, 2021/10/06
- [nongnu] elpa/haskell-tng-mode f5d76fc 348/385: tidy docs, ELPA Syncer, 2021/10/06
- [nongnu] elpa/haskell-tng-mode 3b37524 360/385: bugfix for qualified imports when the cache was bad, ELPA Syncer, 2021/10/06
- [nongnu] elpa/haskell-tng-mode fe2b164 372/385: fix the build, ELPA Syncer, 2021/10/06
- [nongnu] elpa/haskell-tng-mode 63225d5 374/385: use .ghc.path to find hsinspect, build tool agnostic, ELPA Syncer, 2021/10/06
- [nongnu] elpa/haskell-tng-mode 3d1122b 116/385: notes on regexps, ELPA Syncer, 2021/10/06
- [nongnu] elpa/haskell-tng-mode c3793b2 176/385: canonical until macro, ELPA Syncer, 2021/10/06
- [nongnu] elpa/haskell-tng-mode b7cb5b9 214/385: starting to create imenu, ELPA Syncer, 2021/10/06
- [nongnu] elpa/haskell-tng-mode 5306ae2 217/385: fix type faces with constraints,
ELPA Syncer <=
- [nongnu] elpa/haskell-tng-mode 5f81d6b 219/385: bump python version, ELPA Syncer, 2021/10/06
- [nongnu] elpa/haskell-tng-mode 8f4d7fc 225/385: advice around smartparens workaround, ELPA Syncer, 2021/10/06
- [nongnu] elpa/haskell-tng-mode 4cbf702 205/385: move third party deps to -contrib, ELPA Syncer, 2021/10/06
- [nongnu] elpa/haskell-tng-mode 3ff278e 227/385: ability to not continue comments, ELPA Syncer, 2021/10/06
- [nongnu] elpa/haskell-tng-mode dbcef71 235/385: workaround the env file situation, ELPA Syncer, 2021/10/06
- [nongnu] elpa/haskell-tng-mode 5892c04 232/385: small things, ELPA Syncer, 2021/10/06
- [nongnu] elpa/haskell-tng-mode 44dc467 248/385: notes on motivation, contributing and collaboration, ELPA Syncer, 2021/10/06
- [nongnu] elpa/haskell-tng-mode 6f2b5ee 266/385: font lock CPP, ELPA Syncer, 2021/10/06
- [nongnu] elpa/haskell-tng-mode fdbd0a2 239/385: updates for hsinspect, ELPA Syncer, 2021/10/06
- [nongnu] elpa/haskell-tng-mode b2e2c3a 293/385: stop stack from being an asshole, ELPA Syncer, 2021/10/06