Auto merge of #48337 - GuillaumeGomez:rustc-explain, r=estebank

Rustc explain

Fixes #48041.

To make the review easier, I separated tests update to code update. Also, I used this script to generate new ui tests stderr:

```python
from os import listdir
from os.path import isdir, isfile, join

PATH = "src/test/ui"

def do_something(path):
    files = [join(path, f) for f in listdir(path)]

    for f in files:
        if isdir(f):
            do_something(f)
            continue
        if not isfile(f) or not f.endswith(".stderr"):
            continue
        x = open(f, "r")
        content = x.read().strip()
        if "error[E" not in content:
            continue
        errors = dict()
        for y in content.splitlines():
            if y.startswith("error[E"):
                errors[y[6:11]] = True
        errors = sorted(errors.keys())
        if len(errors) < 1:
            print("weird... {}".format(f))
            continue
        if len(errors) > 1:
            content += "\n\nYou've got a few errors: {}".format(", ".join(errors))
            content += "\nIf you want more information on an error, try using \"rustc --explain {}\"".format(errors[0])
        else:
            content += "\n\nIf you want more information on this error, try using \"rustc --explain {}\"".format(errors[0])
        content += "\n"
        x = open(f, "w")
        x.write(content)

do_something(PATH)
```
This commit is contained in:
bors 2018-02-26 12:34:52 +00:00
commit bedbad6119
1042 changed files with 1352 additions and 45 deletions

View File

