Skip to content

Commit 98dcbae

Browse files
committed
Auto merge of #127428 - donno2048:master, r=albertlarsan68
Don't use regexes in tidy checks No need for them, and it makes the tests and the checking simpler r? `@albertlarsan68`
2 parents 35e6e4c + 8d85043 commit 98dcbae

File tree

2 files changed

+27
-28
lines changed

2 files changed

+27
-28
lines changed

Diff for: src/tools/tidy/src/style.rs

+21-15
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,8 @@
1818
// ignore-tidy-dbg
1919

2020
use crate::walk::{filter_dirs, walk};
21-
use regex::RegexSet;
2221
use rustc_hash::FxHashMap;
23-
use std::{ffi::OsStr, path::Path};
22+
use std::{ffi::OsStr, path::Path, sync::LazyLock};
2423

2524
#[cfg(test)]
2625
mod tests;
@@ -110,15 +109,32 @@ const ROOT_PROBLEMATIC_CONSTS: &[u32] = &[
110109
173390526, 721077,
111110
];
112111

112+
#[cfg(not(test))]
113+
const LETTER_DIGIT: &[(char, char)] = &[('A', '4'), ('B', '8'), ('E', '3')];
114+
115+
#[cfg(test)]
116+
const LETTER_DIGIT: &[(char, char)] = &[('A', '4'), ('B', '8'), ('E', '3'), ('0', 'F')]; // use "futile" F intentionally
117+
113118
fn generate_problematic_strings(
114119
consts: &[u32],
115120
letter_digit: &FxHashMap<char, char>,
116121
) -> Vec<String> {
117122
generate_problems(consts, letter_digit)
118-
.flat_map(|v| vec![v.to_string(), format!("{:x}", v), format!("{:X}", v)])
123+
.flat_map(|v| vec![v.to_string(), format!("{:X}", v)])
119124
.collect()
120125
}
121126

127+
static PROBLEMATIC_CONSTS_STRINGS: LazyLock<Vec<String>> = LazyLock::new(|| {
128+
generate_problematic_strings(
129+
ROOT_PROBLEMATIC_CONSTS,
130+
&FxHashMap::from_iter(LETTER_DIGIT.iter().copied()),
131+
)
132+
});
133+
134+
fn contains_problematic_const(trimmed: &str) -> bool {
135+
PROBLEMATIC_CONSTS_STRINGS.iter().any(|s| trimmed.to_uppercase().contains(s))
136+
}
137+
122138
const INTERNAL_COMPILER_DOCS_LINE: &str = "#### This error code is internal to the compiler and will not be emitted with normal Rust code.";
123139

124140
/// Parser states for `line_is_url`.
@@ -315,11 +331,6 @@ pub fn check(path: &Path, bad: &mut bool) {
315331
// We only check CSS files in rustdoc.
316332
path.extension().map_or(false, |e| e == "css") && !is_in(path, "src", "librustdoc")
317333
}
318-
let problematic_consts_strings = generate_problematic_strings(
319-
ROOT_PROBLEMATIC_CONSTS,
320-
&[('A', '4'), ('B', '8'), ('E', '3')].iter().cloned().collect(),
321-
);
322-
let problematic_regex = RegexSet::new(problematic_consts_strings.as_slice()).unwrap();
323334

324335
walk(path, skip, &mut |entry, contents| {
325336
let file = entry.path();
@@ -389,7 +400,6 @@ pub fn check(path: &Path, bad: &mut bool) {
389400
let is_test = file.components().any(|c| c.as_os_str() == "tests");
390401
// scanning the whole file for multiple needles at once is more efficient than
391402
// executing lines times needles separate searches.
392-
let any_problematic_line = problematic_regex.is_match(contents);
393403
for (i, line) in contents.split('\n').enumerate() {
394404
if line.is_empty() {
395405
if i == 0 {
@@ -459,12 +469,8 @@ pub fn check(path: &Path, bad: &mut bool) {
459469
if trimmed.contains("//") && trimmed.contains(" XXX") {
460470
err("Instead of XXX use FIXME")
461471
}
462-
if any_problematic_line {
463-
for s in problematic_consts_strings.iter() {
464-
if trimmed.contains(s) {
465-
err("Don't use magic numbers that spell things (consider 0x12345678)");
466-
}
467-
}
472+
if contains_problematic_const(trimmed) {
473+
err("Don't use magic numbers that spell things (consider 0x12345678)");
468474
}
469475
}
470476
// for now we just check libcore

Diff for: src/tools/tidy/src/style/tests.rs

+6-13
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,10 @@
11
use super::*;
22

33
#[test]
4-
fn test_generate_problematic_strings() {
5-
let problematic_regex = RegexSet::new(
6-
generate_problematic_strings(
7-
ROOT_PROBLEMATIC_CONSTS,
8-
&[('A', '4'), ('B', '8'), ('E', '3'), ('0', 'F')].iter().cloned().collect(), // use "futile" F intentionally
9-
)
10-
.as_slice(),
11-
)
12-
.unwrap();
13-
assert!(problematic_regex.is_match("786357")); // check with no "decimal" hex digits - converted to integer
14-
assert!(problematic_regex.is_match("589701")); // check with "decimal" replacements - converted to integer
15-
assert!(problematic_regex.is_match("8FF85")); // check for hex display
16-
assert!(!problematic_regex.is_match("1193046")); // check for non-matching value
4+
fn test_contains_problematic_const() {
5+
assert!(contains_problematic_const("786357")); // check with no "decimal" hex digits - converted to integer
6+
assert!(contains_problematic_const("589701")); // check with "decimal" replacements - converted to integer
7+
assert!(contains_problematic_const("8FF85")); // check for hex display
8+
assert!(contains_problematic_const("8fF85")); // check for case-alternating hex display
9+
assert!(!contains_problematic_const("1193046")); // check for non-matching value
1710
}

0 commit comments

Comments
 (0)