or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

component-rules.mdcomputed-property-rules.mdember-utils.mdindex.mdlegacy-configuration.mdmigration-rules.mdmodern-configuration.mdplugin-configuration.mdroute-rules.mdservice-rules.mdtest-rules.md
tile.json

modern-configuration.mddocs/

Modern Configuration

Pre-configured rule sets optimized for modern ESLint flat config format, supporting different file types and Ember patterns with specialized handling for .gjs/.gts template files.

Capabilities

Modern Config Import

Import the modern configuration object with all presets and utilities.

/**
 * Modern ESLint flat config export
 * @module eslint-plugin-ember/recommended
 */
import eslintPluginEmber from 'eslint-plugin-ember/recommended';

interface ModernConfig {
  /** Re-export of the main plugin */
  plugin: ESLintPlugin;
  /** ember-eslint-parser for template syntax */
  parser: ESLintParser;
  /** Base configuration for .js/.ts files */
  base: FlatConfig;
  /** Configuration for .gjs files */
  gjs: FlatConfig;
  /** Configuration for .gts files */
  gts: FlatConfig;
  /** Grouped configurations object */
  configs: {
    base: FlatConfig;
    gjs: FlatConfig;
    gts: FlatConfig;
  };
}

Usage Example:

import eslintPluginEmber from 'eslint-plugin-ember/recommended';

export default [
  eslintPluginEmber.base,
  eslintPluginEmber.gjs,
  eslintPluginEmber.gts,
];

Base Configuration

Standard configuration for JavaScript and TypeScript files in Ember applications.

/**
 * Base flat config for .js/.ts files
 */
interface BaseFlatConfig {
  /** Configuration identifier */
  name: 'ember:base';
  /** File patterns to match */
  files: ['**/*.{js,ts}'];
  /** Plugin registration */
  plugins: {
    ember: ESLintPlugin;
  };
  /** Rule configuration with recommended settings */
  rules: Record<string, ESLintRuleConfig>;
}

Usage Example:

import eslintPluginEmber from 'eslint-plugin-ember/recommended';

export default [
  eslintPluginEmber.base,
  {
    // Override specific rules
    rules: {
      'ember/no-jquery': 'warn'
    }
  }
];

GJS Configuration

Specialized configuration for .gjs files (Glimmer JavaScript files with template syntax).

/**
 * Configuration for .gjs files with template support
 */
interface GJSFlatConfig {
  /** Configuration identifier */
  name: 'ember:gjs';
  /** Plugin registration */
  plugins: {
    ember: ESLintPlugin;
  };
  /** File patterns for .gjs files */
  files: ['**/*.gjs'];
  /** Language configuration */
  languageOptions: {
    /** ember-eslint-parser for template syntax */
    parser: ESLintParser;
    /** Parser configuration */
    parserOptions: {
      ecmaFeatures: { modules: true };
      ecmaVersion: 'latest';
    };
  };
  /** Processor for template handling */
  processor: 'ember/noop';
  /** Combined base rules + GJS-specific rules */
  rules: Record<string, ESLintRuleConfig>;
}

Usage Example:

import eslintPluginEmber from 'eslint-plugin-ember/recommended';

export default [
  eslintPluginEmber.base,  // For .js/.ts files
  eslintPluginEmber.gjs,   // For .gjs files
];

GTS Configuration

Specialized configuration for .gts files (Glimmer TypeScript files with template syntax).

/**
 * Configuration for .gts files with TypeScript and template support
 */
interface GTSFlatConfig {
  /** Configuration identifier */
  name: 'ember:gts';
  /** Plugin registration */
  plugins: {
    ember: ESLintPlugin;
  };
  /** File patterns for .gts files */
  files: ['**/*.gts'];
  /** Language configuration */
  languageOptions: {
    /** ember-eslint-parser for template and TypeScript syntax */
    parser: ESLintParser;
    /** Parser configuration for TypeScript */
    parserOptions: {
      extraFileExtensions: ['.gts'];
    };
  };
  /** Processor for template handling */
  processor: 'ember/noop';
  /** Combined base rules + GTS-specific rules */
  rules: Record<string, ESLintRuleConfig>;
}

Usage Example:

import eslintPluginEmber from 'eslint-plugin-ember/recommended';

export default [
  eslintPluginEmber.base,  // For .js/.ts files
  eslintPluginEmber.gts,   // For .gts files
];

Complete Configuration Setup

Full configuration combining all file type support.

/**
 * Complete modern configuration setup
 * Combines base, GJS, and GTS configurations
 */
type CompleteFlatConfig = [BaseFlatConfig, GJSFlatConfig, GTSFlatConfig];

Usage Example:

import eslintPluginEmber from 'eslint-plugin-ember/recommended';

export default [
  // Complete Ember configuration
  eslintPluginEmber.base,
  eslintPluginEmber.gjs,
  eslintPluginEmber.gts,
  
  // Custom overrides
  {
    files: ['**/*.{js,ts,gjs,gts}'],
    rules: {
      'ember/no-replace-test-comments': 'error',
      'ember/no-jquery': 'warn'
    }
  }
];

Parser and Plugin Access

Direct access to parser and plugin for custom configurations.

/**
 * Direct access to parser and plugin components
 */
interface ComponentAccess {
  /** Main eslint-plugin-ember plugin object */
  plugin: ESLintPlugin;
  /** ember-eslint-parser for .gjs/.gts files */
  parser: ESLintParser;
}

Usage Example:

import eslintPluginEmber from 'eslint-plugin-ember/recommended';

export default [
  {
    files: ['**/*.js'],
    plugins: {
      ember: eslintPluginEmber.plugin
    },
    rules: {
      'ember/no-actions-hash': 'error'
    }
  },
  {
    files: ['**/*.gjs'],
    languageOptions: {
      parser: eslintPluginEmber.parser
    },
    plugins: {
      ember: eslintPluginEmber.plugin
    },
    processor: 'ember/noop'
  }
];

Configuration Groups

Access configurations through the grouped configs object.

/**
 * Grouped configuration access
 */
interface ConfigGroups {
  configs: {
    /** Base configuration for .js/.ts files */
    base: BaseFlatConfig;
    /** GJS configuration for .gjs files */
    gjs: GJSFlatConfig;
    /** GTS configuration for .gts files */
    gts: GTSFlatConfig;
  };
}

Usage Example:

import eslintPluginEmber from 'eslint-plugin-ember/recommended';

export default [
  eslintPluginEmber.configs.base,
  eslintPluginEmber.configs.gjs,
  eslintPluginEmber.configs.gts,
];

CommonJS Modern Config

Modern configuration access through CommonJS require. Note that this returns flat config arrays.

/**
 * CommonJS access to modern flat config arrays
 * Returns: Array<FlatConfig>
 */
const eslintPluginEmberRecommended: FlatConfig[] = require('eslint-plugin-ember/configs/recommended');

Usage Example:

const eslintPluginEmberRecommended = require('eslint-plugin-ember/configs/recommended');

module.exports = [
  ...eslintPluginEmberRecommended, // Spreads the flat config array
  {
    // Additional configuration
    rules: {
      'ember/no-jquery': 'off'
    }
  }
];

Important Note: The eslint-plugin-ember/configs/* export path returns flat configuration arrays, not configuration objects. For object-based access, use the ESM import:

import eslintPluginEmber from 'eslint-plugin-ember/recommended';
// Access individual configs: eslintPluginEmber.base, eslintPluginEmber.gjs, etc.