Auto merge of #145254 - GuillaumeGomez:rollup-7bp43pv, r=GuillaumeGomez
Rollup of 4 pull requests Successful merges: - rust-lang/rust#144966 ( Improve suggestion for "missing function argument" on multiline call) - rust-lang/rust#145111 (remove some unused private trait impls) - rust-lang/rust#145221 (Fix Cargo cross-compilation (take two)) - rust-lang/rust#145247 (Update `sysinfo` version to `0.37.0`) r? `@ghost` `@rustbot` modify labels: rollup
This commit is contained in:
commit
1ebbd87a62
11 changed files with 100 additions and 45 deletions
|
|
@ -5284,9 +5284,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "sysinfo"
|
||||
version = "0.36.1"
|
||||
version = "0.37.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "252800745060e7b9ffb7b2badbd8b31cfa4aa2e61af879d0a3bf2a317c20217d"
|
||||
checksum = "07cec4dc2d2e357ca1e610cfb07de2fa7a10fc3e9fe89f72545f3d244ea87753"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"objc2-core-foundation",
|
||||
|
|
|
|||
|
|
@ -184,22 +184,6 @@ where
|
|||
}
|
||||
}
|
||||
|
||||
impl<A, B, C, D> FactRow for (A, B, C, D)
|
||||
where
|
||||
A: FactCell,
|
||||
B: FactCell,
|
||||
C: FactCell,
|
||||
D: FactCell,
|
||||
{
|
||||
fn write(
|
||||
&self,
|
||||
out: &mut dyn Write,
|
||||
location_table: &PoloniusLocationTable,
|
||||
) -> Result<(), Box<dyn Error>> {
|
||||
write_row(out, location_table, &[&self.0, &self.1, &self.2, &self.3])
|
||||
}
|
||||
}
|
||||
|
||||
fn write_row(
|
||||
out: &mut dyn Write,
|
||||
location_table: &PoloniusLocationTable,
|
||||
|
|
|
|||
|
|
@ -1589,26 +1589,64 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||
// e.g. `reuse HasSelf::method;` should suggest `reuse HasSelf::method($args);`.
|
||||
full_call_span.shrink_to_hi()
|
||||
};
|
||||
|
||||
// Controls how the arguments should be listed in the suggestion.
|
||||
enum ArgumentsFormatting {
|
||||
SingleLine,
|
||||
Multiline { fallback_indent: String, brace_indent: String },
|
||||
}
|
||||
let arguments_formatting = {
|
||||
let mut provided_inputs = matched_inputs.iter().filter_map(|a| *a);
|
||||
if let Some(brace_indent) = source_map.indentation_before(suggestion_span)
|
||||
&& let Some(first_idx) = provided_inputs.by_ref().next()
|
||||
&& let Some(last_idx) = provided_inputs.by_ref().next()
|
||||
&& let (_, first_span) = provided_arg_tys[first_idx]
|
||||
&& let (_, last_span) = provided_arg_tys[last_idx]
|
||||
&& source_map.is_multiline(first_span.to(last_span))
|
||||
&& let Some(fallback_indent) = source_map.indentation_before(first_span)
|
||||
{
|
||||
ArgumentsFormatting::Multiline { fallback_indent, brace_indent }
|
||||
} else {
|
||||
ArgumentsFormatting::SingleLine
|
||||
}
|
||||
};
|
||||
|
||||
let mut suggestion = "(".to_owned();
|
||||
let mut needs_comma = false;
|
||||
for (expected_idx, provided_idx) in matched_inputs.iter_enumerated() {
|
||||
if needs_comma {
|
||||
suggestion += ", ";
|
||||
} else {
|
||||
needs_comma = true;
|
||||
suggestion += ",";
|
||||
}
|
||||
let suggestion_text = if let Some(provided_idx) = provided_idx
|
||||
match &arguments_formatting {
|
||||
ArgumentsFormatting::SingleLine if needs_comma => suggestion += " ",
|
||||
ArgumentsFormatting::SingleLine => {}
|
||||
ArgumentsFormatting::Multiline { .. } => suggestion += "\n",
|
||||
}
|
||||
needs_comma = true;
|
||||
let (suggestion_span, suggestion_text) = if let Some(provided_idx) = provided_idx
|
||||
&& let (_, provided_span) = provided_arg_tys[*provided_idx]
|
||||
&& let Ok(arg_text) = source_map.span_to_snippet(provided_span)
|
||||
{
|
||||
arg_text
|
||||
(Some(provided_span), arg_text)
|
||||
} else {
|
||||
// Propose a placeholder of the correct type
|
||||
let (_, expected_ty) = formal_and_expected_inputs[expected_idx];
|
||||
ty_to_snippet(expected_ty, expected_idx)
|
||||
(None, ty_to_snippet(expected_ty, expected_idx))
|
||||
};
|
||||
if let ArgumentsFormatting::Multiline { fallback_indent, .. } =
|
||||
&arguments_formatting
|
||||
{
|
||||
let indent = suggestion_span
|
||||
.and_then(|span| source_map.indentation_before(span))
|
||||
.unwrap_or_else(|| fallback_indent.clone());
|
||||
suggestion += &indent;
|
||||
}
|
||||
suggestion += &suggestion_text;
|
||||
}
|
||||
if let ArgumentsFormatting::Multiline { brace_indent, .. } = arguments_formatting {
|
||||
suggestion += ",\n";
|
||||
suggestion += &brace_indent;
|
||||
}
|
||||
suggestion += ")";
|
||||
err.span_suggestion_verbose(
|
||||
suggestion_span,
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ macro_rules! default_hash_impl {
|
|||
};
|
||||
}
|
||||
|
||||
default_hash_impl! { i8, i16, i32, i64, i128, isize, u8, u16, u32, u64, u128, usize, }
|
||||
default_hash_impl! { u8, u64, usize, }
|
||||
|
||||
impl<'tcx> AbiHashStable<'tcx> for bool {
|
||||
#[inline]
|
||||
|
|
@ -37,13 +37,6 @@ impl<'tcx> AbiHashStable<'tcx> for str {
|
|||
}
|
||||
}
|
||||
|
||||
impl<'tcx> AbiHashStable<'tcx> for String {
|
||||
#[inline]
|
||||
fn abi_hash(&self, tcx: TyCtxt<'tcx>, hasher: &mut StableHasher) {
|
||||
self[..].abi_hash(tcx, hasher);
|
||||
}
|
||||
}
|
||||
|
||||
impl<'tcx> AbiHashStable<'tcx> for Symbol {
|
||||
#[inline]
|
||||
fn abi_hash(&self, tcx: TyCtxt<'tcx>, hasher: &mut StableHasher) {
|
||||
|
|
|
|||
|
|
@ -730,9 +730,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "sysinfo"
|
||||
version = "0.36.0"
|
||||
version = "0.37.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "aab138f5c1bb35231de19049060a87977ad23e04f2303e953bc5c2947ac7dec4"
|
||||
checksum = "07cec4dc2d2e357ca1e610cfb07de2fa7a10fc3e9fe89f72545f3d244ea87753"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"memchr",
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@ walkdir = "2.4"
|
|||
xz2 = "0.1"
|
||||
|
||||
# Dependencies needed by the build-metrics feature
|
||||
sysinfo = { version = "0.36.0", default-features = false, optional = true, features = ["system"] }
|
||||
sysinfo = { version = "0.37.0", default-features = false, optional = true, features = ["system"] }
|
||||
|
||||
# Dependencies needed by the `tracing` feature
|
||||
tracing = { version = "0.1", optional = true, features = ["attributes"] }
|
||||
|
|
|
|||
|
|
@ -857,7 +857,9 @@ impl Step for Cargo {
|
|||
fn run(self, builder: &Builder<'_>) -> ToolBuildResult {
|
||||
builder.build.require_submodule("src/tools/cargo", None);
|
||||
|
||||
builder.std(self.build_compiler, builder.host_target);
|
||||
builder.std(self.build_compiler, self.target);
|
||||
|
||||
builder.ensure(ToolBuild {
|
||||
build_compiler: self.build_compiler,
|
||||
target: self.target,
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ log = "0.4"
|
|||
anyhow = "1"
|
||||
humantime = "2"
|
||||
humansize = "2"
|
||||
sysinfo = { version = "0.36.0", default-features = false, features = ["disk"] }
|
||||
sysinfo = { version = "0.37.0", default-features = false, features = ["disk"] }
|
||||
fs_extra = "1"
|
||||
camino = "1"
|
||||
tar = "0.4"
|
||||
|
|
|
|||
|
|
@ -75,12 +75,16 @@ LL | fn foo(p1: T1, p2: Arc<T2>, p3: T3, p4: Arc<T4>, p5: T5, p6: T6, p7: T7, p8
|
|||
| ^^^ -----------
|
||||
help: provide the argument
|
||||
|
|
||||
LL - foo(
|
||||
LL -
|
||||
LL - p1, //p2,
|
||||
LL - p3, p4, p5, p6, p7, p8,
|
||||
LL - );
|
||||
LL + foo(p1, /* Arc<T2> */, p3, p4, p5, p6, p7, p8);
|
||||
LL ~ foo(
|
||||
LL + p1,
|
||||
LL + /* Arc<T2> */,
|
||||
LL + p3,
|
||||
LL + p4,
|
||||
LL + p5,
|
||||
LL + p6,
|
||||
LL + p7,
|
||||
LL + p8,
|
||||
LL ~ );
|
||||
|
|
||||
|
||||
error: aborting due to 4 previous errors
|
||||
|
|
|
|||
|
|
@ -46,9 +46,21 @@ impl Bar {
|
|||
}
|
||||
}
|
||||
|
||||
fn function_with_lots_of_arguments(a: i32, b: char, c: i32, d: i32, e: i32, f: i32) {}
|
||||
|
||||
fn main() {
|
||||
foo(1, 2, 3);
|
||||
//~^ ERROR function takes 4 arguments but 3
|
||||
bar(1, 2, 3);
|
||||
//~^ ERROR function takes 6 arguments but 3
|
||||
|
||||
let variable_name = 42;
|
||||
function_with_lots_of_arguments(
|
||||
variable_name,
|
||||
variable_name,
|
||||
variable_name,
|
||||
variable_name,
|
||||
variable_name,
|
||||
);
|
||||
//~^^^^^^^ ERROR this function takes 6 arguments but 5 arguments were supplied [E0061]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ LL | <$from>::$method(8, /* u8 */)
|
|||
| ++++++++++
|
||||
|
||||
error[E0061]: this function takes 4 arguments but 3 arguments were supplied
|
||||
--> $DIR/fn-arg-count-mismatch-diagnostics.rs:50:5
|
||||
--> $DIR/fn-arg-count-mismatch-diagnostics.rs:52:5
|
||||
|
|
||||
LL | foo(1, 2, 3);
|
||||
| ^^^--------- argument #4 of type `isize` is missing
|
||||
|
|
@ -68,7 +68,7 @@ LL | foo(1, 2, 3, /* isize */);
|
|||
| +++++++++++++
|
||||
|
||||
error[E0061]: this function takes 6 arguments but 3 arguments were supplied
|
||||
--> $DIR/fn-arg-count-mismatch-diagnostics.rs:52:5
|
||||
--> $DIR/fn-arg-count-mismatch-diagnostics.rs:54:5
|
||||
|
|
||||
LL | bar(1, 2, 3);
|
||||
| ^^^--------- three arguments of type `i32`, `i32`, and `i32` are missing
|
||||
|
|
@ -83,6 +83,28 @@ help: provide the arguments
|
|||
LL | bar(1, 2, 3, /* i32 */, /* i32 */, /* i32 */);
|
||||
| +++++++++++++++++++++++++++++++++
|
||||
|
||||
error: aborting due to 5 previous errors
|
||||
error[E0061]: this function takes 6 arguments but 5 arguments were supplied
|
||||
--> $DIR/fn-arg-count-mismatch-diagnostics.rs:58:5
|
||||
|
|
||||
LL | function_with_lots_of_arguments(
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
LL | variable_name,
|
||||
LL | variable_name,
|
||||
| ------------- argument #2 of type `char` is missing
|
||||
|
|
||||
note: function defined here
|
||||
--> $DIR/fn-arg-count-mismatch-diagnostics.rs:49:4
|
||||
|
|
||||
LL | fn function_with_lots_of_arguments(a: i32, b: char, c: i32, d: i32, e: i32, f: i32) {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -------
|
||||
help: provide the argument
|
||||
|
|
||||
LL | function_with_lots_of_arguments(
|
||||
LL | variable_name,
|
||||
LL ~ /* char */,
|
||||
LL ~ variable_name,
|
||||
|
|
||||
|
||||
error: aborting due to 6 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0061`.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue