175 lines
4.2 KiB
JavaScript
175 lines
4.2 KiB
JavaScript
import js from '@eslint/js';
|
|
import pluginVue from 'eslint-plugin-vue';
|
|
import * as parserVue from 'vue-eslint-parser';
|
|
import configPrettier from 'eslint-config-prettier';
|
|
import pluginPrettier from 'eslint-plugin-prettier';
|
|
import { defineFlatConfig } from 'eslint-define-config';
|
|
import * as parserTypeScript from '@typescript-eslint/parser';
|
|
import pluginTypeScript from '@typescript-eslint/eslint-plugin';
|
|
|
|
export default defineFlatConfig([
|
|
{
|
|
...js.configs.recommended,
|
|
ignores: ['**/.*', 'dist/*', '*.d.ts', 'public/*', 'src/assets/**', 'src/**/iconfont/**'],
|
|
languageOptions: {
|
|
globals: {
|
|
// index.d.ts
|
|
RefType: 'readonly',
|
|
EmitType: 'readonly',
|
|
TargetContext: 'readonly',
|
|
ComponentRef: 'readonly',
|
|
ElRef: 'readonly',
|
|
ForDataType: 'readonly',
|
|
AnyFunction: 'readonly',
|
|
PropType: 'readonly',
|
|
Writable: 'readonly',
|
|
Nullable: 'readonly',
|
|
NonNullable: 'readonly',
|
|
Recordable: 'readonly',
|
|
ReadonlyRecordable: 'readonly',
|
|
Indexable: 'readonly',
|
|
DeepPartial: 'readonly',
|
|
Without: 'readonly',
|
|
Exclusive: 'readonly',
|
|
TimeoutHandle: 'readonly',
|
|
IntervalHandle: 'readonly',
|
|
Effect: 'readonly',
|
|
ChangeEvent: 'readonly',
|
|
WheelEvent: 'readonly',
|
|
ImportMetaEnv: 'readonly',
|
|
Fn: 'readonly',
|
|
PromiseFn: 'readonly',
|
|
ComponentElRef: 'readonly',
|
|
parseInt: 'readonly',
|
|
parseFloat: 'readonly',
|
|
},
|
|
},
|
|
plugins: {
|
|
prettier: pluginPrettier,
|
|
},
|
|
rules: {
|
|
...configPrettier.rules,
|
|
...pluginPrettier.configs.recommended.rules,
|
|
'no-debugger': 'off',
|
|
'no-unused-vars': [
|
|
'error',
|
|
{
|
|
argsIgnorePattern: '^_',
|
|
varsIgnorePattern: '^_',
|
|
},
|
|
],
|
|
'prettier/prettier': [
|
|
'error',
|
|
{
|
|
endOfLine: 'auto',
|
|
},
|
|
],
|
|
},
|
|
},
|
|
{
|
|
files: ['**/*.?([cm])ts', '**/*.?([cm])tsx'],
|
|
languageOptions: {
|
|
parser: parserTypeScript,
|
|
parserOptions: {
|
|
sourceType: 'module',
|
|
},
|
|
},
|
|
plugins: {
|
|
'@typescript-eslint': pluginTypeScript,
|
|
},
|
|
rules: {
|
|
...pluginTypeScript.configs.strict.rules,
|
|
'@typescript-eslint/ban-types': 'off',
|
|
'@typescript-eslint/no-redeclare': 'error',
|
|
'@typescript-eslint/ban-ts-comment': 'off',
|
|
'@typescript-eslint/no-explicit-any': 'off',
|
|
'@typescript-eslint/prefer-as-const': 'warn',
|
|
'@typescript-eslint/no-empty-function': 'off',
|
|
'@typescript-eslint/no-non-null-assertion': 'off',
|
|
'@typescript-eslint/no-import-type-side-effects': 'error',
|
|
'@typescript-eslint/prefer-literal-enum-member': 'off',
|
|
'@typescript-eslint/explicit-module-boundary-types': 'off',
|
|
'@typescript-eslint/consistent-type-imports': [
|
|
'error',
|
|
{
|
|
disallowTypeAnnotations: false,
|
|
fixStyle: 'inline-type-imports',
|
|
},
|
|
],
|
|
'@typescript-eslint/no-unused-vars': [
|
|
'error',
|
|
{
|
|
argsIgnorePattern: '^_',
|
|
varsIgnorePattern: '^_',
|
|
},
|
|
],
|
|
},
|
|
},
|
|
{
|
|
files: ['**/*.d.ts'],
|
|
rules: {
|
|
'eslint-comments/no-unlimited-disable': 'off',
|
|
'import/no-duplicates': 'off',
|
|
'unused-imports/no-unused-vars': 'off',
|
|
},
|
|
},
|
|
{
|
|
files: ['**/*.?([cm])js'],
|
|
rules: {
|
|
'@typescript-eslint/no-require-imports': 'off',
|
|
'@typescript-eslint/no-var-requires': 'off',
|
|
},
|
|
},
|
|
{
|
|
files: ['**/*.vue'],
|
|
languageOptions: {
|
|
globals: {
|
|
$: 'readonly',
|
|
$$: 'readonly',
|
|
$computed: 'readonly',
|
|
$customRef: 'readonly',
|
|
$ref: 'readonly',
|
|
$shallowRef: 'readonly',
|
|
$toRef: 'readonly',
|
|
},
|
|
parser: parserVue,
|
|
parserOptions: {
|
|
ecmaFeatures: {
|
|
jsx: true,
|
|
},
|
|
extraFileExtensions: ['.vue'],
|
|
parser: '@typescript-eslint/parser',
|
|
sourceType: 'module',
|
|
},
|
|
},
|
|
plugins: {
|
|
vue: pluginVue,
|
|
},
|
|
processor: pluginVue.processors['.vue'],
|
|
rules: {
|
|
...pluginVue.configs.base.rules,
|
|
...pluginVue.configs['vue3-essential'].rules,
|
|
...pluginVue.configs['vue3-recommended'].rules,
|
|
'no-undef': 'off',
|
|
'no-unused-vars': 'off',
|
|
'vue/no-v-html': 'off',
|
|
'vue/require-default-prop': 'off',
|
|
'vue/require-explicit-emits': 'off',
|
|
'vue/multi-word-component-names': 'off',
|
|
'vue/no-setup-props-reactivity-loss': 'off',
|
|
'vue/html-self-closing': [
|
|
'error',
|
|
{
|
|
html: {
|
|
void: 'always',
|
|
normal: 'always',
|
|
component: 'always',
|
|
},
|
|
svg: 'always',
|
|
math: 'always',
|
|
},
|
|
],
|
|
},
|
|
},
|
|
]);
|