diff options
| author | Dylan DPC <dylan.dpc@gmail.com> | 2020-06-12 12:28:25 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-06-12 12:28:25 +0200 |
| commit | 657a41fe73942006a01d67598bcbe80b8b03e69e (patch) | |
| tree | f6f5c255dc50760f8f95ad85f8288acf9ee1b562 /src/librustc_interface/passes.rs | |
| parent | c06799e4c4103330c972eb04f08aa72b7c1d5ace (diff) | |
| parent | d60df536d5d6a4ad2d6b2cdf4c443e022fe35d30 (diff) | |
| download | rust-657a41fe73942006a01d67598bcbe80b8b03e69e.tar.gz rust-657a41fe73942006a01d67598bcbe80b8b03e69e.zip | |
Rollup merge of #73178 - petrochenkov:explint, r=varkor
expand: More precise locations for expansion-time lints First commit: a macro expansion doesn't have a `NodeId` associated with it, but it has a parent `DefId` which we can use for linting. The observable effect is that lints associated with macro expansions can now be `allow`ed at finer-grained level than whole crate. Second commit: each macro definition has a `NodeId` which we can use for linting, unless that macro definition was decoded from other crate.
Diffstat (limited to 'src/librustc_interface/passes.rs')
| -rw-r--r-- | src/librustc_interface/passes.rs | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/src/librustc_interface/passes.rs b/src/librustc_interface/passes.rs index 9a60e74d94d..1a9bf4e1e8f 100644 --- a/src/librustc_interface/passes.rs +++ b/src/librustc_interface/passes.rs @@ -307,16 +307,21 @@ fn configure_and_expand_inner<'a>( ecx.check_unused_macros(); }); - let mut missing_fragment_specifiers: Vec<_> = - ecx.parse_sess.missing_fragment_specifiers.borrow().iter().cloned().collect(); - missing_fragment_specifiers.sort(); + let mut missing_fragment_specifiers: Vec<_> = ecx + .parse_sess + .missing_fragment_specifiers + .borrow() + .iter() + .map(|(span, node_id)| (*span, *node_id)) + .collect(); + missing_fragment_specifiers.sort_unstable_by_key(|(span, _)| *span); let recursion_limit_hit = ecx.reduced_recursion_limit.is_some(); - for span in missing_fragment_specifiers { + for (span, node_id) in missing_fragment_specifiers { let lint = lint::builtin::MISSING_FRAGMENT_SPECIFIER; let msg = "missing fragment specifier"; - resolver.lint_buffer().buffer_lint(lint, ast::CRATE_NODE_ID, span, msg); + resolver.lint_buffer().buffer_lint(lint, node_id, span, msg); } if cfg!(windows) { env::set_var("PATH", &old_path); |
