coze-studio/frontend/config/eslint-config/rules/js-standard.js

164 lines
3.9 KiB
JavaScript

const babelOptions = {
plugins: [
[
require.resolve('@babel/plugin-proposal-decorators'),
{
legacy: true,
},
],
[
require.resolve('@babel/plugin-proposal-class-properties'),
{
loose: true,
},
],
require.resolve('@babel/plugin-proposal-object-rest-spread'),
require.resolve('@babel/plugin-proposal-optional-catch-binding'),
require.resolve('@babel/plugin-proposal-async-generator-functions'),
require.resolve('@babel/plugin-proposal-export-namespace-from'),
require.resolve('@babel/plugin-proposal-export-default-from'),
require.resolve('@babel/plugin-proposal-nullish-coalescing-operator'),
require.resolve('@babel/plugin-proposal-optional-chaining'),
[
require.resolve('@babel/plugin-proposal-pipeline-operator'),
{
proposal: 'minimal',
},
],
require.resolve('@babel/plugin-proposal-do-expressions'),
require.resolve('@babel/plugin-proposal-function-bind'),
require.resolve('@babel/plugin-syntax-dynamic-import'),
require.resolve('@babel/plugin-syntax-jsx'),
],
};
/** @type {(import('eslint').Linter.Config)[]} */
module.exports = [
{
files: ['**/*.?(m|c)js?(x)'],
rules: {
'no-import-assign': 'error',
'no-extra-semi': 'error',
'no-undef': 'error',
'no-unused-vars': [
'error',
{
argsIgnorePattern: '^_',
},
],
'comma-dangle': ['error', 'always-multiline'],
'no-array-constructor': 'error',
'dot-notation': 'error',
'constructor-super': 'error',
'no-this-before-super': 'error',
'no-useless-constructor': 'error',
'getter-return': [
'error',
{
allowImplicit: true,
},
],
'no-setter-return': 'error',
'no-dupe-class-members': 'error',
'default-param-last': 'error',
'no-func-assign': 'error',
'no-unsafe-negation': 'error',
'valid-typeof': 'error',
'no-empty-function': 'error',
quotes: [
'error',
'single',
{
avoidEscape: true,
},
],
'no-loss-of-precision': 'error',
'no-magic-numbers': [
'warn',
{
ignoreArrayIndexes: true,
ignoreDefaultValues: true,
enforceConst: true,
ignore: [0, 1, -1],
ignoreClassFieldInitialValues: true,
},
],
'no-unreachable': 'error',
'no-throw-literal': 'error',
'no-implied-eval': 'error',
'no-new-symbol': 'error',
'no-obj-calls': 'error',
camelcase: [
'error',
{
properties: 'never',
allow: ['^UNSAFE_'],
ignoreDestructuring: true,
},
],
'unicorn/filename-case': [
'error',
{
cases: {
kebabCase: true,
},
},
],
'max-lines-per-function': [
'error',
{
max: 300,
IIFEs: true,
},
],
},
languageOptions: {
parser: require('@babel/eslint-parser'),
parserOptions: {
ecmaVersion: 11,
sourceType: 'module',
ecmaFeatures: {
jsx: true,
legacyDecorators: true,
},
requireConfigFile: false,
babelOptions,
},
},
},
{
// for jsx
files: ['**/*.?(m|c)jsx'],
rules: {
'react/jsx-uses-react': 'error',
'react/jsx-uses-vars': 'error',
'unicorn/filename-case': [
'warn',
{
cases: {
kebabCase: true,
snakeCase: true,
pascalCase: true,
},
ignore: ['^(?!.*?\\.jsx$)(?!.*?\\.tsx$).+'],
},
],
'max-lines-per-function': [
'warn',
{
max: 300,
IIFEs: true,
},
],
'max-lines': [
'error',
{
max: 500,
skipComments: true,
skipBlankLines: true,
},
],
},
},
];