What problem does it solve?
Discourse's linter enforces only part of the frontend style rules, leaving private-symbol naming, class member ordering, comment quality, and template invocation ordering inconsistent across JavaScript, TypeScript, and Glimmer code in core, plugins, and themes.
Core Features & Use Cases
- Private-symbol pattern: Decides between
#, unprefixed, and _ members based on decorators, template binding, and cross-class access scope.
- Member and invocation ordering: Orders class members beyond the lint buckets and groups attributes,
@arguments, and modifiers on component invocations in .gjs/.gts files.
- Comment necessity gate: Deletes redundant or drifting comments, fixes blank lines before documented fields, and avoids in-template comments that break
ember-eslint-parser scope analysis.
- Use Case: When preparing a commit that adds a new Glimmer component, run through the steps to place members correctly, rename mis-prefixed privates, prune comments, and finish with
bin/lint --fix.
Quick Start
Review the frontend files I just changed and apply the Discourse conventions for private symbols, member ordering, comments, and invocation ordering, then run bin/lint --fix.