Skip to content

balena-io-modules/node-balena-lint

Repository files navigation

@balena/lint

@balena/lint is a linter & formatter based on eslint and prettier to detect style errors based on balena.io coding guidelines.

Overview

@balena/lint uses balena's .eslintrc.js and .prettierrc. If a .eslintrc.js is found in the to-be-linted project directory or its parents then the rules found in it will be merged with the default @balena/lint ones. Another way to to override the default balena lint rules is by specifying a configuration file with the -f parameter.

Files checked

By default.ts and .tsx files are linted. You can also specify additional file extensions to be parse by using the -e option. Eg: "-e js -e jsx"

Prettier

You can reference the prettier configuration file to your consumer project from ./config/.prettierrc.

Usage

You can use this module as:

  1. A standalone project by installing it with npm install -g @balena/lint:
kostas@macbook:~/balena/test$ balena-lint src/
  ✓ src/test.ts

  ✓ Ok! » 0 errors and 0 warnings in 1 file
  1. A development dependency in package.json with npm install --save-dev @balena/lint. Then you can use the module in your build/testing process:
package.json
------------
...
"scripts": {
  "lint": "balena-lint src/ && echo \"Done!\""
},
...

kostas@macbook:~/balena/test$ npm run lint

> [email protected] lint /Users/kostas/balena/test
> balena-lint src/ && echo "Done!"

  ✓ src/test.ts

  ✓ Ok! » 0 errors and 0 warnings in 1 file

  Done!

  1. A development dependency, that will get picked up by your IDE/Editor eslint/prettier.

Manually create these config files in your project root:

.eslintrc.js

{
  "extends": [
    "./node_modules/@balena/lint/config/.eslintrc.js"
  ]
}

For prettier config create .prettierrc.js

const fs = require('fs');

module.exports = JSON.parse(fs.readFileSync('./node_modules/@balena/lint/config/.prettierrc', 'utf8'));

Rules that require type information

Some linting rules such as no-floating-promises require Typescript type information. To enable these rules, use the -t option to point to your project's tsconfig.json file, if any. Without the -t option, those rules will be disabled but may still print a warning message such as:
Warning: The 'no-floating-promises' rule requires type information.
To prevent this warning message from being printed, override the rules by creating a .eslintrc.js file as described in the previous sections. For example:

{
    "extends": "./node_modules/@balena/lint/config/.eslintrc.js",
    "rules": {
        "no-floating-promises": false
    }
}

Support

If you're having any problem, please raise an issue on GitHub and the balena.io team will be happy to help.

Tests

Run the test suite by doing:

$ npm install && npm test

Contribute

Before submitting a PR, please make sure that you include tests, and that npm run lint runs without a warning.

License

The project is licensed under the Apache 2.0 license.