about summary refs log tree commit diff
path: root/tests
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2022-07-13 14:27:44 +0000
committerbors <bors@rust-lang.org>2022-07-13 14:27:44 +0000
commit44be2d4b0e460e1ca7d9e337a7cb378a74aaa52e (patch)
tree1ee52cf931fdff4c43e2a5dc0372a964cd48b669 /tests
parentf78292a4ad8dc0aa625bfd87bf473fa5d744730d (diff)
parent018684dd9a224996ed2e2c8df238897372d43fd0 (diff)
downloadrust-44be2d4b0e460e1ca7d9e337a7cb378a74aaa52e.tar.gz
rust-44be2d4b0e460e1ca7d9e337a7cb378a74aaa52e.zip
Auto merge of #9169 - Alexendoo:message-convention-regex, r=flip1995
Use `LazyLock` for `lint_message_convention` regexes

They were being recompiled for `Message::new` call, for me this shaves 7s off the time it takes to run the test. Also removes a redundant exception from the list and joins the various `message...` exceptions into one

changelog: none
Diffstat (limited to 'tests')
-rw-r--r--tests/lint_message_convention.rs60
1 files changed, 32 insertions, 28 deletions
diff --git a/tests/lint_message_convention.rs b/tests/lint_message_convention.rs
index 9519c2e9379..c3aae1a9aa2 100644
--- a/tests/lint_message_convention.rs
+++ b/tests/lint_message_convention.rs
@@ -1,8 +1,10 @@
+#![feature(once_cell)]
 #![cfg_attr(feature = "deny-warnings", deny(warnings))]
 #![warn(rust_2018_idioms, unused_lifetimes)]
 
 use std::ffi::OsStr;
 use std::path::PathBuf;
+use std::sync::LazyLock;
 
 use regex::RegexSet;
 
@@ -14,43 +16,45 @@ struct Message {
 
 impl Message {
     fn new(path: PathBuf) -> Self {
-        let content: String = std::fs::read_to_string(&path).unwrap();
         // we don't want the first letter after "error: ", "help: " ... to be capitalized
         // also no punctuation (except for "?" ?) at the end of a line
-        let regex_set: RegexSet = RegexSet::new(&[
-            r"error: [A-Z]",
-            r"help: [A-Z]",
-            r"warning: [A-Z]",
-            r"note: [A-Z]",
-            r"try this: [A-Z]",
-            r"error: .*[.!]$",
-            r"help: .*[.!]$",
-            r"warning: .*[.!]$",
-            r"note: .*[.!]$",
-            r"try this: .*[.!]$",
-        ])
-        .unwrap();
+        static REGEX_SET: LazyLock<RegexSet> = LazyLock::new(|| {
+            RegexSet::new(&[
+                r"error: [A-Z]",
+                r"help: [A-Z]",
+                r"warning: [A-Z]",
+                r"note: [A-Z]",
+                r"try this: [A-Z]",
+                r"error: .*[.!]$",
+                r"help: .*[.!]$",
+                r"warning: .*[.!]$",
+                r"note: .*[.!]$",
+                r"try this: .*[.!]$",
+            ])
+            .unwrap()
+        });
 
         // sometimes the first character is capitalized and it is legal (like in "C-like enum variants") or
         // we want to ask a question ending in "?"
-        let exceptions_set: RegexSet = RegexSet::new(&[
-            r".*C-like enum variant discriminant is not portable to 32-bit targets",
-            r".*did you mean `unix`?",
-            r".*the arguments may be inverted...",
-            r".*Intel x86 assembly syntax used",
-            r".*AT&T x86 assembly syntax used",
-            r".*remove .*the return type...",
-            r"note: Clippy version: .*",
-            r"the compiler unexpectedly panicked. this is a bug.",
-            r"remove the `if let` statement in the for loop and then...",
-        ])
-        .unwrap();
+        static EXCEPTIONS_SET: LazyLock<RegexSet> = LazyLock::new(|| {
+            RegexSet::new(&[
+                r"\.\.\.$",
+                r".*C-like enum variant discriminant is not portable to 32-bit targets",
+                r".*Intel x86 assembly syntax used",
+                r".*AT&T x86 assembly syntax used",
+                r"note: Clippy version: .*",
+                r"the compiler unexpectedly panicked. this is a bug.",
+            ])
+            .unwrap()
+        });
+
+        let content: String = std::fs::read_to_string(&path).unwrap();
 
         let bad_lines = content
             .lines()
-            .filter(|line| regex_set.matches(line).matched_any())
+            .filter(|line| REGEX_SET.matches(line).matched_any())
             // ignore exceptions
-            .filter(|line| !exceptions_set.matches(line).matched_any())
+            .filter(|line| !EXCEPTIONS_SET.matches(line).matched_any())
             .map(ToOwned::to_owned)
             .collect::<Vec<String>>();