https://github.com/cdklabs/eslint-rules
https://github.com/cdklabs/eslint-rules
Last synced: about 2 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/cdklabs/eslint-rules
- Owner: cdklabs
- License: apache-2.0
- Created: 2024-10-03T13:42:36.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2026-04-20T18:41:16.000Z (about 2 months ago)
- Last Synced: 2026-04-20T20:34:22.625Z (about 2 months ago)
- Language: TypeScript
- Size: 985 KB
- Stars: 3
- Watchers: 9
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# eslint-plugin-cdk
Eslint plugin for the CDK repository. Contains rules that need to be applied specific to the CDK repository.
## Rules
* `invalid-cfn-imports`: Ensures that imports of `Cfn` L1 resources come from the stable
`aws-cdk-lib` package and not the alpha packages. Rule only applies to alpha modules.
* `no-core-construct`: Forbid the use of `Construct` and `IConstruct` from the "@aws-cdk/core" module.
Instead use `Construct` and `IConstruct` from the "constructs" module.
Rule only applies to typescript files under the `test/` folder.
* `no-invalid-path`: Checks paths specified using `path.join()` for validity, including not going backwards (`'..'`)
multiple times in the path and not going backwards beyond a package's `package.json`.
* `no-literal-partition`: Forbids the use of literal partitions (usually `aws`). Instead, use
`Aws.PARTITION` to ensure that the code works for other partitions too.
* `consider-promise-all`: when using `Promise.all()`, attest that there is no unbounded parallelism.
* `no-throw-default-error`: Forbid throwing the default JavaScript error type. Instead a custom typed error should be thrown.
* `no-this-in-static`: Forbid the use of the keywords `this` and `super` in
static methods.
## How to use these rules
Import the plugin and declare rules with the `@cdklabs` prefix:
```js
module.exports = {
plugins: [
// ... other plugins
'@cdklabs',
],
rules: {
'@cdklabs/no-throw-default-error': [ 'error' ],
}
}
```
## How to add new rules
* Make a new file in `lib/rules`. It should export one function called `create`. The
`create` function should return a visitor object.
* Add the new file to `lib/index.ts`.
* Add a fixture directory under `test/fixtures/`. Copy and adjust an `eslintrc.js` file
from another test.
* Add a testing `.ts` file, and be sure to add either an `expected.ts` or an `.error.txt` variant
as well!
* You can now run the test in debugging mode (make sure to have `npx tsc -w` running, then from a debugging terminal, `npx jest --no-coverage -it 'your rule name'`), set a breakpoint, and inspect the typeless objects.
Use to get a feel for the AST you're trying to analyze. Note
that eslint uses `estree` to model AST nodes (not the TypeScript AST nodes), but they are
often comparable. Add type-testing TypeScript helpers to `type-checkers.ts` for typing
assistance.
To activate it for real on the repo, also add it to `cdk-build-tools/config/eslintrc.js`.