Callstack ESLint config for React Native, React and Node.js projects, utilizing Flow, TypeScript, Prettier and Jest with sensible defaults. Supports both eslintrc and flat config.
With Yarn:
yarn add --dev eslint @callstack/eslint-configOr with npm:
npm install --save-dev eslint @callstack/eslint-config You can choose one of the following environments to work with by extending your ESLint config (eslint.config.mjs for flat config, or .eslintrc / eslintConfig field in package.json for the eslintrc config style) with @callstack config tailored to your project.
Usage:
{ "extends": "@callstack" }import callstackConfig from '@callstack/eslint-config/react-native.flat.js'; export default [ { ignores: [ // ignored files go here ], }, ...callstackConfig, { rules: { // your custom rules }, }, ];Plugins used:
Additionally, it sets "react-native/react-native" environment and native platform extensions to resolve.
Usage:
{ "extends": "@callstack/eslint-config/react" }import callstackConfigReact from '@callstack/eslint-config/react.flat.js'; export default [ { ignores: [ // ignored files go here ], }, ...callstackConfigReact, { rules: { // your custom rules }, }, ];Plugins used:
- Node config
- eslint-plugin-react
- eslint-plugin-react-hooks
Usage:
{ "extends": "@callstack/eslint-config/node" }import callstackConfigNode from '@callstack/eslint-config/node.flat.js'; export default [ { ignores: [ // ignored files go here ], }, ...callstackConfigNode, { rules: { // your custom rules }, }, ];Plugins used:
- eslint-config-prettier
- eslint-plugin-prettier
- eslint-plugin-jest (applied for tests only, based on Jest's
testMatchconfig) - eslint-plugin-import
- eslint-plugin-promise
- eslint-plugin-flowtype
- @typescript-eslint/eslint-plugin (only for
.tsx?files) - @typescript-eslint/parser (only for
.tsx?files)
Additionally, it sets es6 and node environments.
{ "extends": "@callstack", "rules": { "global-require": 0, "prefer-destructuring": 0 } }import callstackConfig from '@callstack/eslint-config/react-native.flat.js'; export default [ ...callstackConfig, { rules: { 'global-require': 0, 'prefer-destructuring': 0, }, }, ];TypeScript is supported out-of-the-box, including importing JS files from TS files and vice-versa. All you need to do is to make sure you have typescript module installed.
Then when running ESLint add --ext '.js,.ts' (you might need also .jsx, .tsx) option, for example:
yarn eslint --ext '.js,.ts' ./srcparserOptions.project is set to ./tsconfig.json. You may need to adjust that.
To do so, you'll need to override our setup for TS files in your ESLint config:
{ "overrides": [ { "files": ["*.ts", "*.tsx"], "parserOptions": { "project": "./packages/**/tsconfig.json" } } ] }In the flat config, just append another configuration object to the array and be sure to import the /react-native.flat file:
import callstackConfig from '@callstack/eslint-config/react-native.flat.js'; import tsEslintParser from '@typescript-eslint/parser'; export default [ ...callstackConfig, { files: ['**/*.ts', '**/*.tsx'], languageOptions: { parser: tsEslintParser, parserOptions: { project: './packages/**/tsconfig.json' }, }, }, ];If you're VSCode user, you may find adding this config to your .vscode/settings.json helpful:
{ "eslint.validate": [ "javascript", "javascriptreact", "typescript", "typescriptreact" ] }