diff options
author | Thomas Miedema <thomasmiedema@gmail.com> | 2015-10-07 20:36:54 -0500 |
---|---|---|
committer | Austin Seipp <austin@well-typed.com> | 2015-10-07 20:37:23 -0500 |
commit | e2b579e8d77357e8b36f57d15daead101586ac8e (patch) | |
tree | 83b1d7dfccaceaf27a8bfafd07473c70d326b8b3 | |
parent | 69a6e4258786894578ffed2a1d907a74c52d779b (diff) | |
download | haskell-e2b579e8d77357e8b36f57d15daead101586ac8e.tar.gz |
Parser: revert some error messages to what they were before 7.10
Among doing other things, Phab:D201 (bc2289e13d9586be087bd8136943dc35a0130c88)
tried to improve the error messages thrown by the parser. For example a missing
else clause now prints "parse error in if statement: else clause empty" instead
of "parse error (possibly incorrect indentation or mismatched brackets)".
Some error messages got much worse however (see tests), and the result seems to
be a net negative. Although not entirely satisfactory, this commits therefore
reverts those parser changes.
Reviewed By: austin
Differential Revision: https://phabricator.haskell.org/D1309
GHC Trac Issues: #10498
-rw-r--r-- | compiler/parser/Parser.y | 31 | ||||
-rw-r--r-- | testsuite/tests/parser/should_fail/ParserNoLambdaCase.stderr | 2 | ||||
-rw-r--r-- | testsuite/tests/parser/should_fail/T10498a.hs | 14 | ||||
-rw-r--r-- | testsuite/tests/parser/should_fail/T10498a.stderr | 2 | ||||
-rw-r--r-- | testsuite/tests/parser/should_fail/T10498b.hs | 7 | ||||
-rw-r--r-- | testsuite/tests/parser/should_fail/T10498b.stderr | 2 | ||||
-rw-r--r-- | testsuite/tests/parser/should_fail/all.T | 2 | ||||
-rw-r--r-- | testsuite/tests/parser/should_fail/readFail020.stderr | 3 |
8 files changed, 29 insertions, 34 deletions
diff --git a/compiler/parser/Parser.y b/compiler/parser/Parser.y index 7079a949f1..9245deb459 100644 --- a/compiler/parser/Parser.y +++ b/compiler/parser/Parser.y @@ -2182,37 +2182,6 @@ exp10 :: { LHsExpr RdrName } -- hdaume: core annotation | fexp { $1 } - -- parsing error messages go below here - | '\\' apat apats opt_asig '->' error {% parseErrorSDoc (combineLocs $1 $5) $ text - "parse error in lambda: no expression after '->'" - } - | '\\' error {% parseErrorSDoc (getLoc $1) $ text - "parse error: naked lambda expression '\'" - } - | 'let' binds 'in' error {% parseErrorSDoc (combineLocs $1 $2) $ text - "parse error in let binding: missing expression after 'in'" - } - | 'let' binds error {% parseErrorSDoc (combineLocs $1 $2) $ text - "parse error in let binding: missing required 'in'" - } - | 'let' error {% parseErrorSDoc (getLoc $1) $ text - "parse error: naked let binding" - } - | 'if' exp optSemi 'then' exp optSemi - 'else' error {% hintIf (combineLocs $1 $5) "else clause empty" } - | 'if' exp optSemi 'then' exp optSemi error {% hintIf (combineLocs $1 $5) "missing required else clause" } - | 'if' exp optSemi 'then' error {% hintIf (combineLocs $1 $2) "then clause empty" } - | 'if' exp optSemi error {% hintIf (combineLocs $1 $2) "missing required then and else clauses" } - | 'if' error {% hintIf (getLoc $1) "naked if statement" } - | 'case' exp 'of' error {% parseErrorSDoc (combineLocs $1 $2) $ text - "parse error in case statement: missing list after '->'" - } - | 'case' exp error {% parseErrorSDoc (combineLocs $1 $2) $ text - "parse error in case statement: missing required 'of'" - } - | 'case' error {% parseErrorSDoc (getLoc $1) $ text - "parse error: naked case statement" - } optSemi :: { ([Located a],Bool) } : ';' { ([$1],True) } | {- empty -} { ([],False) } diff --git a/testsuite/tests/parser/should_fail/ParserNoLambdaCase.stderr b/testsuite/tests/parser/should_fail/ParserNoLambdaCase.stderr index 5a3f1cc080..5eb8b539a3 100644 --- a/testsuite/tests/parser/should_fail/ParserNoLambdaCase.stderr +++ b/testsuite/tests/parser/should_fail/ParserNoLambdaCase.stderr @@ -1,2 +1,2 @@ -ParserNoLambdaCase.hs:3:5: parse error: naked lambda expression '' +ParserNoLambdaCase.hs:3:6: error: parse error on input ‘case’ diff --git a/testsuite/tests/parser/should_fail/T10498a.hs b/testsuite/tests/parser/should_fail/T10498a.hs new file mode 100644 index 0000000000..5a9656f254 --- /dev/null +++ b/testsuite/tests/parser/should_fail/T10498a.hs @@ -0,0 +1,14 @@ +{-# LANGUAGE LambdaCase #-} +module T10498a where + +-- ghc-7.10 would show the unhelpful error message: +-- +-- T10498a.hs:10:5: +-- parse error in if statement: missing required else clause + +foo = + if True + then + \case -> + 1 -> 2 + else id diff --git a/testsuite/tests/parser/should_fail/T10498a.stderr b/testsuite/tests/parser/should_fail/T10498a.stderr new file mode 100644 index 0000000000..8b866f35f2 --- /dev/null +++ b/testsuite/tests/parser/should_fail/T10498a.stderr @@ -0,0 +1,2 @@ + +T10498a.hs:12:15: error: parse error on input ‘->’ diff --git a/testsuite/tests/parser/should_fail/T10498b.hs b/testsuite/tests/parser/should_fail/T10498b.hs new file mode 100644 index 0000000000..19b62af5aa --- /dev/null +++ b/testsuite/tests/parser/should_fail/T10498b.hs @@ -0,0 +1,7 @@ +module T10498b where + +-- ghc-7.10 would show the unhelpful error message: +-- +-- T10498b.hs:7:5: parse error in if statement: naked if statement + +f = if module then True else False diff --git a/testsuite/tests/parser/should_fail/T10498b.stderr b/testsuite/tests/parser/should_fail/T10498b.stderr new file mode 100644 index 0000000000..e15343b891 --- /dev/null +++ b/testsuite/tests/parser/should_fail/T10498b.stderr @@ -0,0 +1,2 @@ + +T10498b.hs:7:8: error: parse error on input ‘module’ diff --git a/testsuite/tests/parser/should_fail/all.T b/testsuite/tests/parser/should_fail/all.T index 33da7217a7..13fb7385a2 100644 --- a/testsuite/tests/parser/should_fail/all.T +++ b/testsuite/tests/parser/should_fail/all.T @@ -91,3 +91,5 @@ test('T9225', normal, compile_fail, ['']) test('T10196Fail1', normal, compile_fail, ['']) test('T10196Fail2', normal, compile_fail, ['']) test('T10196Fail3', expect_broken(10196), compile_fail, ['']) +test('T10498a', normal, compile_fail, ['']) +test('T10498b', normal, compile_fail, ['']) diff --git a/testsuite/tests/parser/should_fail/readFail020.stderr b/testsuite/tests/parser/should_fail/readFail020.stderr index 0c00cdc79b..0697604181 100644 --- a/testsuite/tests/parser/should_fail/readFail020.stderr +++ b/testsuite/tests/parser/should_fail/readFail020.stderr @@ -1,3 +1,2 @@ -readFail020.hs:3:5: - parse error in let binding: missing required 'in' +readFail020.hs:3:16: error: parse error on input ‘}’ |