Description
Checklist
- I have tried restarting my IDE and the issue persists.
- I have read the FAQ and my problem is not listed.
Tell us about your environment
- ESLint version: 9.8.0
- eslint-plugin-vue version: 9.27.0
- Vue version: 2.7.16
- Node version: 20.10.0
- Operating System: MacOS 14.5 (23F79)
Please show your full configuration:
I'am using antfu's @antfu/eslint-config
** Remember I've set the vue/v-on-event-hyphenation
rule's config autofix
tobe false
.**
import eslint from '@antfu/eslint-config';
export default eslint({
rules: {
'vue/attribute-hyphenation': ['error', 'never'],
'vue/v-on-event-hyphenation': ['error', 'never', {
autofix: false
}],
},
vue: {
vueVersion: 2,
},
});
What did you do?
Suppose this:
<Hi :my-name.sync="name" />
Then running eslint . --fix
After the autofix of vue/attribute-hyphenation
, code becomes:
<Hi :myName.sync="name" />
This code should not be autofixed, because .sync
means this is actually a shorthand of:
<Hi :my-name="name" @update:my-name="name = $event" />
When it's autofixed to the this code:
<Hi :myName.sync="name" />
It means:
<Hi :myName="name" @update:myName="name = $event" />
And this autofixed code would break, because the event name should be update:my-name
, instead of update:myName
.
Might be solution
eslint-plugin-vue/lib/rules/attribute-hyphenation.js
Lines 99 to 108 in 66e3201
Maybe we can add another .sync
check here(willing to contribute a PR for this), for example:
fix: (fixer) => {
if (text.includes('_')) {
return null
}
if (/^[A-Z]/.test(name)) {
return null
}
+ if(text.endsWith('.sync')) {
+ return null
+ }
return fixer.replaceText(
node.key,
text.replace(name, caseConverter(name))
)
}