Skip to content

Commit cdbad43

Browse files
committed
refactor(rustc_lint): inline check_lint_name_cmdline
1 parent ecff1c0 commit cdbad43

File tree

3 files changed

+62
-70
lines changed

3 files changed

+62
-70
lines changed

compiler/rustc_lint/src/context.rs

-67
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,6 @@
1616
1717
use self::TargetLint::*;
1818

19-
use crate::errors::{
20-
CheckNameDeprecated, CheckNameRemoved, CheckNameRenamed, CheckNameUnknown,
21-
CheckNameUnknownTool, RequestedLevel, UnsupportedGroup,
22-
};
2319
use crate::levels::LintLevelsBuilder;
2420
use crate::passes::{EarlyLintPassObject, LateLintPassObject};
2521
use rustc_ast::util::unicode::TEXT_FLOW_CONTROL_CHARS;
@@ -330,58 +326,6 @@ impl LintStore {
330326
}
331327
}
332328

333-
/// Checks the validity of lint names derived from the command line.
334-
pub fn check_lint_name_cmdline(
335-
&self,
336-
sess: &Session,
337-
lint_name: &str,
338-
level: Level,
339-
registered_tools: &RegisteredTools,
340-
) {
341-
let (tool_name, lint_name_only) = parse_lint_and_tool_name(lint_name);
342-
if lint_name_only == crate::WARNINGS.name_lower() && matches!(level, Level::ForceWarn(_)) {
343-
sess.emit_err(UnsupportedGroup { lint_group: crate::WARNINGS.name_lower() });
344-
return;
345-
}
346-
match self.check_lint_name(lint_name_only, tool_name, registered_tools) {
347-
CheckLintNameResult::Renamed(replace) => {
348-
sess.emit_warning(CheckNameRenamed {
349-
lint_name,
350-
replace: &replace,
351-
sub: RequestedLevel { level, lint_name },
352-
});
353-
}
354-
CheckLintNameResult::Removed(reason) => {
355-
sess.emit_warning(CheckNameRemoved {
356-
lint_name,
357-
reason: &reason,
358-
sub: RequestedLevel { level, lint_name },
359-
});
360-
}
361-
CheckLintNameResult::NoLint(suggestion) => {
362-
sess.emit_err(CheckNameUnknown {
363-
lint_name,
364-
suggestion,
365-
sub: RequestedLevel { level, lint_name },
366-
});
367-
}
368-
CheckLintNameResult::Tool(Err((Some(_), new_name))) => {
369-
sess.emit_warning(CheckNameDeprecated {
370-
lint_name,
371-
new_name: &new_name,
372-
sub: RequestedLevel { level, lint_name },
373-
});
374-
}
375-
CheckLintNameResult::NoTool => {
376-
sess.emit_err(CheckNameUnknownTool {
377-
tool_name: tool_name.unwrap(),
378-
sub: RequestedLevel { level, lint_name },
379-
});
380-
}
381-
_ => {}
382-
};
383-
}
384-
385329
/// True if this symbol represents a lint group name.
386330
pub fn is_lint_group(&self, lint_name: Symbol) -> bool {
387331
debug!(
@@ -1402,14 +1346,3 @@ impl<'tcx> LayoutOfHelpers<'tcx> for LateContext<'tcx> {
14021346
err
14031347
}
14041348
}
1405-
1406-
pub fn parse_lint_and_tool_name(lint_name: &str) -> (Option<Symbol>, &str) {
1407-
match lint_name.split_once("::") {
1408-
Some((tool_name, lint_name)) => {
1409-
let tool_name = Symbol::intern(tool_name);
1410-
1411-
(Some(tool_name), lint_name)
1412-
}
1413-
None => (None, lint_name),
1414-
}
1415-
}

compiler/rustc_lint/src/levels.rs

+61-2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
use crate::errors::{
2+
CheckNameDeprecated, CheckNameRemoved, CheckNameRenamed, CheckNameUnknown,
3+
CheckNameUnknownTool, RequestedLevel, UnsupportedGroup,
4+
};
15
use crate::{
26
builtin::MISSING_DOCS,
37
context::{CheckLintNameResult, LintStore},
@@ -552,12 +556,56 @@ impl<'s, P: LintLevelsProvider> LintLevelsBuilder<'s, P> {
552556

553557
fn add_command_line(&mut self) {
554558
for &(ref lint_name, level) in &self.sess.opts.lint_opts {
555-
self.store.check_lint_name_cmdline(self.sess, &lint_name, level, self.registered_tools);
559+
// Checks the validity of lint names derived from the command line.
560+
let (tool_name, lint_name_only) = parse_lint_and_tool_name(lint_name);
561+
if lint_name_only == crate::WARNINGS.name_lower()
562+
&& matches!(level, Level::ForceWarn(_))
563+
{
564+
self.sess.emit_err(UnsupportedGroup { lint_group: crate::WARNINGS.name_lower() });
565+
}
566+
match self.store.check_lint_name(lint_name_only, tool_name, self.registered_tools) {
567+
CheckLintNameResult::Renamed(replace) => {
568+
self.sess.emit_warning(CheckNameRenamed {
569+
lint_name,
570+
replace: &replace,
571+
sub: RequestedLevel { level, lint_name },
572+
});
573+
}
574+
CheckLintNameResult::Removed(reason) => {
575+
self.sess.emit_warning(CheckNameRemoved {
576+
lint_name,
577+
reason: &reason,
578+
sub: RequestedLevel { level, lint_name },
579+
});
580+
}
581+
CheckLintNameResult::NoLint(suggestion) => {
582+
self.sess.emit_err(CheckNameUnknown {
583+
lint_name,
584+
suggestion,
585+
sub: RequestedLevel { level, lint_name },
586+
});
587+
}
588+
CheckLintNameResult::Tool(Err((Some(_), new_name))) => {
589+
self.sess.emit_warning(CheckNameDeprecated {
590+
lint_name,
591+
new_name: &new_name,
592+
sub: RequestedLevel { level, lint_name },
593+
});
594+
}
595+
CheckLintNameResult::NoTool => {
596+
self.sess.emit_err(CheckNameUnknownTool {
597+
tool_name: tool_name.unwrap(),
598+
sub: RequestedLevel { level, lint_name },
599+
});
600+
}
601+
_ => {}
602+
};
603+
556604
let orig_level = level;
557605
let lint_flag_val = Symbol::intern(lint_name);
558606

559607
let Ok(ids) = self.store.find_lints(&lint_name) else {
560-
// errors handled in check_lint_name_cmdline above
608+
// errors already handled above
561609
continue;
562610
};
563611
for id in ids {
@@ -1092,3 +1140,14 @@ impl<'s, P: LintLevelsProvider> LintLevelsBuilder<'s, P> {
10921140
pub(crate) fn provide(providers: &mut Providers) {
10931141
*providers = Providers { shallow_lint_levels_on, lint_expectations, ..*providers };
10941142
}
1143+
1144+
pub fn parse_lint_and_tool_name(lint_name: &str) -> (Option<Symbol>, &str) {
1145+
match lint_name.split_once("::") {
1146+
Some((tool_name, lint_name)) => {
1147+
let tool_name = Symbol::intern(tool_name);
1148+
1149+
(Some(tool_name), lint_name)
1150+
}
1151+
None => (None, lint_name),
1152+
}
1153+
}

compiler/rustc_lint/src/tests.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::context::parse_lint_and_tool_name;
1+
use crate::levels::parse_lint_and_tool_name;
22
use rustc_span::{create_default_session_globals_then, Symbol};
33

44
#[test]

0 commit comments

Comments
 (0)