Do not ICE on multipart suggestions touching multiple files
When encountering a multipart suggestion with spans belonging to different contexts, skip that suggestion.
This commit is contained in:
parent
c2d141df59
commit
b626202087
@ -185,16 +185,17 @@ impl CodeSuggestion {
|
||||
!invalid
|
||||
})
|
||||
.cloned()
|
||||
.map(|mut substitution| {
|
||||
.filter_map(|mut substitution| {
|
||||
// Assumption: all spans are in the same file, and all spans
|
||||
// are disjoint. Sort in ascending order.
|
||||
substitution.parts.sort_by_key(|part| part.span.lo());
|
||||
|
||||
// Find the bounding span.
|
||||
let lo = substitution.parts.iter().map(|part| part.span.lo()).min().unwrap();
|
||||
let hi = substitution.parts.iter().map(|part| part.span.hi()).max().unwrap();
|
||||
let lo = substitution.parts.iter().map(|part| part.span.lo()).min()?;
|
||||
let hi = substitution.parts.iter().map(|part| part.span.hi()).max()?;
|
||||
let bounding_span = Span::with_root_ctxt(lo, hi);
|
||||
let lines = cm.span_to_lines(bounding_span).unwrap();
|
||||
// The different spans might belong to different contexts, if so ignore suggestion.
|
||||
let lines = cm.span_to_lines(bounding_span).ok()?;
|
||||
assert!(!lines.lines.is_empty());
|
||||
|
||||
// To build up the result, we do this for each span:
|
||||
@ -244,7 +245,7 @@ impl CodeSuggestion {
|
||||
while buf.ends_with('\n') {
|
||||
buf.pop();
|
||||
}
|
||||
(buf, substitution.parts, only_capitalization)
|
||||
Some((buf, substitution.parts, only_capitalization))
|
||||
})
|
||||
.collect()
|
||||
}
|
||||
|
@ -10,7 +10,7 @@ error: internal compiler error: mutable allocation in constant
|
||||
LL | const MUTABLE_BEHIND_RAW: *mut i32 = &UnsafeCell::new(42) as *const _ as *mut _;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
thread 'rustc' panicked at 'no errors encountered even though `delay_span_bug` issued', src/librustc_errors/lib.rs:356:17
|
||||
thread 'rustc' panicked at 'no errors encountered even though `delay_span_bug` issued', src/librustc_errors/lib.rs:357:17
|
||||
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
|
||||
|
||||
error: internal compiler error: unexpected panic
|
||||
|
Loading…
x
Reference in New Issue
Block a user