Skip to content

Commit f7397a7

Browse files
authored
Merge pull request #587 from ratmice/lazylock
Replace usage of `lazy_static` with `LazyLock`.
2 parents 0a4a075 + bb1a325 commit f7397a7

File tree

9 files changed

+48
-52
lines changed

9 files changed

+48
-52
lines changed

Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ filetime = "0.2"
3333
fnv = "1.0"
3434
getopts = "0.2"
3535
glob = "0.3"
36-
lazy_static = "1.4"
3736
indexmap = "2"
3837
num-traits = "0.2"
3938
packedvec = "1.2"

cfgrammar/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ path = "src/lib/mod.rs"
1919

2020
[dependencies]
2121
bincode = { workspace = true, optional = true, features = ["derive"] }
22-
lazy_static.workspace = true
2322
indexmap.workspace = true
2423
num-traits.workspace = true
2524
regex.workspace = true

cfgrammar/src/lib/header.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,8 @@ use crate::{
55
YaccGrammarError, YaccGrammarErrorKind, YaccKind, YaccOriginalActionKind, parser::SpansKind,
66
},
77
};
8-
use lazy_static::lazy_static;
98
use regex::{Regex, RegexBuilder};
10-
use std::{error::Error, fmt};
9+
use std::{error::Error, fmt, sync::LazyLock};
1110

1211
/// An error regarding the `%grmtools` header section.
1312
///
@@ -247,15 +246,16 @@ impl<T> Value<T> {
247246
}
248247
}
249248

