Skip to content

Latest commit

 

History

History
585 lines (460 loc) · 14.6 KB

File metadata and controls

585 lines (460 loc) · 14.6 KB

规则库管理(第二部分)

规则组织和分类

随着规则库的增长,规则的组织和分类变得至关重要。一个良好的组织结构可以帮助您和您的团队快速找到需要的规则,并确保规则的可维护性。

规则分类策略

1. 基于功能的分类

根据规则的功能和用途进行分类是最常用的方法之一:

rules-library/
├── code-quality/          # 代码质量检查规则
├── documentation/         # 文档生成和验证规则
├── workflow/              # 工作流自动化规则
├── testing/               # 测试相关规则
└── security/              # 安全检查规则

优点

  • 规则的功能一目了然
  • 易于查找特定目的的规则
  • 与开发流程中的实际需求对应

示例

# 创建基于功能的分类目录
mkdir -p ~/cursor-rules-library/categories/{code-quality,documentation,workflow,testing,security}

在Terminal中:

# Windows CMD
@echo off
rem 创建基于功能的分类目录
set libraryPath=%USERPROFILE%\cursor-rules-library
if not exist "%libraryPath%\categories\code-quality" mkdir "%libraryPath%\categories\code-quality"
if not exist "%libraryPath%\categories\documentation" mkdir "%libraryPath%\categories\documentation"
if not exist "%libraryPath%\categories\workflow" mkdir "%libraryPath%\categories\workflow"
if not exist "%libraryPath%\categories\testing" mkdir "%libraryPath%\categories\testing"
if not exist "%libraryPath%\categories\security" mkdir "%libraryPath%\categories\security"

# Linux/macOS
#!/bin/bash
# 创建基于功能的分类目录
libraryPath="$HOME/cursor-rules-library"
mkdir -p "$libraryPath/categories/code-quality"
mkdir -p "$libraryPath/categories/documentation"
mkdir -p "$libraryPath/categories/workflow"
mkdir -p "$libraryPath/categories/testing"
mkdir -p "$libraryPath/categories/security"

2. 基于技术栈的分类

根据规则适用的技术栈或编程语言进行分类:

rules-library/
├── javascript/        # JavaScript相关规则
├── python/            # Python相关规则
├── react/             # React相关规则
├── nodejs/            # Node.js相关规则
└── database/          # 数据库相关规则

优点

  • 针对特定技术的规则集中管理
  • 便于技术专家维护
  • 与项目的技术选择直接对应

示例

# 创建基于技术栈的分类目录
mkdir -p ~/cursor-rules-library/tech-stack/{javascript,python,react,nodejs,database}

在Terminal中:

# Windows CMD
@echo off
rem 创建基于技术栈的分类目录
set libraryPath=%USERPROFILE%\cursor-rules-library
if not exist "%libraryPath%\categories\javascript" mkdir "%libraryPath%\categories\javascript"
if not exist "%libraryPath%\categories\python" mkdir "%libraryPath%\categories\python"
if not exist "%libraryPath%\categories\java" mkdir "%libraryPath%\categories\java"
if not exist "%libraryPath%\categories\csharp" mkdir "%libraryPath%\categories\csharp"
if not exist "%libraryPath%\categories\go" mkdir "%libraryPath%\categories\go"
if not exist "%libraryPath%\categories\rust" mkdir "%libraryPath%\categories\rust"

# Linux/macOS
#!/bin/bash
# 创建基于技术栈的分类目录
libraryPath="$HOME/cursor-rules-library"
mkdir -p "$libraryPath/categories/javascript"
mkdir -p "$libraryPath/categories/python"
mkdir -p "$libraryPath/categories/java"
mkdir -p "$libraryPath/categories/csharp"
mkdir -p "$libraryPath/categories/go"
mkdir -p "$libraryPath/categories/rust"

3. 基于团队的分类

在大型组织中,可以按照团队职责划分规则:

rules-library/
├── frontend/          # 前端团队规则
├── backend/           # 后端团队规则
├── devops/            # DevOps团队规则
├── data-science/      # 数据科学团队规则
└── security/          # 安全团队规则

优点

  • 明确规则的所有权和维护责任
  • 符合组织结构
  • 方便团队协作和知识共享

使用标签系统

除了目录结构外,使用标签系统可以提供更灵活的分类方式:

