# =============================================================================
# openUBMC Pre-commit Hooks Manifest
# =============================================================================
# 本仓库只提供 openUBMC 专属的、官方 pre-commit 生态中没有的钩子。
# 通用的代码卫生类钩子(trailing-whitespace / end-of-file-fixer /
# check-json / check-yaml / check-added-large-files / detect-private-key 等)
# 请直接引用官方仓库 pre-commit/pre-commit-hooks,详见 README.md。
#
# 引用本仓库:
#   repos:
#     - repo: https://gitcode.com/openUBMC/pre-commit-hooks
#       rev: 0.0.1
#       hooks:
#         - id: conventional-commit
#         - id: add-signoff-and-change-id
# =============================================================================

- id: conventional-commit
  name: Conventional Commit
  description: 强制 Commit Message 遵循 Conventional Commits 规范
  entry: hooks/conventional_commit.py
  language: script
  stages: [commit-msg]
  minimum_pre_commit_version: "3.0.0"

- id: add-signoff-and-change-id
  name: 追加 Signed-off-by 和 Change-Id
  description: 在 commit message 末尾自动追加 Signed-off-by 和 Change-Id 字段
  entry: hooks/add_signoff_and_change_id.py
  language: script
  stages: [commit-msg]
  minimum_pre_commit_version: "3.0.0"

- id: check-sr
  name: Check .sr Files
  description: 校验 .sr (openUBMC CSR/PSR) 文件语法,支持 C 风格注释
  entry: hooks/check_sr.py
  language: script
  files: '\.sr$'
  minimum_pre_commit_version: "3.0.0"

- id: check-global-properties
  name: Check Global Properties
  description: >-
    校验全局属性配置文件 global.json:路径/接口前缀/类型白名单/String 长度/数量上限等静态规则,
    以及属性类型(baseType)、持久化类型(usage)、取值范围禁止变更(报错),
    访问权限(privilege)、可读写(readOnly)、默认值(default)变更告警
  entry: hooks/check_global_properties.py
  language: script
  files: '(^|.*/)global\.json$'
  minimum_pre_commit_version: "3.0.0"

# === Lua 格式化 + 风格检查 ===

- id: stylua-format
  name: StyLua (Lua formatter)
  description: Lua 代码格式化
  entry: stylua
  language: system
  types: [lua]
  args: ["--config-path", ".stylua.toml", "--verify"]

- id: luacheck
  name: Luacheck (Lua linter)
  description: Lua 静态分析(lint)
  entry: luacheck
  language: system
  types: [lua]
  args: ["--config", ".luacheckrc", "--codes", "--no-color", "--ranges"]

# === Python 格式化与静态检查 ===
# 以下三个钩子采用 language: python + additional_dependencies,由 pre-commit 在
# 隔离虚拟环境中自动安装指定版本,无需用户手动 pip install。
# 参数与 litebmc/pre-commit-hooks 保持一致:line-length=120,black 跳过字符串引号
# 归一化,flake8 忽略 E203(切片冒号前空格,与 black 冲突)和 W503。

- id: black
  name: black
  description: Python 代码格式化(auto-fix 模式,Black 兼容)
  entry: black
  language: python
  files: \.py$
  types: [python]
  args: [--line-length=120]
  additional_dependencies: ['black==24.8.0']
  minimum_pre_commit_version: '2.9.2'

- id: isort
  name: isort
  description: Python import 排序(auto-fix 模式)
  entry: isort
  language: python
  files: \.py$
  types: [python]
  args: [--profile=black, --line-length=120]
  additional_dependencies: ['isort==5.13.2']
  minimum_pre_commit_version: '2.9.2'

- id: flake8
  name: flake8
  description: Python 代码风格检查(E203 由 no-space-before-colon 修复,此处只忽略 W503)
  entry: flake8
  language: python
  files: \.py$
  types: [python]
  args: [--max-line-length=120, --extend-ignore=W503]
  additional_dependencies:
    - 'flake8==7.1.0'
    - 'flake8-bugbear==24.4.21'
    - 'flake8-comprehensions==3.15.0'
  minimum_pre_commit_version: '2.9.2'

- id: no-space-before-colon
  name: no-space-before-colon
  description: 移除切片冒号前的空格(修复 black 的 E203/G.FMT.04 冲突,auto-fix)
  entry: autopep8 --select E203 --in-place
  language: python
  files: \.py$
  types: [python]
  additional_dependencies: ['autopep8==2.3.1']
  minimum_pre_commit_version: '2.9.2'

# === JSON / YAML 语法检查(inline entry,无脚本) ===
# 参考 litebmc/pre-commit-hooks:entry 直接内联 python -c,避免新增脚本文件。
# check-yaml 依赖 pyyaml,由 additional_dependencies 自动安装;check-json 仅用标准库。

- id: check-json
  name: Check JSON
  description: JSON 语法检查
  entry: python -c "import sys, json; [json.load(open(f, encoding='utf-8')) for f in sys.argv[1:]]"
  language: python
  files: \.json$
  minimum_pre_commit_version: '2.9.2'

- id: check-yaml
  name: Check YAML
  description: YAML 语法检查 (yaml.safe_load)
  entry: python -c "import sys, yaml; [yaml.safe_load(open(f, encoding='utf-8')) for f in sys.argv[1:]]"
  language: python
  files: \.(yaml|yml)$
  additional_dependencies: ['pyyaml==6.0.2']
  minimum_pre_commit_version: '2.9.2'

# === C/C++ 格式化(pip 安装 clang-format,无脚本、无外部仓库) ===
# -style=file:从文件所在目录向上查找 .clang-format;若缺失,clang-format
# 默认按 LLVM 风格格式化(不会报错)。需要稳定的可在 args 追加
# --fallback-style=none 让缺配置时报错。

- id: clang-format
  name: clang-format
  description: C/C++ 代码格式化 (原地修改,使用项目 .clang-format)
  entry: clang-format
  language: python
  types_or: [c++, c, c#, cuda, java, javascript, json, objective-c, proto, textproto]
  args:
    - -i
    - -style=file
  additional_dependencies: ['clang-format==22.1.5']
  minimum_pre_commit_version: '2.9.2'

# === TypeScript / Vue 代码质量检查与格式化 ===
# ESLint 和 Prettier 采用 language: node + additional_dependencies,由 pre-commit 在
# 隔离 Node 环境中安装指定版本,无需用户手动 npm install。
# ESLint 只做代码质量检查(逻辑错误、圈复杂度、未使用变量等),格式化交给 Prettier。
# eslint-config-prettier 关闭 ESLint 中与 Prettier 冲突的格式化规则。

- id: eslint
  name: eslint
  description: TypeScript / Vue 代码质量检查与自动修复
  entry: eslint --fix
  language: node
  types: [file]
  files: \.[jt]sx?$|\.vue$
  additional_dependencies:
    - 'eslint@8.47.0'
    - 'eslint-plugin-vue@9.17.0'
    - 'eslint-config-prettier@8.10.0'
    - '@typescript-eslint/eslint-plugin@5.4.0'
    - '@typescript-eslint/parser@5.4.0'
    - 'vue-eslint-parser@8.0.1'
  minimum_pre_commit_version: '2.9.2'

- id: prettier
  name: prettier
  description: TypeScript / Vue / CSS / JSON 代码格式化(原地修改)
  entry: prettier --write
  language: node
  types: [file]
  files: \.[jt]sx?$|\.vue$|\.css$|\.less$|\.scss$|\.json$|\.md$
  additional_dependencies: ['prettier@3.0.3']
  minimum_pre_commit_version: '2.9.2'