Skip to content

Commit

Permalink
Add better eslint config
Browse files Browse the repository at this point in the history
  • Loading branch information
typeofweb committed Mar 26, 2024
1 parent 1a51730 commit 1dd24fd
Show file tree
Hide file tree
Showing 9 changed files with 433 additions and 94 deletions.
100 changes: 98 additions & 2 deletions .eslintrc.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,100 @@
{
"extends": ["next/core-web-vitals"],
"ignorePatterns": ["*.js", "*.jsx", "*.mjs"]
"$schema": "https://json.schemastore.org/eslintrc.json",
"parserOptions": {
"project": "tsconfig.json"
},
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/recommended-type-checked",
"plugin:@typescript-eslint/stylistic-type-checked",
"plugin:import/recommended",
"plugin:import/typescript",
"next/core-web-vitals",
"prettier"
],
"rules": {
// sort imports
"import/order": [
"error",
{
"newlines-between": "always",
"alphabetize": {
"order": "asc",
"orderImportKind": "asc"
},
"groups": ["builtin", "external", "index", "internal", "sibling", "parent", "object", "type"]
}
],

// no let exports
"import/no-mutable-exports": "error",

"import/no-cycle": "error",
"import/no-default-export": "error",

// allow {} even though it's unsafe but comes handy
"@typescript-eslint/ban-types": [
"error",
{
"types": {
"{}": false
}
}
],

"@typescript-eslint/consistent-type-imports": [
"error",
{
"prefer": "type-imports",
"fixStyle": "inline-type-imports",
"disallowTypeAnnotations": false
}
],

"import/no-duplicates": ["error", { "prefer-inline": true }],

// false negatives
"import/namespace": ["off"],

// we allow empty interfaces
"no-empty-pattern": "off",
"@typescript-eslint/no-empty-interface": "off",

// we allow empty functions
"@typescript-eslint/no-empty-function": "off",

// we sometimes use async functions that don't await anything
"@typescript-eslint/require-await": "off",

// make sure to `await` inside try…catch
"@typescript-eslint/return-await": ["error", "in-try-catch"],

// allow unused vars prefixed with `_`
"@typescript-eslint/no-unused-vars": ["error", { "argsIgnorePattern": "^_", "varsIgnorePattern": "^_" }],

// numbers and booleans are fine in template strings
"@typescript-eslint/restrict-template-expressions": [
"error",
{ "allowNumber": true, "allowBoolean": true }
],

"@typescript-eslint/no-misused-promises": ["error", { "checksVoidReturn": false }],

"no-restricted-imports": [
"error",
{
"name": "next/router",
"message": "Please use next/navigation instead."
}
]
},
"overrides": [
{
"files": ["src/app/**/{page,layout,loading,route}.ts?(x)"],
"rules": {
"import/no-default-export": "off"
}
}
],
"ignorePatterns": ["*.js", "*.jsx"]
}
3 changes: 0 additions & 3 deletions .husky/pre-commit
Original file line number Diff line number Diff line change
@@ -1,4 +1 @@
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"

pnpm lint-staged
11 changes: 5 additions & 6 deletions .lintstagedrc.mjs
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import path from "path";

const buildEslintCommand = (filenames) =>
`next lint --fix --file ${filenames
.map((f) => path.relative(process.cwd(), f))
.join(' --file ')}`

`next lint --fix --file ${filenames.map((f) => path.relative(process.cwd(), f)).join(" --file ")}`;

export default {
'*.{js,jsx,ts,tsx}': [buildEslintCommand],
}
"*.{js,mjs,jsx,ts,tsx}": [buildEslintCommand],
"*.*": ["prettier --write --ignore-unknown"],
};
6 changes: 2 additions & 4 deletions .prettierrc
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@
"trailingComma": "all",
"printWidth": 110,
"useTabs": true,
"plugins": [
"prettier-plugin-tailwindcss"
],
"plugins": ["prettier-plugin-tailwindcss"],
"tailwindConfig": "./tailwind.config.ts"
}
}
24 changes: 14 additions & 10 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint",
"lint": "next lint --fix --dir src",
"prepare": "husky"
},
"dependencies": {
Expand All @@ -16,17 +16,21 @@
},
"devDependencies": {
"@next/env": "14.1.4",
"@types/node": "^20.11.30",
"@types/react": "^18.2.71",
"@types/react-dom": "^18.2.22",
"autoprefixer": "^10.4.19",
"husky": "9.0.11",
"lint-staged": "15.2.2",
"@types/node": "20.11.30",
"@types/react": "18.2.71",
"@types/react-dom": "18.2.22",
"@typescript-eslint/eslint-plugin": "7.4.0",
"@typescript-eslint/parser": "7.4.0",
"autoprefixer": "10.4.19",
"eslint": "8.57.0",
"eslint-config-next": "14.1.4",
"postcss": "^8.4.38",
"eslint-config-prettier": "9.1.0",
"husky": "9.0.11",
"lint-staged": "15.2.2",
"postcss": "8.4.38",
"prettier": "3.2.5",
"tailwindcss": "^3.4.1",
"typescript": "^5.4.3"
"prettier-plugin-tailwindcss": "0.5.12",
"tailwindcss": "3.4.1",
"typescript": "5.4.3"
}
}
Loading

0 comments on commit 1dd24fd

Please sign in to comment.