diff --git a/.claude/rules/plugins.md b/.claude/rules/plugins.md index 4dc52d88f..49b650bbd 100644 --- a/.claude/rules/plugins.md +++ b/.claude/rules/plugins.md @@ -6,7 +6,7 @@ paths: # Plugin system -94 built-in plugins implementing the `Plugin` trait with enablers (package.json detection), static patterns, and optional `resolve_config()` for AST-based config parsing. +95 built-in plugins implementing the `Plugin` trait with enablers (package.json detection), static patterns, and optional `resolve_config()` for AST-based config parsing. ## Rich config parsing (16 plugins) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4d3841667..bfc773898 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Added + +- **Ember.js / Glimmer / Embroider plugin.** New built-in plugin activates on `ember-source`, `ember-cli`, `@embroider/core`, `@embroider/compat`, or `@glimmer/component`. Whitelists the build- / CLI- / runtime-resolved tooling that no source file imports (`ember-source` itself, `ember-cli`, `ember-cli-htmlbars`, `ember-cli-babel`, `ember-auto-import`, `@embroider/core`, `@glint/core` + the two glint environment shims, `ember-cli-test-loader`, `ember-exam`, `ember-template-lint`, `ember-template-imports`, `@ember/optional-features`, `loader.js`, ...) so those packages do not surface as `unused-dependency`. Packages a modern Ember app imports directly (`@glimmer/component`, `@glimmer/tracking`, `@ember-data/*`, `@embroider/{compat,webpack,vite,addon-shim,macros,router,test-setup}`, `@glint/template`, `@ember/test-helpers`, `ember-qunit`, `qunit`, `qunit-dom`, `ember-load-initializers`, `ember-resolver`, ...) are deliberately omitted; the normal import graph credits them, and listing them in the tooling allowlist would mask real removals when a user drops the dependency. Declares scoped used-class-member rules for `Component`, `Route`, `Controller`, `Service`, `Helper`, `Modifier`, `Application`, and `Router` so framework-invoked lifecycle methods (`model`, `setupController`, `compute`, `modify`, `willDestroy`, `didInsertElement`, ...) are not flagged as unused on subclasses. Exposes Ember's classic-layout filesystem conventions (`app/components/**`, `app/routes/**`, `app/services/**`, `addon/**`, `tests/**/*-test.{js,ts,gjs,gts}`, `config/`, `ember-cli-build.js`, `testem.js`) as entry-point globs since the Ember resolver loads those modules by convention rather than via static `import`. `.gts` / `.gjs` single-file components were already parseable thanks to the existing `