Skip to content
Snippets Groups Projects
Commit d19b0145 authored by !! Julian Keck (old Account; do not use) !!'s avatar !! Julian Keck (old Account; do not use) !! :ghost:
Browse files

ADD: eslint-rule to enforce setup-attribute in script-tags

parent 4e1669a7
No related branches found
No related tags found
No related merge requests found
Pipeline #394705 passed with warnings
import antfu from '@antfu/eslint-config'
import enforceScriptSetupTag from './eslint_rules/enforce-script-setup-tag.js'
export default antfu()
export default antfu().append([
{
rules: {
'nextvs/enforce-script-setup-tag': 'error',
},
plugins: {
nextvs: {
rules: {
'enforce-script-setup-tag': enforceScriptSetupTag,
}
}
}
}
])
export default {
meta: {
type: 'problem',
docs: {
description: 'Enforce <script> to have the \'setup\' attribute',
category: 'Best Practices',
recommended: false,
},
fixable: 'code',
schema: [],
},
create(context) {
return {
Program(_node) {
const sourceCode = context.getSourceCode()
const tokens = sourceCode.ast.tokens
const code = sourceCode.getText()
const file_name = context.getFilename()
if (!file_name.endsWith('.vue')) {
return
}
if (file_name.includes('node_modules')) {
return
}
tokens.forEach((token) => {
if (token.type === 'Punctuator' && token.value === '<script>') {
const script_tag = code.slice(token.range[0], token.range[1])
if (!/\bsetup\b/.test(script_tag)) {
context.report({
node: token,
message: '<script> tags must have the \'setup\' attribute.',
fix(fixer) {
return fixer.replaceTextRange([token.range[0], token.range[0] + '<script'.length], '<script setup')
},
})
}
}
})
},
}
},
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment