web-map/eslint.config.js
2025-04-28 20:04:46 +08:00

51 lines
1.4 KiB
JavaScript

import pluginJs from '@eslint/js';
import configPrettier from 'eslint-config-prettier';
import pluginSimpleImportSort from 'eslint-plugin-simple-import-sort';
import pluginVue from 'eslint-plugin-vue';
import globals from 'globals';
import tseslint from 'typescript-eslint';
/** @type {import('eslint').Linter.Config[]} */
export default [
{ files: ['**/*.{js,mjs,cjs,ts,vue}'] },
{
languageOptions: {
globals: {
...globals.browser,
NodeJS: true,
},
},
},
pluginJs.configs.recommended,
...tseslint.configs.recommended,
...pluginVue.configs['flat/essential'],
configPrettier,
{
files: ['**/*.vue'],
languageOptions: { parserOptions: { parser: tseslint.parser } },
rules: {
'vue/multi-word-component-names': ['warn', { ignores: ['index', 'exception'] }],
},
},
{
plugins: { 'simple-import-sort': pluginSimpleImportSort },
rules: {
'simple-import-sort/imports': 'warn',
'simple-import-sort/exports': 'warn',
},
},
{
rules: {
indent: [
'error',
2,
{ SwitchCase: 1, CallExpression: { arguments: 'off' }, ignoredNodes: ['ConditionalExpression *'] },
],
quotes: ['error', 'single'],
semi: ['error', 'always'],
'max-len': ['warn', { code: 120, ignoreComments: true, ignoreUrls: true, ignoreTemplateLiterals: true }],
'max-lines': ['warn', { max: 1000, skipBlankLines: true, skipComments: true }],
},
},
];