@@ -110,28 +110,43 @@ impl OxlintRules {
110
110
}
111
111
}
112
112
_ => {
113
- // For overlapping rule names, use the "error" one
114
- // "no-loss-of-precision": "off",
115
- // "@typescript-eslint/no-loss-of-precision": "error"
116
- if let Some ( rule_config) =
117
- rule_configs. iter ( ) . find ( |r| r. severity . is_warn_deny ( ) )
118
- {
119
- let config = rule_config. config . clone ( ) . unwrap_or_default ( ) ;
120
-
121
- if let Some ( rule) = rules_for_override. iter ( ) . find ( |r| r. name ( ) == * name) {
122
- rules_to_replace
123
- . push ( RuleWithSeverity :: new ( rule. read_json ( config) , rule. severity ) ) ;
124
- }
125
- // If the given rule is not found in the rule list (for example, if all rules are disabled),
126
- // then look it up in the entire rules list and add it.
127
- else if let Some ( rule) = all_rules. iter ( ) . find ( |r| r. name ( ) == * name) {
128
- rules_to_replace. push ( RuleWithSeverity :: new (
129
- rule. read_json ( config) ,
130
- rule_config. severity ,
131
- ) ) ;
132
- }
133
- } else if rule_configs. iter ( ) . all ( |r| r. severity . is_allow ( ) ) {
134
- if let Some ( rule) = rules_for_override. iter ( ) . find ( |r| r. name ( ) == * name) {
113
+ let rules = rules_for_override
114
+ . iter ( )
115
+ . filter_map ( |r| {
116
+ if r. name ( ) == * name {
117
+ Some ( ( r. plugin_name ( ) , r) )
118
+ } else {
119
+ None
120
+ }
121
+ } )
122
+ . collect :: < FxHashMap < _ , _ > > ( ) ;
123
+
124
+ for rule_config in rule_configs {
125
+ let ( rule_name, plugin_name) = transform_rule_and_plugin_name (
126
+ & rule_config. rule_name ,
127
+ & rule_config. plugin_name ,
128
+ ) ;
129
+
130
+ if rule_config. severity . is_warn_deny ( ) {
131
+ let config = rule_config. config . clone ( ) . unwrap_or_default ( ) ;
132
+ if let Some ( rule) = rules. get ( & plugin_name) {
133
+ rules_to_replace. push ( RuleWithSeverity :: new (
134
+ rule. read_json ( config) ,
135
+ rule. severity ,
136
+ ) ) ;
137
+ }
138
+ // If the given rule is not found in the rule list (for example, if all rules are disabled),
139
+ // then look it up in the entire rules list and add it.
140
+ else if let Some ( rule) = all_rules
141
+ . iter ( )
142
+ . find ( |r| r. name ( ) == rule_name && r. plugin_name ( ) == plugin_name)
143
+ {
144
+ rules_to_replace. push ( RuleWithSeverity :: new (
145
+ rule. read_json ( config) ,
146
+ rule_config. severity ,
147
+ ) ) ;
148
+ }
149
+ } else if let Some ( & rule) = rules. get ( & plugin_name) {
135
150
rules_to_remove. push ( rule. clone ( ) ) ;
136
151
}
137
152
}
@@ -152,17 +167,12 @@ fn transform_rule_and_plugin_name<'a>(
152
167
rule_name : & ' a str ,
153
168
plugin_name : & ' a str ,
154
169
) -> ( & ' a str , & ' a str ) {
155
- if plugin_name == "vitest" && is_jest_rule_adapted_to_vitest ( rule_name) {
156
- return ( rule_name, "jest" ) ;
157
- }
158
-
159
- if plugin_name == "typescript" && is_eslint_rule_adapted_to_typescript ( rule_name) {
160
- return ( rule_name, "eslint" ) ;
161
- }
162
-
163
- if plugin_name == "unicorn" && rule_name == "no-negated-condition" {
164
- return ( "no-negated-condition" , "eslint" ) ;
165
- }
170
+ let plugin_name = match plugin_name {
171
+ "vitest" if is_jest_rule_adapted_to_vitest ( rule_name) => "jest" ,
172
+ "unicorn" if rule_name == "no-negated-condition" => "eslint" ,
173
+ "typescript" if is_eslint_rule_adapted_to_typescript ( rule_name) => "eslint" ,
174
+ _ => plugin_name,
175
+ } ;
166
176
167
177
( rule_name, plugin_name)
168
178
}
0 commit comments