{
  "id": "js_best_practices",
  "name": "JavaScript最佳实践",
  "tags": ["javascript", "best-practices", "code-quality", "es6", "linting"]
}

这样,一个规则可以同时属于多个类别,便于通过不同维度查找。

创建标签索引

为了有效利用标签系统,可以创建一个标签索引文件:

# 创建标签索引
cat > ~/cursor-rules-library/tags-index.json << EOL
{
  "tags": {
    "javascript": [
      "js_best_practices",
      "js_performance_checks"
    ],
    "best-practices": [
      "js_best_practices",
      "python_code_style",
      "react_component_standards"
    ],
    "code-quality": [
      "js_best_practices",
      "code_complexity_checker",
      "duplicate_code_detector"
    ]
  }
}
EOL
@echo off
rem 创建标签索引
set libraryPath=%USERPROFILE%\cursor-rules-library
(
echo {
echo   "tags": {
echo     "javascript": [
echo       "js_best_practices",
echo       "js_performance_checks"
echo     ],
echo     "best-practices": [
echo       "js_best_practices",
echo       "python_code_style",
echo       "react_component_standards"
echo     ],
echo     "code-quality": [
echo       "js_best_practices",
echo       "code_complexity_checker",
echo       "duplicate_code_detector"
echo     ]
echo   }
echo }
) > "%libraryPath%\tags-index.json"

组织优化技巧

1. 创建README文件

在每个目录中添加README文件,描述该目录的规则用途和使用方法:

# 创建README文件
cat > ~/cursor-rules-library/categories/code-quality/README.md << EOL
# 代码质量规则

本目录包含用于检查和提高代码质量的规则。

## 规则列表

- **js_best_practices**: JavaScript编码最佳实践检查
- **code_complexity_checker**: 代码复杂度检查
- **duplicate_code_detector**: 重复代码检测

## 使用指南

