@sun-asterisk/sunlint
Version: 
☀️ SunLint - Multi-language static analysis tool for code quality and security | Sun* Engineering Standards
126 lines (118 loc) • 4.03 kB
JavaScript
// ESLint Flat Configuration for SunLint (ESLint v9+)
// Following Rule C005: Single responsibility - ESLint configuration
const typescriptParser = require('@typescript-eslint/parser');
const typescriptPlugin = require('@typescript-eslint/eslint-plugin');
const customPlugin = require('./eslint-plugin-custom');
module.exports = [
  {
    files: ['**/*.{js,ts,tsx,jsx}'],
    languageOptions: {
      parser: typescriptParser,
      parserOptions: {
        ecmaVersion: 2022,
        sourceType: 'module',
        project: './tsconfig.json'
      },
      globals: {
        console: 'readonly',
        process: 'readonly',
        eval: 'readonly',
        Buffer: 'readonly',
        __dirname: 'readonly',
        __filename: 'readonly',
        exports: 'writable',
        module: 'writable',
        require: 'readonly',
        global: 'readonly'
      }
    },
    plugins: {
      'custom': customPlugin,
      '@typescript-eslint': typescriptPlugin
    },
    rules: {
      // Rule C019: No console.error for non-critical errors
      'no-console': ['warn', { allow: ['warn', 'log'] }],
      
      // Code quality rules
      'no-unused-vars': 'warn',
      'prefer-const': 'warn',
      'no-var': 'error',
      'no-undef': 'warn',
      
      // Rule C005: Single responsibility principle
      'max-lines-per-function': ['warn', { max: 50 }],
      'complexity': ['warn', { max: 10 }],
      
      // Rule C014: Avoid direct new instantiation patterns
      'no-new': 'warn',
      
      // Security and best practices
      'no-eval': 'error',
      'no-implied-eval': 'error',
      'no-new-func': 'error',
      'eqeqeq': 'error',
      'curly': 'error',
      
      // Quality rules (dynamic loading based on category)
      'custom/c002': 'off',
      'custom/c003': 'off',
      'custom/c006': 'off',
      'custom/c010': 'off',
      'custom/c013': 'off',
      'custom/c014': 'off',
      'custom/c017': 'off',
      'custom/c018': 'off',
      'custom/c023': 'off',
      'custom/c027': 'off',
      'custom/c029': 'off',
      'custom/c030': 'off',
      'custom/c034': 'off',
      'custom/c035': 'off',
      'custom/c041': 'off',
      'custom/c042': 'off',
      'custom/c043': 'off',
      'custom/c047': 'off',
      'custom/c048': 'off',
      
      // Security rules (dynamic loading based on category)
      'custom/typescript_s003': 'off',
      'custom/typescript_s005': 'off',
      'custom/typescript_s006': 'off',
      'custom/typescript_s008': 'off',
      'custom/typescript_s009': 'off',
      'custom/typescript_s010': 'off',
      'custom/typescript_s011': 'off',
      'custom/typescript_s012': 'off',
      'custom/typescript_s014': 'off',
      'custom/typescript_s015': 'off',
      'custom/typescript_s016': 'off',
      'custom/typescript_s017': 'off',
      'custom/typescript_s018': 'off',
      'custom/typescript_s019': 'off',
      'custom/typescript_s020': 'off',
      'custom/typescript_s022': 'off',
      'custom/typescript_s023': 'off',
      'custom/typescript_s025': 'off',
      'custom/typescript_s026': 'off',
      'custom/typescript_s027': 'off',
      'custom/typescript_s029': 'off',
      'custom/typescript_s030': 'off',
      'custom/typescript_s033': 'off',
      'custom/typescript_s034': 'off',
      'custom/typescript_s035': 'off',
      'custom/typescript_s036': 'off',
      'custom/typescript_s037': 'off',
      'custom/typescript_s038': 'off',
      'custom/typescript_s039': 'off',
      'custom/typescript_s041': 'off',
      'custom/typescript_s042': 'off',
      'custom/typescript_s043': 'off',
      'custom/typescript_s044': 'off',
      'custom/typescript_s045': 'off',
      'custom/typescript_s046': 'off',
      'custom/typescript_s047': 'off',
      'custom/typescript_s048': 'off',
      'custom/typescript_s050': 'off',
      'custom/typescript_s052': 'off',
      'custom/typescript_s054': 'off',
      'custom/typescript_s055': 'off',
      'custom/typescript_s057': 'off',
      'custom/typescript_s058': 'off'
    }
  }
];