@ -21,7 +21,7 @@ use std::io::prelude::*;
use std::io;
use std::rc::Rc;
use term;
use std::collections::HashMap;
use std::collections::{HashMap, HashSet};
use std::cmp::min;
use unicode_width;
@ -107,6 +107,7 @@ pub struct EmitterWriter {
cm: Option<Rc<CodeMapper>>,
short_message: bool,
teach: bool,
error_codes: HashSet<String>,
}
struct FileWithAnnotatedLines {
@ -115,6 +116,33 @@ struct FileWithAnnotatedLines {
multiline_depth: usize,
}
impl Drop for EmitterWriter {
fn drop(&mut self) {
if !self.short_message && !self.error_codes.is_empty() {
let mut error_codes = self.error_codes.clone().into_iter().collect::<Vec<_>>();
error_codes.sort();
if error_codes.len() > 1 {
let limit = if error_codes.len() > 9 { 9 } else { error_codes.len() };
writeln!(self.dst,
"You've got a few errors: {}{}",
error_codes[..limit].join(", "),
if error_codes.len() > 9 { "..." } else { "" }
).expect("failed to give tips...");
writeln!(self.dst,
"If you want more information on an error, try using \
\"rustc --explain {}\"",
&error_codes[0]).expect("failed to give tips...");
} else {
writeln!(self.dst,
"If you want more information on this error, try using \
\"rustc --explain {}\"",
&error_codes[0]).expect("failed to give tips...");
}
self.dst.flush().expect("failed to emit errors");
}
}
}
impl EmitterWriter {
pub fn stderr(color_config: ColorConfig,
code_map: Option<Rc<CodeMapper>>,
@ -128,6 +156,7 @@ impl EmitterWriter {
cm: code_map,
short_message,
teach,
error_codes: HashSet::new(),
}
} else {
EmitterWriter {
@ -135,6 +164,7 @@ impl EmitterWriter {
cm: code_map,
short_message,
teach,
error_codes: HashSet::new(),
}
}
}
@ -149,6 +179,7 @@ impl EmitterWriter {
cm: code_map,
short_message,
teach,
error_codes: HashSet::new(),
}
}
@ -975,12 +1006,14 @@ impl EmitterWriter {
if primary_span != &&DUMMY_SP {
(cm.lookup_char_pos(primary_span.lo()), cm)
} else {
emit_to_destination(&buffer.render(), level, &mut self.dst, self.short_message)?;
emit_to_destination(&buffer.render(), level, &mut self.dst, self.short_message,
&mut self.error_codes)?;
return Ok(());
}
} else {
// If we don't have span information, emit and exit
emit_to_destination(&buffer.render(), level, &mut self.dst, self.short_message)?;
emit_to_destination(&buffer.render(), level, &mut self.dst, self.short_message,
&mut self.error_codes)?;
return Ok(());
};
if let Ok(pos) =
@ -1153,7 +1186,8 @@ impl EmitterWriter {
}
// final step: take our styled buffer, render it, then output it
emit_to_destination(&buffer.render(), level, &mut self.dst, self.short_message)?;
emit_to_destination(&buffer.render(), level, &mut self.dst, self.short_message,
&mut self.error_codes)?;
Ok(())
@ -1241,7 +1275,8 @@ impl EmitterWriter {
let msg = format!("and {} other candidates", suggestions.len() - MAX_SUGGESTIONS);
buffer.puts(row_num, 0, &msg, Style::NoStyle);
}
emit_to_destination(&buffer.render(), level, &mut self.dst, self.short_message)?;
emit_to_destination(&buffer.render(), level, &mut self.dst, self.short_message,
&mut self.error_codes)?;
}
Ok(())
}
@ -1269,7 +1304,7 @@ impl EmitterWriter {
draw_col_separator_no_space(&mut buffer, 0, max_line_num_len + 1);
}
match emit_to_destination(&buffer.render(), level, &mut self.dst,
self.short_message) {
self.short_message, &mut self.error_codes) {
Ok(()) => (),
Err(e) => panic!("failed to emit error: {}", e)
}
@ -1362,7 +1397,8 @@ fn overlaps(a1: &Annotation, a2: &Annotation, padding: usize) -> bool {
fn emit_to_destination(rendered_buffer: &Vec<Vec<StyledString>>,
lvl: &Level,
dst: &mut Destination,
short_message: bool)
short_message: bool,
error_codes: &mut HashSet<String>)
-> io::Result<()> {
use lock;
@ -1383,6 +1419,9 @@ fn emit_to_destination(rendered_buffer: &Vec<Vec<StyledString>>,
for part in line {
dst.apply_style(lvl.clone(), part.style)?;
write!(dst, "{}", part.text)?;
if !short_message && part.text.len() == 12 && part.text.starts_with("error[E") {
error_codes.insert(part.text[6..11].to_owned());
}
dst.reset_attrs()?;
}
if !short_message {

View File

@ -21,3 +21,4 @@ error[E0453]: allow(test_lint) overruled by outer forbid(test_lint)
error: aborting due to 2 previous errors
If you want more information on this error, try using "rustc --explain E0453"

View File

@ -12,3 +12,4 @@ error[E0308]: mismatched types
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0308"

View File

@ -154,3 +154,4 @@ note: required by `h2`
error: aborting due to 11 previous errors
If you want more information on this error, try using "rustc --explain E0631"

View File

@ -17,3 +17,4 @@ error[E0038]: the trait `Foo` cannot be made into an object
error: aborting due to 2 previous errors
If you want more information on this error, try using "rustc --explain E0038"

View File

@ -9,3 +9,4 @@ error[E0384]: cannot assign twice to immutable variable `x`
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0384"

View File

@ -15,3 +15,4 @@ note: the lifetime 'a as defined on the impl at 17:1...
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0308"

View File

@ -9,3 +9,4 @@ error[E0326]: implemented const `BAR` has an incompatible type for trait
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0326"

View File

@ -42,3 +42,5 @@ error[E0221]: ambiguous associated type `Color` in bounds of `C`
error: aborting due to 4 previous errors
You've got a few errors: E0191, E0221
If you want more information on an error, try using "rustc --explain E0191"

View File

@ -6,3 +6,4 @@ error[E0277]: the trait bound `(): Add<A>` is not satisfied
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0277"

View File

@ -24,3 +24,4 @@ error[E0223]: ambiguous associated type
error: aborting due to 3 previous errors
If you want more information on this error, try using "rustc --explain E0223"

View File

@ -40,3 +40,4 @@ error[E0517]: attribute should be applied to struct
error: aborting due to 5 previous errors
If you want more information on this error, try using "rustc --explain E0517"

View File

@ -20,3 +20,5 @@ error[E0382]: use of moved value: `x`
error: aborting due to 2 previous errors
You've got a few errors: E0382, E0596
If you want more information on an error, try using "rustc --explain E0382"

View File

@ -9,3 +9,4 @@ error[E0369]: binary operation `%` cannot be applied to type `&&{integer}`
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0369"

View File

@ -15,3 +15,4 @@ help: You can use `as` to change the binding name of the import
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0255"

View File

@ -9,3 +9,4 @@ error[E0308]: mismatched types
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0308"

View File

@ -11,3 +11,4 @@ error[E0308]: mismatched types
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0308"

View File

@ -9,3 +9,4 @@ error[E0308]: mismatched types
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0308"

View File

@ -28,3 +28,4 @@ error[E0308]: mismatched types
error: aborting due to 2 previous errors
If you want more information on this error, try using "rustc --explain E0308"

View File

@ -15,3 +15,4 @@ error[E0308]: mismatched types
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0308"

View File

@ -31,3 +31,4 @@ error[E0308]: mismatched types
error: aborting due to 2 previous errors
If you want more information on this error, try using "rustc --explain E0308"

View File

@ -20,3 +20,4 @@ error[E0308]: mismatched types
error: aborting due to 2 previous errors
If you want more information on this error, try using "rustc --explain E0308"

View File

@ -17,3 +17,5 @@ error[E0618]: expected function, found `()`
error: aborting due to 2 previous errors
You've got a few errors: E0308, E0618
If you want more information on an error, try using "rustc --explain E0308"

View File

@ -22,3 +22,5 @@ error[E0308]: mismatched types
error: aborting due to 2 previous errors
You've got a few errors: E0277, E0308
If you want more information on an error, try using "rustc --explain E0277"

View File

@ -8,3 +8,4 @@ error[E0599]: no method named `b` found for type `&Self` in the current scope
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0599"

View File

@ -11,3 +11,4 @@ error[E0308]: mismatched types
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0308"

View File

@ -17,3 +17,4 @@ help: try adding a return type
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0308"

View File

@ -9,3 +9,4 @@ error[E0599]: no variant named `hsl` found for type `color` in the current scope
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0599"

View File

@ -161,3 +161,5 @@ error[E0502]: cannot borrow `a.y` as mutable because `a.x.x` is also borrowed as
error: aborting due to 16 previous errors
You've got a few errors: E0382, E0502, E0503, E0505
If you want more information on an error, try using "rustc --explain E0382"

View File

@ -150,3 +150,4 @@ error[E0499]: cannot borrow `x` as mutable more than once at a time (Mir)
error: aborting due to 10 previous errors
If you want more information on this error, try using "rustc --explain E0499"

View File

@ -12,3 +12,4 @@ help: to force the closure to take ownership of `books` (and any other reference
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0373"

View File

@ -12,3 +12,4 @@ help: to force the closure to take ownership of `books` (and any other reference
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0373"

View File

@ -8,3 +8,4 @@ error[E0507]: cannot move out of captured outer variable in an `Fn` closure
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0507"

View File

@ -34,3 +34,5 @@ error[E0507]: cannot move out of borrowed content
error: aborting due to 3 previous errors
You've got a few errors: E0507, E0509
If you want more information on an error, try using "rustc --explain E0507"

View File

@ -15,3 +15,4 @@ error[E0508]: cannot move out of type `[Foo]`, a non-copy slice
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0508"

View File

@ -20,3 +20,4 @@ error[E0382]: use of moved value: `x` (Mir)
error: aborting due to 2 previous errors
If you want more information on this error, try using "rustc --explain E0382"

View File

@ -36,3 +36,5 @@ error[E0499]: cannot borrow `x` as mutable more than once at a time
error: aborting due to 3 previous errors
You've got a few errors: E0499, E0502
If you want more information on an error, try using "rustc --explain E0499"

View File

@ -80,3 +80,5 @@ error[E0508]: cannot move out of type `[std::boxed::Box<isize>]`, a non-copy sli
error: aborting due to 8 previous errors
You've got a few errors: E0506, E0508
If you want more information on an error, try using "rustc --explain E0506"

View File

@ -16,3 +16,4 @@ error[E0384]: cannot assign to immutable argument `_x` (Mir)
error: aborting due to 2 previous errors
If you want more information on this error, try using "rustc --explain E0384"

View File

@ -54,3 +54,4 @@ error[E0382]: use of moved value: `maybe.0` (Mir)
error: aborting due to 5 previous errors
If you want more information on this error, try using "rustc --explain E0382"

View File

@ -27,3 +27,4 @@ error[E0499]: cannot borrow `*arg` as mutable more than once at a time
error: aborting due to 3 previous errors
If you want more information on this error, try using "rustc --explain E0499"

View File

@ -21,3 +21,4 @@ error[E0499]: cannot borrow `inner_void` as mutable more than once at a time
error: aborting due to 2 previous errors
If you want more information on this error, try using "rustc --explain E0499"

View File

@ -46,3 +46,5 @@ error[E0276]: impl has stricter requirements than trait
error: aborting due to 4 previous errors
You've got a few errors: E0195, E0276, E0308
If you want more information on an error, try using "rustc --explain E0195"

View File

@ -9,3 +9,4 @@ error[E0507]: cannot move out of captured outer variable in an `Fn` closure
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0507"

View File

@ -8,3 +8,4 @@ error[E0054]: cannot cast as `bool`
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0054"

View File

@ -6,3 +6,4 @@ error[E0425]: cannot find value `error` in this scope
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0425"

View File

@ -8,3 +8,4 @@ error[E0054]: cannot cast as `bool`
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0054"

View File

@ -16,3 +16,4 @@ error[E0620]: cast to unsized type: `std::boxed::Box<{integer}>` as `std::marker
error: aborting due to 2 previous errors
If you want more information on this error, try using "rustc --explain E0620"

View File

@ -8,3 +8,4 @@ error[E0606]: casting `*mut impl std::fmt::Debug+?Sized` as `*mut impl std::fmt:
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0606"

View File

@ -6,3 +6,4 @@ error[E0412]: cannot find type `Ipsum` in this scope
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0412"

View File

@ -11,3 +11,4 @@ error[E0460]: found possibly newer version of crate `a` which `b` depends on
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0460"

View File

@ -48,3 +48,4 @@ error[E0004]: non-exhaustive patterns: `Some(B)`, `Some(C)`, `Some(D)` and 2 mor
error: aborting due to 8 previous errors
If you want more information on this error, try using "rustc --explain E0004"

View File

@ -84,3 +84,4 @@ error: borrowed data cannot be stored outside of its closure
error: aborting due to 5 previous errors
If you want more information on this error, try using "rustc --explain E0308"

View File

@ -11,3 +11,4 @@ error[E0525]: expected a closure that implements the `Fn` trait, but this closur
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0525"

View File

@ -11,3 +11,4 @@ error[E0525]: expected a closure that implements the `Fn` trait, but this closur
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0525"

View File

@ -14,3 +14,4 @@ note: closure cannot be invoked more than once because it moves the variable `di
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0382"

View File

@ -8,3 +8,4 @@ error[E0592]: duplicate definitions with name `f`
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0592"

View File

@ -6,3 +6,4 @@ error[E0321]: cross-crate traits with a default impl, like `std::marker::Send`,
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0321"

View File

@ -9,3 +9,4 @@ error[E0596]: cannot borrow immutable local variable `x` as mutable
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0596"

View File

@ -10,3 +10,4 @@ error[E0499]: cannot borrow `x` as mutable more than once at a time
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0499"

View File

@ -8,3 +8,4 @@ error[E0600]: cannot apply unary operator `!` to type `&'static str`
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0600"

View File

@ -9,3 +9,4 @@ error[E0499]: cannot borrow `v` as mutable more than once at a time
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0499"

View File

@ -29,3 +29,4 @@ error[E0592]: duplicate definitions with name `baz`
error: aborting due to 3 previous errors
If you want more information on this error, try using "rustc --explain E0592"

View File

@ -9,3 +9,4 @@ error[E0509]: cannot move out of type `S`, which implements the `Drop` trait
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0509"

View File

@ -17,3 +17,5 @@ error[E0308]: mismatched types
error: aborting due to 2 previous errors
You've got a few errors: E0308, E0425
If you want more information on an error, try using "rustc --explain E0308"

View File

@ -11,3 +11,4 @@ error[E0382]: use of moved value: `some_vec`
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0382"

View File

@ -6,3 +6,4 @@ error[E0404]: expected trait, found type alias `Bar`
error: cannot continue compilation due to previous error
If you want more information on this error, try using "rustc --explain E0404"

View File

@ -22,3 +22,4 @@ error[E0425]: cannot find value `a̐é` in this scope
error: aborting due to 3 previous errors
If you want more information on this error, try using "rustc --explain E0425"

View File

@ -26,3 +26,4 @@ error[E0308]: mismatched types
error: aborting due to 2 previous errors
If you want more information on this error, try using "rustc --explain E0308"

View File

@ -6,3 +6,4 @@ error[E0412]: cannot find type `DoesNotExist` in this scope
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0412"

View File

@ -57,3 +57,5 @@ error[E0117]: only traits defined in the current crate can be implemented for ar
error: aborting due to 8 previous errors
You've got a few errors: E0117, E0206
If you want more information on an error, try using "rustc --explain E0117"

View File

@ -20,3 +20,4 @@ error[E0592]: duplicate definitions with name `f`
error: aborting due to 2 previous errors
If you want more information on this error, try using "rustc --explain E0592"

View File

@ -18,3 +18,4 @@ error[E0119]: conflicting implementations of trait `Foo<_>` for type `i32`:
error: aborting due to 2 previous errors
If you want more information on this error, try using "rustc --explain E0119"

View File

@ -11,3 +11,4 @@ error[E0592]: duplicate definitions with name `dummy`
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0592"

View File

@ -10,3 +10,4 @@ error[E0119]: conflicting implementations of trait `Sweet` for type `std::boxed:
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0119"

View File

@ -11,3 +11,4 @@ error[E0592]: duplicate definitions with name `dummy`
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0592"

View File

@ -10,3 +10,4 @@ error[E0119]: conflicting implementations of trait `Foo` for type `i16`:
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0119"

View File

@ -8,3 +8,4 @@ error[E0384]: cannot assign twice to immutable variable `x`
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0384"

View File

@ -9,3 +9,4 @@ error[E0276]: impl has stricter requirements than trait
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0276"

View File

@ -9,3 +9,4 @@ error[E0276]: impl has stricter requirements than trait
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0276"

View File

@ -9,3 +9,4 @@ error[E0276]: impl has stricter requirements than trait
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0276"

View File

@ -9,3 +9,4 @@ error[E0276]: impl has stricter requirements than trait
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0276"

View File

@ -12,3 +12,4 @@ error[E0053]: method `b` has an incompatible type for trait
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0053"

View File

@ -9,3 +9,4 @@ error[E0276]: impl has stricter requirements than trait
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0276"

View File

@ -63,3 +63,4 @@ error[E0276]: impl has stricter requirements than trait
error: aborting due to 7 previous errors
If you want more information on this error, try using "rustc --explain E0276"

View File

@ -9,3 +9,4 @@ error[E0276]: impl has stricter requirements than trait
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0276"

View File

@ -6,3 +6,4 @@ error[E0396]: raw pointers cannot be dereferenced in statics
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0396"

View File

@ -12,3 +12,4 @@ note: for pattern here
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0080"

View File

@ -14,3 +14,4 @@ error[E0080]: constant evaluation error
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0080"

View File

@ -9,3 +9,4 @@ error[E0308]: mismatched types
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0308"

View File

@ -26,3 +26,4 @@ error[E0080]: constant evaluation error
error: aborting due to 2 previous errors
If you want more information on this error, try using "rustc --explain E0080"

View File

@ -12,3 +12,4 @@ note: for pattern here
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0080"

View File

@ -38,3 +38,5 @@ note: for constant expression here
error: aborting due to 4 previous errors
You've got a few errors: E0015, E0016, E0019, E0080
If you want more information on an error, try using "rustc --explain E0015"

View File

@ -6,3 +6,4 @@ error[E0379]: trait fns cannot be declared const
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0379"

View File

@ -12,3 +12,4 @@ error[E0379]: trait fns cannot be declared const
error: aborting due to 2 previous errors
If you want more information on this error, try using "rustc --explain E0379"

View File

@ -20,3 +20,4 @@ note: for constant expression here
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0080"

View File

@ -18,3 +18,4 @@ error[E0005]: refutable pattern in local binding: `_` not covered
error: aborting due to 3 previous errors
If you want more information on this error, try using "rustc --explain E0005"

View File

@ -12,3 +12,4 @@ note: for pattern here
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0080"

View File

@ -36,3 +36,4 @@ error[E0277]: the trait bound `str: std::marker::Sized` is not satisfied
error: aborting due to 4 previous errors
If you want more information on this error, try using "rustc --explain E0277"

View File

@ -18,3 +18,4 @@ note: ...which then requires computing the supertraits of `C`...
error: aborting due to previous error
If you want more information on this error, try using "rustc --explain E0391"

Some files were not shown because too many files have changed in this diff Show More