Skip to content
Back to skills

Code Quality Setup

ASecurity

Setup ESLint with Airbnb TypeScript config and Prettier formatter for code quality enforcement. Use when setting up new project, adding linting/formatting, or configuring code quality tools (e.g., "Setup ESLint and Prettier", "Configure code quality", "Add Airbnb linter").

  • 666 stars
  • 0 votes
  • 0 copies
  • 5 views
  • Added February 8, 2026
developmentjavascripttypescriptjavabashnodegitci/cd

Works with

  • vscode

Security analysis

A96/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro shows the line behind each finding and how to fix it

Scanned February 12, 2026

npx -y skills add majiayu000/claude-skill-registry --skill code-quality-setup --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Code Quality Setup?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Code Quality Setup
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/majiayu000-code-quality-setup/badge)](https://www.skillsdirectory.com/skills/majiayu000-code-quality-setup)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: code-quality-setup
description: Setup ESLint with Airbnb TypeScript config and Prettier formatter for code quality enforcement. Use when setting up new project, adding linting/formatting, or configuring code quality tools (e.g., "Setup ESLint and Prettier", "Configure code quality", "Add Airbnb linter").
allowed-tools: Read, Write, Edit, Glob, Bash
---

# Code Quality Setup Skill

Configures ESLint with Airbnb TypeScript style guide and Prettier formatter for automated code quality enforcement.

## What This Skill Does

Sets up complete code quality tooling:

- **ESLint**: JavaScript/TypeScript linter with Airbnb style guide
- **Prettier**: Opinionated code formatter
- **Integration**: ESLint + Prettier working together without conflicts
- **Scripts**: npm/bun scripts for linting and formatting
- **Git Hooks**: Optional pre-commit hooks for automatic checks
- **VS Code**: Editor integration settings

## When to Use This Skill

Use when you need to:
- Set up linting and formatting for new project
- Add Airbnb style guide to existing project
- Configure ESLint + Prettier integration
- Update code quality configuration
- Add editor integration

Examples:
- "Setup ESLint and Prettier with Airbnb style guide"
- "Configure code quality tools"
- "Add linting to the project"

## Tech Stack Requirements

**Required:**
- Node.js or Bun.js runtime
- TypeScript project
- package.json file

**This Skill Installs:**
- eslint
- @typescript-eslint/parser
- @typescript-eslint/eslint-plugin
- eslint-config-airbnb-typescript
- eslint-config-airbnb-base
- eslint-plugin-import
- prettier
- eslint-config-prettier
- eslint-plugin-prettier

## Configuration Files Generated

### 1. .eslintrc.json
ESLint configuration with Airbnb TypeScript rules:
```json
{
  "parser": "@typescript-eslint/parser",
  "parserOptions": {
    "ecmaVersion": "latest",
    "sourceType": "module",
    "project": "./tsconfig.json"
  },
  "extends": [
    "airbnb-base",
    "airbnb-typescript/base",
    "plugin:@typescript-eslint/recommended",
    "plugin:prettier/recommended"
  ],
  "plugins": ["@typescript-eslint", "import"],
  "rules": {
    "import/prefer-default-export": "off",
    "class-methods-use-this": "off",
    "no-console": "warn",
    "@typescript-eslint/no-explicit-any": "error"
  }
}
```

### 2. .prettierrc
Prettier formatting rules:
```json
{
  "semi": true,
  "trailingComma": "es5",
  "singleQuote": true,
  "printWidth": 100,
  "tabWidth": 2,
  "arrowParens": "always"
}
```

### 3. .prettierignore
Files to ignore:
```
node_modules
dist
build
coverage
*.min.js
```

### 4. .eslintignore
Files to ignore:
```
node_modules
dist
build
coverage
```

### 5. package.json scripts
Add these scripts:
```json
{
  "scripts": {
    "lint": "eslint . --ext .ts,.tsx",
    "lint:fix": "eslint . --ext .ts,.tsx --fix",
    "format": "prettier --write \"src/**/*.{ts,tsx,json,md}\"",
    "format:check": "prettier --check \"src/**/*.{ts,tsx,json,md}\""
  }
}
```

### 6. .vscode/settings.json (Optional)
VS Code integration:
```json
{
  "editor.formatOnSave": true,
  "editor.defaultFormatter": "esbenp.prettier-vscode",
  "editor.codeActionsOnSave": {
    "source.fixAll.eslint": true
  },
  "eslint.validate": [
    "javascript",
    "typescript"
  ]
}
```

## Airbnb Style Guide Key Rules

**This configuration enforces:**

**Variables:**
- Use `const` by default, `let` when reassignment needed
- No `var` usage
- Block-scoped declarations

**Functions:**
- Arrow functions for anonymous functions
- Function declarations for named functions
- Default parameters over conditional assignment

**Objects & Arrays:**
- Literal syntax (`{}`, `[]`)
- Object/array spread over `Object.assign()`
- Destructuring for multiple values
- Shorthand properties and methods

**Strings:**
- Template literals over concatenation
- Single quotes for strings (Prettier handles this)

**Naming:**
- camelCase for variables and functions
- PascalCase for classes and types
- UPPER_SNAKE_CASE for constants

**TypeScript Specific:**
- No `any` types (error level)
- Explicit return types for exported functions
- Interface over type when possible
- Proper generic naming

**Code Style:**
- Semicolons required
- 2-space indentation (configurable)
- Trailing commas in multiline
- Consistent spacing

## Installation Process

### Step 1: Install Dependencies

**Using npm:**
```bash
npm install -D eslint @typescript-eslint/parser @typescript-eslint/eslint-plugin eslint-config-airbnb-typescript eslint-config-airbnb-base eslint-plugin-import prettier eslint-config-prettier eslint-plugin-prettier
```

**Using Bun:**
```bash
bun add -D eslint @typescript-eslint/parser @typescript-eslint/eslint-plugin eslint-config-airbnb-typescript eslint-config-airbnb-base eslint-plugin-import prettier eslint-config-prettier eslint-plugin-prettier
```

### Step 2: Create Configuration Files

Generate all configuration files listed above.

### Step 3: Update package.json

Add lint and format scripts.

### Step 4: Run Initial Format

```bash
npm run format
npm run lint:fix
```

### Step 5: Verify Setup

```bash
npm run lint
```

## Custom Rule Adjustments

Common rules to adjust based on project needs:

```json
{
  "rules": {
    // Disable default export requirement
    "import/prefer-default-export": "off",

    // Allow class methods without 'this'
    "class-methods-use-this": "off",

    // Warn on console.log (don't error)
    "no-console": "warn",

    // Error on any types
    "@typescript-eslint/no-explicit-any": "error",

    // Allow unused vars with underscore prefix
    "@typescript-eslint/no-unused-vars": ["error", {
      "argsIgnorePattern": "^_"
    }],

    // Adjust max line length
    "max-len": ["warn", {
      "code": 100,
      "ignoreComments": true,
      "ignoreStrings": true
    }]
  }
}
```

## Git Hooks (Optional)

### Using Husky + lint-staged

**Install:**
```bash
npm install -D husky lint-staged
npx husky install
```

**Add .husky/pre-commit:**
```bash
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
npx lint-staged
```

**Add to package.json:**
```json
{
  "lint-staged": {
    "*.{ts,tsx}": [
      "eslint --fix",
      "prettier --write"
    ]
  }
}
```

## Editor Integration

### VS Code Extensions

Install these extensions:
- ESLint (dbaeumer.vscode-eslint)
- Prettier - Code formatter (esbenp.prettier-vscode)

### VS Code Settings

Create `.vscode/settings.json` with the configuration above.

## Troubleshooting

### ESLint Parsing Errors

**Issue:** `Parsing error: Cannot read file 'tsconfig.json'`
**Fix:** Ensure `parserOptions.project` points to correct tsconfig.json

### Prettier Conflicts

**Issue:** ESLint and Prettier rules conflict
**Fix:** Ensure `eslint-config-prettier` is last in extends array

### Import Resolution

**Issue:** ESLint can't resolve imports with `@/` alias
**Fix:** Add to .eslintrc.json:
```json
{
  "settings": {
    "import/resolver": {
      "typescript": {
        "project": "./tsconfig.json"
      }
    }
  }
}
```

Install: `npm install -D eslint-import-resolver-typescript`

## Validation Checklist

After setup, verify:
- [ ] All dependencies installed
- [ ] Configuration files created
- [ ] Scripts added to package.json
- [ ] `npm run lint` runs without errors
- [ ] `npm run format` formats code
- [ ] VS Code shows linting errors
- [ ] Format on save works in editor
- [ ] No ESLint/Prettier conflicts

## Integration with Project

This skill integrates with project structure:

```
project-root/
├── .eslintrc.json          # ESLint config
├── .prettierrc             # Prettier config
├── .eslintignore           # ESLint ignore
├── .prettierignore         # Prettier ignore
├── .vscode/
│   └── settings.json       # Editor config
├── package.json            # With scripts
└── src/                    # Your code (will be linted)
```

## Post-Setup Actions

After setup:
1. Run `npm run format` to format all code
2. Run `npm run lint:fix` to auto-fix issues
3. Manually fix remaining linting errors
4. Commit configuration files
5. Share with team via git

## Related Skills

- **ddd-context-generator**: Generates code following these rules
- **ddd-validator**: Can check for code quality violations
- Use this skill BEFORE generating code for best results

## Best Practices

1. **Run before committing**: Always lint and format before commits
2. **Fix incrementally**: Don't disable rules, fix the issues
3. **Team agreement**: Discuss and agree on custom rules
4. **CI/CD integration**: Add linting to CI pipeline
5. **Regular updates**: Keep dependencies updated

---

**Note:** This skill sets up code quality tooling. For architectural validation, use `ddd-validator` skill.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.