or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

configuration-presets.mdhelpful-warnings-rules.mdindex.mdmodule-systems-rules.mdplugin-interface.mdstatic-analysis-rules.mdstyle-guide-rules.md
tile.json

configuration-presets.mddocs/

Configuration Presets

Pre-configured rule sets optimized for different environments and use cases, available in both legacy and flat configuration formats.

Capabilities

Legacy Configurations

Traditional ESLint configuration format for ESLint versions prior to v9.

/**
 * Legacy configurations object for ESLint < 9
 * @type {{ [configName: string]: Linter.LegacyConfig }}
 */
const configs = {
  recommended: LegacyConfig,
  errors: LegacyConfig,
  warnings: LegacyConfig,
  "stage-0": LegacyConfig,
  react: LegacyConfig,
  "react-native": LegacyConfig,
  electron: LegacyConfig,
  typescript: LegacyConfig
};

interface LegacyConfig {
  plugins: string[];
  rules: { [ruleName: string]: RuleConfig };
  parserOptions?: {
    sourceType: "module" | "script";
    ecmaVersion: number;
  };
  extends?: string[];
  env?: { [envName: string]: boolean };
  settings?: { [settingName: string]: any };
}

Flat Configurations

Modern ESLint configuration format for ESLint v9 and later.

/**
 * Flat configurations object for ESLint >= 9
 * @type {{ [configName: string]: Linter.FlatConfig }}
 */
const flatConfigs = {
  recommended: FlatConfig,
  errors: FlatConfig,
  warnings: FlatConfig,
  react: FlatConfig,
  "react-native": FlatConfig,
  electron: FlatConfig,
  typescript: FlatConfig
  // Note: stage-0 config not available in flat format
};

interface FlatConfig {
  name: string;
  plugins: { [pluginName: string]: any };
  rules: { [ruleName: string]: RuleConfig };
  languageOptions?: {
    sourceType: "module" | "script";
    ecmaVersion: number;
    parser?: any;
    parserOptions?: any;
  };
  settings?: { [settingName: string]: any };
}

Configuration Details

recommended

Essential rules for import/export validation - the baseline configuration for most projects.

/**
 * Recommended configuration with essential import/export rules
 */
// Legacy format
const recommendedLegacy = {
  plugins: ["import"],
  rules: {
    // Static analysis/correctness  
    "import/no-unresolved": "error",
    "import/named": "error",
    "import/namespace": "error", 
    "import/default": "error",
    "import/export": "error",
    
    // Red flags (warnings)
    "import/no-named-as-default": "warn",
    "import/no-named-as-default-member": "warn", 
    "import/no-duplicates": "warn"
  },
  parserOptions: {
    sourceType: "module",
    ecmaVersion: 2018
  }
};

// Flat format  
const recommendedFlat = {
  name: "import/recommended",
  plugins: { import: importPlugin },
  rules: {
    "import/no-unresolved": "error",
    "import/named": "error",
    "import/namespace": "error",
    "import/default": "error", 
    "import/export": "error",
    "import/no-named-as-default": "warn",
    "import/no-named-as-default-member": "warn",
    "import/no-duplicates": "warn"
  },
  languageOptions: {
    ecmaVersion: 2018,
    sourceType: "module"
  }
};

Usage Examples:

// Legacy ESLint config
module.exports = {
  extends: ["plugin:import/recommended"]
};

// Flat ESLint config  
import importPlugin from "eslint-plugin-import";
export default [importPlugin.flatConfigs.recommended];

errors

Configuration with only error-level rules, focusing on critical import issues.

/**
 * Errors-only configuration focusing on critical issues
 */
const errorsConfig = {
  // Legacy format
  plugins: ["import"],
  rules: {
    "import/no-unresolved": "error",
    "import/named": "error",
    "import/namespace": "error",
    "import/default": "error",
    "import/export": "error"
  },
  parserOptions: {
    sourceType: "module",
    ecmaVersion: 2018
  }
};

warnings

Configuration with only warning-level rules for less critical issues.

/**
 * Warnings-only configuration for less critical issues
 */
const warningsConfig = {
  // Legacy format
  plugins: ["import"],
  rules: {
    "import/no-named-as-default": "warn",
    "import/no-named-as-default-member": "warn",
    "import/no-duplicates": "warn"
  },
  parserOptions: {
    sourceType: "module", 
    ecmaVersion: 2018
  }
};

stage-0

Experimental "work in progress" rules not yet ready for production use.

/**
 * Stage-0 configuration with experimental rules
 */
const stage0Config = {
  // Legacy format
  plugins: ["import"],
  rules: {
    "import/no-deprecated": "warn"
  },
  parserOptions: {
    sourceType: "module",
    ecmaVersion: 2018
  }
};

react

Configuration optimized for React projects with additional React-specific rules.

/**
 * React-optimized configuration
 */
const reactConfig = {
  // Legacy format
  plugins: ["import"],
  rules: {
    // All recommended rules
    "import/no-unresolved": "error",
    "import/named": "error",
    "import/namespace": "error",
    "import/default": "error",
    "import/export": "error",
    "import/no-named-as-default": "warn",
    "import/no-named-as-default-member": "warn",
    "import/no-duplicates": "warn",
    
    // React-specific additions
    "import/no-anonymous-default-export": "error"
  },
  parserOptions: {
    sourceType: "module",
    ecmaVersion: 2018,
    ecmaFeatures: {
      jsx: true
    }
  },
  env: {
    es6: true
  }
};

