Files
halo-dark-mode-plugin/third-party/darkreader/eslint.config.js
T

266 lines
7.5 KiB
JavaScript

// @ts-check
import {fixupPluginRules} from '@eslint/compat';
import eslint from '@eslint/js';
import stylistic from '@stylistic/eslint-plugin';
import * as eslintPluginCompat from 'eslint-plugin-compat';
import * as eslintPluginImport from 'eslint-plugin-import';
import globals from 'globals';
import tslint from 'typescript-eslint';
import {localRules} from './eslint-plugin-local.js';
export default tslint.config({
files: [
'**/*.js',
'**/*.ts',
'**/*.tsx',
],
ignores: [
'build/**',
'darkreader.js',
'darkreader.mjs',
'node_modules/**',
'tests/coverage/**',
'**/compatibility.js',
],
extends: [
eslint.configs.recommended,
tslint.configs.recommended,
eslintPluginImport.flatConfigs?.recommended,
eslintPluginImport.flatConfigs?.typescript,
],
plugins: {
'@stylistic': stylistic,
local: fixupPluginRules({
rules: localRules,
}),
},
settings: {
'import/resolver': {
node: {
extensions: ['.js', '.jsx', '.ts', '.tsx'],
},
},
},
rules: {
'array-bracket-spacing': ['error', 'never'],
'arrow-parens': ['error', 'always'],
'block-spacing': ['error', 'always'],
'brace-style': 'error',
'comma-spacing': 'error',
curly: 'error',
'eol-last': ['error', 'always'],
eqeqeq: ['error', 'smart'],
indent: ['error', 4, {
SwitchCase: 1,
}],
'jsx-quotes': ['error', 'prefer-double'],
'keyword-spacing': 'error',
'object-curly-spacing': ['error', 'never'],
'operator-assignment': ['error', 'always'],
'prefer-template': 'error',
'no-debugger': 'error',
'no-else-return': 'error',
'no-empty': ['error', {allowEmptyCatch: true}],
'no-empty-pattern': 'off',
'no-cond-assign': 'error',
'no-lonely-if': 'error',
'no-multiple-empty-lines': 'error',
'no-multi-spaces': 'error',
'no-implicit-coercion': 'error',
'no-prototype-builtins': 'off',
'no-redeclare': 'error',
'no-useless-concat': 'error',
'no-useless-escape': 'off',
'no-useless-return': 'error',
'no-trailing-spaces': 'error',
'no-whitespace-before-property': 'error',
'padded-blocks': ['error', 'never'],
'padding-line-between-statements': ['error', {
blankLine: 'always',
prev: 'function',
next: 'function',
}],
'prefer-exponentiation-operator': 'error',
'prefer-regex-literals': 'error',
semi: 'error',
'space-before-function-paren': ['error', {
anonymous: 'always',
asyncArrow: 'always',
named: 'never',
}],
'space-in-parens': ['error', 'never'],
'space-infix-ops': 'error',
'spaced-comment': ['error', 'always', {
exceptions: ['-'],
}],
'@typescript-eslint/array-type': ['error', {
default: 'array-simple',
}],
yoda: ['error', 'never'],
'@stylistic/brace-style': 'error',
'@stylistic/comma-dangle': ['error', {
arrays: 'always-multiline',
objects: 'always-multiline',
imports: 'always-multiline',
exports: 'always-multiline',
functions: 'only-multiline',
}],
'@stylistic/comma-spacing': ['error', {
before: false,
after: true,
}],
'@typescript-eslint/consistent-type-assertions': 'error',
'@typescript-eslint/consistent-type-imports': 'error',
'@typescript-eslint/explicit-module-boundary-types': 'off',
'@stylistic/function-call-spacing': ['error', 'never'],
'@stylistic/keyword-spacing': ['error', {
after: true,
before: true,
}],
'@stylistic/member-delimiter-style': 'error',
'@typescript-eslint/no-empty-object-type': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/no-non-null-assertion': 'off',
'@typescript-eslint/no-redeclare': 'error',
'@typescript-eslint/no-unused-expressions': 'off',
'@typescript-eslint/no-unused-vars': ['error', {caughtErrors: 'none', argsIgnorePattern: '^_'}],
'@stylistic/semi': ['error', 'always'],
'@stylistic/quotes': ['error', 'single', {
allowTemplateLiterals: 'always',
avoidEscape: true,
}],
'import/no-duplicates': 'error',
/*
'import/no-unresolved': ['error', {
ignore: [
'^generators\/',
'^malevic\/',
'^plus\/',
'^ui\/',
'^utils\/',
],
}],
*/
'import/no-unresolved': 'off',
'import/no-restricted-paths': ['error', {
zones: [{
target: './src/inject/',
from: './src/background/',
}, {
target: './src/inject/',
from: './src/ui/',
}, {
target: './src/inject/',
from: './src/api/',
}, {
target: './src/inject/',
from: './tests/',
}, {
target: './src/background/',
from: './src/ui/',
}, {
target: './src/background/',
from: './tests/',
}, {
target: './src/ui/',
from: './src/inject/',
}, {
target: './src/ui/',
from: './src/background/',
}, {
target: './src/ui/',
from: './tests/',
}, {
target: './src/generators/',
from: './src/inject/',
}, {
target: './src/generators/',
from: './src/background/',
}, {
target: './src/generators/',
from: './src/ui/',
}],
}],
'local/jsx-uses-m-pragma': 'error',
'local/jsx-uses-vars': 'error',
},
}, {
files: [
'**/darkreader.js',
'**/darkreader.mjs',
],
extends: [
eslintPluginCompat.config['flat/recommended'],
],
languageOptions: {
globals: {
...globals.browser,
},
ecmaVersion: 2020,
sourceType: 'module',
},
settings: {
polyfills: [
'navigator.deviceMemory',
'navigator.userAgentData',
],
},
rules: {
'compat/compat': ['error', [
'>0.5% and supports es5 and supports promises and supports url',
'not Explorer > 0',
].join(', ')],
},
}, {
files: [
'build/debug/chrome/**/*.js',
],
extends: [
eslintPluginCompat.config['flat/recommended'],
],
languageOptions: {
globals: {
...globals.browser,
},
ecmaVersion: 2020,
sourceType: 'module',
},
settings: {
polyfills: [
'navigator.deviceMemory',
'navigator.userAgentData',
],
},
rules: {
'compat/compat': ['error', [
'> 0.5% and supports es5',
'Firefox ESR',
'last 2 FirefoxAndroid versions',
'not Explorer > 0',
'not Safari > 0',
'not iOS > 0',
'not ChromeAndroid > 0',
'not OperaMini all',
].join(', ')],
},
});