Skip to content

Commit 6d97a21

Browse files
authored
Don't use positional format args (#361)
1 parent 5b271c6 commit 6d97a21

File tree

26 files changed

+340
-224
lines changed

26 files changed

+340
-224
lines changed

crates/codegen/ebnf/src/ebnf_writer.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ fn format_string_literal(value: &str) -> String {
8282
.chars()
8383
.map(|c| {
8484
if c == '\'' || c == '\\' {
85-
format!("\\{}", c)
85+
format!("\\{c}")
8686
} else if c.is_ascii_graphic() || c == '¬' || c == '…' || c == '«' || c == '»' {
8787
c.to_string()
8888
} else {
@@ -91,5 +91,5 @@ fn format_string_literal(value: &str) -> String {
9191
})
9292
.collect();
9393

94-
return format!("{}{}{}", delimiter, formatted, delimiter);
94+
return format!("{delimiter}{formatted}{delimiter}");
9595
}

crates/codegen/ebnf/src/production.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ impl<T: EBNFWriter> EBNFWritable<T> for Production {
1616
VersionMap::Versioned(versions) => {
1717
for (version, scanner) in versions {
1818
writer.write_line_start();
19-
writer.write_comment(&format!("(* v{} *) ", version));
19+
writer.write_comment(&format!("(* v{version} *) "));
2020
scanner.write_ebnf(name, writer);
2121
writer.write_line_end();
2222
}
@@ -32,7 +32,7 @@ impl<T: EBNFWriter> EBNFWritable<T> for Production {
3232
VersionMap::Versioned(versions) => {
3333
for (version, parser) in versions {
3434
writer.write_line_start();
35-
writer.write_comment(&format!("(* v{} *) ", version));
35+
writer.write_comment(&format!("(* v{version} *) "));
3636
parser.write_ebnf(name, writer);
3737
writer.write_line_end();
3838
}
@@ -47,7 +47,7 @@ impl<T: EBNFWriter> EBNFWritable<T> for Production {
4747
VersionMap::Versioned(versions) => {
4848
for (version, precedence_parser) in versions {
4949
writer.write_line_start();
50-
writer.write_comment(&format!("(* v{} *) ", version));
50+
writer.write_comment(&format!("(* v{version} *) "));
5151
precedence_parser.write_ebnf(name, writer);
5252
writer.write_line_end();
5353
}

crates/codegen/parser/src/char_set.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ impl CharSet {
174174
match tree.context.get_tree_by_name(name).production.as_ref() {
175175
Production::Scanner { name, version_map } => {
176176
version_map.get_for_version(&tree.context.version).expect(
177-
&format!("Validation should have ensured: no version of {} exists for version {}", name, tree.context.version)
177+
&format!("Validation should have ensured: no version of {name} exists for version {version}", version = tree.context.version)
178178
).clone()
179179
}
180180
Production::TriviaParser { .. }

crates/codegen/parser/src/code_comment_ebnf_writer.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,13 @@ impl<T: Write> EBNFWriter for CodeCommentEBNFWriter<'_, T> {
3737
}
3838

3939
fn write_token(&mut self, _kind: TokenKind, value: &str) {
40-
write!(self.w, "{}", value).unwrap();
40+
write!(self.w, "{value}").unwrap();
4141
}
4242
}
4343

4444
pub fn production_display_name(productions: &HashMap<String, ProductionRef>, name: &str) -> String {
4545
if productions.contains_key(name) && matches!(*productions[name], Production::Scanner { .. }) {
46-
format!("«{}»", name)
46+
format!("«{name}»")
4747
} else {
4848
name.to_string()
4949
}

crates/codegen/parser/src/code_generator.rs

+31-35
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ impl VersionedFunctionBody {
2828
.rev()
2929
.map(|(version, body)| {
3030
let version_flag = format_ident!(
31-
"version_is_equal_to_or_greater_than_{}",
32-
version.to_string().replace(".", "_")
31+
"version_is_equal_to_or_greater_than_{version}",
32+
version = version.to_string().replace(".", "_")
3333
);
3434
if version == first_version {
3535
quote! { { #body } }
@@ -56,7 +56,7 @@ pub struct CodeGenerator {
5656
impl CodeGenerator {
5757
pub fn add_token_kind(&mut self, name: String) -> Ident {
5858
let name = name;
59-
let ident = format_ident!("{}", name);
59+
let ident = format_ident!("{name}");
6060
self.token_kinds.insert(name, None);
6161
ident
6262
}
@@ -76,7 +76,7 @@ impl CodeGenerator {
7676

7777
pub fn add_rule_kind(&mut self, name: String) -> Ident {
7878
let name = name;
79-
let ident = format_ident!("{}", name);
79+
let ident = format_ident!("{name}");
8080
self.rule_kinds.insert(name);
8181
ident
8282
}
@@ -114,8 +114,8 @@ impl CodeGenerator {
114114
.map(|version| {
115115
let version = version.to_string();
116116
let version_name = format_ident!(
117-
"version_is_equal_to_or_greater_than_{}",
118-
version.replace(".", "_")
117+
"version_is_equal_to_or_greater_than_{version}",
118+
version = version.replace(".", "_")
119119
);
120120
quote! { #[allow(dead_code)] pub(crate) #version_name: bool }.to_string()
121121
})
@@ -134,8 +134,8 @@ impl CodeGenerator {
134134
.map(|version| {
135135
let version = version.to_string();
136136
let version_name = format_ident!(
137-
"version_is_equal_to_or_greater_than_{}",
138-
version.replace(".", "_")
137+
"version_is_equal_to_or_greater_than_{version}",
138+
version = version.replace(".", "_")
139139
);
140140
quote! { #version_name: Version::parse(#version).unwrap() <= version }.to_string()
141141
})
@@ -146,18 +146,16 @@ impl CodeGenerator {
146146
self.scanners
147147
.iter()
148148
.map(|(name, scanner)| {
149-
let function_name = format_ident!("scan_{}", name.to_snake_case());
149+
let function_name = format_ident!("scan_{name}", name = name.to_snake_case());
150150
let body = scanner.to_function_body();
151-
format!(
152-
"{}\n{}",
153-
scanner.comment,
154-
quote! {
155-
#[allow(unused_assignments, unused_parens)]
156-
pub(crate) fn #function_name(&self, stream: &mut Stream) -> bool {
157-
#body
158-
}
151+
let comment = &scanner.comment;
152+
let function = quote! {
153+
#[allow(unused_assignments, unused_parens)]
154+
pub(crate) fn #function_name(&self, stream: &mut Stream) -> bool {
155+
#body
159156
}
160-
)
157+
};
158+
format!("{comment}\n{function}")
161159
})
162160
.collect()
163161
}
@@ -166,22 +164,20 @@ impl CodeGenerator {
166164
self.parsers
167165
.iter()
168166
.map(|(name, parser)| {
169-
let kind = format_ident!("{}", name);
170-
let function_name = format_ident!("parse_{}", name.to_snake_case());
167+
let kind = format_ident!("{name}");
168+
let function_name = format_ident!("parse_{name}", name = name.to_snake_case());
171169
let body = parser.to_function_body();
172-
format!(
173-
"{}\n{}",
174-
parser.comment,
175-
quote! {
176-
#[allow(unused_assignments, unused_parens)]
177-
pub(crate) fn #function_name(&self, stream: &mut Stream) -> ParseResult {
178-
match #body {
179-
Pass{ node, error } => Pass{ node: cst::Node::top_level_rule(RuleKind::#kind, node), error },
180-
fail => fail
181-
}
170+
let comment = &parser.comment;
171+
let function = quote! {
172+
#[allow(unused_assignments, unused_parens)]
173+
pub(crate) fn #function_name(&self, stream: &mut Stream) -> ParseResult {
174+
match #body {
175+
Pass{ node, error } => Pass{ node: cst::Node::top_level_rule(RuleKind::#kind, node), error },
176+
fail => fail
182177
}
183178
}
184-
)
179+
};
180+
format!("{comment}\n{function}")
185181
})
186182
.collect()
187183
}
@@ -190,8 +186,8 @@ impl CodeGenerator {
190186
self.scanners
191187
.keys()
192188
.map(|name| {
193-
let production_kind = format_ident!("{}", name);
194-
let function_name = format_ident!("scan_{}", name.to_snake_case());
189+
let production_kind = format_ident!("{name}");
190+
let function_name = format_ident!("scan_{name}", name = name.to_snake_case());
195191
let error_message = name;
196192
quote! {
197193
ProductionKind::#production_kind => call_scanner(self, input, Language::#function_name, TokenKind::#production_kind, #error_message)
@@ -205,8 +201,8 @@ impl CodeGenerator {
205201
self.parsers
206202
.keys()
207203
.map(|name| {
208-
let production_kind = format_ident!("{}", name);
209-
let function_name = format_ident!("parse_{}", name.to_snake_case());
204+
let production_kind = format_ident!("{name}");
205+
let function_name = format_ident!("parse_{name}", name = name.to_snake_case());
210206
quote! {
211207
ProductionKind::#production_kind => call_parser(self, input, Language::#function_name)
212208
}

crates/codegen/parser/src/combinator_context.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,6 @@ impl<'context> CombinatorContext<'context> {
4545
self.trees_by_name
4646
.borrow()
4747
.get(name)
48-
.expect(&format!("Production {} not found", name))
48+
.expect(&format!("Production {name} not found"))
4949
}
5050
}

crates/codegen/parser/src/combinator_tree.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ impl<'context> CombinatorTree<'context> {
7272
match self.production.as_ref() {
7373
Production::Scanner { name, .. } => {
7474
if self.first_set().includes_epsilon {
75-
unreachable!("Validation should have discovered that token production {} produces epsilon", name);
75+
unreachable!("Validation should have discovered that token production {name} produces epsilon");
7676
}
7777
code.add_token_kind(name.clone());
7878
let root_node = self.root_node.get().unwrap();

crates/codegen/parser/src/grammar.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ impl PrivateGrammarParserGeneratorExtensions for Grammar {
8383
if generated_code.has_errors() {
8484
eprintln!("Errors:");
8585
for error in generated_code.get_errors() {
86-
eprintln!(" {}", error);
86+
eprintln!(" {error}");
8787
}
8888
}
8989

crates/codegen/parser/src/to_parser_code.rs

+13-10
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,20 @@ impl<'context> CombinatorNode<'context> {
1313
*/
1414
Self::Reference { tree } => match tree.production.as_ref() {
1515
Production::Scanner { name, .. } => {
16-
let kind = format_ident!("{}", name);
17-
let function_name = format_ident!("scan_{}", name.to_snake_case());
16+
let kind = format_ident!("{name}");
17+
let function_name = format_ident!("scan_{name}", name = name.to_snake_case());
1818
let scanner = quote! { self.#function_name(stream) };
1919
let error_message = name;
2020
scanner_code_to_parser_code(scanner, kind, &error_message, !is_trivia)
2121
}
2222
Production::TriviaParser { name, .. } => {
23-
let function_name = format_ident!("parse_{}", name.to_snake_case());
23+
let function_name = format_ident!("parse_{name}", name = name.to_snake_case());
2424
quote! { self.#function_name(stream) }
2525
}
2626
Production::Parser { name, .. } | Production::PrecedenceParser { name, .. } => {
2727
if !is_trivia {
28-
let function_name = format_ident!("parse_{}", name.to_snake_case());
28+
let function_name =
29+
format_ident!("parse_{name}", name = name.to_snake_case());
2930
quote! { self.#function_name(stream) }
3031
} else {
3132
unreachable!(
@@ -44,7 +45,7 @@ impl<'context> CombinatorNode<'context> {
4445
.enumerate()
4546
.map(|(index, element)| {
4647
(
47-
format_ident!("result_{}", index),
48+
format_ident!("result_{index}"),
4849
element.to_parser_code(is_trivia, code),
4950
)
5051
})
@@ -389,7 +390,7 @@ impl<'context> CombinatorNode<'context> {
389390
if furthest_error.position < error.position {
390391
furthest_error = error
391392
} else if furthest_error.position == error.position {
392-
furthest_error.expected = format!("{}, or {}", furthest_error.expected, error.expected)
393+
furthest_error.expected = format!("{prev_expected}, or {expected}", prev_expected = furthest_error.expected, expected = error.expected)
393394
},
394395
ok => break ok,
395396
}
@@ -453,8 +454,10 @@ impl<'context> CombinatorNode<'context> {
453454
primary_expressions
454455
.iter()
455456
.map(|tree| {
456-
let function_name =
457-
format_ident!("parse_{}", tree.production.name().to_snake_case());
457+
let function_name = format_ident!(
458+
"parse_{name}",
459+
name = tree.production.name().to_snake_case()
460+
);
458461
quote! { self.#function_name(stream) }
459462
})
460463
.collect::<Vec<_>>(),
@@ -590,8 +593,8 @@ fn scanner_production_to_parser_code(
590593
is_trivia: bool,
591594
) -> TokenStream {
592595
if let Production::Scanner { name, .. } = open.production.as_ref() {
593-
let kind = format_ident!("{}", name);
594-
let function_name = format_ident!("scan_{}", name.to_snake_case());
596+
let kind = format_ident!("{name}");
597+
let function_name = format_ident!("scan_{name}", name = name.to_snake_case());
595598
let scanner = quote! { self.#function_name(stream) };
596599
let error_message = name;
597600
scanner_code_to_parser_code(scanner, kind, &error_message, !is_trivia)

crates/codegen/parser/src/to_scanner_code.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ impl<'context> CombinatorNode<'context> {
1818
*/
1919
Self::Reference { tree } => match tree.production.as_ref() {
2020
Production::Scanner { name, .. } => {
21-
let scanner_function_name = format_ident!("scan_{}", name.to_snake_case());
21+
let scanner_function_name =
22+
format_ident!("scan_{name}", name = name.to_snake_case());
2223
quote! { self.#scanner_function_name(stream) }
2324
}
2425
Production::TriviaParser { .. }

crates/codegen/parser/src/trie.rs

+3-4
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ pub fn from_scanner(tree: &CombinatorTree, scanner: ScannerRef) -> Option<Termin
126126
match tree.context.get_tree_by_name(name).production.as_ref() {
127127
Production::Scanner { name, version_map } => {
128128
version_map.get_for_version(&tree.context.version).expect(
129-
&format!("Validation should have ensured: no version of {} exists for version {}", name, tree.context.version)
129+
&format!("Validation should have ensured: no version of {name} exists for version {version}", version = tree.context.version)
130130
).clone()
131131
}
132132
Production::TriviaParser { .. }
@@ -163,12 +163,11 @@ fn test_prefix_trie() {
163163

164164
let mut buffer = String::new();
165165
for (key, value) in trie.iter() {
166-
write!(&mut buffer, "{}={},", key, value).unwrap();
166+
write!(&mut buffer, "{key}={value},").unwrap();
167167
}
168168

169169
assert!(
170170
buffer == r#"a=1,afghb=2,afghc=3,b=4,"#,
171-
"trace = {:?}",
172-
buffer
171+
"trace = {buffer:?}"
173172
);
174173
}

crates/codegen/parser/src/typescript_lib_code_generator.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ impl CodeGenerator {
116116
version,
117117
}}
118118
}} else {{
119-
panic!(\"Invalid {language_name} language version: {{}}\", version);
119+
panic!(\"Invalid {language_name} language version: {{version}}\");
120120
}}
121121
}}
122122

crates/codegen/parser_templates/src/shared/language.rs

+24-8
Original file line numberDiff line numberDiff line change
@@ -27,23 +27,35 @@ impl ParseError {
2727
if DEBUG_ERROR_MERGING {
2828
if self.position < other.position {
2929
self.expected = format!(
30-
"O={}\nNOT {}@[{}]",
31-
other.expected, self.position, self.expected
30+
"O={other_expected}\nNOT {position}@[{expected}]",
31+
other_expected = other.expected,
32+
position = self.position,
33+
expected = self.expected
3234
);
3335
self.position = other.position;
3436
} else if self.position == other.position {
35-
self.expected = format!("{}, or {}", other.expected, self.expected);
37+
self.expected = format!(
38+
"{other_expected}, or {expected}",
39+
other_expected = other.expected,
40+
expected = self.expected
41+
);
3642
} else {
3743
self.expected = format!(
38-
"S={}\nNOT {}@[{}]",
39-
self.expected, other.position, other.expected
44+
"S={expected}\nNOT {other_position}@[{other_expected}]",
45+
expected = self.expected,
46+
other_position = other.position,
47+
other_expected = other.expected
4048
);
4149
}
4250
} else {
4351
if self.position < other.position {
4452
*self = other;
4553
} else if self.position == other.position {
46-
self.expected = format!("{}, or {}", other.expected, self.expected);
54+
self.expected = format!(
55+
"{other_expected}, or {expected}",
56+
other_expected = other.expected,
57+
expected = self.expected
58+
);
4759
}
4860
}
4961
}
@@ -131,9 +143,13 @@ pub(crate) fn render_error_report(
131143
let kind = ReportKind::Error;
132144
let color = if with_color { Color::Red } else { Color::Unset };
133145
let message = if DEBUG_ERROR_MERGING {
134-
format!("{}: Expected {}", error.position, error.expected)
146+
format!(
147+
"{position}: Expected {expected}",
148+
position = error.position,
149+
expected = error.expected
150+
)
135151
} else {
136-
format!("Expected {}", error.expected)
152+
format!("Expected {expected}", expected = error.expected)
137153
};
138154
let source_start = error.position;
139155
let source_end = error.position;

0 commit comments

Comments
 (0)