1
Fork 0

Avoid ICE when suggestion span is at Eof

This commit is contained in:
Esteban Küber 2019-07-25 15:59:38 -07:00
parent 03f19f7ff1
commit eeb1bd18dc
3 changed files with 71 additions and 1 deletions

View file

@ -229,7 +229,8 @@ impl CodeSuggestion {
}
}
if let Some(cur_line) = fm.get_line(cur_lo.line - 1) {
buf.push_str(&cur_line[..cur_lo.col.to_usize()]);
let end = std::cmp::min(cur_line.len(), cur_lo.col.to_usize());
buf.push_str(&cur_line[..end]);
}
}
buf.push_str(&part.snippet);

View file

@ -0,0 +1,8 @@
// ignore-tidy-end-whitespace
// error-pattern: aborting due to 6 previous errors
fn main() {}
fn p() { match s { v, E { [) {) }

View file

@ -0,0 +1,61 @@
error: this file contains an un-closed delimiter
--> $DIR/issue-62973.rs:8:2
|
LL | fn p() { match s { v, E { [) {) }
| - - un-closed delimiter
| |
| un-closed delimiter
LL |
LL |
| ^
error: expected one of `,` or `}`, found `{`
--> $DIR/issue-62973.rs:6:25
|
LL | fn p() { match s { v, E { [) {) }
| - ^ expected one of `,` or `}` here
| |
| while parsing this struct
error: struct literals are not allowed here
--> $DIR/issue-62973.rs:6:16
|
LL | fn p() { match s { v, E { [) {) }
| ________________^
LL | |
LL | |
| |_^
help: surround the struct literal with parentheses
|
LL | fn p() { match (s { v, E { [) {) }
LL |
LL | )
|
error: expected one of `.`, `?`, `{`, or an operator, found `}`
--> $DIR/issue-62973.rs:8:1
|
LL | fn p() { match s { v, E { [) {) }
| ----- while parsing this match expression
LL |
LL |
| ^ expected one of `.`, `?`, `{`, or an operator here
error: incorrect close delimiter: `)`
--> $DIR/issue-62973.rs:6:28
|
LL | fn p() { match s { v, E { [) {) }
| -^ incorrect close delimiter
| |
| un-closed delimiter
error: incorrect close delimiter: `)`
--> $DIR/issue-62973.rs:6:31
|
LL | fn p() { match s { v, E { [) {) }
| -^ incorrect close delimiter
| |
| un-closed delimiter
error: aborting due to 6 previous errors