react-native

Configuration for React Native projects with mobile-specific considerations.

/**
 * React Native configuration
 */
const reactNativeConfig = {
  // Legacy format
  plugins: ["import"],
  rules: {
    // All React rules
    "import/no-unresolved": "error",
    "import/named": "error", 
    "import/namespace": "error",
    "import/default": "error",
    "import/export": "error",
    "import/no-named-as-default": "warn",
    "import/no-named-as-default-member": "warn",
    "import/no-duplicates": "warn",
    "import/no-anonymous-default-export": "error",
    
    // React Native specific  
    "import/no-nodejs-modules": "error"
  },
  parserOptions: {
    sourceType: "module",
    ecmaVersion: 2018,
    ecmaFeatures: {
      jsx: true
    }
  },
  env: {
    es6: true
  }
};

electron

Configuration for Electron applications supporting both main and renderer processes.

/**
 * Electron configuration for main and renderer processes
 */
const electronConfig = {
  // Legacy format
  plugins: ["import"],
  rules: {
    // All recommended rules
    "import/no-unresolved": "error",
    "import/named": "error",
    "import/namespace": "error", 
    "import/default": "error",
    "import/export": "error",
    "import/no-named-as-default": "warn",
    "import/no-named-as-default-member": "warn",
    "import/no-duplicates": "warn"
    
    // Note: Node.js modules allowed for main process
    // Renderer process may need additional restrictions
  },
  parserOptions: {
    sourceType: "module",
    ecmaVersion: 2018
  },
  env: {
    node: true,
    es6: true
  }
};

typescript

Configuration optimized for TypeScript projects with type-aware rules.

/**
 * TypeScript-optimized configuration
 */
const typescriptConfig = {
  // Legacy format
  plugins: ["import"],
  rules: {
    // All recommended rules
    "import/no-unresolved": "error",
    "import/named": "error",
    "import/namespace": "error",
    "import/default": "error", 
    "import/export": "error",
    "import/no-named-as-default": "warn",
    "import/no-named-as-default-member": "warn",
    "import/no-duplicates": "warn",
    
    // TypeScript-specific
    "import/consistent-type-specifier-style": ["error", "prefer-inline"]
  },
  parserOptions: {
    sourceType: "module",
    ecmaVersion: 2018
  },
  settings: {
    "import/extensions": [".js", ".jsx", ".ts", ".tsx"],
    "import/parsers": {
      "@typescript-eslint/parser": [".ts", ".tsx"]
    },
    "import/resolver": {
      typescript: {
        alwaysTryTypes: true
      }
    }
  }
};

Usage Examples

Using Preset Configurations

// Legacy ESLint config - single preset
module.exports = {
  extends: ["plugin:import/recommended"]
};

// Legacy ESLint config - multiple presets
module.exports = {
  extends: [
    "plugin:import/recommended",
    "plugin:import/typescript"
  ]
};

// Flat ESLint config - single preset
import importPlugin from "eslint-plugin-import";
export default [
  importPlugin.flatConfigs.recommended
];

// Flat ESLint config - multiple presets
export default [
  importPlugin.flatConfigs.recommended,
  importPlugin.flatConfigs.typescript
];

Customizing Preset Configurations

// Legacy config with customizations
module.exports = {
  extends: ["plugin:import/recommended"],  
  rules: {
    // Override preset rules
    "import/no-unresolved": "warn", // Change from error to warn
    "import/order": ["error", {     // Add additional rule
      "newlines-between": "always"
    }]
  }
};

// Flat config with customizations
import importPlugin from "eslint-plugin-import";
export default [{
  ...importPlugin.flatConfigs.recommended,
  rules: {
    ...importPlugin.flatConfigs.recommended.rules,
    "import/no-unresolved": "warn",
    "import/order": ["error", { "newlines-between": "always" }]
  }
}];

Environment-Specific Configurations

// Multi-environment project
export default [
  // Base config for all files
  {
    ...importPlugin.flatConfigs.recommended,
    files: ["src/**/*.{js,ts}"]
  },
  
  // Node.js specific (server files)
  {
    ...importPlugin.flatConfigs.recommended,
    files: ["server/**/*.js"],
    rules: {
      ...importPlugin.flatConfigs.recommended.rules,
      "import/no-nodejs-modules": "off" // Allow Node.js modules
    }
  },
  
  // React specific (client files)  
  {
    ...importPlugin.flatConfigs.react,
    files: ["src/components/**/*.{js,jsx,ts,tsx}"]
  },
  
  // TypeScript specific
  {
    ...importPlugin.flatConfigs.typescript,
    files: ["**/*.{ts,tsx}"]
  }
];

Configuration Inheritance

// Custom configuration extending presets
const customConfig = {
  ...importPlugin.flatConfigs.recommended,
  name: "custom-import-config",
  rules: {
    ...importPlugin.flatConfigs.recommended.rules,
    ...importPlugin.flatConfigs.typescript.rules,
    // Additional custom rules
    "import/order": ["error", {
      "groups": ["builtin", "external", "internal", "parent", "sibling"],
      "newlines-between": "always",
      "alphabetize": { "order": "asc" }
    }]
  }
};

export default [customConfig];