summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKrzysztof Gogolewski <krzysztof.gogolewski@tweag.io>2021-07-23 18:21:55 +0200
committerKrzysztof Gogolewski <krzysztof.gogolewski@tweag.io>2021-07-23 18:21:55 +0200
commitfa4c2548ac8614d77ee3f6349925bf7bfd4cc660 (patch)
tree33ddd11ec36aa649086e75669c65e080317926e3
parent10124b16538091806953d732e24ca485a0664895 (diff)
downloadhaskell-wip/T20157.tar.gz
Parser: suggest TemplateHaskell on $$(...) (#20157)wip/T20157
-rw-r--r--compiler/GHC/Parser/Errors/Ppr.hs1
-rw-r--r--testsuite/tests/parser/should_fail/ParserNoTH1.hs1
-rw-r--r--testsuite/tests/parser/should_fail/ParserNoTH1.stderr9
-rw-r--r--testsuite/tests/parser/should_fail/ParserNoTH2.hs1
-rw-r--r--testsuite/tests/parser/should_fail/ParserNoTH2.stderr9
-rw-r--r--testsuite/tests/parser/should_fail/all.T2
6 files changed, 23 insertions, 0 deletions
diff --git a/compiler/GHC/Parser/Errors/Ppr.hs b/compiler/GHC/Parser/Errors/Ppr.hs
index 2cc8b4a113..2a238190c9 100644
--- a/compiler/GHC/Parser/Errors/Ppr.hs
+++ b/compiler/GHC/Parser/Errors/Ppr.hs
@@ -601,6 +601,7 @@ instance Diagnostic PsMessage where
PsErrParse token PsErrParseDetails{..} -> case token of
"" -> []
"$" | not ped_th_enabled -> [suggestExtension LangExt.TemplateHaskell] -- #7396
+ "$$" | not ped_th_enabled -> [suggestExtension LangExt.TemplateHaskell] -- #20157
"<-" | ped_mdo_in_last_100 -> [suggestExtension LangExt.RecursiveDo]
| otherwise -> [SuggestMissingDo]
"=" | ped_do_in_last_100 -> [SuggestLetInDo] -- #15849
diff --git a/testsuite/tests/parser/should_fail/ParserNoTH1.hs b/testsuite/tests/parser/should_fail/ParserNoTH1.hs
new file mode 100644
index 0000000000..8243afc5e6
--- /dev/null
+++ b/testsuite/tests/parser/should_fail/ParserNoTH1.hs
@@ -0,0 +1 @@
+f = $(x) -- #7396
diff --git a/testsuite/tests/parser/should_fail/ParserNoTH1.stderr b/testsuite/tests/parser/should_fail/ParserNoTH1.stderr
new file mode 100644
index 0000000000..56fffbd525
--- /dev/null
+++ b/testsuite/tests/parser/should_fail/ParserNoTH1.stderr
@@ -0,0 +1,9 @@
+
+ParserNoTH1.hs:1:5: warning: [-Woperator-whitespace-ext-conflict (in -Wdefault)]
+ The prefix use of a ‘$’ would denote an untyped splice
+ were the TemplateHaskell extension enabled.
+ Suggested fix: Add whitespace after the ‘$’.
+
+ParserNoTH1.hs:1:5: error:
+ parse error on input ‘$’
+ Suggested fix: Perhaps you intended to use TemplateHaskell
diff --git a/testsuite/tests/parser/should_fail/ParserNoTH2.hs b/testsuite/tests/parser/should_fail/ParserNoTH2.hs
new file mode 100644
index 0000000000..f27eb2495f
--- /dev/null
+++ b/testsuite/tests/parser/should_fail/ParserNoTH2.hs
@@ -0,0 +1 @@
+f = $$(x) -- #20157
diff --git a/testsuite/tests/parser/should_fail/ParserNoTH2.stderr b/testsuite/tests/parser/should_fail/ParserNoTH2.stderr
new file mode 100644
index 0000000000..4f3bba9085
--- /dev/null
+++ b/testsuite/tests/parser/should_fail/ParserNoTH2.stderr
@@ -0,0 +1,9 @@
+
+ParserNoTH2.hs:1:5: warning: [-Woperator-whitespace-ext-conflict (in -Wdefault)]
+ The prefix use of a ‘$$’ would denote a typed splice
+ were the TemplateHaskell extension enabled.
+ Suggested fix: Add whitespace after the ‘$$’.
+
+ParserNoTH2.hs:1:5: error:
+ parse error on input ‘$$’
+ Suggested fix: Perhaps you intended to use TemplateHaskell
diff --git a/testsuite/tests/parser/should_fail/all.T b/testsuite/tests/parser/should_fail/all.T
index c288f47c2f..5198d2151d 100644
--- a/testsuite/tests/parser/should_fail/all.T
+++ b/testsuite/tests/parser/should_fail/all.T
@@ -196,3 +196,5 @@ test('T19923b', normal, compile_fail, [''])
test('T19923c', normal, compile_fail, [''])
test('RecordWildCardsFail', normal, compile_fail, [''])
test('ViewPatternsFail', normal, compile_fail, [''])
+test('ParserNoTH1', normal, compile_fail, [''])
+test('ParserNoTH2', normal, compile_fail, [''])