@mantic-ui/eslint-config
Version:
eslint Config for mantic UI
215 lines (209 loc) • 8.81 kB
JavaScript
import angular from 'angular-eslint';
import * as esImport from 'eslint-plugin-import';
import * as rxjs from 'eslint-plugin-rxjs-updated';
import unicorn from 'eslint-plugin-unicorn';
import tseslint from 'typescript-eslint';
const config$1 = [
...angular.configs.templateRecommended,
...angular.configs.templateAccessibility,
{
name: '@mantic-ui/eslint-config/angular-recommended',
rules: {}
}
];
const config = [
unicorn.configs.recommended,
...tseslint.configs.strictTypeChecked,
...tseslint.configs.stylisticTypeChecked,
...angular.configs.tsRecommended,
rxjs.configs.recommended,
{
languageOptions: {
parserOptions: {
projectService: true
}
}
},
{
name: '@mantic-ui/eslint-config/ts-recommended',
plugins: {
rxjs,
'import': esImport
},
rules: {
// Unicorn
'unicorn/better-regex': 'warn',
'unicorn/consistent-destructuring': 'warn',
'unicorn/custom-error-definition': 'error',
'unicorn/explicit-length-check': 'off',
'unicorn/no-nested-ternary': 'off',
// Has to be disabled because `signal<string | undefined>(undefined)` would not be allowed
'unicorn/no-useless-undefined': 'off',
// typescript-eslint
'@typescript-eslint/no-explicit-any': ['warn', { 'fixToUnknown': true }],
'@typescript-eslint/prefer-readonly': 'warn',
'@typescript-eslint/explicit-member-accessibility': 'warn',
'@typescript-eslint/explicit-function-return-type': 'error',
'@typescript-eslint/no-unused-vars': 'warn',
'@typescript-eslint/no-use-before-define': 'error',
'@typescript-eslint/naming-convention': [
'warn',
{
selector: 'import',
format: ['camelCase', 'PascalCase']
},
{
selector: 'classProperty',
modifiers: ['protected', 'readonly'],
format: ['camelCase', 'PascalCase']
},
{
'selector': 'property',
'format': [
'camelCase',
'PascalCase'
],
'filter': {
'regex': '^\\[(class|style|attr)(\\..*\\\\)?\\]$',
'match': false
}
},
{
selector: 'variable',
format: ['camelCase', 'UPPER_CASE'],
leadingUnderscore: 'forbid',
trailingUnderscore: 'forbid'
},
{
selector: 'typeLike',
format: ['PascalCase']
},
{
selector: 'default',
format: ['camelCase'],
leadingUnderscore: 'forbid',
trailingUnderscore: 'forbid'
}
],
'@typescript-eslint/member-ordering': ['warn', {
'default': [
// Index signature
'signature',
// Fields
// "private-static-field",
// "protected-static-field",
// "public-static-field",
//
// "private-decorated-field",
// "protected-decorated-field",
// "public-decorated-field",
//
// "private-instance-field",
// "protected-instance-field",
// "public-instance-field",
//
// "private-abstract-field",
// "protected-abstract-field",
// "public-abstract-field",
//
// "private-field",
// "protected-field",
// "public-field",
//
'static-field',
// "instance-field",
// "abstract-field",
//
// "decorated-field",
'field',
// Constructors
// "public-constructor",
// "protected-constructor",
// "private-constructor",
'constructor',
// Methods
'method'
]
}],
// TODO:
'@angular-eslint/component-class-suffix': 'error',
'@angular-eslint/component-max-inline-declarations': 'error',
'@angular-eslint/contextual-decorator': 'error',
'@angular-eslint/contextual-lifecycle': 'error',
'@angular-eslint/directive-class-suffix': 'error',
'@angular-eslint/directive-selector': 'error',
'@angular-eslint/no-attribute-decorator': 'error',
'@angular-eslint/no-conflicting-lifecycle': 'error',
'@angular-eslint/no-empty-lifecycle-method': 'error',
'@angular-eslint/no-input-prefix': 'warn',
'@angular-eslint/no-input-rename': 'error',
'@angular-eslint/no-inputs-metadata-property': 'error',
'@angular-eslint/no-lifecycle-call': 'error',
'@angular-eslint/no-output-native': 'warn',
'@angular-eslint/no-output-on-prefix': 'warn',
'@angular-eslint/no-output-rename': 'error',
'@angular-eslint/no-outputs-metadata-property': 'error',
'@angular-eslint/no-queries-metadata-property': 'error',
'@angular-eslint/prefer-output-readonly': 'error',
'@angular-eslint/relative-url-prefix': 'error',
'@angular-eslint/use-component-selector': 'error',
'@angular-eslint/use-lifecycle-interface': 'error',
'@angular-eslint/use-pipe-transform-interface': 'error',
'@angular-eslint/sort-ngmodule-metadata-arrays': 'off',
'rxjs/no-compat': 'error',
'rxjs/no-ignored-replay-buffer': 'warn',
'rxjs/no-nested-subscribe': 'warn',
'rxjs/no-subject-value': 'warn',
'rxjs/no-unsafe-takeuntil': 'warn',
'rxjs/ban-operators': [
'error',
{
'bufferTime': 'Use buffer(yourObservable.pipe(auditTime(1))) instead'
}
],
'prefer-const': 'warn',
'no-cond-assign': 'warn',
'no-irregular-whitespace': 'warn',
'no-multiple-empty-lines': 'warn',
'no-redeclare': 'warn',
'valid-typeof': 'error',
'no-restricted-imports': ['error', {
'patterns': [
'*../@*',
'*../projects/*'
]
}],
'max-len': 'off',
'no-lonely-if': 'warn',
'no-trailing-spaces': 'off',
'no-restricted-syntax': ['warn',
{
'selector': 'BinaryExpression[operator=\'in\']',
'message': 'Binary expressions with \'in\' operator are not type safe. Use \'ObjectHelper.has()\' instead.'
}, {
'selector': 'VariableDeclarator:matches([id.typeAnnotation=undefined]):matches([init.type=ArrayExpression]):matches([init.elements.length=0])',
'message': 'Implicit any arrays are not type safe. Use \'array: MyType[] = []\' instead.'
}, {
'selector': 'PropertyDefinition:matches([typeAnnotation=undefined]):matches([value.type=ArrayExpression]):matches([value.elements.length=0])',
'message': 'Implicit any arrays are not type safe. Use \'array: MyType[] = []\' instead.'
}, {
'selector': 'CallExpression[callee.name=merge][arguments.0.type!=SpreadElement]',
'message': 'Do not use rxjs merge operator without spread operator. use merge(...myObservables) instead'
}
],
'consistent-return': 'error'
}
}
];
const configs = {
angularRecommended: config$1,
tsRecommended: config
};
var index = {
configs
};
/**
* Generated bundle index. Do not edit.
*/
export { configs };
//# sourceMappingURL=mantic-ui-eslint-config.mjs.map