From 5fe14942f270eb3da35fb1ec64cdae1c43cfec06 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 16 Feb 2026 22:06:17 +0000 Subject: [PATCH 1/8] Initial plan From 50fba8654be46abaa38b4d04a2cc3ea169b0dcb7 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 16 Feb 2026 22:08:16 +0000 Subject: [PATCH 2/8] Add RFC for including @e18e/eslint-plugin in blueprints Co-authored-by: NullVoxPopuli <199018+NullVoxPopuli@users.noreply.github.com> --- ...00-add-e18e-eslint-plugin-to-blueprints.md | 128 ++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 text/0000-add-e18e-eslint-plugin-to-blueprints.md diff --git a/text/0000-add-e18e-eslint-plugin-to-blueprints.md b/text/0000-add-e18e-eslint-plugin-to-blueprints.md new file mode 100644 index 0000000000..808e8a5a2c --- /dev/null +++ b/text/0000-add-e18e-eslint-plugin-to-blueprints.md @@ -0,0 +1,128 @@ +--- +stage: accepted +start-date: 2026-02-16T00:00:00.000Z +release-date: # In format YYYY-MM-DDT00:00:00.000Z +release-versions: +teams: + - cli +prs: + accepted: # Fill this in with the URL for the Proposal RFC PR +project-link: +suite: +--- + +# Add @e18e/eslint-plugin to Blueprints' Lint Configs + +## Summary + +Add https://github.com/e18e/eslint-plugin to the app and addon blueprints' ESLint configurations using the recommended rules. + +## Motivation + +The @e18e/eslint-plugin provides modern JavaScript/TypeScript best practices focused on code modernization, performance improvements, and recommended module replacements. By including this plugin in the default blueprints, new Ember applications and addons will benefit from: + +- **Code Modernization**: Automatic suggestions to use newer JavaScript APIs (e.g., `Array.prototype.at()`, `Array.prototype.includes()`, etc.) that improve code readability and often performance +- **Performance Improvements**: Detection of patterns that can be optimized for better runtime performance +- **Module Replacements**: Recommendations for community-preferred alternatives to popular libraries, focused on bundle size and performance +- **Consistency**: All new Ember projects start with the same modern coding standards, helping teams maintain consistency across the ecosystem + +This aligns with Ember's commitment to shipping apps with modern JavaScript patterns and helping developers write high-quality, performant code by default. + +## Detailed design + +1. Add `@e18e/eslint-plugin` as a dev dependency to the app blueprint +2. Add `@e18e/eslint-plugin` as a dev dependency to the addon blueprint +3. Update the ESLint configuration in both blueprints to include the recommended rules from the plugin + +### Implementation Steps: + +**For the app blueprint:** +- Add `"@e18e/eslint-plugin": "^"` to the `devDependencies` in `blueprints/app/files/package.json` +- Update the ESLint config (typically in the blueprint's ESLint configuration file) to extend or include the `@e18e/eslint-plugin/recommended` configuration + +**For the addon blueprint:** +- Similar to the app blueprint, add the dependency and configure ESLint to use the plugin's recommended rules +- This would be done in a manner similar to how `eslint-plugin-ember` is currently added to addon blueprints + +### Configuration Example: + +The ESLint configuration would include the e18e plugin: + +```js +import e18e from '@e18e/eslint-plugin'; + +export default [ + // ... other configs + e18e.configs.recommended, + // ... project-specific overrides +]; +``` + +### Phased Rollout: + +The plugin could be introduced with warnings initially, then gradually moved to errors as the ecosystem adopts the patterns. This follows the same pattern used for other linting rules in Ember CLI. + +## How we teach this + +### Documentation Updates: + +1. **Ember CLI Guides**: Add a section explaining the @e18e/eslint-plugin and its purpose in the default linting setup +2. **Linting Guide**: Update the linting documentation to mention the e18e rules alongside existing ESLint and template-lint documentation +3. **Migration Guide**: For existing projects, provide instructions on how to add the plugin manually + +### Teaching Strategy: + +The @e18e/eslint-plugin should be taught as a natural extension of Ember's existing linting infrastructure, similar to how `eslint-plugin-ember` is currently positioned. Key points: + +- The plugin helps developers write modern, performant JavaScript code +- It's part of Ember's commitment to shipping modern applications +- The rules are auto-fixable in many cases, reducing friction +- Developers can disable specific rules if they conflict with project requirements + +### Communication: + +- Blog post announcing the addition, explaining the benefits and showing examples +- Include in Ember CLI release notes +- Highlight the auto-fix capabilities to reduce the learning burden + +### For New Users: + +New users would naturally encounter these rules as they develop, with helpful error messages and suggestions. The experience would be similar to learning ESLint rules for the first time - the linter guides them toward better patterns. + +### For Existing Users: + +Existing projects would not be affected unless they upgrade their blueprints or manually add the plugin. Documentation would help teams evaluate whether to adopt it in existing codebases. + +## Drawbacks + +- **Additional dependency**: Adds another package to the dependency tree, though the size impact should be minimal +- **More linting messages**: Developers may see additional linting warnings/errors, especially in projects with older code patterns +- **Learning curve**: Developers need to understand another set of linting rules +- **Rule conflicts**: Potential for conflicts with existing project-specific ESLint rules or team preferences +- **Breaking changes**: As the @e18e/eslint-plugin evolves, rule updates could introduce new warnings/errors in projects +- **Ecosystem maturity**: The plugin is relatively new compared to established tools like eslint-plugin-ember + +## Alternatives + +### Do Nothing +Continue with the current default linting setup, letting developers add @e18e/eslint-plugin manually if desired. This avoids the drawbacks but also means new projects miss out on modern best practices by default. + +### Add as Optional Addon +Create an optional addon or blueprint flag that allows developers to opt-in during project creation. This reduces friction for those who don't want the additional rules but may lead to fragmentation in the ecosystem. + +### Use Individual Rules +Instead of the full plugin, cherry-pick specific rules that align most closely with Ember's goals. This provides more control but requires ongoing maintenance to evaluate new rules. + +### Wait for Broader Adoption +Delay adding the plugin to blueprints until it sees wider adoption in the JavaScript ecosystem. This reduces risk but means Ember projects lag behind modern best practices. + +### Create Ember-Specific Plugin +Develop an Ember-specific linting plugin that incorporates similar modernization rules tailored to the Ember ecosystem. This would provide more control but requires significant development and maintenance effort. + +## Unresolved questions + +- What version of @e18e/eslint-plugin should be included initially? +- Should any specific rules be disabled or configured differently for Ember projects? +- Should the rules be set to "warn" or "error" by default? +- How should this interact with existing TypeScript ESLint configurations in apps that use TypeScript? +- Should there be a way to opt-out during project generation? From ec984c2f517d4b6aab6450badc6438740accb839 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 16 Feb 2026 22:09:04 +0000 Subject: [PATCH 3/8] Address code review feedback - clarify version guidance Co-authored-by: NullVoxPopuli <199018+NullVoxPopuli@users.noreply.github.com> --- text/0000-add-e18e-eslint-plugin-to-blueprints.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/text/0000-add-e18e-eslint-plugin-to-blueprints.md b/text/0000-add-e18e-eslint-plugin-to-blueprints.md index 808e8a5a2c..ab7e883ba2 100644 --- a/text/0000-add-e18e-eslint-plugin-to-blueprints.md +++ b/text/0000-add-e18e-eslint-plugin-to-blueprints.md @@ -37,7 +37,7 @@ This aligns with Ember's commitment to shipping apps with modern JavaScript patt ### Implementation Steps: **For the app blueprint:** -- Add `"@e18e/eslint-plugin": "^"` to the `devDependencies` in `blueprints/app/files/package.json` +- Add `"@e18e/eslint-plugin"` to the `devDependencies` in `blueprints/app/files/package.json` using the latest stable version at the time of implementation - Update the ESLint config (typically in the blueprint's ESLint configuration file) to extend or include the `@e18e/eslint-plugin/recommended` configuration **For the addon blueprint:** From d4419402ebeabb2774ce94a0db1e782d95f12c26 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 16 Feb 2026 22:38:16 +0000 Subject: [PATCH 4/8] Address feedback: simplify RFC, add JSON linting config, remove unnecessary sections Co-authored-by: NullVoxPopuli <199018+NullVoxPopuli@users.noreply.github.com> --- ...00-add-e18e-eslint-plugin-to-blueprints.md | 62 +++++++------------ 1 file changed, 23 insertions(+), 39 deletions(-) diff --git a/text/0000-add-e18e-eslint-plugin-to-blueprints.md b/text/0000-add-e18e-eslint-plugin-to-blueprints.md index ab7e883ba2..7e0a7c396f 100644 --- a/text/0000-add-e18e-eslint-plugin-to-blueprints.md +++ b/text/0000-add-e18e-eslint-plugin-to-blueprints.md @@ -46,83 +46,67 @@ This aligns with Ember's commitment to shipping apps with modern JavaScript patt ### Configuration Example: -The ESLint configuration would include the e18e plugin: +The ESLint configuration would include the e18e plugin. Additionally, the e18e plugin includes rules that can lint `package.json` files (e.g., `ban-dependencies`), so we should configure JSON linting support: ```js import e18e from '@e18e/eslint-plugin'; - -export default [ +import json from '@eslint/json'; +import {defineConfig} from 'eslint/config'; + +export default defineConfig([ + { + files: ['package.json'], + language: 'json/json', + plugins: { + e18e, + json + }, + extends: ['e18e/recommended'], + }, // ... other configs e18e.configs.recommended, // ... project-specific overrides -]; +]); ``` -### Phased Rollout: - -The plugin could be introduced with warnings initially, then gradually moved to errors as the ecosystem adopts the patterns. This follows the same pattern used for other linting rules in Ember CLI. - ## How we teach this ### Documentation Updates: -1. **Ember CLI Guides**: Add a section explaining the @e18e/eslint-plugin and its purpose in the default linting setup -2. **Linting Guide**: Update the linting documentation to mention the e18e rules alongside existing ESLint and template-lint documentation -3. **Migration Guide**: For existing projects, provide instructions on how to add the plugin manually +Documentation updates for this feature would require new pages in the ember-learn/guides-source repository, as there is currently no comprehensive explanation of Ember's approach to linting. These documentation pages would be valuable to have but are outside the scope of this RFC: + +1. **Ember CLI Guides**: Would benefit from a section explaining the @e18e/eslint-plugin and its purpose in the default linting setup +2. **Linting Guide**: Could include documentation about the e18e rules alongside existing ESLint and template-lint documentation +3. **Migration Guide**: For existing projects, could provide instructions on how to add the plugin manually ### Teaching Strategy: -The @e18e/eslint-plugin should be taught as a natural extension of Ember's existing linting infrastructure, similar to how `eslint-plugin-ember` is currently positioned. Key points: +The @e18e/eslint-plugin should be taught as a natural extension of Ember's existing linting infrastructure, similar to how `eslint-plugin-ember` is currently positioned. The recommended set of eslint rules provides a good signal to users starting new projects about how they should maintain their apps and libraries. Key points: - The plugin helps developers write modern, performant JavaScript code - It's part of Ember's commitment to shipping modern applications - The rules are auto-fixable in many cases, reducing friction - Developers can disable specific rules if they conflict with project requirements -### Communication: - -- Blog post announcing the addition, explaining the benefits and showing examples -- Include in Ember CLI release notes -- Highlight the auto-fix capabilities to reduce the learning burden - ### For New Users: New users would naturally encounter these rules as they develop, with helpful error messages and suggestions. The experience would be similar to learning ESLint rules for the first time - the linter guides them toward better patterns. ### For Existing Users: -Existing projects would not be affected unless they upgrade their blueprints or manually add the plugin. Documentation would help teams evaluate whether to adopt it in existing codebases. +Existing projects would not be affected unless they upgrade their blueprints or manually add the plugin. Users' processes would be unchanged from normal—most developers already customize their lint configurations and would need to evaluate any changes carefully as they normally do when updating dependencies or adopting new tooling. ## Drawbacks - **Additional dependency**: Adds another package to the dependency tree, though the size impact should be minimal - **More linting messages**: Developers may see additional linting warnings/errors, especially in projects with older code patterns - **Learning curve**: Developers need to understand another set of linting rules -- **Rule conflicts**: Potential for conflicts with existing project-specific ESLint rules or team preferences -- **Breaking changes**: As the @e18e/eslint-plugin evolves, rule updates could introduce new warnings/errors in projects -- **Ecosystem maturity**: The plugin is relatively new compared to established tools like eslint-plugin-ember ## Alternatives ### Do Nothing Continue with the current default linting setup, letting developers add @e18e/eslint-plugin manually if desired. This avoids the drawbacks but also means new projects miss out on modern best practices by default. -### Add as Optional Addon -Create an optional addon or blueprint flag that allows developers to opt-in during project creation. This reduces friction for those who don't want the additional rules but may lead to fragmentation in the ecosystem. - -### Use Individual Rules -Instead of the full plugin, cherry-pick specific rules that align most closely with Ember's goals. This provides more control but requires ongoing maintenance to evaluate new rules. - -### Wait for Broader Adoption -Delay adding the plugin to blueprints until it sees wider adoption in the JavaScript ecosystem. This reduces risk but means Ember projects lag behind modern best practices. - -### Create Ember-Specific Plugin -Develop an Ember-specific linting plugin that incorporates similar modernization rules tailored to the Ember ecosystem. This would provide more control but requires significant development and maintenance effort. - ## Unresolved questions -- What version of @e18e/eslint-plugin should be included initially? -- Should any specific rules be disabled or configured differently for Ember projects? -- Should the rules be set to "warn" or "error" by default? -- How should this interact with existing TypeScript ESLint configurations in apps that use TypeScript? -- Should there be a way to opt-out during project generation? +None. This RFC proposes using the latest version of @e18e/eslint-plugin with its recommended configuration and default settings. Developers can manually remove the plugin by deleting the relevant lines from their configuration if they prefer not to use it. From ab51a19051ea47ff1c2d25fd8199ede78d297535 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 16 Feb 2026 22:39:19 +0000 Subject: [PATCH 5/8] Fix ESLint flat config format in example Co-authored-by: NullVoxPopuli <199018+NullVoxPopuli@users.noreply.github.com> --- ...00-add-e18e-eslint-plugin-to-blueprints.md | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/text/0000-add-e18e-eslint-plugin-to-blueprints.md b/text/0000-add-e18e-eslint-plugin-to-blueprints.md index 7e0a7c396f..ae17c211c3 100644 --- a/text/0000-add-e18e-eslint-plugin-to-blueprints.md +++ b/text/0000-add-e18e-eslint-plugin-to-blueprints.md @@ -51,22 +51,27 @@ The ESLint configuration would include the e18e plugin. Additionally, the e18e p ```js import e18e from '@e18e/eslint-plugin'; import json from '@eslint/json'; -import {defineConfig} from 'eslint/config'; -export default defineConfig([ +export default [ + // Enable e18e rules for all JavaScript/TypeScript files + e18e.configs.recommended, + + // Enable JSON linting with e18e rules for package.json { files: ['package.json'], language: 'json/json', + ...json.configs.recommended, plugins: { e18e, - json }, - extends: ['e18e/recommended'], + rules: { + // e18e rules that apply to package.json + ...e18e.configs.recommended.rules, + } }, - // ... other configs - e18e.configs.recommended, - // ... project-specific overrides -]); + + // ... other project-specific configs +]; ``` ## How we teach this From 9aaab99a683e34c7e544ab579bf77c568e30e9e1 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 16 Feb 2026 22:40:01 +0000 Subject: [PATCH 6/8] Fix ESLint capitalization for consistency Co-authored-by: NullVoxPopuli <199018+NullVoxPopuli@users.noreply.github.com> --- text/0000-add-e18e-eslint-plugin-to-blueprints.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/text/0000-add-e18e-eslint-plugin-to-blueprints.md b/text/0000-add-e18e-eslint-plugin-to-blueprints.md index ae17c211c3..f568beb3a9 100644 --- a/text/0000-add-e18e-eslint-plugin-to-blueprints.md +++ b/text/0000-add-e18e-eslint-plugin-to-blueprints.md @@ -86,7 +86,7 @@ Documentation updates for this feature would require new pages in the ember-lear ### Teaching Strategy: -The @e18e/eslint-plugin should be taught as a natural extension of Ember's existing linting infrastructure, similar to how `eslint-plugin-ember` is currently positioned. The recommended set of eslint rules provides a good signal to users starting new projects about how they should maintain their apps and libraries. Key points: +The @e18e/eslint-plugin should be taught as a natural extension of Ember's existing linting infrastructure, similar to how `eslint-plugin-ember` is currently positioned. The recommended set of ESLint rules provides a good signal to users starting new projects about how they should maintain their apps and libraries. Key points: - The plugin helps developers write modern, performant JavaScript code - It's part of Ember's commitment to shipping modern applications From 2e3a37ebe63757547376944732f269707c5df94d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 16 Feb 2026 22:42:32 +0000 Subject: [PATCH 7/8] Remove migration guide bullet point from documentation section Co-authored-by: NullVoxPopuli <199018+NullVoxPopuli@users.noreply.github.com> --- text/0000-add-e18e-eslint-plugin-to-blueprints.md | 1 - 1 file changed, 1 deletion(-) diff --git a/text/0000-add-e18e-eslint-plugin-to-blueprints.md b/text/0000-add-e18e-eslint-plugin-to-blueprints.md index f568beb3a9..6ebcfcd853 100644 --- a/text/0000-add-e18e-eslint-plugin-to-blueprints.md +++ b/text/0000-add-e18e-eslint-plugin-to-blueprints.md @@ -82,7 +82,6 @@ Documentation updates for this feature would require new pages in the ember-lear 1. **Ember CLI Guides**: Would benefit from a section explaining the @e18e/eslint-plugin and its purpose in the default linting setup 2. **Linting Guide**: Could include documentation about the e18e rules alongside existing ESLint and template-lint documentation -3. **Migration Guide**: For existing projects, could provide instructions on how to add the plugin manually ### Teaching Strategy: From a1c625045a3c1223c725b80aa9b968d808381c05 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 16 Feb 2026 22:45:17 +0000 Subject: [PATCH 8/8] Remove learning curve drawback - e18e provides clear actionable messages Co-authored-by: NullVoxPopuli <199018+NullVoxPopuli@users.noreply.github.com> --- text/0000-add-e18e-eslint-plugin-to-blueprints.md | 1 - 1 file changed, 1 deletion(-) diff --git a/text/0000-add-e18e-eslint-plugin-to-blueprints.md b/text/0000-add-e18e-eslint-plugin-to-blueprints.md index 6ebcfcd853..654b064617 100644 --- a/text/0000-add-e18e-eslint-plugin-to-blueprints.md +++ b/text/0000-add-e18e-eslint-plugin-to-blueprints.md @@ -104,7 +104,6 @@ Existing projects would not be affected unless they upgrade their blueprints or - **Additional dependency**: Adds another package to the dependency tree, though the size impact should be minimal - **More linting messages**: Developers may see additional linting warnings/errors, especially in projects with older code patterns -- **Learning curve**: Developers need to understand another set of linting rules ## Alternatives