250-
lazy_static! {
251-
static ref RE_LEADING_WS: Regex = Regex::new(r"^[\p{Pattern_White_Space}]*").unwrap();
252-
static ref RE_NAME: Regex = RegexBuilder::new(r"^[A-Z][A-Z_]*")
249+
static RE_LEADING_WS: LazyLock<Regex> =
250+
LazyLock::new(|| Regex::new(r"^[\p{Pattern_White_Space}]*").unwrap());
251+
static RE_NAME: LazyLock<Regex> = LazyLock::new(|| {
252+
RegexBuilder::new(r"^[A-Z][A-Z_]*")
253253
.case_insensitive(true)
254254
.build()
255-
.unwrap();
256-
static ref RE_DIGITS: Regex = Regex::new(r"^[0-9]+").unwrap();
257-
static ref RE_STRING: Regex = Regex::new(r#"^\"(\\.|[^"\\])*\""#).unwrap();
258-
}
255+
.unwrap()
256+
});
257+
static RE_DIGITS: LazyLock<Regex> = LazyLock::new(|| Regex::new(r"^[0-9]+").unwrap());
258+
static RE_STRING: LazyLock<Regex> = LazyLock::new(|| Regex::new(r#"^\"(\\.|[^"\\])*\""#).unwrap());
259259

260260
const MAGIC: &str = "%grmtools";
261261

cfgrammar/src/lib/yacc/parser.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
#[cfg(feature = "bincode")]
44
use bincode::{Decode, Encode};
5-
use lazy_static::lazy_static;
65
use num_traits::PrimInt;
76
use regex::Regex;
87
#[cfg(feature = "serde")]
@@ -12,6 +11,7 @@ use std::{
1211
error::Error,
1312
fmt,
1413
str::FromStr,
14+
sync::LazyLock,
1515
};
1616

1717
use crate::{
@@ -286,11 +286,10 @@ pub(crate) struct YaccParser<'a> {
286286
global_actiontype: Option<(String, Span)>,
287287
}
288288

289-
lazy_static! {
290-
static ref RE_NAME: Regex = Regex::new(r"^[a-zA-Z_.][a-zA-Z0-9_.]*").unwrap();
291-
static ref RE_TOKEN: Regex =
292-
Regex::new("^(?:(\".+?\")|('.+?')|([a-zA-Z_][a-zA-Z_0-9]*))").unwrap();
293-
}
289+
static RE_NAME: LazyLock<Regex> =
290+
LazyLock::new(|| Regex::new(r"^[a-zA-Z_.][a-zA-Z0-9_.]*").unwrap());
291+
static RE_TOKEN: LazyLock<Regex> =
292+
LazyLock::new(|| Regex::new("^(?:(\".+?\")|('.+?')|([a-zA-Z_][a-zA-Z_0-9]*))").unwrap());
294293

295294
fn add_duplicate_occurrence(
296295
errs: &mut Vec<YaccGrammarError>,

lrlex/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ cfgrammar = { path = "../cfgrammar", version = "0.13" }
2828
lrpar = { path = "../lrpar", version = "0.13" }
2929

3030
getopts.workspace = true
31-
lazy_static.workspace = true
3231
regex.workspace = true
3332
regex-syntax.workspace = true
3433
num-traits.workspace = true

lrlex/src/lib/ctbuilder.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use std::{
1111
hash::Hash,
1212
io::Write,
1313
path::{Path, PathBuf},
14-
sync::Mutex,
14+
sync::{LazyLock, Mutex},
1515
};
1616

1717
use bincode::Encode;
@@ -24,7 +24,6 @@ use cfgrammar::{
2424
span::{Location, Span},
2525
};
2626
use glob::glob;
27-
use lazy_static::lazy_static;
2827
use lrpar::{
2928
CTParserBuilder, LexerTypes,
3029
diagnostics::{DiagnosticFormatter, SpannedDiagnosticFormatter},
@@ -41,10 +40,11 @@ const RUST_FILE_EXT: &str = "rs";
4140
const ERROR: &str = "[Error]";
4241
const WARNING: &str = "[Warning]";
4342

44-
lazy_static! {
45-
static ref RE_TOKEN_ID: Regex = Regex::new(r"^[a-zA-Z_][a-zA-Z_0-9]*$").unwrap();
46-
static ref GENERATED_PATHS: Mutex<HashSet<PathBuf>> = Mutex::new(HashSet::new());
47-
}
43+
static RE_TOKEN_ID: LazyLock<Regex> =
44+
LazyLock::new(|| Regex::new(r"^[a-zA-Z_][a-zA-Z_0-9]*$").unwrap());
45+
46+
static GENERATED_PATHS: LazyLock<Mutex<HashSet<PathBuf>>> =
47+
LazyLock::new(|| Mutex::new(HashSet::new()));
4848

4949
#[non_exhaustive]
5050
pub enum LexerKind {

lrlex/src/lib/parser.rs

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
use cfgrammar::Span;
2-
use lazy_static::lazy_static;
32
use lrpar::LexerTypes;
43
use num_traits::AsPrimitive;
54
use proc_macro2::TokenStream;
@@ -12,28 +11,34 @@ use crate::{
1211
};
1312
use std::borrow::{Borrow as _, Cow};
1413
use std::ops::Not;
14+
use std::sync::LazyLock;
1515

1616
type LexInternalBuildResult<T> = Result<T, LexBuildError>;
1717

18-
lazy_static! {
19-
static ref RE_START_STATE_NAME: Regex = Regex::new(r"^[a-zA-Z][a-zA-Z0-9_.]*$").unwrap();
20-
static ref RE_INCLUSIVE_START_STATE_DECLARATION: Regex =
21-
Regex::new(r"^%[sS][a-zA-Z0-9]*$").unwrap();
22-
static ref RE_EXCLUSIVE_START_STATE_DECLARATION: Regex =
23-
Regex::new(r"^%[xX][a-zA-Z0-9]*$").unwrap();
24-
// Documented in `Escape sequences` in lexcompatibility.m
25-
static ref RE_LEX_ESC_LITERAL: Regex =
26-
Regex::new(r"^(([xuU][[:xdigit:]])|[[:digit:]]|[afnrtv\\]|[pP]|[dDsSwW]|[Az])").unwrap();
27-
// Vertical line separators.
28-
static ref RE_LINE_SEP: Regex = Regex::new(r"[\p{Pattern_White_Space}&&[\p{Zl}\p{Zp}\n\r\v]]").unwrap();
29-
static ref RE_LEADING_LINE_SEPS: Regex = Regex::new(r"^[\p{Pattern_White_Space}&&[\p{Zl}\p{Zp}\n\r\v]]*").unwrap();
30-
// Horizontal space separators
31-
static ref RE_SPACE_SEP: Regex = Regex::new(r"[\p{Pattern_White_Space}&&[\p{Zs}\t]]").unwrap();
32-
static ref RE_LEADING_SPACE_SEPS: Regex = Regex::new(r"^[\p{Pattern_White_Space}&&[\p{Zs}\t]]*").unwrap();
33-
static ref RE_LEADING_WS: Regex = Regex::new(r"^[\p{Pattern_White_Space}]*").unwrap();
34-
static ref RE_WS: Regex = Regex::new(r"\p{Pattern_White_Space}").unwrap();
35-
static ref RE_LEADING_DIGITS: Regex = Regex::new(r"^[0-9]+").unwrap();
36-
}
18+
static RE_START_STATE_NAME: LazyLock<Regex> =
19+
LazyLock::new(|| Regex::new(r"^[a-zA-Z][a-zA-Z0-9_.]*$").unwrap());
20+
static RE_INCLUSIVE_START_STATE_DECLARATION: LazyLock<Regex> =
21+
LazyLock::new(|| Regex::new(r"^%[sS][a-zA-Z0-9]*$").unwrap());
22+
static RE_EXCLUSIVE_START_STATE_DECLARATION: LazyLock<Regex> =
23+
LazyLock::new(|| Regex::new(r"^%[xX][a-zA-Z0-9]*$").unwrap());
24+
// Documented in `Escape sequences` in lexcompatibility.m
25+
static RE_LEX_ESC_LITERAL: LazyLock<Regex> = LazyLock::new(|| {
26+
Regex::new(r"^(([xuU][[:xdigit:]])|[[:digit:]]|[afnrtv\\]|[pP]|[dDsSwW]|[Az])").unwrap()
27+
});
28+
// Vertical line separators.
29+
static RE_LINE_SEP: LazyLock<Regex> =
30+
LazyLock::new(|| Regex::new(r"[\p{Pattern_White_Space}&&[\p{Zl}\p{Zp}\n\r\v]]").unwrap());
31+
static RE_LEADING_LINE_SEPS: LazyLock<Regex> =
32+
LazyLock::new(|| Regex::new(r"^[\p{Pattern_White_Space}&&[\p{Zl}\p{Zp}\n\r\v]]*").unwrap());
33+
// Horizontal space separators
34+
static RE_SPACE_SEP: LazyLock<Regex> =
35+
LazyLock::new(|| Regex::new(r"[\p{Pattern_White_Space}&&[\p{Zs}\t]]").unwrap());
36+
static RE_LEADING_SPACE_SEPS: LazyLock<Regex> =
37+
LazyLock::new(|| Regex::new(r"^[\p{Pattern_White_Space}&&[\p{Zs}\t]]*").unwrap());
38+
static RE_LEADING_WS: LazyLock<Regex> =
39+
LazyLock::new(|| Regex::new(r"^[\p{Pattern_White_Space}]*").unwrap());
40+
static RE_WS: LazyLock<Regex> = LazyLock::new(|| Regex::new(r"\p{Pattern_White_Space}").unwrap());
41+
3742
const INITIAL_START_STATE_NAME: &str = "INITIAL";
3843

3944
#[derive(Debug, Clone)]

lrpar/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ bincode = { workspace = true, features = ["derive"] }
3030
cactus.workspace = true
3131
filetime.workspace = true
3232
indexmap.workspace = true
33-
lazy_static.workspace = true
3433
num-traits.workspace = true
3534
packedvec.workspace = true
3635
proc-macro2.workspace = true

lrpar/src/lib/ctbuilder.rs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use std::{
1111
io::Write,
1212
marker::PhantomData,
1313
path::{Path, PathBuf},
14-
sync::Mutex,
14+
sync::{LazyLock, Mutex},
1515
};
1616

1717
use crate::{
@@ -30,12 +30,10 @@ use cfgrammar::{
3030
yacc::{YaccGrammar, YaccKind, YaccOriginalActionKind, ast::ASTWithValidityInfo},
3131
};
3232
use filetime::FileTime;
33-
use lazy_static::lazy_static;
3433
use lrtable::{Minimiser, StateGraph, StateTable, from_yacc, statetable::Conflicts};
3534
use num_traits::{AsPrimitive, PrimInt, Unsigned};
3635
use proc_macro2::{Literal, TokenStream};
3736
use quote::{ToTokens, TokenStreamExt, format_ident, quote};
38-
use regex::Regex;
3937

4038
const ACTION_PREFIX: &str = "__gt_";
4139
const GLOBAL_PREFIX: &str = "__GT_";
@@ -48,10 +46,8 @@ const RUST_FILE_EXT: &str = "rs";
4846
const WARNING: &str = "[Warning]";
4947
const ERROR: &str = "[Error]";
5048

51-
lazy_static! {
52-
static ref RE_DOL_NUM: Regex = Regex::new(r"\$([0-9]+)").unwrap();
53-
static ref GENERATED_PATHS: Mutex<HashSet<PathBuf>> = Mutex::new(HashSet::new());
54-
}
49+
static GENERATED_PATHS: LazyLock<Mutex<HashSet<PathBuf>>> =
50+
LazyLock::new(|| Mutex::new(HashSet::new()));
5551

5652
struct CTConflictsError<StorageT: Eq + Hash> {
5753
conflicts_diagnostic: String,

0 commit comments

Comments
 (0)