113 lines
3.0 KiB
JavaScript
113 lines
3.0 KiB
JavaScript
// cSpell:ignore tseslint
|
|
// @ts-check
|
|
|
|
import antfu from '@antfu/eslint-config';
|
|
import js from '@eslint/js';
|
|
import vueI18n from '@intlify/eslint-plugin-vue-i18n';
|
|
import eslintPromise from 'eslint-plugin-promise';
|
|
import eslintPluginVueScopedCSS from 'eslint-plugin-vue-scoped-css';
|
|
|
|
export default antfu(
|
|
{
|
|
stylistic: false,
|
|
typescript: {
|
|
tsconfigPath: './tsconfig.json',
|
|
},
|
|
vue: true,
|
|
|
|
// Disable jsonc and yaml support
|
|
jsonc: false,
|
|
yaml: false,
|
|
},
|
|
|
|
js.configs.recommended,
|
|
eslintPromise.configs['flat/recommended'],
|
|
...eslintPluginVueScopedCSS.configs['flat/recommended'],
|
|
...vueI18n.configs['flat/recommended'],
|
|
|
|
{
|
|
rules: {
|
|
'import/order': 'off',
|
|
'sort-imports': 'off',
|
|
'perfectionist/sort-imports': 'off',
|
|
'perfectionist/sort-named-imports': 'off',
|
|
'promise/prefer-await-to-callbacks': 'error',
|
|
|
|
// Vue I18n
|
|
'@intlify/vue-i18n/no-raw-text': [
|
|
'error',
|
|
{
|
|
attributes: {
|
|
'/.+/': ['label'],
|
|
},
|
|
},
|
|
],
|
|
'@intlify/vue-i18n/key-format-style': ['error', 'snake_case'],
|
|
'@intlify/vue-i18n/no-duplicate-keys-in-locale': 'error',
|
|
'@intlify/vue-i18n/no-dynamic-keys': 'error',
|
|
'@intlify/vue-i18n/no-deprecated-i18n-component': 'error',
|
|
'@intlify/vue-i18n/no-deprecated-tc': 'error',
|
|
'@intlify/vue-i18n/no-i18n-t-path-prop': 'error',
|
|
'@intlify/vue-i18n/no-missing-keys-in-other-locales': 'off',
|
|
'@intlify/vue-i18n/valid-message-syntax': 'error',
|
|
'@intlify/vue-i18n/no-missing-keys': 'error',
|
|
'@intlify/vue-i18n/no-unknown-locale': 'error',
|
|
'@intlify/vue-i18n/no-unused-keys': ['error', { extensions: ['.ts', '.vue'] }],
|
|
'@intlify/vue-i18n/prefer-sfc-lang-attr': 'error',
|
|
'@intlify/vue-i18n/no-html-messages': 'error',
|
|
'@intlify/vue-i18n/prefer-linked-key-with-paren': 'error',
|
|
'@intlify/vue-i18n/sfc-locale-attr': 'error',
|
|
},
|
|
settings: {
|
|
// Vue I18n
|
|
'vue-i18n': {
|
|
localeDir: './src/assets/locales/en.json',
|
|
// Specify the version of `vue-i18n` you are using.
|
|
// If not specified, the message will be parsed twice.
|
|
messageSyntaxVersion: '^9.0.0',
|
|
},
|
|
},
|
|
},
|
|
|
|
// Vue
|
|
{
|
|
files: ['**/*.vue'],
|
|
rules: {
|
|
'vue/multi-word-component-names': 'off',
|
|
'vue/html-self-closing': [
|
|
'error',
|
|
{
|
|
html: {
|
|
void: 'always',
|
|
normal: 'always',
|
|
component: 'always',
|
|
},
|
|
svg: 'always',
|
|
math: 'always',
|
|
},
|
|
],
|
|
'vue/block-order': [
|
|
'error',
|
|
{
|
|
order: ['template', 'script', 'style'],
|
|
},
|
|
],
|
|
'vue/singleline-html-element-content-newline': ['off'],
|
|
},
|
|
},
|
|
|
|
// Ignore list
|
|
{
|
|
ignores: [
|
|
'dist',
|
|
'coverage/',
|
|
'package.json',
|
|
'tsconfig.eslint.json',
|
|
'tsconfig.json',
|
|
'src/assets/locales/**/*',
|
|
'!src/assets/locales/en.json',
|
|
'components.d.ts',
|
|
],
|
|
},
|
|
);
|