diff options
| author | P1start <rewi-github@whanau.org> | 2015-04-21 21:13:42 +1200 |
|---|---|---|
| committer | P1start <rewi-github@whanau.org> | 2015-04-21 21:13:42 +1200 |
| commit | 7d2231aa22c80f47deea5b482ae03ae0cb2ae827 (patch) | |
| tree | b1057862dda83f6ae22c876e94955456ebebbb39 /src/compiletest | |
| parent | 049de3fe7f61d6ae5e6079981ed8e0e7701ea28e (diff) | |
Change a few error messages to give code suggestions
PR #24242 added the ability to the compiler to directly give suggestions about
how to modify code to fix an error. The new errors look like this:
foobar.rs:5:12: 5:25 error: expected a path on the left-hand side of `+`,
not `&'static Copy` [E0178]
foobar.rs:5 let x: &'static Copy + 'static;
^~~~~~~~~~~~~
foobar.rs:5:12: 5:35 help: try adding parentheses (per RFC 438):
foobar.rs: let x: &'static (Copy + 'static);
foobar.rs:2:13: 2:23 error: cast to unsized type: `&_` as `core::marker::Copy`
foobar.rs:2 let x = &1 as Copy;
^~~~~~~~~~
foobar.rs:2:19: 2:23 help: try casting to a reference instead:
foobar.rs: let x = &1 as &Copy;
foobar.rs:7:24: 7:25 error: expected expression, found `;`
foobar.rs:7 let x = box (1 + 1);
^
foobar.rs:7:13: 7:16 help: try using `box()` instead:
foobar.rs: let x = box() (1 + 1);
This also modifies compiletest to give the ability to directly test suggestions
given by error messages.
Diffstat (limited to 'src/compiletest')
| -rw-r--r-- | src/compiletest/runtest.rs | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/compiletest/runtest.rs b/src/compiletest/runtest.rs index 8ae36393182..91550ae7461 100644 --- a/src/compiletest/runtest.rs +++ b/src/compiletest/runtest.rs @@ -979,6 +979,7 @@ fn check_expected_errors(expected_errors: Vec<errors::ExpectedError> , // is the ending point, and * represents ANSI color codes. for line in proc_res.stderr.lines() { let mut was_expected = false; + let mut prev = 0; for (i, ee) in expected_errors.iter().enumerate() { if !found_flags[i] { debug!("prefix={} ee.kind={} ee.msg={} line={}", @@ -986,6 +987,17 @@ fn check_expected_errors(expected_errors: Vec<errors::ExpectedError> , ee.kind, ee.msg, line); + // Suggestions have no line number in their output, so take on the line number of + // the previous expected error + if ee.kind == "suggestion" { + assert!(expected_errors[prev].kind == "help", + "SUGGESTIONs must be preceded by a HELP"); + if line.contains(&ee.msg) { + found_flags[i] = true; + was_expected = true; + break; + } + } if (prefix_matches(line, &prefixes[i]) || continuation(line)) && line.contains(&ee.kind) && line.contains(&ee.msg) { @@ -994,6 +1006,7 @@ fn check_expected_errors(expected_errors: Vec<errors::ExpectedError> , break; } } + prev = i; } // ignore this msg which gets printed at the end |
