npm package: @midi-dev/eslint
Description: Kiểm tra lỗi cú pháp và quy tắc coding style cho JavaScript và TypeScript
Author: HEMIDI Development Team
Latest version: 2.0.11
Deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.

# @midi-dev/eslint

> Gói cấu hình ESLint cho JavaScript và TypeScript đảm bảo chất lượng code.

## Giới thiệu

`@midi-dev/eslint` là một gói cấu hình ESLint được thiết kế đặc biệt để cung cấp trải nghiệm linting nhất quán và chuyên nghiệp cho các dự án JavaScript và TypeScript.

### Tính năng chính

- **Hỗ trợ đầy đủ**: JavaScript, TypeScript, JSX, TSX
- **3 mức độ preset**: `relaxed`, `standard`, `strict`
- **Tự động phát hiện cấu hình**: TypeScript, workspace, git
- **Tích hợp framework**: NestJS, Node.js, ...
- **Developer-friendly**: Tự động sửa lỗi, báo cáo chi tiết

## Cài đặt

```bash
npm i -D @midi-dev/eslint
```

## Bắt đầu nhanh

### Bước 1: Thêm scripts vào package.json

```json
{
  "scripts": {
    "lint": "midi-lint",
    "lint:fix": "midi-lint --fix",
    "lint:check": "midi-lint --check-only"
  }
}
```

### Bước 2: Chạy linting

```bash
npm run lint        # Kiểm tra và tự động sửa lỗi
npm run lint:check  # Chỉ kiểm tra, không sửa (dùng cho CI)
```

## Tham chiếu Scripts

### Scripts cơ bản

| Script       | Mô tả                                   | Plugin sử dụng                | Mục đích              |
| ------------ | --------------------------------------- | ----------------------------- | --------------------- |
| `lint`       | Kiểm tra và tự động sửa lỗi             | Tất cả plugins được kích hoạt | Development hàng ngày |
| `lint:fix`   | Tương tự `lint`, nhấn mạnh việc sửa lỗi | Tất cả plugins được kích hoạt | Sửa lỗi tự động       |
| `lint:check` | Chỉ kiểm tra, không sửa lỗi             | Tất cả plugins được kích hoạt | CI/CD pipeline        |

### Scripts với preset

| Script          | Preset   | Mô tả                                    | Plugin sử dụng                      |
| --------------- | -------- | ---------------------------------------- | ----------------------------------- |
| `lint:relaxed`  | relaxed  | Ít nghiêm ngặt, cho phép console.log     | Base plugins, quy tắc lỏng          |
| `lint:standard` | standard | Mức độ cân bằng                          | Tất cả plugins, quy tắc vừa phải    |
| `lint:strict`   | strict   | Nghiêm ngặt nhất, không cho phép warning | Tất cả plugins, quy tắc nghiêm ngặt |
| `lint:dev`      | relaxed  | Tương tự relaxed cho development         | Base plugins, quy tắc lỏng          |

### Scripts báo cáo

| Script        | Mô tả                        | Output                       | Mục đích             |
| ------------- | ---------------------------- | ---------------------------- | -------------------- |
| `lint:report` | Tạo báo cáo HTML             | `reports/eslint-report.html` | Xem báo cáo chi tiết |
| `lint:ci`     | Chạy lint cho CI với báo cáo | Console + HTML report        | CI/CD pipeline       |

### Scripts đặc biệt

| Script       | Mô tả                    | Plugin sử dụng     | Mục đích                 |
| ------------ | ------------------------ | ------------------ | ------------------------ |
| `lint:noany` | Tắt hoàn toàn kiểu `any` | TypeScript plugins | Code quality enforcement |

## Plugin và Quy tắc

### Plugins được tích hợp

| Plugin                           | Mô tả                       | Quy tắc chính                      |
| -------------------------------- | --------------------------- | ---------------------------------- |
| **@eslint/js**                   | Quy tắc JavaScript cơ bản   | `eqeqeq`, `curly`, `no-console`    |
| **typescript-eslint**            | Quy tắc TypeScript          | Type checking, `no-explicit-any`   |
| **eslint-plugin-import**         | Quản lý import/export       | `import/order`, import resolution  |
| **eslint-plugin-unused-imports** | Phát hiện import không dùng | `unused-imports/no-unused-imports` |
| **eslint-plugin-sonarjs**        | Chất lượng code từ SonarJS  | Complexity, duplicates             |
| **eslint-plugin-security**       | Bảo mật code                | Security vulnerabilities           |
| **eslint-plugin-n**              | Tối ưu cho Node.js          | Node.js best practices             |

### Quy tắc theo preset

#### Preset `relaxed`

- **Console**: Cho phép tất cả `console.*`
- **Equality**: `eqeqeq` ở mức warning
- **Unused imports**: Warning thay vì error
- **Unused variables**: Tắt kiểm tra
- **Mục đích**: Dự án mới, prototype, learning

#### Preset `standard`

