Package detail

@ministryofjustice/eslint-config-hmpps

ministryofjustice7.7kMIT0.0.1

ESLint rules for HMPPS typescript projects

eslint, eslint-plugin, hmpps

readme

@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
  • run npm run lint and address changes as necessary
    • adjust rules in eslint.config.mjs to suit your project’s needs

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

changelog

Change log

0.0.1

Initial release

@eslint/eslintrc 3.2.0 → 3.3.1 @eslint/js ^9.18.0 → ^9.29.0 @types/eslinteslintrc ^2.1.2 → ^3.3.0 @types/eslintjs ^8.42.3 → ^9.14.0 @types/semver ^7.5.8 → ^7.7.0 @typescript-eslint/eslint-plugin ^8.20.0 → ^8.34.1 @typescript-eslint/parser ^8.20.0 → ^8.34.1 eslint ^9.18.0 → ^9.29.0 eslint-config-prettier ^10.0.1 → ^10.1.5 eslint-import-resolver-typescript ^3.7.0 → ^4.4.3 eslint-plugin-cypress ^4.1.0 → ^5.1.0 eslint-plugin-prettier ^5.2.2 → ^5.5.0 globals 15.14.0 → 16.2.0 semver ^7.6.3 → ^7.7.2

0.0.1-beta.2

Patching: @eslint/js ^9.15.0 → ^9.18.0 @typescript-eslint/eslint-plugin ^8.15.0 → ^8.20.0 @typescript-eslint/parser ^8.15.0 → ^8.20.0 eslint ^9.15.0 → ^9.17.0 eslint-import-resolver-typescript ^3.6.3 → ^3.7.0 eslint-plugin-cypress ^4.0.0 → ^4.1.0 eslint-config-prettier ^9.1.0 → ^10.0.1

0.0.1-beta.1

Initial beta

0.0.1-alpha.9

Pre-release for testing with HMPPS projects. Updated dependencies should once again allow typescript to use no-unused-expressions and other rules.

0.0.1-alpha.8

Pre-release for testing with HMPPS projects. Fixed js doc annotation to help with auto-complete

0.0.1-alpha.7

Pre-release for testing with HMPPS projects. Updated eslint rules to:

  • separate globals into non-frontend, frontend, unit test and integration test groups.
  • downgrade prettier eslint rules to warning because they make typing code rather painful. NB: warnings will still fail lint checks so this is just a quality-of-life change.
  • re-add eslint-plugin-cypress plugin

0.0.1-alpha.6

Pre-release for testing with HMPPS projects. eslint rules are now exported as a function which make some common customisations simpler. Migration has been made simpler for existing projects using:

npx @ministryofjustice/eslint-config-hmpps

0.0.1-alpha.5

Initial pre-release for testing with HMPPS projects.

0.0.1-alpha.1 to 0.0.1-alpha.4

Pre-releases which should not be used in projects.