103 lines
2.7 KiB
JavaScript
103 lines
2.7 KiB
JavaScript
import typescript from '@typescript-eslint/eslint-plugin'
|
|
import typescriptParser from '@typescript-eslint/parser'
|
|
import vue from 'eslint-plugin-vue'
|
|
import vueParser from 'vue-eslint-parser'
|
|
import jsdoc from 'eslint-plugin-jsdoc'
|
|
import tsdoc from 'eslint-plugin-tsdoc'
|
|
|
|
export default [
|
|
// Ignore patterns (replaces .eslintignore)
|
|
{
|
|
ignores: [
|
|
'node_modules/',
|
|
'dist/',
|
|
'dist-ssr/',
|
|
'*.local',
|
|
'coverage/',
|
|
'.env*',
|
|
'.vscode/',
|
|
'.idea/',
|
|
'*.tmp',
|
|
'*.temp'
|
|
]
|
|
},
|
|
|
|
// JavaScript files
|
|
{
|
|
files: ['**/*.{js,mjs,cjs}'],
|
|
languageOptions: {
|
|
ecmaVersion: 'latest',
|
|
sourceType: 'module'
|
|
},
|
|
rules: {
|
|
'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
|
|
'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off'
|
|
}
|
|
},
|
|
|
|
// TypeScript files
|
|
{
|
|
files: ['**/*.{ts,tsx}'],
|
|
languageOptions: {
|
|
parser: typescriptParser,
|
|
ecmaVersion: 'latest',
|
|
sourceType: 'module'
|
|
},
|
|
plugins: {
|
|
'@typescript-eslint': typescript,
|
|
jsdoc,
|
|
tsdoc
|
|
},
|
|
rules: {
|
|
'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
|
|
'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
|
|
// TSDoc rules for TypeScript files
|
|
'tsdoc/syntax': 'error',
|
|
'jsdoc/require-description': 'error',
|
|
'jsdoc/require-param': 'error',
|
|
'jsdoc/require-param-description': 'error',
|
|
'jsdoc/require-returns': 'error',
|
|
'jsdoc/require-returns-description': 'error',
|
|
'jsdoc/check-param-names': 'error',
|
|
'jsdoc/check-tag-names': 'error',
|
|
'jsdoc/check-types': 'error',
|
|
'jsdoc/valid-types': 'error'
|
|
}
|
|
},
|
|
|
|
// Vue files
|
|
{
|
|
files: ['**/*.vue'],
|
|
languageOptions: {
|
|
parser: vueParser,
|
|
parserOptions: {
|
|
parser: typescriptParser,
|
|
ecmaVersion: 'latest',
|
|
sourceType: 'module'
|
|
}
|
|
},
|
|
plugins: {
|
|
vue,
|
|
'@typescript-eslint': typescript,
|
|
jsdoc,
|
|
tsdoc
|
|
},
|
|
rules: {
|
|
...vue.configs['vue3-essential'].rules,
|
|
'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
|
|
'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
|
|
// TSDoc rules for Vue files
|
|
'tsdoc/syntax': 'error',
|
|
'jsdoc/require-description': 'error',
|
|
'jsdoc/require-param': 'error',
|
|
'jsdoc/require-param-description': 'error',
|
|
'jsdoc/require-returns': 'error',
|
|
'jsdoc/require-returns-description': 'error',
|
|
'jsdoc/check-param-names': 'error',
|
|
'jsdoc/check-tag-names': 'error',
|
|
'jsdoc/check-types': 'error',
|
|
'jsdoc/valid-types': 'error'
|
|
}
|
|
}
|
|
]
|