UNPKG

@jonahsnider/xo-config

Version:

[![npm](https://img.shields.io/npm/v/@jonahsnider/xo-config)](https://www.npmjs.com/package/@jonahsnider/xo-config) [![Build Status](https://github.com/jonahsnider/xo-config/workflows/CI/badge.svg)](https://github.com/jonahsnider/xo-config/actions) [![XO

100 lines 6.89 kB
import jsdoc from 'eslint-plugin-jsdoc'; import tsdoc from 'eslint-plugin-tsdoc'; const config = [ { prettier: 'compat', rules: { quotes: ['error', 'single', { avoidEscape: true, allowTemplateLiterals: true }], // Bad rule, it's also often prone to breaking TypeScript compilation 'unicorn/prefer-json-parse-buffer': 'off', }, }, { files: '**/*.{js,cjs,mjs}', plugins: { jsdoc, }, }, { files: '**/*.{ts,tsx}', plugins: { tsdoc, }, rules: { 'default-case': 'off', // eslint-disable-next-line @typescript-eslint/naming-convention 'tsdoc/syntax': 'error', // Modern TypeScript versions check for this '@typescript-eslint/no-implicit-any-catch': 'off', // Enum members should be StrictPascalCase, variables can be UPPER_CASE, variables & functions can be StrictPascalCase for React components // Everything else is the same - https://github.com/xojs/eslint-config-xo-typescript/blob/7c1e7d23437d975f7031324ec12250985eb4ae7a/index.js#L281 '@typescript-eslint/naming-convention': [ 'error', { selector: 'variable', format: ['strictCamelCase', 'UPPER_CASE', 'StrictPascalCase'], leadingUnderscore: 'allow', }, { // `selector: ['variableLike', 'memberLike', 'property', 'method'],` // Note: Leaving out `parameter` and `typeProperty` because of the mentioned known issues. // Leaving out `variable` in favor of custom rule below // Leaving out `enumMember` in favor of custom rule below // Allowing StrictPascalCase for React components - see https://github.com/xojs/eslint-config-xo-typescript/issues/48 selector: ['function', 'classProperty', 'objectLiteralProperty', 'parameterProperty', 'classMethod', 'objectLiteralMethod', 'typeMethod', 'accessor'], format: ['strictCamelCase', 'StrictPascalCase'], // We allow double underscope because of GraphQL type names and some React names. leadingUnderscore: 'allowSingleOrDouble', trailingUnderscore: 'allow', // Ignore `{'Retry-After': retryAfter}` type properties. filter: { regex: '[- ]', match: false, }, }, { selector: ['typeLike', 'enumMember'], format: ['StrictPascalCase'], }, { selector: 'variable', types: ['boolean'], format: ['StrictPascalCase'], prefix: ['is', 'was', 'has', 'can', 'should', 'will', 'did'], }, { // Interface name should not be prefixed with `I`. selector: 'interface', filter: /^(?!I)[A-Z]/.source, format: ['StrictPascalCase'], }, { // Type parameter name should either be `T` or a descriptive name. selector: 'typeParameter', filter: /^T$|^[A-Z][a-zA-Z]+$/.source, format: ['StrictPascalCase'], }, // Allow these in non-camel-case when quoted. { selector: ['classProperty', 'objectLiteralProperty'], format: null, modifiers: ['requiresQuotes'], }, ], }, }, { files: '**/*.{jsx,tsx}', rules: { 'react/function-component-definition': [ 'error', { namedComponents: 'arrow-function', unnamedComponents: 'arrow-function', }, ], }, }, ]; export default config; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLE1BQU0scUJBQXFCLENBQUM7QUFDeEMsT0FBTyxLQUFLLE1BQU0scUJBQXFCLENBQUM7QUFFeEMsTUFBTSxNQUFNLEdBQWlCO0lBQzVCO1FBQ0MsUUFBUSxFQUFFLFFBQVE7UUFDbEIsS0FBSyxFQUFFO1lBQ04sTUFBTSxFQUFFLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUscUJBQXFCLEVBQUUsSUFBSSxFQUFDLENBQUM7WUFDN0UscUVBQXFFO1lBQ3JFLGtDQUFrQyxFQUFFLEtBQUs7U0FDekM7S0FDRDtJQUNEO1FBQ0MsS0FBSyxFQUFFLG1CQUFtQjtRQUMxQixPQUFPLEVBQUU7WUFDUixLQUFLO1NBQ0w7S0FDRDtJQUNEO1FBQ0MsS0FBSyxFQUFFLGVBQWU7UUFDdEIsT0FBTyxFQUFFO1lBQ1IsS0FBSztTQUNMO1FBQ0QsS0FBSyxFQUFFO1lBQ04sY0FBYyxFQUFFLEtBQUs7WUFDckIsZ0VBQWdFO1lBQ2hFLGNBQWMsRUFBRSxPQUFPO1lBQ3ZCLDRDQUE0QztZQUM1QywwQ0FBMEMsRUFBRSxLQUFLO1lBQ2pELDJJQUEySTtZQUMzSSxnSkFBZ0o7WUFDaEosc0NBQXNDLEVBQUU7Z0JBQ3ZDLE9BQU87Z0JBQ1A7b0JBQ0MsUUFBUSxFQUFFLFVBQVU7b0JBQ3BCLE1BQU0sRUFBRSxDQUFDLGlCQUFpQixFQUFFLFlBQVksRUFBRSxrQkFBa0IsQ0FBQztvQkFDN0QsaUJBQWlCLEVBQUUsT0FBTztpQkFDMUI7Z0JBQ0Q7b0JBQ0Msb0VBQW9FO29CQUNwRSwwRkFBMEY7b0JBQzFGLHVEQUF1RDtvQkFDdkQseURBQXlEO29CQUN6RCxxSEFBcUg7b0JBQ3JILFFBQVEsRUFBRSxDQUFDLFVBQVUsRUFBRSxlQUFlLEVBQUUsdUJBQXVCLEVBQUUsbUJBQW1CLEVBQUUsYUFBYSxFQUFFLHFCQUFxQixFQUFFLFlBQVksRUFBRSxVQUFVLENBQUM7b0JBQ3JKLE1BQU0sRUFBRSxDQUFDLGlCQUFpQixFQUFFLGtCQUFrQixDQUFDO29CQUMvQyxpRkFBaUY7b0JBQ2pGLGlCQUFpQixFQUFFLHFCQUFxQjtvQkFDeEMsa0JBQWtCLEVBQUUsT0FBTztvQkFDM0Isd0RBQXdEO29CQUN4RCxNQUFNLEVBQUU7d0JBQ1AsS0FBSyxFQUFFLE1BQU07d0JBQ2IsS0FBSyxFQUFFLEtBQUs7cUJBQ1o7aUJBQ0Q7Z0JBQ0Q7b0JBQ0MsUUFBUSxFQUFFLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQztvQkFDcEMsTUFBTSxFQUFFLENBQUMsa0JBQWtCLENBQUM7aUJBQzVCO2dCQUNEO29CQUNDLFFBQVEsRUFBRSxVQUFVO29CQUNwQixLQUFLLEVBQUUsQ0FBQyxTQUFTLENBQUM7b0JBQ2xCLE1BQU0sRUFBRSxDQUFDLGtCQUFrQixDQUFDO29CQUM1QixNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUM7aUJBQzVEO2dCQUNEO29CQUNDLGtEQUFrRDtvQkFDbEQsUUFBUSxFQUFFLFdBQVc7b0JBQ3JCLE1BQU0sRUFBRSxhQUFhLENBQUMsTUFBTTtvQkFDNUIsTUFBTSxFQUFFLENBQUMsa0JBQWtCLENBQUM7aUJBQzVCO2dCQUNEO29CQUNDLGtFQUFrRTtvQkFDbEUsUUFBUSxFQUFFLGVBQWU7b0JBQ3pCLE1BQU0sRUFBRSxzQkFBc0IsQ0FBQyxNQUFNO29CQUNyQyxNQUFNLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztpQkFDNUI7Z0JBQ0QsNkNBQTZDO2dCQUM3QztvQkFDQyxRQUFRLEVBQUUsQ0FBQyxlQUFlLEVBQUUsdUJBQXVCLENBQUM7b0JBQ3BELE1BQU0sRUFBRSxJQUFJO29CQUNaLFNBQVMsRUFBRSxDQUFDLGdCQUFnQixDQUFDO2lCQUM3QjthQUNEO1NBQ0Q7S0FDRDtJQUNEO1FBQ0MsS0FBSyxFQUFFLGdCQUFnQjtRQUN2QixLQUFLLEVBQUU7WUFDTixxQ0FBcUMsRUFBRTtnQkFDdEMsT0FBTztnQkFDUDtvQkFDQyxlQUFlLEVBQUUsZ0JBQWdCO29CQUNqQyxpQkFBaUIsRUFBRSxnQkFBZ0I7aUJBQ25DO2FBQ0Q7U0FDRDtLQUNEO0NBQ0QsQ0FBQztBQUVGLGVBQWUsTUFBTSxDQUFDIn0=