eslint
ESLint
Pluggable linting for JavaScript and TypeScript.
Installation
bun add -D eslint @eslint/js typescript-eslint globals
Running ESLint
eslint . # Lint all files
eslint --fix . # Auto-fix issues
eslint src/file.ts # Specific file
eslint --format json . # JSON output
eslint --format stylish . # Styled output
Configuration (Flat Config - ESLint 9+)
eslint.config.js (Recommended)
import js from "@eslint/js";
import tseslint from "typescript-eslint";
import globals from "globals";
export default tseslint.config(
js.configs.recommended,
...tseslint.configs.recommended,
{
languageOptions: {
globals: {
...globals.node,
...globals.es2022,
},
},
},
{
ignores: ["dist/", "node_modules/", "*.config.js"],
},
);
eslint.config.js (Strict TypeScript)
import js from "@eslint/js";
import tseslint from "typescript-eslint";
import globals from "globals";
export default tseslint.config(
js.configs.recommended,
...tseslint.configs.strictTypeChecked,
...tseslint.configs.stylisticTypeChecked,
{
languageOptions: {
globals: {
...globals.node,
...globals.es2022,
},
parserOptions: {
projectService: true,
tsconfigRootDir: import.meta.dirname,
},
},
},
{
ignores: ["dist/", "node_modules/"],
},
);
Common Rules
TypeScript Rules
{
rules: {
"@typescript-eslint/no-unused-vars": ["error", { argsIgnorePattern: "^_" }],
"@typescript-eslint/no-explicit-any": "warn",
"@typescript-eslint/explicit-function-return-type": "off",
"@typescript-eslint/no-floating-promises": "error",
"@typescript-eslint/consistent-type-imports": ["warn", {
prefer: "type-imports",
fixStyle: "separate-type-imports"
}],
}
}
JavaScript Rules
{
rules: {
"no-console": ["warn", { allow: ["warn", "error"] }],
"no-var": "warn",
"no-unused-vars": ["error", { argsIgnorePattern: "^_" }],
}
}
File-Specific Configuration
export default tseslint.config(
js.configs.recommended,
...tseslint.configs.recommended,
{
files: ["src/**/*.ts"],
rules: {
"@typescript-eslint/no-explicit-any": "error",
},
},
{
files: ["tests/**/*.ts"],
rules: {
"@typescript-eslint/no-explicit-any": "off",
},
},
{
ignores: ["dist/", "node_modules/"],
},
);
Ignore Patterns
{
ignores: ["dist/", "node_modules/", "*.config.js", "coverage/", "build/"];
}
React Plugin
bun add -D eslint-plugin-react eslint-plugin-react-hooks eslint-plugin-react-refresh
import reactPlugin from "eslint-plugin-react";
import reactHooks from "eslint-plugin-react-hooks";
import reactRefresh from "eslint-plugin-react-refresh";
export default tseslint.config(
// ...base config
{
plugins: {
react: reactPlugin,
"react-hooks": reactHooks,
"react-refresh": reactRefresh,
},
rules: {
...reactPlugin.configs.recommended.rules,
...reactHooks.configs.rules,
"react-refresh/only-export-components": "warn",
},
},
);
CI Integration
GitHub Actions
name: Lint
on: [push, pull_request]
jobs:
eslint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: oven-sh/setup-bun@v2
- run: bun install
- run: bun run lint
More from knoopx/pi
podman
Manages containers, builds images, configures pods and networks with Podman. Use when running containers, creating Containerfiles, grouping services in pods, or managing container resources.
124jujutsu
Manages version control with Jujutsu (jj), including rebasing, conflict resolution, and Git interop. Use when tracking changes, navigating history, squashing/splitting commits, or pushing to Git remotes.
117nix-flakes
Creates reproducible builds, manages flake inputs, defines devShells, and builds packages with flake.nix. Use when initializing Nix projects, locking dependencies, or running nix build/develop commands.
54scraping
Fetches web pages, parses HTML with CSS selectors, calls REST APIs, and scrapes dynamic content. Use when extracting data from websites, querying JSON APIs, or automating browser interactions.
48jscpd
Finds duplicate code blocks and analyzes duplication metrics across files. Use when identifying copy-pasted code, measuring technical debt, or preparing for refactoring.
45yt-dlp
Downloads videos from YouTube and other sites using yt-dlp. Use when downloading videos, extracting metadata, or batch downloading multiple files.
42