- **Console**: Cho phép `console.warn`, `console.error`
- **Equality**: `eqeqeq` ở mức error
- **Unused imports**: Error
- **Unused variables**: Warning (trừ biến bắt đầu với `_`)
- **Mục đích**: Dự án thương mại, team collaboration

#### Preset `strict`

- **Console**: Cho phép `console.warn`, `console.error`, `console.info`
- **Equality**: `eqeqeq` ở mức error
- **Unused imports/variables**: Error
- **Debugger**: Error (thay vì warning)
- **Additional**: `no-var`, `prefer-const` enforced
- **Mục đích**: Production code, libraries

### So sánh các mức độ preset

| Tính năng            | `relaxed`            | `standard`       | `strict`            |
| -------------------- | -------------------- | ---------------- | ------------------- |
| **Mục đích**         | Dự án mới, prototype | Dự án thương mại | Production, library |
| **Console logs**     | ✅ Cho phép          | ⚠️ Cảnh báo      | ⚠️ Cảnh báo + info  |
| **Unused imports**   | ⚠️ Cảnh báo          | ❌ Lỗi           | ❌ Lỗi              |
| **Unused variables** | ✅ Bỏ qua            | ⚠️ Cảnh báo      | ❌ Lỗi              |
| **Debugger**         | ⚠️ Cảnh báo          | ⚠️ Cảnh báo      | ❌ Lỗi              |
| **Type safety**      | Cơ bản               | Trung bình       | Cao                 |
| **Hiệu suất**        | Nhanh                | Cân bằng         | Chậm hơn            |

### File-specific overrides

| Pattern                        | Quy tắc đặc biệt                        |
| ------------------------------ | --------------------------------------- |
| `**/main.ts`                   | Cho phép console, tắt floating promises |
| `**/*.dto.ts`                  | Cho phép `any` type                     |
| `**/*.spec.ts`, `**/*.test.ts` | Cho phép console, tắt duplicate strings |
| `bin/**/*.{js,ts}`             | Cho phép console cho CLI scripts        |
| `eslint.config.*`              | Tắt import ordering                     |

## Options tham số

### Tùy chọn cơ bản

| Option             | Mô tả                      | Ví dụ                       |
| ------------------ | -------------------------- | --------------------------- |
| `--fix`            | Tự động sửa lỗi (mặc định) | `midi-lint --fix`           |
| `--check-only`     | Chỉ kiểm tra, không sửa    | `midi-lint --check-only`    |
| `--preset=<level>` | Chọn mức nghiêm ngặt       | `midi-lint --preset=strict` |

### Tùy chọn hiệu suất

| Option            | Mô tả                          | Ví dụ                       |
| ----------------- | ------------------------------ | --------------------------- |
| `--no-cache`      | Tắt cache, kiểm tra lại tất cả | `midi-lint --no-cache`      |
| `--no-type-aware` | Tắt TypeScript type checking   | `midi-lint --no-type-aware` |

### Tùy chọn báo cáo

| Option               | Mô tả                    | Ví dụ                        |
| -------------------- | ------------------------ | ---------------------------- |
| `--max-warnings=<n>` | Giới hạn số warning      | `midi-lint --max-warnings=0` |
| `--no-any`           | Tắt hoàn toàn `any` type | `midi-lint --no-any`         |

## Hướng dẫn sử dụng theo tình huống

### Development hàng ngày

```bash
# Kiểm tra nhanh với preset relaxed
npm run lint:dev

# Kiểm tra và sửa lỗi
npm run lint:fix
```

### Before commit

```bash
# Sử dụng linting cơ bản
npm run lint:check
```

### CI/CD Pipeline

```json
{
  "scripts": {
    "lint:ci": "midi-lint --preset=standard --check-only --max-warnings=0"
  }
}
```

### Production-ready code

```bash
# Kiểm tra nghiêm ngặt
npm run lint:strict

# Tắt hoàn toàn any type
npm run lint:noany
```

## Các bước tiếp theo

### 1. Thiết lập cơ bản

```bash
# Sau khi cài đặt, thêm script vào package.json
npm run lint
```

### 2. Tích hợp Git hooks

```bash
# Cài đặt husky cho pre-commit
npm install -D husky
npx husky add .husky/pre-commit "npm run lint:check"
```

### 3. Cấu hình CI/CD

```yaml
# GitHub Actions example
- name: Lint code
  run: npm run lint:ci
```

### 4. Tùy chỉnh cho team

```json
{
  "scripts": {
    "lint": "midi-lint --preset=standard",
    "lint:strict": "midi-lint --preset=strict --max-warnings=0"
  }
}
```

## Kết quả mẫu

### Khi phát hiện lỗi

```
[midi-lint] Found 5 errors and 3 warnings (2 fixable)
[midi-lint] Top files with problems:
 - src/main.ts (E:2 W:1)
 - src/service.ts (E:1 W:2)
```

### Khi không có lỗi

```
[midi-lint] ✅ No problems found!
```