peertube-plugin-livechat/eslint.config.mjs

200 lines
6.5 KiB
JavaScript

// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/>
//
// SPDX-License-Identifier: AGPL-3.0-only
import love from 'eslint-config-love'
import eslint from '@eslint/js'
import tseslint from 'typescript-eslint'
import typescriptParser from '@typescript-eslint/parser'
import stylistic from '@stylistic/eslint-plugin'
import eslintLit from 'eslint-plugin-lit'
import globals from 'globals'
export default tseslint.config(
{
ignores: [
'node_modules/', 'dist/', 'webpack.config.js',
'build/',
'vendor/',
'support/documentation', 'support',
'build-*js'
]
},
eslint.configs.recommended,
...tseslint.configs.recommended,
{
...love,
files: ['**/*.ts']
},
stylistic.configs.customize({
quotes: 'single',
semi: false,
commaDangle: 'never',
blockSpacing: true,
braceStyle: '1tbs',
indent: 2,
quoteProps: 'as-needed'
}),
{
rules: {
'@stylistic/space-before-function-paren': ['error', { anonymous: 'always', asyncArrow: 'always', named: 'always' }],
'@stylistic/arrow-parens': 'off',
'@stylistic/operator-linebreak': ['error', 'after', { overrides: { '?': 'before', ':': 'before' } }],
'@stylistic/max-statements-per-line': ['error', { max: 2 }]
}
},
{
files: ['**/*.ts'],
rules: {
'@typescript-eslint/no-empty-function': ['error', { allow: ['arrowFunctions'] }],
'no-unused-vars': ['error', { argsIgnorePattern: '^_', caughtErrorsIgnorePattern: '^_' }],
'@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_', caughtErrorsIgnorePattern: '^_' }],
'@typescript-eslint/no-floating-promises': 'error',
'@typescript-eslint/no-misused-promises': ['error', { checksVoidReturn: false }],
'@typescript-eslint/no-var-requires': 'off',
'@typescript-eslint/strict-boolean-expressions': 'off',
'@typescript-eslint/return-await': [2, 'in-try-catch'], // FIXME: correct?
'@typescript-eslint/no-invalid-void-type': 'off',
'@typescript-eslint/triple-slash-reference': 'off',
'@typescript-eslint/no-explicit-any': 'off', // FIXME: should be "error", and we should use 'unknown' in the code.
'init-declarations': 'off',
'@typescript-eslint/init-declarations': 'off',
'@typescript-eslint/consistent-type-imports': 'off',
'@typescript-eslint/consistent-type-exports': 'off',
'@typescript-eslint/no-require-imports': 'off',
'@typescript-eslint/unbound-method': 'off',
'@typescript-eslint/prefer-promise-reject-errors': 'off',
'max-params': 'off',
'@typescript-eslint/max-params': ['error', { max: 8 }], // FIXME: this rules should use the default max value.
'@typescript-eslint/explicit-function-return-type': 'error',
'@typescript-eslint/no-confusing-void-expression': 'off',
'@typescript-eslint/class-methods-use-this': 'off',
'@typescript-eslint/non-nullable-type-assertion-style': 'off',
'@typescript-eslint/no-magic-numbers': 'off',
'max-len': [
'error',
{
code: 120,
comments: 120
}
]
}
},
{
files: ['**/*.js'],
rules: {
// Disabling typescript-eslint rules for JS files (did not find a simplier way...)
'@typescript-eslint/no-empty-function': 'off',
'@typescript-eslint/no-unused-vars': 'off',
'@typescript-eslint/no-floating-promises': 'off',
'@typescript-eslint/no-misused-promises': 'off',
'@typescript-eslint/no-var-requires': 'off',
'@typescript-eslint/strict-boolean-expressions': 'off',
'@typescript-eslint/return-await': 'off',
'@typescript-eslint/no-invalid-void-type': 'off',
'@typescript-eslint/triple-slash-reference': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/init-declarations': 'off',
'@typescript-eslint/consistent-type-imports': 'off',
'@typescript-eslint/consistent-type-exports': 'off',
'@typescript-eslint/no-require-imports': 'off',
'@typescript-eslint/unbound-method': 'off',
'@typescript-eslint/prefer-promise-reject-errors': 'off',
'@typescript-eslint/max-params': 'off',
'@typescript-eslint/explicit-function-return-type': 'off',
'@typescript-eslint/no-confusing-void-expression': 'off',
'@typescript-eslint/class-methods-use-this': 'off',
'@typescript-eslint/non-nullable-type-assertion-style': 'off',
'@typescript-eslint/no-magic-numbers': 'off',
'max-params': 'off',
'init-declarations': 'off',
'no-unused-vars': ['error', { argsIgnorePattern: '^_', caughtErrorsIgnorePattern: '^_' }],
'max-len': [
'error',
{
code: 120,
comments: 120
}
]
}
},
{
files: ['.stylelintrc.js'],
languageOptions: {
globals: globals.node
}
},
{
files: ['server/**/*.js', 'server/**/*.ts'],
languageOptions: {
ecmaVersion: 6,
globals: {
...globals.node
},
parser: typescriptParser,
parserOptions: {
ecmaVersion: 2018,
project: './server/tsconfig.json',
projectService: true
}
}
},
{
files: ['shared/**/*.js', 'shared/**/*.ts'],
languageOptions: {
ecmaVersion: 6,
globals: {
...globals.es2016,
...globals.browser
},
parser: typescriptParser,
parserOptions: {
ecmaVersion: 2018,
project: [
'./server/tsconfig.json'
// './client/tsconfig.json' // FIXME: dont really know what is necessary here.
],
// FIXME: how to make projectService work?
projectService: false
// projectService: {
// allowDefaultProject: ['shared/lib/*.js', 'shared/lib/*.ts'],
// defaultProject: './server/tsconfig.json'
// }
}
}
},
{
files: ['client/**/*.js', 'client/**/*.ts', 'conversejs/**/*.js', 'conversejs/**/*.ts'],
languageOptions: {
ecmaVersion: 6,
globals: {
...globals.browser
},
parser: typescriptParser,
parserOptions: {
ecmaVersion: 2018,
project: [
'./client/tsconfig.json',
'./conversejs/tsconfig.json'
]
}
},
// FIXME: not sure elintLit works.
plugins: {
...eslintLit.configs['flat/recommended'].plugins
},
rules: {
...eslintLit.configs['flat/recommended'].rules
}
},
{
files: ['conversejs/build-*.js', 'conversejs/loc.keys.js', 'conversejs/custom/webpack.livechat.js'],
languageOptions: {
globals: {
...globals.node
}
}
}
)