Ctrl K
ComunidadGuías…

eslint.config.mjs

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
import eslintConfigPrettier from '@electron-toolkit/eslint-config-prettier';
import tseslint from '@electron-toolkit/eslint-config-ts';
import perfectionist from 'eslint-plugin-perfectionist';
import eslintPluginReact from 'eslint-plugin-react';
import eslintPluginReactHooks from 'eslint-plugin-react-hooks';
import eslintPluginReactRefresh from 'eslint-plugin-react-refresh';

export default tseslint.config(
    {
        ignores: [
            '**/node_modules',
            '**/dist',
            '**/out',
            '**/build',
            '**/.expo',
            '**/coverage',
            '**/*.d.ts',
            'packages/core/src/**/*.js',
        ],
    },
    tseslint.configs.recommended,
    perfectionist.configs['recommended-natural'],
    eslintPluginReact.configs.flat.recommended,
    eslintPluginReact.configs.flat['jsx-runtime'],
    {
        settings: {
            react: {
                version: 'detect',
            },
        },
    },
    {
        files: ['src/renderer/**/*.{ts,tsx}'],
        rules: {
            'no-console': 'error',
        },
    },
    {
        files: [
            'src/renderer/utils/logger.ts',
            'src/renderer/**/*error-boundary*.{ts,tsx}',
            'src/renderer/**/router-error-boundary.tsx',
        ],
        rules: {
            'no-console': 'off',
        },
    },
    {
        files: ['**/*.{ts,tsx}'],
        plugins: {
            'react-hooks': eslintPluginReactHooks,
            'react-refresh': eslintPluginReactRefresh,
        },
        rules: {
            ...eslintPluginReactHooks.configs['recommended-latest'].rules,
            ...eslintPluginReactRefresh.configs.vite.rules,
            '@typescript-eslint/explicit-function-return-type': 'off',
            '@typescript-eslint/no-duplicate-enum-values': 'off',
            '@typescript-eslint/no-explicit-any': 'off',
            '@typescript-eslint/no-unused-vars': [
                'warn',
                {
                    argsIgnorePattern: '^_',
                    caughtErrorsIgnorePattern: '^_',
                    varsIgnorePattern: '^_',
                },
            ],
            curly: ['error', 'all'],
            indent: [
                'error',
                'tab',
                {
                    offsetTernaryExpressions: true,
                    SwitchCase: 1,
                },
            ],
            'no-unused-vars': 'off',
            'no-use-before-define': 'off',
            quotes: ['error', 'single'],
            'react-hooks/refs': 'off',
            'react-hooks/set-state-in-effect': 'off',
            'react-refresh/only-export-components': 'off',
            'react/display-name': 'off',
            semi: ['error', 'always'],
            'single-attribute-per-line': 'off',
        },
    },
    eslintConfigPrettier,
    {
        files: ['apps/android/**/*.{ts,tsx}'],
        rules: {
            // RN/Expo convention: require() for bundled assets, @ts-ignore for
            // the untyped native module surface.
            '@typescript-eslint/ban-ts-comment': 'off',
            '@typescript-eslint/explicit-function-return-type': 'off',
            '@typescript-eslint/no-require-imports': 'off',
            '@typescript-eslint/no-unused-vars': 'off',
            curly: 'off',
            indent: 'off',
            'no-console': 'error',
            'perfectionist/sort-classes': 'off',
            'perfectionist/sort-imports': 'off',
            'perfectionist/sort-interfaces': 'off',
            'perfectionist/sort-jsx-props': 'off',
            'perfectionist/sort-modules': 'off',
            'perfectionist/sort-named-imports': 'off',
            'perfectionist/sort-object-types': 'off',
            'perfectionist/sort-objects': 'off',
            'perfectionist/sort-switch-case': 'off',
            'perfectionist/sort-union-types': 'off',
            'prettier/prettier': 'off',
            quotes: 'off',
            'react-hooks/exhaustive-deps': 'off',
            'react-hooks/immutability': 'off',
            'react-hooks/preserve-manual-memoization': 'off',
            'react/prop-types': 'off',
            semi: 'off',
        },
    },
    {
        files: [
            'apps/android/App.tsx',
            'apps/android/src/utils/log.ts',
            'apps/android/src/components/ErrorBoundary.tsx',
        ],
        rules: {
            'no-console': 'off',
        },
    },
    {
        files: ['packages/core/src/**/*.ts'],
        ignores: ['**/*.test.ts'],
        rules: {
            '@typescript-eslint/explicit-function-return-type': 'off',
            '@typescript-eslint/no-unused-vars': 'off',
            curly: 'off',
            indent: 'off',
            'no-console': 'error',
            'perfectionist/sort-imports': 'off',
            'perfectionist/sort-interfaces': 'off',
            'perfectionist/sort-modules': 'off',
            'perfectionist/sort-named-imports': 'off',
            'perfectionist/sort-object-types': 'off',
            'perfectionist/sort-objects': 'off',
            'perfectionist/sort-union-types': 'off',
            'prettier/prettier': 'off',
            quotes: 'off',
            semi: 'off',
        },
    },
    {
        // Plain CommonJS build/config scripts (metro.config.js, scripts/*.js) —
        // require() is correct here, not an error.
        files: ['**/*.{js,cjs,mjs}'],
        rules: {
            '@typescript-eslint/explicit-function-return-type': 'off',
            '@typescript-eslint/no-require-imports': 'off',
        },
    },
);