将这些规则添加到项目的\`.cursor/rules/\`目录中,以启用代码质量检查。

## 贡献指南

添加新规则时,请确保:
1. 遵循命名约定
2. 提供详细文档
3. 添加示例
EOL
@echo off
rem 创建README文件
set libraryPath=%USERPROFILE%\cursor-rules-library
if not exist "%libraryPath%\categories\code-quality" mkdir "%libraryPath%\categories\code-quality"

(
echo # 代码质量规则
echo.
echo 本目录包含用于检查和提高代码质量的规则。
echo.
echo ## 规则列表
echo.
echo - **js_best_practices**: JavaScript编码最佳实践检查
echo - **code_complexity_checker**: 代码复杂度检查
echo - **duplicate_code_detector**: 重复代码检测
echo.
echo ## 使用指南
echo.
echo 将这些规则添加到项目的`.cursor/rules/`目录中,以启用代码质量检查。
echo.
echo ## 贡献指南
echo.
echo 添加新规则时,请确保:
echo 1. 遵循命名约定
echo 2. 提供详细文档
echo 3. 添加示例
) > "%libraryPath%\categories\code-quality\README.md"

2. 创建规则集

规则集是一组相关规则的集合,可以一次性应用到项目中:

# 创建规则集
cat > ~/cursor-rules-library/rule-sets/javascript-standards.json << EOL
{
  "name": "JavaScript Standards",
  "description": "JavaScript编码标准规则集",
  "version": "1.0.0",
  "rules": [
    "js_best_practices",
    "js_performance_checks",
    "js_security_rules"
  ]
}
EOL
@echo off
rem 创建规则集
set libraryPath=%USERPROFILE%\cursor-rules-library
if not exist "%libraryPath%\rule-sets" mkdir "%libraryPath%\rule-sets"

(
echo {
echo   "name": "JavaScript Standards",
echo   "description": "JavaScript编码标准规则集",
echo   "version": "1.0.0",
echo   "rules": [
echo     "js_best_practices",
echo     "js_performance_checks",
echo     "js_security_rules"
echo   ]
echo }
) > "%libraryPath%\rule-sets\javascript-standards.json"

3. 创建导入脚本

为了方便将规则集应用到项目中,可以创建导入脚本:

# 创建导入脚本
mkdir -p ~/cursor-rules-library/scripts
cat > ~/cursor-rules-library/scripts/import-ruleset.sh << EOL
#!/bin/bash

# 导入规则集到项目

if [ -z "$1" ] || [ -z "$2" ]; then
    echo "用法: ./import-ruleset.sh <规则集名称> <项目目录>"
    exit 1
fi

RULESET_NAME="$1"
PROJECT_DIR="$2"
LIBRARY_DIR="$HOME/cursor-rules-library"
RULESET_FILE="$LIBRARY_DIR/rule-sets/$RULESET_NAME.json"

if [ ! -f "$RULESET_FILE" ]; then
    echo "错误: 规则集 '$RULESET_NAME' 不存在"
    exit 1
fi

# 创建项目规则目录
mkdir -p "$PROJECT_DIR/.cursor/rules"

# 读取规则集
RULES=$(jq -r '.rules[]' "$RULESET_FILE")

# 导入规则
for RULE in $RULES; do
    # 查找规则文件路径
    RULE_PATH=$(jq -r ".rules[] | select(.id == \"$RULE\") | .path" "$LIBRARY_DIR/rules-index.json")
    
    if [ -n "$RULE_PATH" ] && [ -f "$LIBRARY_DIR/$RULE_PATH" ]; then
        cp "$LIBRARY_DIR/$RULE_PATH" "$PROJECT_DIR/.cursor/rules/"
        echo "导入规则: $RULE"
    else
        echo "警告: 找不到规则 '$RULE'"
    fi
done

echo "规则集 '$RULESET_NAME' 已导入到项目 '$PROJECT_DIR'"
EOL

# 添加执行权限
chmod +x ~/cursor-rules-library/scripts/import-ruleset.sh
@echo off
rem 创建导入脚本
set libraryPath=%USERPROFILE%\cursor-rules-library
if not exist "%libraryPath%\scripts" mkdir "%libraryPath%\scripts"

(
echo @echo off
echo rem 导入规则集到项目
echo.
echo if "%%~1"=="" goto usage
echo if "%%~2"=="" goto usage
echo.
echo set RULESET_NAME=%%~1
echo set PROJECT_DIR=%%~2
echo set LIBRARY_DIR=%%USERPROFILE%%\cursor-rules-library
echo set RULESET_FILE=%%LIBRARY_DIR%%\rule-sets\%%RULESET_NAME%%.json
echo.
echo if not exist "%%RULESET_FILE%%" (
echo     echo 错误: 规则集 '%%RULESET_NAME%%' 不存在
echo     exit /b 1
echo )
echo.
echo rem 创建项目规则目录
echo if not exist "%%PROJECT_DIR%%\.cursor\rules" mkdir "%%PROJECT_DIR%%\.cursor\rules"
echo.
echo rem 导入规则(注意:此处简化版本,CMD批处理无法像bash那样轻松解析JSON)
echo rem 实际使用时可能需要使用PowerShell或专用JSON解析工具
echo echo 正在导入规则集 '%%RULESET_NAME%%' 到项目 '%%PROJECT_DIR%%'
echo copy "%%RULESET_FILE%%" "%%PROJECT_DIR%%\.cursor\ruleset.json"
echo.
echo goto :eof
echo.
echo :usage
echo echo 用法: import-ruleset.bat ^<规则集名称^> ^<项目目录^>
echo exit /b 1
) > "%libraryPath%\scripts\import-ruleset.bat"

规则组织最佳实践

1. 一致的命名约定

使用一致的命名约定使规则更易于查找和理解:

  • 规则ID:使用下划线命名法,如 js_best_practices
  • 规则文件:使用连字符命名法,如 js-best-practices.mdc
  • 目录名:使用连字符命名法,如 code-quality

2. 避免重复规则

在添加新规则前,检查是否已存在类似功能的规则:

# 搜索现有规则
grep -r "var\\s+\\w+" ~/cursor-rules-library/categories/
@echo off
rem 搜索现有规则
set libraryPath=%USERPROFILE%\cursor-rules-library
findstr /s /r /c:"var[[:space:]]\+[a-zA-Z0-9_]\+" "%libraryPath%\categories\*.*"

3. 规则依赖管理

如果规则之间存在依赖关系,在元数据中明确标出:

metadata:
  dependencies: [
    "base_style_rules",
    "common_patterns"
  ]
</rule>

并创建依赖图以可视化依赖关系:

# 创建依赖图
cat > ~/cursor-rules-library/metadata/dependencies.json << EOL
{
  "dependencies": {
    "js_best_practices": ["base_style_rules", "common_patterns"],
    "react_component_standards": ["js_best_practices"],
    "typescript_rules": ["js_best_practices"]
  }
}
EOL

4. 规则文档模板

为每个规则创建一个文档模板,确保文档的完整性:

# 创建规则文档模板
cat > ~/cursor-rules-library/templates/rule-docs-template.md << EOL
# {{RULE_NAME}}

## 概述

{{RULE_DESCRIPTION}}

## 用途

- {{PURPOSE_1}}
- {{PURPOSE_2}}
- {{PURPOSE_3}}

## 配置

json
{
  "option1": "value1",
  "option2": "value2"
}

## 示例

### 触发规则的代码

javascript
{{BAD_CODE_EXAMPLE}}

### 符合规则的代码

javascript
{{GOOD_CODE_EXAMPLE}}


## 相关规则

- {{RELATED_RULE_1}}
- {{RELATED_RULE_2}}

## 维护者

- {{MAINTAINER_NAME}} ({{MAINTAINER_EMAIL}})
EOL

规则组织工具

为了更好地管理规则库,可以创建一些辅助工具:

1. 规则目录生成器

# 创建规则目录生成器
cat > ~/cursor-rules-library/scripts/generate-rules-directory.sh << EOL
#!/bin/bash

# 生成规则目录结构

LIBRARY_DIR="$HOME/cursor-rules-library"
OUTPUT_FILE="$LIBRARY_DIR/rules-directory.md"

echo "# Cursor Rules 目录" > "$OUTPUT_FILE"
echo "" >> "$OUTPUT_FILE"
echo "生成时间: $(date '+%Y-%m-%d %H:%M:%S')" >> "$OUTPUT_FILE"
echo "" >> "$OUTPUT_FILE"

# 遍历分类目录
for CATEGORY_DIR in "$LIBRARY_DIR/categories/*"; do
    if [ -d "$CATEGORY_DIR" ]; then
        CATEGORY=$(basename "$CATEGORY_DIR")
        echo "## ${CATEGORY^}" >> "$OUTPUT_FILE"
        echo "" >> "$OUTPUT_FILE"
        
        # 查找该分类下的规则
        for RULE_FILE in "$CATEGORY_DIR"/*.mdc; do
            if [ -f "$RULE_FILE" ]; then
                RULE_NAME=$(grep -m 1 "^name:" "$RULE_FILE" | sed 's/name: //')
                RULE_DESCRIPTION=$(grep -m 1 "^description:" "$RULE_FILE" | sed 's/description: //')
                
                echo "- **$RULE_NAME**: $RULE_DESCRIPTION" >> "$OUTPUT_FILE"
            fi
        done
        
        echo "" >> "$OUTPUT_FILE"
    fi
done

echo "规则目录已生成到: $OUTPUT_FILE"
EOL

# 添加执行权限
chmod +x ~/cursor-rules-library/scripts/generate-rules-directory.sh

2. 规则统计工具

# 创建规则统计工具
cat > ~/cursor-rules-library/scripts/rules-stats.sh << EOL
#!/bin/bash

# 生成规则库统计信息

LIBRARY_DIR="$HOME/cursor-rules-library"

# 计算总规则数
TOTAL_RULES=$(find "$LIBRARY_DIR/categories" -name "*.mdc" | wc -l)

# 按分类统计
echo "按分类统计规则数量:"
for CATEGORY_DIR in "$LIBRARY_DIR/categories/*"; do
    if [ -d "$CATEGORY_DIR" ]; then
        CATEGORY=$(basename "$CATEGORY_DIR")
        COUNT=$(find "$CATEGORY_DIR" -name "*.mdc" | wc -l)
        echo "- $CATEGORY: $COUNT"
    fi
done

# 按标签统计
echo -e "\n按标签统计规则数量:"
for TAG in $(jq -r '.tags | keys[]' "$LIBRARY_DIR/tags-index.json"); do
    COUNT=$(jq -r ".tags.\"$TAG\" | length" "$LIBRARY_DIR/tags-index.json")
    echo "- $TAG: $COUNT"
done

echo -e "\n总规则数: $TOTAL_RULES"
EOL

# 添加执行权限
chmod +x ~/cursor-rules-library/scripts/rules-stats.sh

在下一部分,我们将探讨规则的版本控制和维护策略,帮助您管理规则库的生命周期。