CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-eslint-plugin-ember

ESLint plugin for Ember.js apps providing 97 specialized linting rules based on commonly known good practices in the Ember ecosystem

Pending
Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Pending

The risk profile of this skill

Overview
Eval results
Files

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.

docs

component-rules.md

computed-property-rules.md

ember-utils.md

index.md

legacy-configuration.md

migration-rules.md

modern-configuration.md

plugin-configuration.md

route-rules.md

service-rules.md

test-rules.md

tile.json