`script/clippy` denies warnings, so a single failing crate takes the gate down for everything that depends on it — which meant nobody was seeing new lints either. Four passes, because each fix unblocks crates the previous pass could not reach: 76 findings, then 32, then 11, then 5. Most of it is mechanical and was applied from rustc's own machine-applicable spans rather than by hand: 29 float literals needing an explicit `f32` (a future-compat lint that becomes a hard error), redundant references in format-family arguments, a `drain(..).collect()` that is `mem::take`, a `clone` on a `Copy` type, manual `Option::filter`. The rest needed reading. `quick_xml` renamed `unescape_value` to `normalized_value`, which takes an XML version — `Implicit1_0` is the right one, since SVG carries no declaration and that is precisely the "assume 1.0" case the old method covered. `criterion::black_box` moved to `std::hint`. `rand`'s `choose_multiple` is now `sample`. Protobuf `from_i32` is `TryFrom`, taken as `try_from(..).ok()` where the caller wanted an `Option` so the semantics do not shift. One is deliberately not fixed. `open_ai`'s `RequestError` carries the response `HeaderMap`, which is what makes the Err variant large; boxing it is the real fix but the variant is built and matched across several crates, so that is an API change and not something to slip into a lint pass. It carries a scoped allow that says so. Co-Authored-By: Claude Opus 5 <[email protected]>
145 lines
3.5 KiB
Rust
145 lines
3.5 KiB
Rust
use criterion::{BenchmarkId, Criterion, criterion_group, criterion_main};
|
|
use std::hint::black_box;
|
|
use gpui::rgba;
|
|
use language::build_highlight_map;
|
|
use theme::SyntaxTheme;
|
|
|
|
fn syntax_theme(highlight_names: &[&str]) -> SyntaxTheme {
|
|
SyntaxTheme::new(highlight_names.iter().enumerate().map(|(i, name)| {
|
|
let r = ((i * 37) % 256) as u8;
|
|
let g = ((i * 53) % 256) as u8;
|
|
let b = ((i * 71) % 256) as u8;
|
|
let color = rgba(u32::from_be_bytes([r, g, b, 0xff]));
|
|
(name.to_string(), color.into())
|
|
}))
|
|
}
|
|
|
|
static SMALL_THEME_KEYS: &[&str] = &[
|
|
"comment", "function", "keyword", "string", "type", "variable",
|
|
];
|
|
|
|
static LARGE_THEME_KEYS: &[&str] = &[
|
|
"attribute",
|
|
"boolean",
|
|
"comment",
|
|
"comment.doc",
|
|
"constant",
|
|
"constant.builtin",
|
|
"constructor",
|
|
"embedded",
|
|
"emphasis",
|
|
"emphasis.strong",
|
|
"function",
|
|
"function.builtin",
|
|
"function.method",
|
|
"function.method.builtin",
|
|
"function.special.definition",
|
|
"keyword",
|
|
"keyword.control",
|
|
"keyword.control.conditional",
|
|
"keyword.control.import",
|
|
"keyword.control.repeat",
|
|
"keyword.control.return",
|
|
"keyword.modifier",
|
|
"keyword.operator",
|
|
"label",
|
|
"link_text",
|
|
"link_uri",
|
|
"number",
|
|
"operator",
|
|
"property",
|
|
"punctuation",
|
|
"punctuation.bracket",
|
|
"punctuation.delimiter",
|
|
"punctuation.list_marker",
|
|
"punctuation.special",
|
|
"string",
|
|
"string.escape",
|
|
"string.regex",
|
|
"string.special",
|
|
"string.special.symbol",
|
|
"tag",
|
|
"text.literal",
|
|
"title",
|
|
"type",
|
|
"type.builtin",
|
|
"type.super",
|
|
"variable",
|
|
"variable.builtin",
|
|
"variable.member",
|
|
"variable.parameter",
|
|
"variable.special",
|
|
];
|
|
|
|
static SMALL_CAPTURE_NAMES: &[&str] = &[
|
|
"function",
|
|
"keyword",
|
|
"string.escape",
|
|
"type.builtin",
|
|
"variable.builtin",
|
|
];
|
|
|
|
static LARGE_CAPTURE_NAMES: &[&str] = &[
|
|
"attribute",
|
|
"boolean",
|
|
"comment",
|
|
"comment.doc",
|
|
"constant",
|
|
"constant.builtin",
|
|
"constructor",
|
|
"function",
|
|
"function.builtin",
|
|
"function.method",
|
|
"keyword",
|
|
"keyword.control",
|
|
"keyword.control.conditional",
|
|
"keyword.control.import",
|
|
"keyword.modifier",
|
|
"keyword.operator",
|
|
"label",
|
|
"number",
|
|
"operator",
|
|
"property",
|
|
"punctuation.bracket",
|
|
"punctuation.delimiter",
|
|
"punctuation.special",
|
|
"string",
|
|
"string.escape",
|
|
"string.regex",
|
|
"string.special",
|
|
"tag",
|
|
"type",
|
|
"type.builtin",
|
|
"variable",
|
|
"variable.builtin",
|
|
"variable.member",
|
|
"variable.parameter",
|
|
];
|
|
|
|
fn bench_build_highlight_map(c: &mut Criterion) {
|
|
let mut group = c.benchmark_group("build_highlight_map");
|
|
|
|
for (capture_label, capture_names) in [
|
|
("small_captures", SMALL_CAPTURE_NAMES as &[&str]),
|
|
("large_captures", LARGE_CAPTURE_NAMES as &[&str]),
|
|
] {
|
|
for (theme_label, theme_keys) in [
|
|
("small_theme", SMALL_THEME_KEYS as &[&str]),
|
|
("large_theme", LARGE_THEME_KEYS as &[&str]),
|
|
] {
|
|
let theme = syntax_theme(theme_keys);
|
|
group.bench_with_input(
|
|
BenchmarkId::new(capture_label, theme_label),
|
|
&(capture_names, &theme),
|
|
|b, (capture_names, theme)| {
|
|
b.iter(|| build_highlight_map(black_box(capture_names), black_box(theme)));
|
|
},
|
|
);
|
|
}
|
|
}
|
|
|
|
group.finish();
|
|
}
|
|
|
|
criterion_group!(benches, bench_build_highlight_map);
|
|
criterion_main!(benches);
|