Skip to content

Commit

Permalink
Auto merge of #97342 - JohnTitor:rollup-zqxctaw, r=JohnTitor
Browse files Browse the repository at this point in the history
Rollup of 5 pull requests

Successful merges:

 - #97240 (Typo suggestion for a variable with a name similar to struct fields)
 - #97289 (Lifetime variance fixes for clippy)
 - #97290 (Turn on `fast_submodules` unconditionally)
 - #97336 (typo)
 - #97337 (Fix stabilization version of `Ipv6Addr::to_ipv4_mapped`)

Failed merges:

r? `@ghost`
`@rustbot` modify labels: rollup
  • Loading branch information
bors committed May 24, 2022
2 parents b8d0cd8 + a1cbf66 commit acb5c16
Show file tree
Hide file tree
Showing 17 changed files with 219 additions and 81 deletions.
2 changes: 1 addition & 1 deletion compiler/rustc_interface/src/callbacks.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ fn track_span_parent(def_id: rustc_span::def_id::LocalDefId) {
}

/// This is a callback from `rustc_ast` as it cannot access the implicit state
/// in `rustc_middle` otherwise. It is used to when diagnostic messages are
/// in `rustc_middle` otherwise. It is used when diagnostic messages are
/// emitted and stores them in the current query, if there is one.
fn track_diagnostic(diagnostic: &Diagnostic) {
tls::with_context_opt(|icx| {
Expand Down
15 changes: 8 additions & 7 deletions compiler/rustc_resolve/src/late/diagnostics.rs
Original file line number Diff line number Diff line change
Expand Up @@ -445,6 +445,8 @@ impl<'a: 'ast, 'ast> LateResolutionVisitor<'a, '_, 'ast> {
);
}
}
// Try Levenshtein algorithm.
let typo_sugg = self.lookup_typo_candidate(path, ns, is_expected);
if path.len() == 1 && self.self_type_is_available() {
if let Some(candidate) = self.lookup_assoc_candidate(ident, ns, is_expected) {
let self_is_available = self.self_value_is_available(path[0].ident.span);
Expand All @@ -454,7 +456,7 @@ impl<'a: 'ast, 'ast> LateResolutionVisitor<'a, '_, 'ast> {
err.span_suggestion(
span,
"you might have meant to use the available field",
format!("self.{}", path_str),
format!("self.{path_str}"),
Applicability::MachineApplicable,
);
} else {
Expand All @@ -465,7 +467,7 @@ impl<'a: 'ast, 'ast> LateResolutionVisitor<'a, '_, 'ast> {
err.span_suggestion(
span,
"you might have meant to call the method",
format!("self.{}", path_str),
format!("self.{path_str}"),
Applicability::MachineApplicable,
);
}
Expand All @@ -476,11 +478,12 @@ impl<'a: 'ast, 'ast> LateResolutionVisitor<'a, '_, 'ast> {
err.span_suggestion(
span,
&format!("you might have meant to {}", candidate.action()),
format!("Self::{}", path_str),
format!("Self::{path_str}"),
Applicability::MachineApplicable,
);
}
}
self.r.add_typo_suggestion(&mut err, typo_sugg, ident_span);
return (err, candidates);
}

Expand All @@ -495,16 +498,14 @@ impl<'a: 'ast, 'ast> LateResolutionVisitor<'a, '_, 'ast> {

err.span_suggestion(
call_span,
&format!("try calling `{}` as a method", ident),
format!("self.{}({})", path_str, args_snippet),
&format!("try calling `{ident}` as a method"),
format!("self.{path_str}({args_snippet})"),
Applicability::MachineApplicable,
);
return (err, candidates);
}
}

// Try Levenshtein algorithm.
let typo_sugg = self.lookup_typo_candidate(path, ns, is_expected);
// Try context-dependent help if relaxed lookup didn't work.
if let Some(res) = res {
if self.smart_resolve_context_dependent_help(
Expand Down
4 changes: 0 additions & 4 deletions config.toml.example
Original file line number Diff line number Diff line change
Expand Up @@ -240,10 +240,6 @@ changelog-seen = 2
# Indicate whether git submodules are managed and updated automatically.
#submodules = true

# Update git submodules only when the checked out commit in the submodules differs
# from what is committed in the main rustc repo.
#fast-submodules = true

# The path to (or name of) the GDB executable to use. This is only used for
# executing the debuginfo test suite.
#gdb = "gdb"
Expand Down
2 changes: 1 addition & 1 deletion library/std/src/net/ip.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1655,7 +1655,7 @@ impl Ipv6Addr {
/// assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 1).to_ipv4_mapped(), None);
/// ```
#[rustc_const_unstable(feature = "const_ipv6", issue = "76205")]
#[stable(feature = "ipv6_to_ipv4_mapped", since = "1.62.0")]
#[stable(feature = "ipv6_to_ipv4_mapped", since = "1.63.0")]
#[must_use = "this returns the result of the operation, \
without modifying the original"]
#[inline]
Expand Down
1 change: 1 addition & 0 deletions src/bootstrap/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- The options `infodir`, `localstatedir`, and `gpg-password-file` are no longer allowed in config.toml. Previously, they were ignored without warning. Note that `infodir` and `localstatedir` are still accepted by `./configure`, with a warning. [#82451](https://github.com/rust-lang/rust/pull/82451)
- Add options for enabling overflow checks, one for std (`overflow-checks-std`) and one for everything else (`overflow-checks`). Both default to false.
- Change the names for `dist` commands to match the component they generate. [#90684](https://github.com/rust-lang/rust/pull/90684)
- The `build.fast-submodules` option has been removed. Fast submodule checkouts are enabled unconditionally. Automatic submodule handling can still be disabled with `build.submodules = false`.

### Non-breaking changes

Expand Down
30 changes: 11 additions & 19 deletions src/bootstrap/bootstrap.py
Original file line number Diff line number Diff line change
Expand Up @@ -926,23 +926,19 @@ def build_triple(self):
return config
return default_build_triple(self.verbose)

def check_submodule(self, module, slow_submodules):
if not slow_submodules:
checked_out = subprocess.Popen(["git", "rev-parse", "HEAD"],
cwd=os.path.join(self.rust_root, module),
stdout=subprocess.PIPE)
return checked_out
else:
return None
def check_submodule(self, module):
checked_out = subprocess.Popen(["git", "rev-parse", "HEAD"],
cwd=os.path.join(self.rust_root, module),
stdout=subprocess.PIPE)
return checked_out

def update_submodule(self, module, checked_out, recorded_submodules):
module_path = os.path.join(self.rust_root, module)

if checked_out is not None:
default_encoding = sys.getdefaultencoding()
checked_out = checked_out.communicate()[0].decode(default_encoding).strip()
if recorded_submodules[module] == checked_out:
return
default_encoding = sys.getdefaultencoding()
checked_out = checked_out.communicate()[0].decode(default_encoding).strip()
if recorded_submodules[module] == checked_out:
return

print("Updating submodule", module)

Expand Down Expand Up @@ -991,12 +987,8 @@ def update_submodules(self):
git_version_str = require(['git', '--version']).split()[2].decode(default_encoding)
self.git_version = distutils.version.LooseVersion(git_version_str)

slow_submodules = self.get_toml('fast-submodules') == "false"
start_time = time()
if slow_submodules:
print('Unconditionally updating submodules')
else:
print('Updating only changed submodules')
print('Updating only changed submodules')
default_encoding = sys.getdefaultencoding()
# Only update submodules that are needed to build bootstrap. These are needed because Cargo
# currently requires everything in a workspace to be "locally present" when starting a
Expand All @@ -1022,7 +1014,7 @@ def update_submodules(self):
filtered_submodules = []
submodules_names = []
for module in submodules:
check = self.check_submodule(module, slow_submodules)
check = self.check_submodule(module)
filtered_submodules.append((module, check))
submodules_names.append(module)
recorded = subprocess.Popen(["git", "ls-tree", "HEAD"] + submodules_names,
Expand Down
4 changes: 0 additions & 4 deletions src/bootstrap/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@ pub struct Config {
pub ninja_in_file: bool,
pub verbose: usize,
pub submodules: Option<bool>,
pub fast_submodules: bool,
pub compiler_docs: bool,
pub docs_minification: bool,
pub docs: bool,
Expand Down Expand Up @@ -517,7 +516,6 @@ define_config! {
compiler_docs: Option<bool> = "compiler-docs",
docs_minification: Option<bool> = "docs-minification",
submodules: Option<bool> = "submodules",
fast_submodules: Option<bool> = "fast-submodules",
gdb: Option<String> = "gdb",
nodejs: Option<String> = "nodejs",
npm: Option<String> = "npm",
Expand Down Expand Up @@ -705,7 +703,6 @@ impl Config {
config.rust_optimize = true;
config.rust_optimize_tests = true;
config.submodules = None;
config.fast_submodules = true;
config.docs = true;
config.docs_minification = true;
config.rust_rpath = true;
Expand Down Expand Up @@ -847,7 +844,6 @@ impl Config {
set(&mut config.compiler_docs, build.compiler_docs);
set(&mut config.docs_minification, build.docs_minification);
set(&mut config.docs, build.docs);
set(&mut config.fast_submodules, build.fast_submodules);
set(&mut config.locked_deps, build.locked_deps);
set(&mut config.vendor, build.vendor);
set(&mut config.full_bootstrap, build.full_bootstrap);
Expand Down
39 changes: 18 additions & 21 deletions src/bootstrap/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -556,27 +556,24 @@ impl Build {
}

// check_submodule
if self.config.fast_submodules {
let checked_out_hash = output(
Command::new("git").args(&["rev-parse", "HEAD"]).current_dir(&absolute_path),
);
// update_submodules
let recorded = output(
Command::new("git")
.args(&["ls-tree", "HEAD"])
.arg(relative_path)
.current_dir(&self.config.src),
);
let actual_hash = recorded
.split_whitespace()
.nth(2)
.unwrap_or_else(|| panic!("unexpected output `{}`", recorded));

// update_submodule
if actual_hash == checked_out_hash.trim_end() {
// already checked out
return;
}
let checked_out_hash =
output(Command::new("git").args(&["rev-parse", "HEAD"]).current_dir(&absolute_path));
// update_submodules
let recorded = output(
Command::new("git")
.args(&["ls-tree", "HEAD"])
.arg(relative_path)
.current_dir(&self.config.src),
);
let actual_hash = recorded
.split_whitespace()
.nth(2)
.unwrap_or_else(|| panic!("unexpected output `{}`", recorded));

// update_submodule
if actual_hash == checked_out_hash.trim_end() {
// already checked out
return;
}

println!("Updating submodule {}", relative_path.display());
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
struct A {
config: String,
}

impl A {
fn new(cofig: String) -> Self {
Self { config } //~ Error cannot find value `config` in this scope
}

fn do_something(cofig: String) {
println!("{config}"); //~ Error cannot find value `config` in this scope
}

fn self_is_available(self, cofig: String) {
println!("{config}"); //~ Error cannot find value `config` in this scope
}
}

trait B {
const BAR: u32 = 3;
type Baz;
fn bar(&self);
fn baz(&self) {}
fn bah() {}
}

impl B for Box<isize> {
type Baz = String;
fn bar(&self) {
// let baz = 3;
baz();
//~^ ERROR cannot find function `baz`
bah;
//~^ ERROR cannot find value `bah`
BAR;
//~^ ERROR cannot find value `BAR` in this scope
let foo: Baz = "".to_string();
//~^ ERROR cannot find type `Baz` in this scope
}
}

fn ba() {}
const BARR: u32 = 3;
type Bar = String;

fn main() {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
error[E0425]: cannot find value `config` in this scope
--> $DIR/typo-suggestion-for-variable-with-name-similar-to-struct-field.rs:7:16
|
LL | Self { config }
| ^^^^^^
| |
| a field by this name exists in `Self`
| help: a local variable with a similar name exists: `cofig`

error[E0425]: cannot find value `config` in this scope
--> $DIR/typo-suggestion-for-variable-with-name-similar-to-struct-field.rs:11:20
|
LL | println!("{config}");
| ^^^^^^
| |
| a field by this name exists in `Self`
| help: a local variable with a similar name exists: `cofig`

error[E0425]: cannot find value `config` in this scope
--> $DIR/typo-suggestion-for-variable-with-name-similar-to-struct-field.rs:15:20
|
LL | println!("{config}");
| ^^^^^^
|
help: you might have meant to use the available field
|
LL | println!("{self.config}");
| ~~~~~~~~~~~
help: a local variable with a similar name exists
|
LL | println!("{cofig}");
| ~~~~~

error[E0425]: cannot find function `baz` in this scope
--> $DIR/typo-suggestion-for-variable-with-name-similar-to-struct-field.rs:31:9
|
LL | baz();
| ^^^
...
LL | fn ba() {}
| ------- similarly named function `ba` defined here
|
help: you might have meant to call the method
|
LL | self.baz();
| ~~~~~~~~
help: a function with a similar name exists
|
LL | ba();
| ~~

error[E0425]: cannot find value `bah` in this scope
--> $DIR/typo-suggestion-for-variable-with-name-similar-to-struct-field.rs:33:9
|
LL | bah;
| ^^^
...
LL | fn ba() {}
| ------- similarly named function `ba` defined here
|
help: you might have meant to call the associated function
|
LL | Self::bah;
| ~~~~~~~~~
help: a function with a similar name exists
|
LL | ba;
| ~~

error[E0425]: cannot find value `BAR` in this scope
--> $DIR/typo-suggestion-for-variable-with-name-similar-to-struct-field.rs:35:9
|
LL | BAR;
| ^^^
...
LL | const BARR: u32 = 3;
| -------------------- similarly named constant `BARR` defined here
|
help: you might have meant to use the associated `const`
|
LL | Self::BAR;
| ~~~~~~~~~
help: a constant with a similar name exists
|
LL | BARR;
| ~~~~

error[E0412]: cannot find type `Baz` in this scope
--> $DIR/typo-suggestion-for-variable-with-name-similar-to-struct-field.rs:37:18
|
LL | let foo: Baz = "".to_string();
| ^^^
...
LL | type Bar = String;
| ------------------ similarly named type alias `Bar` defined here
|
help: you might have meant to use the associated type
|
LL | let foo: Self::Baz = "".to_string();
| ~~~~~~~~~
help: a type alias with a similar name exists
|
LL | let foo: Bar = "".to_string();
| ~~~

error: aborting due to 7 previous errors

Some errors have detailed explanations: E0412, E0425.
For more information about an error, try `rustc --explain E0412`.
Loading

0 comments on commit acb5c16

Please sign in to comment.