146 lines
4.4 KiB
JavaScript
146 lines
4.4 KiB
JavaScript
module.exports = {
|
|
root: true,
|
|
env: {
|
|
node: true,
|
|
browser: true,
|
|
es2021: true
|
|
},
|
|
extends: [
|
|
'plugin:vue/vue3-essential',
|
|
'plugin:vue/vue3-strongly-recommended',
|
|
'plugin:vue/vue3-recommended',
|
|
'eslint:recommended',
|
|
'@vue/eslint-config-prettier/skip-formatting'
|
|
],
|
|
parserOptions: {
|
|
ecmaVersion: 'latest',
|
|
sourceType: 'module'
|
|
},
|
|
rules: {
|
|
// Vue规则
|
|
'vue/multi-word-component-names': 'off',
|
|
'vue/no-unused-vars': 'error',
|
|
'vue/no-unused-components': 'warn',
|
|
'vue/require-default-prop': 'error',
|
|
'vue/require-explicit-emits': 'error',
|
|
'vue/require-prop-types': 'error',
|
|
'vue/component-definition-name-casing': ['error', 'PascalCase'],
|
|
'vue/component-name-in-template-casing': ['error', 'kebab-case'],
|
|
'vue/custom-event-name-casing': ['error', 'camelCase'],
|
|
'vue/define-macros-order': ['error', {
|
|
order: ['defineProps', 'defineEmits']
|
|
}],
|
|
'vue/html-self-closing': ['error', {
|
|
html: {
|
|
void: 'never',
|
|
normal: 'always',
|
|
component: 'always'
|
|
},
|
|
svg: 'always',
|
|
math: 'always'
|
|
}],
|
|
'vue/max-attributes-per-line': ['error', {
|
|
singleline: 3,
|
|
multiline: 1
|
|
}],
|
|
'vue/no-v-html': 'warn',
|
|
'vue/padding-line-between-blocks': ['error', 'always'],
|
|
'vue/prefer-import-from-vue': 'error',
|
|
'vue/prefer-separate-static-class': 'error',
|
|
'vue/prefer-true-attribute-shorthand': 'error',
|
|
'vue/v-for-delimiter-style': ['error', 'in'],
|
|
'vue/v-on-event-hyphenation': ['error', 'always'],
|
|
'vue/v-on-function-call': 'error',
|
|
'vue/v-slot-style': ['error', 'shorthand'],
|
|
|
|
// JavaScript规则
|
|
'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
|
|
'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
|
|
'no-unused-vars': 'error',
|
|
'no-undef': 'error',
|
|
'no-var': 'error',
|
|
'prefer-const': 'error',
|
|
'prefer-arrow-callback': 'error',
|
|
'arrow-spacing': 'error',
|
|
'no-duplicate-imports': 'error',
|
|
'no-useless-constructor': 'error',
|
|
'no-useless-rename': 'error',
|
|
'object-shorthand': 'error',
|
|
'prefer-template': 'error',
|
|
'template-curly-spacing': 'error',
|
|
'yield-star-spacing': 'error',
|
|
'yoda': 'error',
|
|
'no-nested-ternary': 'error',
|
|
'no-unneeded-ternary': 'error',
|
|
'spaced-comment': 'error',
|
|
'eqeqeq': ['error', 'always'],
|
|
'curly': 'error',
|
|
'brace-style': ['error', '1tbs', { allowSingleLine: true }],
|
|
'comma-dangle': ['error', 'never'],
|
|
'comma-spacing': 'error',
|
|
'comma-style': 'error',
|
|
'computed-property-spacing': 'error',
|
|
'func-call-spacing': 'error',
|
|
'indent': ['error', 2, { SwitchCase: 1 }],
|
|
'key-spacing': 'error',
|
|
'keyword-spacing': 'error',
|
|
'linebreak-style': ['error', 'unix'],
|
|
'no-multiple-empty-lines': ['error', { max: 1, maxEOF: 0 }],
|
|
'no-trailing-spaces': 'error',
|
|
'object-curly-spacing': ['error', 'always'],
|
|
'quotes': ['error', 'single', { avoidEscape: true }],
|
|
'semi': ['error', 'never'],
|
|
'space-before-blocks': 'error',
|
|
'space-before-function-paren': ['error', {
|
|
anonymous: 'always',
|
|
named: 'never',
|
|
asyncArrow: 'always'
|
|
}],
|
|
'space-in-parens': 'error',
|
|
'space-infix-ops': 'error',
|
|
'space-unary-ops': 'error',
|
|
'unicode-bom': ['error', 'never'],
|
|
|
|
// ES6+规则
|
|
'arrow-body-style': ['error', 'as-needed'],
|
|
'arrow-parens': ['error', 'as-needed'],
|
|
'no-confusing-arrow': 'error',
|
|
'no-duplicate-imports': 'error',
|
|
'no-useless-computed-key': 'error',
|
|
'no-useless-constructor': 'error',
|
|
'no-useless-rename': 'error',
|
|
'object-shorthand': 'error',
|
|
'prefer-arrow-callback': 'error',
|
|
'prefer-const': 'error',
|
|
'prefer-destructuring': ['error', {
|
|
array: false,
|
|
object: true
|
|
}],
|
|
'prefer-rest-params': 'error',
|
|
'prefer-spread': 'error',
|
|
'prefer-template': 'error',
|
|
'rest-spread-spacing': 'error',
|
|
'template-curly-spacing': 'error',
|
|
'yield-star-spacing': 'error'
|
|
},
|
|
overrides: [
|
|
{
|
|
files: ['*.vue'],
|
|
rules: {
|
|
'indent': 'off',
|
|
'vue/html-indent': ['error', 2],
|
|
'vue/script-indent': ['error', 2, { baseIndent: 0 }]
|
|
}
|
|
},
|
|
{
|
|
files: ['**/__tests__/**/*', '**/*.{test,spec}.*'],
|
|
env: {
|
|
jest: true,
|
|
vitest: true
|
|
},
|
|
rules: {
|
|
'no-unused-expressions': 'off'
|
|
}
|
|
}
|
|
]
|
|
} |