diff --git a/config/lint/eslint.config.mjs b/config/lint/eslint.config.mjs index c664808..d751ec8 100644 --- a/config/lint/eslint.config.mjs +++ b/config/lint/eslint.config.mjs @@ -1,5 +1,6 @@ import vue from 'eslint-plugin-vue'; import eslint from '@eslint/js'; +import globals from 'globals'; import typescript from '@typescript-eslint/eslint-plugin'; import stylistic from '@stylistic/eslint-plugin'; import tseslint from 'typescript-eslint'; @@ -10,11 +11,12 @@ const style = { '@stylistic/js': stylistic, '@stylistic/ts': stylistic, }, + 'files': [ '**/*.ts', '**/*.js', '**/*.tsx', '**/*.jsx' ], 'rules': { // Formatting - '@stylistic/array-bracket-newline': ['error', { 'multiline': true, 'minItems': 4 }], + '@stylistic/array-bracket-newline': ['error', { 'multiline': true, 'minItems': 2 }], '@stylistic/array-bracket-spacing': ['error', 'always'], - '@stylistic/array-element-newline': ['error', { 'multiline': true, 'minItems': 4 }], + '@stylistic/array-element-newline': ['error', { 'multiline': true, 'minItems': 2 }], '@stylistic/arrow-parens': ['error', 'as-needed'], '@stylistic/arrow-spacing': ['error', { 'before': true, 'after': true }], '@stylistic/block-spacing': ['error', 'always'], @@ -38,8 +40,9 @@ const style = { '@stylistic/no-multi-spaces': 'error', '@stylistic/no-trailing-spaces': 'error', '@stylistic/no-whitespace-before-property': 'error', - '@stylistic/object-curly-newline': ['error', { 'multiline': true, 'minProperties': 3 }], + '@stylistic/object-curly-newline': ['error', { 'multiline': true, 'minProperties': 2 }], '@stylistic/object-curly-spacing': ['error', 'always'], + '@stylistic/object-property-newline': 'error', '@stylistic/one-var-declaration-per-line': 'error', '@stylistic/quote-props': ['error', 'always'], '@stylistic/quotes': ['error', 'single'], @@ -71,8 +74,19 @@ export default tseslint.config( // Vue support (including TS and JSX inside SFCs) { files: ['**/*.vue'], + languageOptions: { + sourceType: 'module', + ecmaVersion: 'latest', + globals: globals.browser, + parserOptions: { + parser: tseslint.parser, + }, + }, plugins: { 'vue': vue, + '@stylistic': stylistic, + '@stylistic/js': stylistic, + '@stylistic/ts': stylistic, '@typescript-eslint': typescript, }, extends: [ @@ -83,10 +97,23 @@ export default tseslint.config( ...typescript.configs.recommended.rules, ...style.rules, - // You can override any Vue or TS rules here + // Vue specific rules + '@stylistic/indent': 'off', 'vue/html-indent': ['error', 4], 'vue/html-comment-indent': ['error', 4], - 'vue/script-indent': ['error', 4], + 'vue/script-indent': ['error', 4, { + "baseIndent": 1, + "switchCase": 1 + }], + 'vue/html-self-closing': ['error', { + "html": { + "void": "never", + "normal": "never", + "component": "always" + }, + "svg": "always", + "math": "never" + }], 'vue/max-attributes-per-line': ['error', { singleline: 3, multiline: 1,