mirror of
https://github.com/danbulant/oxc
synced 2026-05-24 12:21:58 +00:00
perf(linter): use usize for RuleEnum hash (#3336)
This commit is contained in:
parent
8383b6e046
commit
8388c7bd21
2 changed files with 11 additions and 4 deletions
|
|
@ -250,7 +250,7 @@ impl LintOptions {
|
||||||
let mut rules = rules.into_iter().collect::<Vec<_>>();
|
let mut rules = rules.into_iter().collect::<Vec<_>>();
|
||||||
|
|
||||||
// for stable diagnostics output ordering
|
// for stable diagnostics output ordering
|
||||||
rules.sort_unstable_by_key(RuleEnum::name);
|
rules.sort_unstable_by_key(RuleEnum::id);
|
||||||
|
|
||||||
Ok((rules, config.unwrap_or_default()))
|
Ok((rules, config.unwrap_or_default()))
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -60,6 +60,7 @@ pub fn declare_all_lint_rules(metadata: AllLintRulesMeta) -> TokenStream {
|
||||||
.collect::<Vec<_>>()
|
.collect::<Vec<_>>()
|
||||||
.join("/")
|
.join("/")
|
||||||
});
|
});
|
||||||
|
let ids = rules.iter().enumerate().map(|(i, _)| i).collect::<Vec<_>>();
|
||||||
|
|
||||||
let expanded = quote! {
|
let expanded = quote! {
|
||||||
#(#use_stmts)*
|
#(#use_stmts)*
|
||||||
|
|
@ -74,6 +75,12 @@ pub fn declare_all_lint_rules(metadata: AllLintRulesMeta) -> TokenStream {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl RuleEnum {
|
impl RuleEnum {
|
||||||
|
pub fn id(&self) -> usize {
|
||||||
|
match self {
|
||||||
|
#(Self::#struct_names(_) => #ids),*
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn name(&self) -> &'static str {
|
pub fn name(&self) -> &'static str {
|
||||||
match self {
|
match self {
|
||||||
#(Self::#struct_names(_) => #struct_names::NAME),*
|
#(Self::#struct_names(_) => #struct_names::NAME),*
|
||||||
|
|
@ -127,13 +134,13 @@ pub fn declare_all_lint_rules(metadata: AllLintRulesMeta) -> TokenStream {
|
||||||
|
|
||||||
impl std::hash::Hash for RuleEnum {
|
impl std::hash::Hash for RuleEnum {
|
||||||
fn hash<H: std::hash::Hasher>(&self, state: &mut H) {
|
fn hash<H: std::hash::Hasher>(&self, state: &mut H) {
|
||||||
self.name().hash(state);
|
self.id().hash(state);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl PartialEq for RuleEnum {
|
impl PartialEq for RuleEnum {
|
||||||
fn eq(&self, other: &Self) -> bool {
|
fn eq(&self, other: &Self) -> bool {
|
||||||
self.name() == other.name()
|
self.id() == other.id()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -141,7 +148,7 @@ pub fn declare_all_lint_rules(metadata: AllLintRulesMeta) -> TokenStream {
|
||||||
|
|
||||||
impl Ord for RuleEnum {
|
impl Ord for RuleEnum {
|
||||||
fn cmp(&self, other: &Self) -> std::cmp::Ordering {
|
fn cmp(&self, other: &Self) -> std::cmp::Ordering {
|
||||||
self.name().cmp(&other.name())
|
self.id().cmp(&other.id())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue