UNPKG

@bfra.me/eslint-config

Version:
81 lines (74 loc) 2.76 kB
import type {Config} from '../config' import type {Flatten, OptionsOverrides, StylisticConfig} from '../options' import {interopDefault} from '../utils' export const StylisticConfigDefaults = { indent: 2, jsx: true, quotes: 'single', semi: false, } as const /** * Configuration options for stylistic ESLint rules. * * Extends the base stylistic configuration with additional override options, * providing a flattened interface for configuring code style and formatting rules. */ export interface StylisticOptions extends Flatten<StylisticConfig & OptionsOverrides> {} /** * Creates a stylistic ESLint configuration with customizable formatting rules. * * @param options - Configuration options for stylistic rules * @param options.indent - Indentation style (spaces or tabs) * @param options.jsx - Whether to enable JSX-specific rules * @param options.overrides - Additional rule overrides to apply * @param options.quotes - Quote style preference (single, double, or backtick) * @param options.semi - Semicolon usage preference * @returns Promise that resolves to an array of ESLint configuration objects * * @example * ```typescript * const config = await stylistic({ * indent: 2, * quotes: 'single', * semi: false * }); * ``` */ export async function stylistic(options: StylisticOptions = {}): Promise<Config[]> { const {indent, jsx, overrides = {}, quotes, semi} = {...StylisticConfigDefaults, ...options} const pluginStylistic = await interopDefault(import('@stylistic/eslint-plugin')) const config = pluginStylistic.configs.customize({indent, jsx, quotes, semi}) return [ { name: '@bfra.me/stylistic', plugins: {'@stylistic': pluginStylistic}, rules: { ...config.rules, '@stylistic/arrow-parens': ['error', 'as-needed'], '@stylistic/brace-style': ['error', '1tbs', {allowSingleLine: true}], '@stylistic/generator-star-spacing': ['error', {after: true, before: false}], '@stylistic/member-delimiter-style': [ 'error', { multiline: {delimiter: 'none', requireLast: false}, singleline: {delimiter: 'semi', requireLast: false}, }, ], '@stylistic/object-curly-spacing': ['error', 'never'], '@stylistic/operator-linebreak': [ 'error', 'after', {overrides: {':': 'before', '?': 'before', '|': 'before'}}, ], '@stylistic/quote-props': ['error', 'as-needed'], '@stylistic/quotes': [ 'error', quotes, {allowTemplateLiterals: 'always', avoidEscape: true}, ], '@stylistic/yield-star-spacing': ['error', {after: true, before: false}], ...overrides, }, }, ] }