UNPKG

@buildinams/lint

Version:
146 lines (108 loc) 4.51 kB
# lint [![NPM version][npm-image]][npm-url] [![Actions Status][ci-image]][ci-url] [![PR Welcome][npm-downloads-image]][npm-downloads-url] BiA's base lint config(s). ## Requirements - **Node** >=20.19.0 | **ESLint** >=9.0.0 - **TypeScript** >=5.1.0, **React** >=17.0.0, **Prettier** >=3.0.0, **Stylelint** >=16.0.0 — as needed Uses ESLint [flat config](https://eslint.org/docs/latest/use/configure/configuration-files). Legacy `.eslintrc.*` is not supported. ## Installation ```bash npm i -D @buildinams/lint eslint prettier stylelint ``` Drop `prettier` and/or `stylelint` if you don't need them. ## ESLint | Config | Export path | |---|---| | JavaScript | `@buildinams/lint/eslint/javascript` | | TypeScript | `@buildinams/lint/eslint/typescript` | | React | `@buildinams/lint/eslint/react` | | React + TypeScript | `@buildinams/lint/eslint/react-typescript` | | Next.js | `@buildinams/lint/eslint/next` | | Next.js + TypeScript | `@buildinams/lint/eslint/next-typescript` | ```js // eslint.config.mjs import config from "@buildinams/lint/eslint/next-typescript"; import { globalIgnores } from "eslint/config"; export default [ ...config, globalIgnores([".next/**", "out/**", "build/**"]), ]; ``` <details> <summary>CJS</summary> ```js // eslint.config.js module.exports = [...require("@buildinams/lint/eslint/next-typescript")]; ``` </details> ### Bundled plugins unused-imports, simple-import-sort, [import-x](https://github.com/un-ts/eslint-plugin-import-x), [prettier](https://www.npmjs.com/package/eslint-plugin-prettier) (formatting errors as lint errors), react + react-hooks + jsx-a11y (React/Next), [@next/eslint-plugin-next](https://www.npmjs.com/package/@next/eslint-plugin-next) (Next), [typescript-eslint](https://typescript-eslint.io/) (TS). ### Custom rules - **Import order**: externals → absolute (`_`, `~` prefixed) → relative - **`type` over `interface`** via `consistent-type-definitions` - **No enums** — use `as const` instead (only non-auto-fixable rule) - **No `console.log`**`warn` and `error` allowed - **React version** defaults to `19`. Override for older versions: ```js // eslint.config.mjs export default [ ...config, { settings: { react: { version: "18" } } }, ]; ``` ## Prettier ```js // .prettierrc.mjs export { default } from "@buildinams/lint/prettier"; ``` Trailing commas `"all"` | Tabs | Double quotes Formatting errors also surface as ESLint errors via `eslint-plugin-prettier`. ## Stylelint ```json // .stylelintrc.json { "extends": "@buildinams/lint/stylelint" } ``` Extends: [standard-scss](https://www.npmjs.com/package/stylelint-config-standard-scss), [css-modules](https://www.npmjs.com/package/stylelint-config-css-modules), [recess-order](https://www.npmjs.com/package/stylelint-config-recess-order), [stylelint-prettier](https://www.npmjs.com/package/stylelint-prettier). Enables `scss/selector-no-redundant-nesting-selector`. <details> <summary>Custom SCSS functions</summary> ```json { "extends": "@buildinams/lint/stylelint", "rules": { "scss/function-no-unknown": [true, { "ignoreFunctions": ["px-to-rem"] }] } } ``` </details> ## VSCode Extensions: [vscode-eslint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint), [prettier-vscode](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode), [vscode-stylelint](https://marketplace.visualstudio.com/items?itemName=stylelint.vscode-stylelint) ```json // .vscode/settings.json { "editor.formatOnSave": false, "editor.defaultFormatter": "esbenp.prettier-vscode", "editor.codeActionsOnSave": { "source.fixAll.eslint": "explicit", "source.fixAll.stylelint": "explicit" }, "scss.validate": false, "stylelint.validate": ["scss"] } ``` ## Migrating from v0.4.x 1. Update to ESLint 9+ and Node 20+ 2. Delete `.eslintrc.*` 3. Create `eslint.config.mjs` (see above) Pin `@buildinams/lint@0.4.x` if staying on ESLint 8. ## Contributing Found an issue? Want a new feature? [Get involved](https://github.com/buildinamsterdam/lint/blob/main/CONTRIBUTING.md). [npm-image]: https://img.shields.io/npm/v/@buildinams/lint.svg?style=flat-square&logo=react [npm-url]: https://npmjs.org/package/@buildinams/lint [ci-image]: https://github.com/buildinamsterdam/lint/actions/workflows/lint.yml/badge.svg [ci-url]: https://github.com/buildinamsterdam/lint/actions [npm-downloads-image]: https://img.shields.io/npm/dm/@buildinams/lint.svg [npm-downloads-url]: https://npmcharts.com/compare/@buildinams/lint?minimal=true