mirror of
https://github.com/rust-lang/rust.git
synced 2025-01-22 12:43:36 +00:00
add to tests and configuration
This commit is contained in:
parent
243943ff56
commit
95d1bff225
@ -8,6 +8,7 @@ use rustc_hir::{
|
|||||||
use rustc_lint::{LateContext, LateLintPass, LintContext};
|
use rustc_lint::{LateContext, LateLintPass, LintContext};
|
||||||
use rustc_middle::lint::in_external_macro;
|
use rustc_middle::lint::in_external_macro;
|
||||||
use rustc_session::{declare_tool_lint, impl_lint_pass};
|
use rustc_session::{declare_tool_lint, impl_lint_pass};
|
||||||
|
use rustc_span::Span;
|
||||||
use std::borrow::Cow;
|
use std::borrow::Cow;
|
||||||
|
|
||||||
declare_clippy_lint! {
|
declare_clippy_lint! {
|
||||||
@ -56,26 +57,18 @@ impl LateLintPass<'_> for MinIdentChars {
|
|||||||
walk_item(&mut IdentVisitor { conf: self, cx }, item);
|
walk_item(&mut IdentVisitor { conf: self, cx }, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
// This is necessary as bindings are not visited in `visit_id`. :/
|
// This is necessary as `Node::Pat`s are not visited in `visit_id`. :/
|
||||||
#[expect(clippy::cast_possible_truncation)]
|
#[expect(clippy::cast_possible_truncation)]
|
||||||
fn check_pat(&mut self, cx: &LateContext<'_>, pat: &Pat<'_>) {
|
fn check_pat(&mut self, cx: &LateContext<'_>, pat: &Pat<'_>) {
|
||||||
if let PatKind::Binding(_, _, ident, ..) = pat.kind
|
if let PatKind::Binding(_, _, ident, ..) = pat.kind
|
||||||
&& let str = ident.as_str()
|
&& let str = ident.as_str()
|
||||||
&& !in_external_macro(cx.sess(), ident.span)
|
&& !in_external_macro(cx.sess(), ident.span)
|
||||||
&& str.len() <= self.min_ident_chars_threshold as usize
|
&& str.len() <= self.min_ident_chars_threshold as usize
|
||||||
|
&& !str.starts_with('_')
|
||||||
&& !str.is_empty()
|
&& !str.is_empty()
|
||||||
&& self.allowed_idents_below_min_chars.get(&str.to_owned()).is_none()
|
&& self.allowed_idents_below_min_chars.get(&str.to_owned()).is_none()
|
||||||
{
|
{
|
||||||
let help = if self.min_ident_chars_threshold == 1 {
|
emit_min_ident_chars(self, cx, str, ident.span);
|
||||||
Cow::Borrowed("this ident consists of a single char")
|
|
||||||
} else {
|
|
||||||
Cow::Owned(format!(
|
|
||||||
"this ident is too short ({} <= {})",
|
|
||||||
str.len(),
|
|
||||||
self.min_ident_chars_threshold,
|
|
||||||
))
|
|
||||||
};
|
|
||||||
span_lint(cx, MIN_IDENT_CHARS, ident.span, &help);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -112,6 +105,7 @@ impl Visitor<'_> for IdentVisitor<'_, '_> {
|
|||||||
let str = ident.as_str();
|
let str = ident.as_str();
|
||||||
if !in_external_macro(cx.sess(), ident.span)
|
if !in_external_macro(cx.sess(), ident.span)
|
||||||
&& str.len() <= conf.min_ident_chars_threshold as usize
|
&& str.len() <= conf.min_ident_chars_threshold as usize
|
||||||
|
&& !str.starts_with('_')
|
||||||
&& !str.is_empty()
|
&& !str.is_empty()
|
||||||
&& conf.allowed_idents_below_min_chars.get(&str.to_owned()).is_none()
|
&& conf.allowed_idents_below_min_chars.get(&str.to_owned()).is_none()
|
||||||
{
|
{
|
||||||
@ -141,16 +135,20 @@ impl Visitor<'_> for IdentVisitor<'_, '_> {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let help = if conf.min_ident_chars_threshold == 1 {
|
emit_min_ident_chars(conf, cx, str, ident.span);
|
||||||
Cow::Borrowed("this ident consists of a single char")
|
|
||||||
} else {
|
|
||||||
Cow::Owned(format!(
|
|
||||||
"this ident is too short ({} <= {})",
|
|
||||||
str.len(),
|
|
||||||
conf.min_ident_chars_threshold,
|
|
||||||
))
|
|
||||||
};
|
|
||||||
span_lint(cx, MIN_IDENT_CHARS, ident.span, &help);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn emit_min_ident_chars(conf: &MinIdentChars, cx: &impl LintContext, ident: &str, span: Span) {
|
||||||
|
let help = if conf.min_ident_chars_threshold == 1 {
|
||||||
|
Cow::Borrowed("this ident consists of a single char")
|
||||||
|
} else {
|
||||||
|
Cow::Owned(format!(
|
||||||
|
"this ident is too short ({} <= {})",
|
||||||
|
ident.len(),
|
||||||
|
conf.min_ident_chars_threshold,
|
||||||
|
))
|
||||||
|
};
|
||||||
|
span_lint(cx, MIN_IDENT_CHARS, span, &help);
|
||||||
|
}
|
||||||
|
@ -525,7 +525,9 @@ define_Conf! {
|
|||||||
(allow_private_module_inception: bool = false),
|
(allow_private_module_inception: bool = false),
|
||||||
/// Lint: MIN_IDENT_CHARS.
|
/// Lint: MIN_IDENT_CHARS.
|
||||||
///
|
///
|
||||||
/// Allowed names below the minimum allowed characters.
|
/// Allowed names below the minimum allowed characters. The value `".."` can be used as part of
|
||||||
|
/// the list to indicate, that the configured values should be appended to the default
|
||||||
|
/// configuration of Clippy. By default, any configuration will replace the default value.
|
||||||
(allowed_idents_below_min_chars: rustc_data_structures::fx::FxHashSet<String> =
|
(allowed_idents_below_min_chars: rustc_data_structures::fx::FxHashSet<String> =
|
||||||
super::DEFAULT_ALLOWED_IDENTS_BELOW_MIN_CHARS.iter().map(ToString::to_string).collect()),
|
super::DEFAULT_ALLOWED_IDENTS_BELOW_MIN_CHARS.iter().map(ToString::to_string).collect()),
|
||||||
/// Lint: MIN_IDENT_CHARS.
|
/// Lint: MIN_IDENT_CHARS.
|
||||||
@ -599,6 +601,12 @@ pub fn read(sess: &Session, path: &Path) -> TryConf {
|
|||||||
Ok(mut conf) => {
|
Ok(mut conf) => {
|
||||||
extend_vec_if_indicator_present(&mut conf.conf.doc_valid_idents, DEFAULT_DOC_VALID_IDENTS);
|
extend_vec_if_indicator_present(&mut conf.conf.doc_valid_idents, DEFAULT_DOC_VALID_IDENTS);
|
||||||
extend_vec_if_indicator_present(&mut conf.conf.disallowed_names, DEFAULT_DISALLOWED_NAMES);
|
extend_vec_if_indicator_present(&mut conf.conf.disallowed_names, DEFAULT_DISALLOWED_NAMES);
|
||||||
|
// TODO: THIS SHOULD BE TESTED, this comment will be gone soon
|
||||||
|
if conf.conf.allowed_idents_below_min_chars.contains(&"..".to_owned()) {
|
||||||
|
conf.conf
|
||||||
|
.allowed_idents_below_min_chars
|
||||||
|
.extend(DEFAULT_ALLOWED_IDENTS_BELOW_MIN_CHARS.iter().map(ToString::to_string));
|
||||||
|
}
|
||||||
|
|
||||||
conf
|
conf
|
||||||
},
|
},
|
||||||
|
@ -67,6 +67,7 @@ fn main() {
|
|||||||
let o = O { o };
|
let o = O { o };
|
||||||
|
|
||||||
for j in 0..1000 {}
|
for j in 0..1000 {}
|
||||||
|
for _ in 0..10 {}
|
||||||
|
|
||||||
// Do not lint code from external macros
|
// Do not lint code from external macros
|
||||||
external! { for j in 0..1000 {} }
|
external! { for j in 0..1000 {} }
|
||||||
@ -78,4 +79,6 @@ fn main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn b() {}
|
fn b() {}
|
||||||
fn owo() {}
|
fn wrong_pythagoras(a: f32, b: f32) -> f32 {
|
||||||
|
a * a + a * b
|
||||||
|
}
|
||||||
|
@ -157,10 +157,22 @@ LL | let o = O { o };
|
|||||||
| ^
|
| ^
|
||||||
|
|
||||||
error: this ident consists of a single char
|
error: this ident consists of a single char
|
||||||
--> $DIR/min_ident_chars.rs:80:4
|
--> $DIR/min_ident_chars.rs:81:4
|
||||||
|
|
|
|
||||||
LL | fn b() {}
|
LL | fn b() {}
|
||||||
| ^
|
| ^
|
||||||
|
|
||||||
error: aborting due to 27 previous errors
|
error: this ident consists of a single char
|
||||||
|
--> $DIR/min_ident_chars.rs:82:21
|
||||||
|
|
|
||||||
|
LL | fn wrong_pythagoras(a: f32, b: f32) -> f32 {
|
||||||
|
| ^
|
||||||
|
|
||||||
|
error: this ident consists of a single char
|
||||||
|
--> $DIR/min_ident_chars.rs:82:29
|
||||||
|
|
|
||||||
|
LL | fn wrong_pythagoras(a: f32, b: f32) -> f32 {
|
||||||
|
| ^
|
||||||
|
|
||||||
|
error: aborting due to 29 previous errors
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user