# wiki 模块变更日志

## 2026-05-31 新增 `wiki +lint` 文档质量检查命令

> **注意：`+lint` 命令当前仅在本地编译版本中可用**（全局安装的 `gitlink-cli` 暂未包含）。需先 `go build -o gitlink-cli.exe .` 然后使用 `./gitlink-cli.exe wiki +lint`。

### 使用方法

```bash
# 在仓库目录下，owner/repo 自动从 git remote 解析
gitlink-cli wiki +lint

# 只运行指定检查项（逗号分隔）
gitlink-cli wiki +lint --check links
gitlink-cli wiki +lint --check links,headings

# JSON 格式输出
gitlink-cli wiki +lint --format json
```

### 检查项

| 检查名称 | 级别 | 说明 |
|----------|------|------|
| empty | error | 页面内容为空 |
| headings | warning | 缺少 H1 标题（不以 `# ` 开头） |
| short | warning | 内容不足 50 字符 |
| links | error | wiki 内链指向不存在的页面 |
| images | warning | 外部图片 URL 返回 404 或不可达 |

### 主要修改

**文件**: `shortcuts/wiki/wiki.go`

#### 1. 新增类型

```go
type LintIssue struct {
    Page    string `json:"page"`
    Level   string `json:"level"`   // "error" / "warning"
    Check   string `json:"check"`
    Message string `json:"message"`
}

type LintSummary struct {
    Repository  string      `json:"repository"`
    TotalPages  int         `json:"total_pages"`
    TotalIssues int         `json:"total_issues"`
    Errors      int         `json:"errors"`
    Warnings    int         `json:"warnings"`
    Results     []LintIssue `json:"results"`
}
```

#### 2. Bug 修复

- 修复 lint 获取页面内容时使用 `title` 而非 `sub_url` 导致部分页面 500 错误的问题

#### 3. 新增函数（含 sub_url/title 双字段支持）

- `isCheckEnabled(checkFilter, name string) bool` — 判断指定检查是否被 `--check` 参数选中
- `checkEmpty(page, content string) []LintIssue` — 检测空页面
- `checkHeading(page, content string) []LintIssue` — 检测缺少 H1
- `checkShort(page, content string) []LintIssue` — 检测内容过短
- `checkDeadLinks(page, content string, knownTitles map[string]bool) []LintIssue` — 正则提取内链，在已知标题集合中查找死链
- `checkImages(page, content string, httpClient *http.Client) []LintIssue` — 正则提取外部图片 URL，HEAD 请求检查可达性（超时 5s）
- `runLint(ctx *common.RuntimeContext) error` — lint 主流程：解析 owner/repo → 获取页面列表 → 逐页检查 → 汇总输出

#### 4. 新增 Shortcut 注册

```go
{
    Name:        "lint",
    Description: "Check wiki pages for quality issues",
    Flags: []common.Flag{
        {Name: "check", Usage: "Specific checks to run (comma-separated): links,headings,images,empty. Default: all"},
    },
    Run: runLint,
}
```

#### 5. 新增 import

`net/http`, `regexp`, `strings`, `time`
