@@ -66,10 +66,10 @@ const COMMON_EVENTS: Record<string, string | null> = {
66
66
67
67
const isCommonEventName = ( lowercaseEventName : string ) =>
68
68
Object . prototype . hasOwnProperty . call ( COMMON_EVENTS , lowercaseEventName ) ;
69
- const getCommoneEventHandlerName = ( lowercaseEventName : string ) => {
69
+ const getCommonEventHandlerName = ( lowercaseEventName : string ) => {
70
70
return `on${
71
71
COMMON_EVENTS [ lowercaseEventName ] ??
72
- lowercaseEventName [ 0 ] . toUpperCase ( ) + lowercaseEventName . slice ( 1 )
72
+ lowercaseEventName [ 0 ] . toUpperCase ( ) + lowercaseEventName . slice ( 1 ) . toLowerCase ( )
73
73
} `;
74
74
} ;
75
75
@@ -132,7 +132,7 @@ const rule: TSESLint.RuleModule<
132
132
// string name of the name node
133
133
const { name } = node . name ;
134
134
135
- const match = / ^ o n ( [ a - z A - Z ] .* ) / . exec ( name ) ;
135
+ const match = / ^ o n ( [ a - z A - Z ] .* ) $ / . exec ( name ) ;
136
136
if ( ! match ) {
137
137
return ; // bail if Solid doesn't consider the prop name an event handler
138
138
}
@@ -173,24 +173,26 @@ const rule: TSESLint.RuleModule<
173
173
staticValue : node . value !== null ? node . value . value : true ,
174
174
} ,
175
175
} ) ;
176
- } else if ( name [ 2 ] === name [ 2 ] . toLowerCase ( ) && ! context . options [ 0 ] ?. ignoreCase ) {
176
+ } else if ( ! context . options [ 0 ] ?. ignoreCase ) {
177
177
const lowercaseEventName = match [ 1 ] . toLowerCase ( ) ;
178
178
if ( isCommonEventName ( lowercaseEventName ) ) {
179
- // For common DOM event names, we know the user intended the prop to be an event handler.
180
- // Fix it to have an uppercase third letter and be property camel-cased with an uppercase third letter
181
- const fixedName = getCommoneEventHandlerName ( lowercaseEventName ) ;
182
- context . report ( {
183
- node : node . name ,
184
- messageId : "capitalization" ,
185
- data : { name, fixedName } ,
186
- fix : ( fixer ) => fixer . replaceText ( node . name , fixedName ) ,
187
- } ) ;
188
- } else {
179
+ const fixedName = getCommonEventHandlerName ( lowercaseEventName ) ;
180
+ if ( fixedName !== name ) {
181
+ // For common DOM event names, we know the user intended the prop to be an event handler.
182
+ // Fix it to have an uppercase third letter and be properly camel-cased.
183
+ context . report ( {
184
+ node : node . name ,
185
+ messageId : "capitalization" ,
186
+ data : { name, fixedName } ,
187
+ fix : ( fixer ) => fixer . replaceText ( node . name , fixedName ) ,
188
+ } ) ;
189
+ }
190
+ } else if ( name [ 2 ] === name [ 2 ] . toLowerCase ( ) ) {
189
191
// this includes words like `only` and `ongoing` as well as unknown handlers like `onfoobar`.
190
192
// Enforce using either /^on[A-Z]/ (event handler) or /^attr:on[a-z]/ (forced regular attribute)
191
193
// to make user intent clear and code maximally readable
192
194
const handlerName = `on${ match [ 1 ] [ 0 ] . toUpperCase ( ) } ${ match [ 1 ] . slice ( 1 ) } ` ;
193
- const attrName = `attr:${ match [ 0 ] } ` ;
195
+ const attrName = `attr:${ name } ` ;
194
196
context . report ( {
195
197
node : node . name ,
196
198
messageId : "naming" ,
0 commit comments