Skip to content

Commit 7dbccf5

Browse files
committed
buffered lint infra -> rustc_session
1 parent 82eeb85 commit 7dbccf5

File tree

17 files changed

+136
-137
lines changed

17 files changed

+136
-137
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3630,6 +3630,7 @@ dependencies = [
36303630
"rustc_plugin_impl",
36313631
"rustc_privacy",
36323632
"rustc_resolve",
3633+
"rustc_session",
36333634
"rustc_span",
36343635
"rustc_target",
36353636
"rustc_traits",

src/librustc/lint/builtin.rs

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,9 @@ use crate::middle::stability;
99
use crate::session::Session;
1010
use rustc_errors::{pluralize, Applicability, DiagnosticBuilder};
1111
use rustc_session::declare_lint;
12+
use rustc_session::lint::BuiltinLintDiagnostics;
1213
use rustc_span::edition::Edition;
1314
use rustc_span::source_map::Span;
14-
use rustc_span::symbol::Symbol;
15-
use syntax::ast;
1615
use syntax::early_buffered_lints::{ILL_FORMED_ATTRIBUTE_INPUT, META_VARIABLE_MISUSE};
1716

1817
declare_lint! {
@@ -516,22 +515,6 @@ declare_lint_pass! {
516515

517516
impl LateLintPass<'_, '_> for HardwiredLints {}
518517

519-
// This could be a closure, but then implementing derive trait
520-
// becomes hacky (and it gets allocated).
521-
#[derive(PartialEq)]
522-
pub enum BuiltinLintDiagnostics {
523-
Normal,
524-
BareTraitObject(Span, /* is_global */ bool),
525-
AbsPathWithModule(Span),
526-
ProcMacroDeriveResolutionFallback(Span),
527-
MacroExpandedMacroExportsAccessedByAbsolutePaths(Span),
528-
ElidedLifetimesInPaths(usize, Span, bool, Span, String),
529-
UnknownCrateTypes(Span, String, String),
530-
UnusedImports(String, Vec<(Span, String)>),
531-
RedundantImport(Vec<(Span, bool)>, ast::Ident),
532-
DeprecatedMacro(Option<Symbol>, Span),
533-
}
534-
535518
pub fn add_elided_lifetime_in_path_suggestion(
536519
sess: &Session,
537520
db: &mut DiagnosticBuilder<'_>,

src/librustc/lint/context.rs

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,8 @@
1717
use self::TargetLint::*;
1818

1919
use crate::hir::map::{definitions::DisambiguatedDefPathData, DefPathData};
20-
use crate::lint::builtin::BuiltinLintDiagnostics;
2120
use crate::lint::levels::{LintLevelSets, LintLevelsBuilder};
2221
use crate::lint::{EarlyLintPassObject, LateLintPassObject};
23-
use crate::lint::{FutureIncompatibleInfo, Level, Lint, LintBuffer, LintId};
2422
use crate::middle::privacy::AccessLevels;
2523
use crate::session::Session;
2624
use crate::ty::layout::{LayoutError, LayoutOf, TyLayout};
@@ -31,6 +29,8 @@ use rustc_error_codes::*;
3129
use rustc_errors::{struct_span_err, DiagnosticBuilder};
3230
use rustc_hir as hir;
3331
use rustc_hir::def_id::{CrateNum, DefId};
32+
use rustc_session::lint::BuiltinLintDiagnostics;
33+
use rustc_session::lint::{FutureIncompatibleInfo, Level, Lint, LintBuffer, LintId};
3434
use rustc_span::{symbol::Symbol, MultiSpan, Span, DUMMY_SP};
3535
use syntax::ast;
3636
use syntax::util::lev_distance::find_best_match_for_name;
@@ -64,17 +64,6 @@ pub struct LintStore {
6464
lint_groups: FxHashMap<&'static str, LintGroup>,
6565
}
6666

67-
/// Lints that are buffered up early on in the `Session` before the
68-
/// `LintLevels` is calculated
69-
#[derive(PartialEq)]
70-
pub struct BufferedEarlyLint {
71-
pub lint_id: LintId,
72-
pub ast_id: ast::NodeId,
73-
pub span: MultiSpan,
74-
pub msg: String,
75-
pub diagnostic: BuiltinLintDiagnostics,
76-
}
77-
7867
/// The target of the `by_name` map, which accounts for renaming/deprecation.
7968
enum TargetLint {
8069
/// A direct lint target

src/librustc/lint/mod.rs

Lines changed: 2 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,10 @@
2121
pub use self::Level::*;
2222
pub use self::LintSource::*;
2323

24-
use crate::lint::builtin::BuiltinLintDiagnostics;
2524
use crate::ty::TyCtxt;
2625
use rustc_data_structures::sync;
2726
use rustc_errors::{DiagnosticBuilder, DiagnosticId};
2827
use rustc_hir as hir;
29-
use rustc_session::node_id::NodeMap;
3028
use rustc_session::{DiagnosticMessageId, Session};
3129
use rustc_span::hygiene::MacroKind;
3230
use rustc_span::source_map::{DesugaringKind, ExpnKind, MultiSpan};
@@ -35,10 +33,10 @@ use rustc_span::Span;
3533
use syntax::ast;
3634

3735
pub use crate::lint::context::{
38-
BufferedEarlyLint, CheckLintNameResult, EarlyContext, LateContext, LintContext, LintStore,
36+
CheckLintNameResult, EarlyContext, LateContext, LintContext, LintStore,
3937
};
4038

41-
pub use rustc_session::lint::{FutureIncompatibleInfo, Level, Lint, LintId};
39+
pub use rustc_session::lint::{BufferedEarlyLint, FutureIncompatibleInfo, Level, Lint, LintId};
4240

4341
/// Declares a static `LintArray` and return it as an expression.
4442
#[macro_export]
@@ -373,59 +371,6 @@ mod levels;
373371

374372
pub use self::levels::{LintLevelMap, LintLevelSets, LintLevelsBuilder};
375373

376-
#[derive(Default)]
377-
pub struct LintBuffer {
378-
pub map: NodeMap<Vec<BufferedEarlyLint>>,
379-
}
380-
381-
impl LintBuffer {
382-
pub fn add_lint(
383-
&mut self,
384-
lint: &'static Lint,
385-
id: ast::NodeId,
386-
sp: MultiSpan,
387-
msg: &str,
388-
diagnostic: BuiltinLintDiagnostics,
389-
) {
390-
let early_lint = BufferedEarlyLint {
391-
lint_id: LintId::of(lint),
392-
ast_id: id,
393-
span: sp,
394-
msg: msg.to_string(),
395-
diagnostic,
396-
};
397-
let arr = self.map.entry(id).or_default();
398-
if !arr.contains(&early_lint) {
399-
arr.push(early_lint);
400-
}
401-
}
402-
403-
pub fn take(&mut self, id: ast::NodeId) -> Vec<BufferedEarlyLint> {
404-
self.map.remove(&id).unwrap_or_default()
405-
}
406-
407-
pub fn buffer_lint<S: Into<MultiSpan>>(
408-
&mut self,
409-
lint: &'static Lint,
410-
id: ast::NodeId,
411-
sp: S,
412-
msg: &str,
413-
) {
414-
self.add_lint(lint, id, sp.into(), msg, BuiltinLintDiagnostics::Normal)
415-
}
416-
417-
pub fn buffer_lint_with_diagnostic<S: Into<MultiSpan>>(
418-
&mut self,
419-
lint: &'static Lint,
420-
id: ast::NodeId,
421-
sp: S,
422-
msg: &str,
423-
diagnostic: BuiltinLintDiagnostics,
424-
) {
425-
self.add_lint(lint, id, sp.into(), msg, diagnostic)
426-
}
427-
}
428-
429374
pub fn struct_lint_level<'a>(
430375
sess: &'a Session,
431376
lint: &'static Lint,

src/librustc/middle/stability.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
44
pub use self::StabilityLevel::*;
55

6-
use crate::lint::builtin::BuiltinLintDiagnostics;
76
use crate::lint::{self, in_derive_expansion, Lint};
87
use crate::session::{DiagnosticMessageId, Session};
98
use crate::ty::{self, TyCtxt};
@@ -14,6 +13,7 @@ use rustc_hir as hir;
1413
use rustc_hir::def::DefKind;
1514
use rustc_hir::def_id::{CrateNum, DefId, CRATE_DEF_INDEX};
1615
use rustc_hir::{self, HirId};
16+
use rustc_session::lint::{BuiltinLintDiagnostics, LintBuffer};
1717
use rustc_span::symbol::{sym, Symbol};
1818
use rustc_span::{MultiSpan, Span};
1919
use syntax::ast::CRATE_NODE_ID;
@@ -195,7 +195,7 @@ pub fn rustc_deprecation_message(depr: &RustcDeprecation, path: &str) -> (String
195195
}
196196

197197
pub fn early_report_deprecation(
198-
lint_buffer: &'a mut lint::LintBuffer,
198+
lint_buffer: &'a mut LintBuffer,
199199
message: &str,
200200
suggestion: Option<Symbol>,
201201
lint: &'static Lint,

src/librustc_ast_lowering/lib.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ use rustc::arena::Arena;
3737
use rustc::dep_graph::DepGraph;
3838
use rustc::hir::map::definitions::{DefKey, DefPathData, Definitions};
3939
use rustc::hir::map::Map;
40-
use rustc::lint;
4140
use rustc::lint::builtin;
4241
use rustc::{bug, span_bug};
4342
use rustc_data_structures::captures::Captures;
@@ -52,6 +51,7 @@ use rustc_hir::intravisit;
5251
use rustc_hir::{ConstArg, GenericArg, ParamName};
5352
use rustc_index::vec::IndexVec;
5453
use rustc_session::config::nightly_options;
54+
use rustc_session::lint::{BuiltinLintDiagnostics, LintBuffer};
5555
use rustc_session::node_id::NodeMap;
5656
use rustc_session::Session;
5757
use rustc_span::hygiene::ExpnId;
@@ -198,7 +198,7 @@ pub trait Resolver {
198198
ns: Namespace,
199199
) -> (ast::Path, Res<NodeId>);
200200

201-
fn lint_buffer(&mut self) -> &mut lint::LintBuffer;
201+
fn lint_buffer(&mut self) -> &mut LintBuffer;
202202

203203
fn next_node_id(&mut self) -> NodeId;
204204
}
@@ -2617,7 +2617,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
26172617
id,
26182618
span,
26192619
"trait objects without an explicit `dyn` are deprecated",
2620-
builtin::BuiltinLintDiagnostics::BareTraitObject(span, is_global),
2620+
BuiltinLintDiagnostics::BareTraitObject(span, is_global),
26212621
)
26222622
}
26232623
}

src/librustc_ast_lowering/path.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
use super::{AnonymousLifetimeMode, ImplTraitContext, LoweringContext, ParamMode};
22
use super::{GenericArgsCtor, ParenthesizedGenericArgs};
33

4-
use rustc::lint::builtin::{self, ELIDED_LIFETIMES_IN_PATHS};
4+
use rustc::lint::builtin::ELIDED_LIFETIMES_IN_PATHS;
55
use rustc::span_bug;
66
use rustc_error_codes::*;
77
use rustc_errors::{struct_span_err, Applicability};
88
use rustc_hir as hir;
99
use rustc_hir::def::{DefKind, PartialRes, Res};
1010
use rustc_hir::def_id::DefId;
1111
use rustc_hir::GenericArg;
12+
use rustc_session::lint::BuiltinLintDiagnostics;
1213
use rustc_span::Span;
1314
use syntax::ast::{self, *};
1415

@@ -304,7 +305,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
304305
E0726,
305306
"implicit elided lifetime not allowed here"
306307
);
307-
crate::lint::builtin::add_elided_lifetime_in_path_suggestion(
308+
rustc::lint::builtin::add_elided_lifetime_in_path_suggestion(
308309
&self.sess,
309310
&mut err,
310311
expected_lifetimes,
@@ -321,7 +322,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
321322
CRATE_NODE_ID,
322323
path_span,
323324
"hidden lifetime parameters in types are deprecated",
324-
builtin::BuiltinLintDiagnostics::ElidedLifetimesInPaths(
325+
BuiltinLintDiagnostics::ElidedLifetimesInPaths(
325326
expected_lifetimes,
326327
path_span,
327328
incl_angl_brckt,

src/librustc_interface/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ syntax = { path = "../libsyntax" }
1717
rustc_builtin_macros = { path = "../librustc_builtin_macros" }
1818
rustc_expand = { path = "../librustc_expand" }
1919
rustc_parse = { path = "../librustc_parse" }
20+
rustc_session = { path = "../librustc_session" }
2021
rustc_span = { path = "../librustc_span" }
2122
rustc_serialize = { path = "../libserialize", package = "serialize" }
2223
rustc = { path = "../librustc" }

src/librustc_interface/passes.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ use rustc_span::symbol::Symbol;
3737
use rustc_span::FileName;
3838
use rustc_traits;
3939
use rustc_typeck as typeck;
40-
use syntax::early_buffered_lints::BufferedEarlyLint;
4140
use syntax::mut_visit::MutVisitor;
4241
use syntax::util::node_count::NodeCounter;
4342
use syntax::{self, ast, visit};
@@ -411,8 +410,8 @@ fn configure_and_expand_inner<'a>(
411410
// Add all buffered lints from the `ParseSess` to the `Session`.
412411
sess.parse_sess.buffered_lints.with_lock(|buffered_lints| {
413412
info!("{} parse sess buffered_lints", buffered_lints.len());
414-
for BufferedEarlyLint { id, span, msg, lint_id } in buffered_lints.drain(..) {
415-
resolver.lint_buffer().buffer_lint(lint_id, id, span, &msg);
413+
for early_lint in buffered_lints.drain(..) {
414+
resolver.lint_buffer().add_early_lint(early_lint);
416415
}
417416
});
418417

src/librustc_interface/util.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
use log::info;
22
use rustc::lint;
3-
use rustc::session::config::{ErrorOutputType, Input, OutputFilenames};
4-
use rustc::session::CrateDisambiguator;
5-
use rustc::session::{self, config, early_error, filesearch, DiagnosticOutput, Session};
63
use rustc::ty;
74
use rustc_codegen_utils::codegen_backend::CodegenBackend;
85
use rustc_data_structures::fingerprint::Fingerprint;
@@ -14,6 +11,11 @@ use rustc_data_structures::sync::{Lock, Lrc};
1411
use rustc_errors::registry::Registry;
1512
use rustc_metadata::dynamic_lib::DynamicLibrary;
1613
use rustc_resolve::{self, Resolver};
14+
use rustc_session as session;
15+
use rustc_session::config::{ErrorOutputType, Input, OutputFilenames};
16+
use rustc_session::lint::{BuiltinLintDiagnostics, LintBuffer};
17+
use rustc_session::CrateDisambiguator;
18+
use rustc_session::{config, early_error, filesearch, DiagnosticOutput, Session};
1719
use rustc_span::edition::Edition;
1820
use rustc_span::source_map::{FileLoader, RealFileLoader, SourceMap};
1921
use rustc_span::symbol::{sym, Symbol};
@@ -420,7 +422,7 @@ pub(crate) fn compute_crate_disambiguator(session: &Session) -> CrateDisambiguat
420422
CrateDisambiguator::from(hasher.finish::<Fingerprint>())
421423
}
422424

423-
pub(crate) fn check_attr_crate_type(attrs: &[ast::Attribute], lint_buffer: &mut lint::LintBuffer) {
425+
pub(crate) fn check_attr_crate_type(attrs: &[ast::Attribute], lint_buffer: &mut LintBuffer) {
424426
// Unconditionally collect crate types from attributes to make them used
425427
for a in attrs.iter() {
426428
if a.check_name(sym::crate_type) {
@@ -442,7 +444,7 @@ pub(crate) fn check_attr_crate_type(attrs: &[ast::Attribute], lint_buffer: &mut
442444
ast::CRATE_NODE_ID,
443445
span,
444446
"invalid `crate_type` value",
445-
lint::builtin::BuiltinLintDiagnostics::UnknownCrateTypes(
447+
BuiltinLintDiagnostics::UnknownCrateTypes(
446448
span,
447449
"did you mean".to_string(),
448450
format!("\"{}\"", candidate),

0 commit comments

Comments
 (0)