用 AST 自动生成并校验函数调用关系与文档
29.8/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/11/2 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dazhinian/code-standard-python该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0⚪ 扫描:无法判定尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0已尝试扫描但取不到可分析的源码:仓库或包不存在、已删除,或为非 JS/TS 实现、未随包发布源码。无法判定,不代表安全。
- · 包内无可扫 JS
- · TS 源码(可能为非 JS 实现或未发布源码),无法判定
扫描于 2026/11/4(0 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
DSH 插件,外加 Python 代码规范工具链
README
由 DeepSeek 最新模型翻译生成code-standard-python
事实由 AST 生成,意图只写一遍;函数里能看到调用关系,但它由工具写、由工具校验。
为什么有 v2
v1 把调用关系写进 docstring(@calls / @called-by),但靠人手维护:实测示范项目 logistics(161 个函数、345 条 @calls)里,10 条声明根本没被调用、 18 个函数漏写内部调用,而 v1 的 lint.py 报告「全部通过」。
v2 的取舍:
| 信息 | 谁产生 | 存在哪 |
| 签名、参数、返回、调用边、raise 点 | AST(csp sync) | 卡片 + 写回 docstring 的 @calls |
| 副作用(结构化) | 人/模型写 docstring | @effect: db.write(claims), log |
| 纯度、异常、前置条件、线程安全、废弃 | 人/模型写 docstring | @pure / @raises / @pre 等 |
| 两者是否一致 | csp check | C0–C22 |
| 项目开关 / 文字约定 | csp init | .code-standard.json / AGENTS.md |
展开完整文档(README 剩余 1 节)
code-standard-python
事实由 AST 生成,意图只写一遍;函数里能看到调用关系,但它由工具写、由工具校验。
为什么有 v2
v1 把调用关系写进 docstring(@calls / @called-by),但靠人手维护:实测示范项目 logistics(161 个函数、345 条 @calls)里,10 条声明根本没被调用、 18 个函数漏写内部调用,而 v1 的 lint.py 报告「全部通过」。
v2 的取舍:
| 信息 | 谁产生 | 存在哪 |
| 签名、参数、返回、调用边、raise 点 | AST(csp sync) | 卡片 + 写回 docstring 的 @calls |
| 副作用(结构化) | 人/模型写 docstring | @effect: db.write(claims), log |
| 纯度、异常、前置条件、线程安全、废弃 | 人/模型写 docstring | @pure / @raises / @pre 等 |
| 两者是否一致 | csp check | C0–C22 |
| 项目开关 / 文字约定 | csp init | .code-standard.json / AGENTS.md |
@calls 不再手写:csp sync --write 按 AST 生成并回填;csp check 比对,手改或多写一条就报 C21。这样函数是自解释的,而事实不会漂移。
安装
cd code-standard-python
python -m venv .venv
.venv/Scripts/python -m pip install -e . # Windows
.venv/bin/python -m pip install -e . # POSIX
无第三方依赖(只用标准库 ast),Python ≥ 3.10。
快速开始
csp init --root path/to/repo # 写 .code-standard.json + AGENTS.md csp brief --file path/to/x.py # 生成上下文:规则 + 约定 + 现有符号/调用 csp sync --root path/to/repo --write # 卡片 + 回填 @calls csp check --root path/to/repo # 对账,error 时退出码 1 csp check --root path/to/repo --types # 额外跑 mypy,类型错误记为 T1 csp check --root path/to/repo --staged --strict # pre-commit 用 csp prompt / csp rules / csp stats # 提示、规则表、统计 csp db build --root path/to/repo # SQLite 索引(.code-standard/index.db) csp query callers NAME --root path/to/repo # callers/callees/impact/raises/effects/symbol
csp brief 是「生成标准化」的入口:把当次任务需要的规则、项目约定、目标文件现有符号与调用拼成一段上下文(默认约 1k token,--no-prompt 只留事实)。
项目策略只放机器开关:
{"schema": 1, "strict": false, "skip_dirs": ["migrations"]}
文字约定写在 AGENTS.md(csp init 生成,brief 原样注入);README 面向人。
代码长什么样
"""报价服务:订单 → 应付金额(单位:分)。
@stable
"""
from __future__ import annotations
def coupon_value(coupon: str | None) -> int:
"""券面额;无券为 0。
@pure
@raises: ValueError 当券码不以 C 开头 @pre: @mutates: @calls: - """ if coupon is None: return 0 if not coupon.startswith("C"): raise ValueError(f"非法券码 {coupon}") return int(coupon[1:] or 0)
def save_quote(path: str, total: int) -> None:
"""把总额写入文件。
@effect: file.write(path)
@pre: path 的父目录存在 @mutates: @raises: OSError 当目录不可写 @calls: - """ with open(path, "w", encoding="utf-8") as handle:
handle.write(str(total))
- @calls 只写项目内、精确解析到的调用(跨文件带模块前缀);外部包/builtin/ 未解析目标不写。没有内部调用时是 @calls: -。这一行由 csp sync --write 维护,不要手改。
- 每个函数(含嵌套函数)都有五个固定槽位:@effect(或 @pure)、@calls、@raises、 @pre、@mutates。没有内容写 -,未确认可留空;缺失的槽位由 csp sync --write 自动补齐(单行 docstring 会被展开)。
- @effect 是枚举,不是自由文本:db.read / db.write / file.read / file.write / net / log / env / clock / random / process / state / ui;none 等价 @pure。
卡片:跨函数的全局信息
csp sync 还生成 .code-standard/cards.jsonl,每张卡记录完整调用边与反向 called_by:
"calls": [json
{"name": "save_claim", "expr": "store.save_claim", "line": 950,
"confidence": "exact",
"target": {"qname": "save_claim", "file": "store.py", "line": 477}}
],
"called_by": [{"qname": "_h_pay", "file": "main.py", "line": 464, "confidence": "exact"}]
函数里写的是自己调谁(局部、稳定);谁调我是全局属性,随任何调用方改动而变,不写进 docstring,只在卡片里。查询影响面时用 called_by。
规则(摘要)
必填:摘要、type hints、@pure 或 @effect、有 raise 时的 @raises、@calls(工具生成)。
选填:@pre、@mutates、@env、@pii、@idempotent、@transactional、 @thread-safe / @not-thread-safe、@deprecated、@invariant。
模块:摘要 + @stable / @experimental(严格模式必填)。
完整规则表(C0–C22)见 standard.md,或运行 csp rules。
迁移 v1 bash csp sync --root . --write # 用事实重写所有 @calls(假声明/漏写一次修好) csp check --root . # 剩下的旧 @side-effect 会报 C20 warning
步骤:
1. sync --write 重写 @calls,不再手写;
2. 把 @side-effect: <描述> 改成 @effect: <种类>(<目标>)(C20 会逐个提示);
3. 删除 @called-by / @entry / @depends(C15 提示,关系在卡片);
4. csp check --strict 接入 CI。
作为技能使用
把 skill/code-standard/ 复制到 harness 的技能目录。技能只做编排: csp brief 拿上下文、sync --write 回填 @calls、check 对账;规则文本不复制进技能。
接入 git bash
cp hooks/pre-commit .git/hooks/pre-commit && chmod +x .git/hooks/pre-commit
钩子只校验暂存文件(csp check --staged --strict),CI 再跑全量 --strict 兜底。
结构
code-standard-python/
├── standard.md # 规范:标签、卡片格式、规则表 ├── skill/code-standard/ # SKILL:闭环与验收门 ├── hooks/pre-commit # 暂存文件校验 ├── examples/pricing/ # 按 v2 写成的示例模块 ├── src/code_standard_v2/ │ ├── model.py # Card / Param / CallFact / RaiseFact │ ├── tags.py # 标签、效果枚举、解析 │ ├── config.py # .code-standard.json 与 AGENTS.md │ ├── extract.py # AST → 卡片(事实层) │ ├── resolve.py # 调用解析与置信度 │ ├── inline.py # 生成 @calls 的值 │ ├── writeback.py # 把 @calls 写回 docstring │ ├── check.py # C0–C22 对账规则 │ ├── rules.py # 规则号/级别的唯一来源 │ ├── data/prompt.md # 生成提示(csp prompt 输出) │ └── cli.py # sync / check / brief / init / prompt / rules └── tests/test_v2.py # 56 个 unittest
测试 bash .venv/Scripts/python -m unittest discover -s tests -v
56 个用例覆盖:参数展开、BOM、标签/效果解析、raise 对账(含被 except 捕获的)、可变默认值、纯度冲突与两跳传递、方法作用域、类标签越界、内联 @calls 的生成/幂等/篡改检测、lambda 调用、引用边(回调/注册)、global 写入、模块级调用、 @overload、继承与 super()、类字段、参数改写、异常传播、assert/__all__、包级重导出(from pkg import X)、mypy 输出解析与 --types、效果静态检测(C27)、
git 改动识别、init 幂等、配置 skip/strict、brief 输出等。
本工具自身按 v2 编写:csp check --root . 输出 0 条,sync --write 幂等。
已知边界
已覆盖:普通/嵌套函数、属性 getter/setter、逃逸 raise 与调用链传播、 lambda 调用(~name)、引用边(ref→/ref←,回调与注册)、继承与 super()、类字段(dataclass 等)、参数改写(C26)、 global/nonlocal 读写(C24)、模块/类定义期调用(C25)、装饰器与默认值调用、生成器、@overload、assert、__all__、async。
取舍:模块常量不建标签;闭包只记录 nonlocal 声明;命名空间包与跨模块装饰器内部行为仍可能退化为 name_only。
不承诺:@pre/@thread-safe/@pii/@env 只查格式,语义靠评审; @mutates 只核对显式属性/下标改写(arg.append 这类方法改写查不到); @effect 可检测已登记 API(open/print/env/clock/random/process/db/net),封装函数与 ORM 细节仍需人判断;测试代码默认不检查;只支持 Python。
卡片是派生产物,不入库(.code-standard/ 自带 .gitignore)。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
dazhinian/code-standard-python
用 AST 自动生成并校验函数调用关系与文档
相关插件 · 工具 / 效率
破甲管控台kingcharleslzy-ai/dsh-purge
dsh-purge Community · DeepSeek Harness 社区维护版:宿主兼容、状态诊断、提示词管理、更新与本机备份回滚。基于小杨 / YuJunZhiXue 的 dsh-purge。
★ 4,330已汉化DeepSeek 客户端
74.5
网文长卷lingfengQAQ/webnovel-writer
基于 Claude Code 的长篇网文辅助创作系统,解决 AI 写作中的「遗忘」和「幻觉」问题,支持 200…
★ 7,826已汉化DSH
72.2
花束设计alchaincyf/huashu-design
一句话生成网页、原型、PPT 与信息图等可交付设计
★ 28,638已汉化DSH
71.7
多智能体协作HKUDS/AutoSwarm
AutoSwarm: Unify Your Agents. Unify Your Context (Codex · Claude Code · DeepSeek Harness · Muse · Grok · WorkBuddy· nanobot · and more)
★ 2,349已汉化DSH
71.6
Vox 拼贴视频生成Alisa0808/vox-director
🎬 Vox Director拼贴动效导演
★ 2,129已汉化DSH
71.4
Agent 演化引擎Q00/ouroboros
智能体 OS:智能体自己变聪明,我们只守住底线:面试准入、分阶段评估、带预算的进化循环。MCP 服务器,14 种运行时:Claude Code、Codex CLI、Gemini CLI、OpenCode、Copilot、Kiro 等。
★ 6,311已汉化DSH
71.4
这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。