@softmg/eslint-plugin-base-react v0.0.1-0
@softmg/eslint-plugin-base-react
A comprehensive linting solution that sweeps your code clean
Installation
You'll first need to install ESLint:
npm i eslint --save-devNext, install @softmg/eslint-plugin-base-react:
npm install @softmg/eslint-plugin-base-react --save-devUsage
Legacy config
Suitable for ESLint version < 9
Full config
It's recommended for new projects or if you want to see all ESLint errors and warnings for existing projects.
Add @softmg/eslint-plugin-base-react to the extends or plugins section of your .eslintrc configuration file. You can omit the eslint-plugin- prefix:
{
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaVersion": 13,
"sourceType": "module",
"ecmaFeatures": {
"jsx": true,
"modules": true,
"experimentalObjectRestSpread": true
}
},
"ignorePatterns": [
"**/*",
"node_modules"
],
"settings": {
"react": {
"pragma": "React",
"fragment": "Fragment",
"version": "detect"
},
"import/resolver": {
"typescript": {
"alwaysTryTypes": true
}
}
},
"extends": [
"plugin:base-react/recommended"
],
"plugins": [
"base-react"
]
}Incrementally improvements
If you have existing project big/old/etc. you can apply base-react config setting incrementally:
plugin:base-react/commonplugin:base-react/prettierplugin:base-react/importplugin:base-react/simpleImportSortplugin:base-react/reactplugin:base-react/promiseplugin:base-react/unicornplugin:base-react/sonarjsplugin:base-react/typescriptplugin:base-react/perfectionist
{
...
"extends": [
"plugin:base-react/common",
"plugin:base-react/prettier",
...
],
"plugins": [
"base-react"
]
}Flat config
Suitable for ESLint >= 9
Full config
eslint.config.js from javascript project
import baseReactPlugin from "@softmg/eslint-plugin-base-react";
import globals from "globals";
const config = [
...baseReactPlugin.configs.flat.recommended,
// Other configs
{ ignores: ["dist"] },
{
files: ["**/*.{js,jsx}"],
languageOptions: {
ecmaVersion: 2020,
globals: globals.browser,
parserOptions: {
ecmaFeatures: { jsx: true },
ecmaVersion: "latest",
sourceType: "module",
},
},
},
];
export default config;eslint.config.js from typescript project
import baseReactPlugin from "@softmg/eslint-plugin-base-react";
import globals from "globals";
import tsLint from "typescript-eslint";
export default tsLint.config(
...baseReactPlugin.configs.flat.recommended,
// Other configs
{ ignores: ["dist"] },
{
files: ["**/*.{ts,tsx}"],
languageOptions: {
ecmaVersion: 2020,
globals: globals.browser,
},
},
{
settings: {
"import/resolver": {
node: true,
typescript: true,
},
},
},
);Incrementally improvements
If you have existing project big/old/etc. you can apply base-react config setting incrementally:
baseReactPlugin.configs.flat.commonbaseReactPlugin.configs.flat.prettierbaseReactPlugin.configs.flat.importbaseReactPlugin.configs.flat.simpleImportSortbaseReactPlugin.configs.flat.reactbaseReactPlugin.configs.flat.reactHooksbaseReactPlugin.configs.flat.jsxA11ybaseReactPlugin.configs.flat.promisebaseReactPlugin.configs.flat.unicornbaseReactPlugin.configs.flat.sonarjsbaseReactPlugin.configs.flat.typescriptbaseReactPlugin.configs.flat.perfectionistbaseReactPlugin.configs.flat.testingLibrary
eslint.config.js from javascript project
import baseReactPlugin from "@softmg/eslint-plugin-base-react";
import globals from "globals";
const config = [
...baseReactPlugin.configs.flat.common,
...baseReactPlugin.configs.flat.prettier,
// Other configs
{ ignores: ["dist"] },
{
files: ["**/*.{js,jsx}"],
languageOptions: {
ecmaVersion: 2020,
globals: globals.browser,
parserOptions: {
ecmaFeatures: { jsx: true },
ecmaVersion: "latest",
sourceType: "module",
},
},
},
];
export default config;eslint.config.js from typescript project
import baseReactPlugin from "@softmg/eslint-plugin-base-react";
import globals from "globals";
import tsLint from "typescript-eslint";
export default tsLint.config(
...baseReactPlugin.configs.flat.common,
...baseReactPlugin.configs.flat.prettier,
// Other configs
{ ignores: ["dist"] },
{
files: ["**/*.{ts,tsx}"],
languageOptions: {
ecmaVersion: 2020,
globals: globals.browser,
},
},
{
settings: {
"import/resolver": {
node: true,
typescript: true,
},
},
},
);Separate rules
For flexible customization you can also use separate rules in your configs:
baseReactPlugin.rules.recommendedbaseReactPlugin.rules.commonbaseReactPlugin.rules.importbaseReactPlugin.rules.sonarjsbaseReactPlugin.rules.prettierbaseReactPlugin.rules.reactbaseReactPlugin.rules.reactHooksbaseReactPlugin.rules.reactRefreshbaseReactPlugin.rules.promisebaseReactPlugin.rules.unicornbaseReactPlugin.rules.perfectionistbaseReactPlugin.rules.typescriptRules
eslint.config.js from javascript project
import baseReactPlugin from "eslint-plugin-base-react";
import globals from "globals";
const config = [
...({
...baseReactPlugin.configs.flat.common,
rules: {
... baseReactPlugin.rules.common,
// Your rules
}
}),
...baseReactPlugin.configs.flat.prettier,
// Other configs
{ ignores: ["dist"] },
{
files: ["**/*.{js,jsx}"],
languageOptions: {
ecmaVersion: 2020,
globals: globals.browser,
parserOptions: {
ecmaFeatures: { jsx: true },
ecmaVersion: "latest",
sourceType: "module",
},
},
},
];
export default config;eslint.config.js from typescript project
import baseReactPlugin from "eslint-plugin-nimbus-clean";
import globals from "globals";
import tsLint from "typescript-eslint";
export default tsLint.config(
...({
...baseReactPlugin.configs.flat.common,
rules: {
... baseReactPlugin.rules.common,
// Your rules
}
}),
// OR
{
rules: {
...baseReactPlugin.rules.flat.typescript,
},
},
// Other configs
{ ignores: ["dist"] },
{
files: ["**/*.{ts,tsx}"],
languageOptions: {
ecmaVersion: 2020,
globals: globals.browser,
},
},
{
settings: {
"import/resolver": {
node: true,
typescript: true,
},
},
},
);Prettier settings (optional)
If you don't have a .prettierrc config, please add it (for example):
{
"singleQuote": true,
"printWidth": 150,
"useTabs": false,
"tabWidth": 2,
"trailingComma": "all",
"semi": false
}11 months ago