Skip to content

Rollup of 5 pull requests #97342

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 11 commits into from
May 24, 2022
Merged
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