@ministryofjustice/eslint-config-hmpps
This package aims so simplify code style enforcement in HMPPS typescript projects using eslint
.
It should include all:
- the necessary npm packages to simplify dependency management within repositories
- rules as defined by classic Airbnb best-practice with HMPPS overrides and typescript parsing
Status
This library is currently: ready to adopt.
Teams are encouraged to use this library. Please provide feedback via slack to the #typescript channel.
Usage
Usage is best demonstrated by the HMPPS typescript template as it already includes npm scripts and continuous integration tooling. New projects based on this template will automatically adopt this package.
Migrating existing projects
Automatically installing the library
The package will self install by running via npx:
npx @ministryofjustice/eslint-config-hmpps
The final step of the installation script is to run the linting tool, with --fix
.
This may expose some issues that need to manually fixed and some minor config overrides may need to be applied.
Manually installing the library
The template project was migrated as part of pull request 470, so you can either manually adopt changes from it or cherry-pick the squashed commit.
Essentially, the move from eslint v8 to v9 requires changes to eslint configuration:
npm uninstall @typescript-eslint/eslint-plugin @typescript-eslint/parser eslint eslint-config-airbnb-base eslint-config-prettier eslint-import-resolver-typescript eslint-plugin-cypress eslint-plugin-import eslint-plugin-no-only-tests eslint-plugin-prettier
npm install --save-dev @ministryofjustice/eslint-config-hmpps
.eslintignore
and.eslintrc.json
are not supported so can be deleted- add
eslint.config.mjs
- import the default shared HMPPS rules from
@ministryofjustice/eslint-config-hmpps
- add a default export with these rules
- if you had custom overrides in
.eslintrc.json
compared with the template project, include them after the shared defaults
- import the default shared HMPPS rules from
- run
npm run lint
and address changes as necessary- adjust rules in
eslint.config.mjs
to suit your project’s needs
- adjust rules in
Customising config
The point of having shared styling rules is that it reduces bike-shedding-,Noun,Procrastination.>) and adds some consistency across projects.
If some overriding is required to make your project successfully build configuration can be overriden via eslint.config.mjs
,
e.g: here
and here.
Developing this package
It is deliberately not using typescript or rollup so that building is not required. CommonJS enables the parent and sibling packages to use the rules directly for lint checks.
Testing changes to this library
cd
to this directory and then pack this library to home directory: npm pack --pack-destination ~
Inside the project of choice then:
- uninstall the existing library:
npm uninstall @ministryofjustice/eslint-config-hmpps
- install from the packed file:
npm install -D ~/ministryofjustice-eslint-config-hmpps-<some-version>.tgz
TODO
- use modern eslint typescript plugins desgined for eslint v9