mirror of
https://github.com/FreeTubeApp/FreeTube
synced 2024-11-29 13:40:40 +01:00
64d73f4abb
* Add configurations for linting scripts and add global ignores * optimize eslint ignore patterns * remove `node_modules` since it's already ignored by default * implement code suggestions Co-Authored-By: PikachuEXE <1018543+PikachuEXE@users.noreply.github.com> --------- Co-authored-by: PikachuEXE <1018543+PikachuEXE@users.noreply.github.com>
235 lines
5.3 KiB
JavaScript
235 lines
5.3 KiB
JavaScript
import eslintPluginVue from 'eslint-plugin-vue'
|
|
import vuejsAccessibility from 'eslint-plugin-vuejs-accessibility'
|
|
import eslintPluginUnicorn from 'eslint-plugin-unicorn'
|
|
import eslintConfigPrettier from 'eslint-config-prettier'
|
|
import intlifyVueI18N from '@intlify/eslint-plugin-vue-i18n'
|
|
import globals from 'globals'
|
|
import vueEslintParser from 'vue-eslint-parser'
|
|
import js from '@eslint/js'
|
|
import { FlatCompat } from '@eslint/eslintrc'
|
|
import { fixupConfigRules } from '@eslint/compat'
|
|
import jsoncEslintParser from 'jsonc-eslint-parser'
|
|
import eslintPluginJsonc from 'eslint-plugin-jsonc'
|
|
import eslintPluginYml from 'eslint-plugin-yml'
|
|
import yamlEslintParser from 'yaml-eslint-parser'
|
|
|
|
import activeLocales from './static/locales/activeLocales.json' with { type: 'json' }
|
|
|
|
const compat = new FlatCompat({
|
|
baseDirectory: import.meta.dirname,
|
|
recommendedConfig: js.configs.recommended,
|
|
allConfig: js.configs.all
|
|
})
|
|
|
|
export default [
|
|
{
|
|
ignores: [
|
|
'dist/',
|
|
'eslint.config.mjs'
|
|
]
|
|
},
|
|
...fixupConfigRules(
|
|
compat.config({
|
|
extends: ['standard']
|
|
})
|
|
),
|
|
js.configs.recommended,
|
|
eslintConfigPrettier,
|
|
...eslintPluginVue.configs['flat/vue2-recommended'],
|
|
...vuejsAccessibility.configs["flat/recommended"],
|
|
...intlifyVueI18N.configs['flat/recommended'],
|
|
{
|
|
files: [
|
|
'**/*.{js,vue}',
|
|
],
|
|
ignores: [
|
|
'_scripts/',
|
|
],
|
|
plugins: {
|
|
unicorn: eslintPluginUnicorn,
|
|
},
|
|
|
|
languageOptions: {
|
|
globals: {
|
|
...globals.browser,
|
|
...globals.node,
|
|
},
|
|
|
|
parser: vueEslintParser,
|
|
ecmaVersion: 2022,
|
|
sourceType: 'module',
|
|
},
|
|
|
|
settings: {
|
|
'vue-i18n': {
|
|
localeDir: `./static/locales/{${activeLocales.join(',')}}.yaml`,
|
|
messageSyntaxVersion: '^8.0.0',
|
|
},
|
|
},
|
|
|
|
rules: {
|
|
'space-before-function-paren': 'off',
|
|
'comma-dangle': ['error', 'only-multiline'],
|
|
'vue/no-v-html': 'off',
|
|
|
|
'no-console': ['error', {
|
|
allow: ['warn', 'error'],
|
|
}],
|
|
|
|
'no-unused-vars': 'warn',
|
|
'no-undef': 'warn',
|
|
'object-shorthand': 'off',
|
|
'vue/no-template-key': 'warn',
|
|
'vue/multi-word-component-names': 'off',
|
|
'vuejs-accessibility/no-onchange': 'off',
|
|
|
|
'vuejs-accessibility/label-has-for': ['error', {
|
|
required: {
|
|
some: ['nesting', 'id'],
|
|
},
|
|
}],
|
|
|
|
'vuejs-accessibility/no-static-element-interactions': 'off',
|
|
'n/no-callback-literal': 'warn',
|
|
'n/no-path-concat': 'warn',
|
|
'unicorn/better-regex': 'error',
|
|
'unicorn/no-array-push-push': 'error',
|
|
'unicorn/prefer-keyboard-event-key': 'error',
|
|
'unicorn/prefer-regexp-test': 'error',
|
|
'unicorn/prefer-string-replace-all': 'error',
|
|
'@intlify/vue-i18n/no-dynamic-keys': 'error',
|
|
'@intlify/vue-i18n/no-duplicate-keys-in-locale': 'error',
|
|
|
|
'@intlify/vue-i18n/no-raw-text': ['error', {
|
|
attributes: {
|
|
'/.+/': [
|
|
'title',
|
|
'aria-label',
|
|
'aria-placeholder',
|
|
'aria-roledescription',
|
|
'aria-valuetext',
|
|
'tooltip',
|
|
'message',
|
|
],
|
|
|
|
input: ['placeholder', 'value'],
|
|
img: ['alt'],
|
|
},
|
|
|
|
ignoreText: ['-', '•', '/', 'YouTube', 'Invidious', 'FreeTube'],
|
|
}],
|
|
|
|
'@intlify/vue-i18n/no-deprecated-tc': 'off',
|
|
'vue/require-explicit-emits': 'error',
|
|
'vue/no-unused-emit-declarations': 'error',
|
|
},
|
|
},
|
|
|
|
...eslintPluginJsonc.configs['flat/base'],
|
|
{
|
|
files: ['**/*.json'],
|
|
ignores: [
|
|
'_scripts/',
|
|
],
|
|
|
|
languageOptions: {
|
|
parser: jsoncEslintParser,
|
|
},
|
|
|
|
rules: {
|
|
'no-tabs': 'off',
|
|
'comma-spacing': 'off',
|
|
'no-irregular-whitespace': 'off',
|
|
},
|
|
|
|
settings: {
|
|
'vue-i18n': {
|
|
localeDir: `./static/locales/{${activeLocales.join(',')}}.yaml`,
|
|
messageSyntaxVersion: '^8.0.0',
|
|
},
|
|
},
|
|
},
|
|
|
|
...eslintPluginYml.configs['flat/recommended'],
|
|
{
|
|
files: ['**/*.{yml,yaml}'],
|
|
ignores: [
|
|
'.github/',
|
|
'_scripts/'
|
|
],
|
|
|
|
languageOptions: {
|
|
parser: yamlEslintParser,
|
|
},
|
|
|
|
rules: {
|
|
'yml/no-irregular-whitespace': 'off',
|
|
},
|
|
|
|
settings: {
|
|
'vue-i18n': {
|
|
localeDir: `./static/locales/{${activeLocales.join(',')}}.yaml`,
|
|
messageSyntaxVersion: '^8.0.0',
|
|
},
|
|
},
|
|
},
|
|
{
|
|
files: ['.github/**/*.{yml,yaml}'],
|
|
|
|
languageOptions: {
|
|
parser: yamlEslintParser,
|
|
},
|
|
|
|
rules: {
|
|
'yml/no-empty-mapping-value': 'off',
|
|
'yml/no-irregular-whitespace': 'off',
|
|
},
|
|
|
|
settings: {
|
|
'vue-i18n': {
|
|
localeDir: `./static/locales/{${activeLocales.join(',')}}.yaml`,
|
|
messageSyntaxVersion: '^8.0.0',
|
|
},
|
|
},
|
|
},
|
|
{
|
|
files: ['_scripts/*.js'],
|
|
languageOptions: {
|
|
globals: {
|
|
...globals.node
|
|
},
|
|
ecmaVersion: 'latest',
|
|
},
|
|
|
|
plugins: {
|
|
unicorn: eslintPluginUnicorn,
|
|
},
|
|
|
|
rules: {
|
|
'no-console': 'off',
|
|
'n/no-path-concat': 'off',
|
|
'unicorn/better-regex': 'error',
|
|
}
|
|
},
|
|
{
|
|
files: ['_scripts/*.mjs'],
|
|
languageOptions: {
|
|
globals: {
|
|
...globals.node,
|
|
},
|
|
ecmaVersion: 'latest',
|
|
sourceType: 'module',
|
|
},
|
|
|
|
plugins: {
|
|
unicorn: eslintPluginUnicorn,
|
|
},
|
|
|
|
rules: {
|
|
'no-console': 'off',
|
|
'n/no-path-concat': 'off',
|
|
'unicorn/better-regex': 'error',
|
|
}
|
|
}
|
|
]
|