Lint rules for helping to ensure best practices and hygiene when using WarpDrive.
π‘ Backwards Compatibility
For security and backwards compatibility, this Package is also available as eslint-plugin-ember-data
Rules β
- π οΈ has Autofix
- γ½οΈ has Partial Autofix
- β Recommended
- π TypeScript Aware
π·οΈ Categories
- π Helps prevent buggy code
- β‘οΈ Helps prevent performance issues
- π Enforces a best practice
| Rule | Description | π·οΈ | β¨ |
|---|---|---|---|
| no-create-record-rerender | Helps avoid patterns that often lead to excess or broken renders | πβ‘οΈ | β |
| no-invalid-relationships | Ensures the basic part of relationship configuration is setup appropriately | π | β |
| no-legacy-request-patterns | Restricts usage of deprecated or discouraged request patterns | π | β |
| no-external-request-patterns | Restricts usage of discouraged non-warp-drive request patterns | π | β |
| no-invalid-resource-types | Ensures resource types follow a conventional pattern when used in common APIs | π | β π οΈ |
| no-invalid-resource-ids | Ensures resource ids are strings when used in common APIs | π | β π οΈ |
| no-legacy-imports | Ensures imports use paths specified by the Package Unification RFC | π | β π οΈ |
| no-test-module-hooks | Disallow hooks.beforeEach/hooks.afterEach in favor of setup functions each test calls explicitly | β‘οΈ | |
| template-always-use-request-content | Ensures the result of a <Request> is actually consumed | π | |
| template-require-request-error-block | Ensures <Request>/<Await> always provide an :error block | π | |
| require-request-error-block | Ensures <Request> is always given a states.error handler | π |
Usage β
Recommended Rules are available as a flat config for easy consumption:
// eslint.config.js (flat config)
const WarpDriveRecommended = require('eslint-plugin-warp-drive/recommended');
module.exports = [
...WarpDriveRecommended,
];The template rules, template-always-use-request-content and template-require-request-error-block, are available as a separate flat config, since it also sets ember-eslint-parser as the parser for .gjs/.gts files:
// eslint.config.js (flat config)
const WarpDriveRecommended = require('eslint-plugin-warp-drive/recommended');
const WarpDriveTemplateRecommended = require('eslint-plugin-warp-drive/recommended-templates');
module.exports = [
...WarpDriveRecommended,
...WarpDriveTemplateRecommended,
];The React rule, require-request-error-block, is available as a separate flat config, since it also enables JSX parsing for .jsx/.tsx files:
// eslint.config.js (flat config)
const WarpDriveRecommended = require('eslint-plugin-warp-drive/recommended');
const WarpDriveReactRecommended = require('eslint-plugin-warp-drive/recommended-react');
module.exports = [
...WarpDriveRecommended,
...WarpDriveReactRecommended,
];The internal rule, no-test-module-hooks, encodes conventions for a large test suite like WarpDrive's own rather than for app code, so it is kept out of recommended and is available as its own flat config:
// eslint.config.js (flat config)
const WarpDriveRecommended = require('eslint-plugin-warp-drive/recommended');
const WarpDriveInternalRecommended = require('eslint-plugin-warp-drive/recommended-internal');
module.exports = [
...WarpDriveRecommended,
...WarpDriveInternalRecommended,
];Guides β
- Linting: install the plugin and enable its recommended, template and React configs.