mirror of
https://github.com/rust-lang/rust.git
synced 2025-06-05 11:48:30 +00:00
Specify scope in out_of_scope_macro_calls
lint
``` warning: cannot find macro `in_root` in the crate root --> $DIR/key-value-expansion-scope.rs:1:10 | LL | #![doc = in_root!()] | ^^^^^^^ not found in the crate root | = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! = note: for more information, see issue #124535 <https://github.com/rust-lang/rust/issues/124535> = help: import `macro_rules` with `use` to make it callable above its definition = note: `#[warn(out_of_scope_macro_calls)]` on by default ```
This commit is contained in:
parent
ed49386d3a
commit
fe7ed278b7
@ -630,7 +630,8 @@ lint_opaque_hidden_inferred_bound_sugg = add this bound
|
|||||||
lint_or_patterns_back_compat = the meaning of the `pat` fragment specifier is changing in Rust 2021, which may affect this macro
|
lint_or_patterns_back_compat = the meaning of the `pat` fragment specifier is changing in Rust 2021, which may affect this macro
|
||||||
.suggestion = use pat_param to preserve semantics
|
.suggestion = use pat_param to preserve semantics
|
||||||
|
|
||||||
lint_out_of_scope_macro_calls = cannot find macro `{$path}` in this scope
|
lint_out_of_scope_macro_calls = cannot find macro `{$path}` in {$scope}
|
||||||
|
.label = not found in {$scope}
|
||||||
.help = import `macro_rules` with `use` to make it callable above its definition
|
.help = import `macro_rules` with `use` to make it callable above its definition
|
||||||
|
|
||||||
lint_overflowing_bin_hex = literal out of range for `{$ty}`
|
lint_overflowing_bin_hex = literal out of range for `{$ty}`
|
||||||
|
@ -444,8 +444,8 @@ pub(super) fn decorate_lint(
|
|||||||
lints::InnerAttributeUnstable::CustomInnerAttribute
|
lints::InnerAttributeUnstable::CustomInnerAttribute
|
||||||
}
|
}
|
||||||
.decorate_lint(diag),
|
.decorate_lint(diag),
|
||||||
BuiltinLintDiag::OutOfScopeMacroCalls { path } => {
|
BuiltinLintDiag::OutOfScopeMacroCalls { span, path, scope } => {
|
||||||
lints::OutOfScopeMacroCalls { path }.decorate_lint(diag)
|
lints::OutOfScopeMacroCalls { span, path, scope }.decorate_lint(diag)
|
||||||
}
|
}
|
||||||
BuiltinLintDiag::UnexpectedBuiltinCfg { cfg, cfg_name, controlled_by } => {
|
BuiltinLintDiag::UnexpectedBuiltinCfg { cfg, cfg_name, controlled_by } => {
|
||||||
lints::UnexpectedBuiltinCfg { cfg, cfg_name, controlled_by }.decorate_lint(diag)
|
lints::UnexpectedBuiltinCfg { cfg, cfg_name, controlled_by }.decorate_lint(diag)
|
||||||
|
@ -3108,7 +3108,10 @@ pub(crate) struct UnsafeAttrOutsideUnsafeSuggestion {
|
|||||||
#[diag(lint_out_of_scope_macro_calls)]
|
#[diag(lint_out_of_scope_macro_calls)]
|
||||||
#[help]
|
#[help]
|
||||||
pub(crate) struct OutOfScopeMacroCalls {
|
pub(crate) struct OutOfScopeMacroCalls {
|
||||||
|
#[label]
|
||||||
|
pub span: Span,
|
||||||
pub path: String,
|
pub path: String,
|
||||||
|
pub scope: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(LintDiagnostic)]
|
#[derive(LintDiagnostic)]
|
||||||
|
@ -819,7 +819,9 @@ pub enum BuiltinLintDiag {
|
|||||||
is_macro: bool,
|
is_macro: bool,
|
||||||
},
|
},
|
||||||
OutOfScopeMacroCalls {
|
OutOfScopeMacroCalls {
|
||||||
|
span: Span,
|
||||||
path: String,
|
path: String,
|
||||||
|
scope: String,
|
||||||
},
|
},
|
||||||
UnexpectedBuiltinCfg {
|
UnexpectedBuiltinCfg {
|
||||||
cfg: String,
|
cfg: String,
|
||||||
|
@ -857,8 +857,10 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
|
|||||||
),
|
),
|
||||||
path_res @ (PathResult::NonModule(..) | PathResult::Failed { .. }) => {
|
path_res @ (PathResult::NonModule(..) | PathResult::Failed { .. }) => {
|
||||||
let mut suggestion = None;
|
let mut suggestion = None;
|
||||||
let (span, label, module) =
|
let (span, label, module, segment) =
|
||||||
if let PathResult::Failed { span, label, module, .. } = path_res {
|
if let PathResult::Failed { span, label, module, segment_name, .. } =
|
||||||
|
path_res
|
||||||
|
{
|
||||||
// try to suggest if it's not a macro, maybe a function
|
// try to suggest if it's not a macro, maybe a function
|
||||||
if let PathResult::NonModule(partial_res) =
|
if let PathResult::NonModule(partial_res) =
|
||||||
self.maybe_resolve_path(&path, Some(ValueNS), &parent_scope, None)
|
self.maybe_resolve_path(&path, Some(ValueNS), &parent_scope, None)
|
||||||
@ -876,7 +878,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
|
|||||||
Applicability::MaybeIncorrect,
|
Applicability::MaybeIncorrect,
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
(span, label, module)
|
(span, label, module, segment_name)
|
||||||
} else {
|
} else {
|
||||||
(
|
(
|
||||||
path_span,
|
path_span,
|
||||||
@ -886,12 +888,13 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
|
|||||||
kind.descr()
|
kind.descr()
|
||||||
),
|
),
|
||||||
None,
|
None,
|
||||||
|
path.last().map(|segment| segment.ident.name).unwrap(),
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
self.report_error(
|
self.report_error(
|
||||||
span,
|
span,
|
||||||
ResolutionError::FailedToResolve {
|
ResolutionError::FailedToResolve {
|
||||||
segment: path.last().map(|segment| segment.ident.name),
|
segment: Some(segment),
|
||||||
label,
|
label,
|
||||||
suggestion,
|
suggestion,
|
||||||
module,
|
module,
|
||||||
@ -1067,11 +1070,24 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
|
|||||||
None,
|
None,
|
||||||
);
|
);
|
||||||
if fallback_binding.ok().and_then(|b| b.res().opt_def_id()) != Some(def_id) {
|
if fallback_binding.ok().and_then(|b| b.res().opt_def_id()) != Some(def_id) {
|
||||||
|
let scope = match parent_scope.module.kind {
|
||||||
|
ModuleKind::Def(_, _, name) if name == kw::Empty => {
|
||||||
|
"the crate root".to_string()
|
||||||
|
}
|
||||||
|
ModuleKind::Def(kind, def_id, name) => {
|
||||||
|
format!("{} `{name}`", kind.descr(def_id))
|
||||||
|
}
|
||||||
|
ModuleKind::Block => "this scope".to_string(),
|
||||||
|
};
|
||||||
self.tcx.sess.psess.buffer_lint(
|
self.tcx.sess.psess.buffer_lint(
|
||||||
OUT_OF_SCOPE_MACRO_CALLS,
|
OUT_OF_SCOPE_MACRO_CALLS,
|
||||||
path.span,
|
path.span,
|
||||||
node_id,
|
node_id,
|
||||||
BuiltinLintDiag::OutOfScopeMacroCalls { path: pprust::path_to_string(path) },
|
BuiltinLintDiag::OutOfScopeMacroCalls {
|
||||||
|
span: path.span,
|
||||||
|
path: pprust::path_to_string(path),
|
||||||
|
scope,
|
||||||
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#![doc = in_root!()] //~ WARN cannot find macro `in_root` in this scope
|
#![doc = in_root!()] //~ WARN cannot find macro `in_root`
|
||||||
//~| WARN this was previously accepted by the compiler
|
//~| WARN this was previously accepted by the compiler
|
||||||
#![doc = in_mod!()] //~ ERROR cannot find macro `in_mod` in this scope
|
#![doc = in_mod!()] //~ ERROR cannot find macro `in_mod` in this scope
|
||||||
#![doc = in_mod_escape!()] //~ WARN cannot find macro `in_mod_escape` in this scope
|
#![doc = in_mod_escape!()] //~ WARN cannot find macro `in_mod_escape`
|
||||||
//~| WARN this was previously accepted by the compiler
|
//~| WARN this was previously accepted by the compiler
|
||||||
#![doc = in_block!()] //~ ERROR cannot find macro `in_block` in this scope
|
#![doc = in_block!()] //~ ERROR cannot find macro `in_block` in this scope
|
||||||
|
|
||||||
@ -18,10 +18,10 @@ fn before() {
|
|||||||
|
|
||||||
macro_rules! in_root { () => { "" } }
|
macro_rules! in_root { () => { "" } }
|
||||||
|
|
||||||
#[doc = in_mod!()] //~ WARN cannot find macro `in_mod` in this scope
|
#[doc = in_mod!()] //~ WARN cannot find macro `in_mod`
|
||||||
//~| WARN this was previously accepted by the compiler
|
//~| WARN this was previously accepted by the compiler
|
||||||
mod macros_stay {
|
mod macros_stay {
|
||||||
#![doc = in_mod!()] //~ WARN cannot find macro `in_mod` in this scope
|
#![doc = in_mod!()] //~ WARN cannot find macro `in_mod`
|
||||||
//~| WARN this was previously accepted by the compiler
|
//~| WARN this was previously accepted by the compiler
|
||||||
|
|
||||||
macro_rules! in_mod { () => { "" } }
|
macro_rules! in_mod { () => { "" } }
|
||||||
@ -33,10 +33,10 @@ mod macros_stay {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
#[doc = in_mod_escape!()] //~ WARN cannot find macro `in_mod_escape` in this scope
|
#[doc = in_mod_escape!()] //~ WARN cannot find macro `in_mod_escape`
|
||||||
//~| WARN this was previously accepted by the compiler
|
//~| WARN this was previously accepted by the compiler
|
||||||
mod macros_escape {
|
mod macros_escape {
|
||||||
#![doc = in_mod_escape!()] //~ WARN cannot find macro `in_mod_escape` in this scope
|
#![doc = in_mod_escape!()] //~ WARN cannot find macro `in_mod_escape`
|
||||||
//~| WARN this was previously accepted by the compiler
|
//~| WARN this was previously accepted by the compiler
|
||||||
|
|
||||||
macro_rules! in_mod_escape { () => { "" } }
|
macro_rules! in_mod_escape { () => { "" } }
|
||||||
|
@ -126,62 +126,62 @@ LL | #![doc = in_block!()]
|
|||||||
|
|
|
|
||||||
= help: have you added the `#[macro_use]` on the module/import?
|
= help: have you added the `#[macro_use]` on the module/import?
|
||||||
|
|
||||||
warning: cannot find macro `in_root` in this scope
|
warning: cannot find macro `in_root` in the crate root
|
||||||
--> $DIR/key-value-expansion-scope.rs:1:10
|
--> $DIR/key-value-expansion-scope.rs:1:10
|
||||||
|
|
|
|
||||||
LL | #![doc = in_root!()]
|
LL | #![doc = in_root!()]
|
||||||
| ^^^^^^^
|
| ^^^^^^^ not found in the crate root
|
||||||
|
|
|
|
||||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||||
= note: for more information, see issue #124535 <https://github.com/rust-lang/rust/issues/124535>
|
= note: for more information, see issue #124535 <https://github.com/rust-lang/rust/issues/124535>
|
||||||
= help: import `macro_rules` with `use` to make it callable above its definition
|
= help: import `macro_rules` with `use` to make it callable above its definition
|
||||||
= note: `#[warn(out_of_scope_macro_calls)]` on by default
|
= note: `#[warn(out_of_scope_macro_calls)]` on by default
|
||||||
|
|
||||||
warning: cannot find macro `in_mod_escape` in this scope
|
warning: cannot find macro `in_mod_escape` in the crate root
|
||||||
--> $DIR/key-value-expansion-scope.rs:4:10
|
--> $DIR/key-value-expansion-scope.rs:4:10
|
||||||
|
|
|
|
||||||
LL | #![doc = in_mod_escape!()]
|
LL | #![doc = in_mod_escape!()]
|
||||||
| ^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^ not found in the crate root
|
||||||
|
|
|
|
||||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||||
= note: for more information, see issue #124535 <https://github.com/rust-lang/rust/issues/124535>
|
= note: for more information, see issue #124535 <https://github.com/rust-lang/rust/issues/124535>
|
||||||
= help: import `macro_rules` with `use` to make it callable above its definition
|
= help: import `macro_rules` with `use` to make it callable above its definition
|
||||||
|
|
||||||
warning: cannot find macro `in_mod` in this scope
|
warning: cannot find macro `in_mod` in module `macros_stay`
|
||||||
--> $DIR/key-value-expansion-scope.rs:21:9
|
--> $DIR/key-value-expansion-scope.rs:21:9
|
||||||
|
|
|
|
||||||
LL | #[doc = in_mod!()]
|
LL | #[doc = in_mod!()]
|
||||||
| ^^^^^^
|
| ^^^^^^ not found in module `macros_stay`
|
||||||
|
|
|
|
||||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||||
= note: for more information, see issue #124535 <https://github.com/rust-lang/rust/issues/124535>
|
= note: for more information, see issue #124535 <https://github.com/rust-lang/rust/issues/124535>
|
||||||
= help: import `macro_rules` with `use` to make it callable above its definition
|
= help: import `macro_rules` with `use` to make it callable above its definition
|
||||||
|
|
||||||
warning: cannot find macro `in_mod` in this scope
|
warning: cannot find macro `in_mod` in module `macros_stay`
|
||||||
--> $DIR/key-value-expansion-scope.rs:24:14
|
--> $DIR/key-value-expansion-scope.rs:24:14
|
||||||
|
|
|
|
||||||
LL | #![doc = in_mod!()]
|
LL | #![doc = in_mod!()]
|
||||||
| ^^^^^^
|
| ^^^^^^ not found in module `macros_stay`
|
||||||
|
|
|
|
||||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||||
= note: for more information, see issue #124535 <https://github.com/rust-lang/rust/issues/124535>
|
= note: for more information, see issue #124535 <https://github.com/rust-lang/rust/issues/124535>
|
||||||
= help: import `macro_rules` with `use` to make it callable above its definition
|
= help: import `macro_rules` with `use` to make it callable above its definition
|
||||||
|
|
||||||
warning: cannot find macro `in_mod_escape` in this scope
|
warning: cannot find macro `in_mod_escape` in module `macros_escape`
|
||||||
--> $DIR/key-value-expansion-scope.rs:36:9
|
--> $DIR/key-value-expansion-scope.rs:36:9
|
||||||
|
|
|
|
||||||
LL | #[doc = in_mod_escape!()]
|
LL | #[doc = in_mod_escape!()]
|
||||||
| ^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^ not found in module `macros_escape`
|
||||||
|
|
|
|
||||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||||
= note: for more information, see issue #124535 <https://github.com/rust-lang/rust/issues/124535>
|
= note: for more information, see issue #124535 <https://github.com/rust-lang/rust/issues/124535>
|
||||||
= help: import `macro_rules` with `use` to make it callable above its definition
|
= help: import `macro_rules` with `use` to make it callable above its definition
|
||||||
|
|
||||||
warning: cannot find macro `in_mod_escape` in this scope
|
warning: cannot find macro `in_mod_escape` in module `macros_escape`
|
||||||
--> $DIR/key-value-expansion-scope.rs:39:14
|
--> $DIR/key-value-expansion-scope.rs:39:14
|
||||||
|
|
|
|
||||||
LL | #![doc = in_mod_escape!()]
|
LL | #![doc = in_mod_escape!()]
|
||||||
| ^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^ not found in module `macros_escape`
|
||||||
|
|
|
|
||||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||||
= note: for more information, see issue #124535 <https://github.com/rust-lang/rust/issues/124535>
|
= note: for more information, see issue #124535 <https://github.com/rust-lang/rust/issues/124535>
|
||||||
|
Loading…
Reference in New Issue
Block a user