mcpField
N
naming

naming

github.com/timschoch开发1619 次安装2 天前更新
代码仓库

关于 naming

面向需要统一标识符的团队的仓库命名技能,以术语表为依据,并支持项目覆盖规则和推送、CI 检查。

主要功能

  1. 01依据术语表制定命名规则
  2. 02合并项目专属覆盖配置
  3. 03机器可检查的命名门禁
  4. 04覆盖代码产物的命名指南

适用场景

  1. 01推送前检查命名变更
  2. 02统一代码与 API 路由中的术语
  3. 03配置仓库专属命名约定

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/timschoch/skilly --skill naming

安装后在 Claude Code 中输入/naming确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
biome.json
lint.md
naming.json
references/stacks/
tech-payload.json
tech-tanstack.json
scripts/
check.mjs
config.mjs
default-branch.mjs
merge-config.mjs

详细介绍

命名

一份列表,和 Hub 同步。naming 门禁会在推送时和 CI 中检查机器能检查的内容;其余由你判断。references/lint.md 划定了界限。

命名之前,先运行 node .agents/skills/naming/scripts/config.mjs,并将其输出作为当前规则来阅读:它会打印与项目覆盖项合并后的 references/naming.json。

规则

  1. 每个事物只用一个词,而且这个词必须来自 GLOSSARY.md。先查这里,再查现有类型、数据库表和 API 路由。仓库中的用词优先于请求中的用词。

    好不好原因
    testimonialcustomerQuote请求说的是“客户引言”,仓库用的是 testimonial
    Testimonial 类型、testimonials 表、/api/testimonialsTestimonial 类型、reviews 表每个事物只用一个词,处处一致
    order与 order 并用的 purchase一个事物用两个词会让搜索结果分散
  2. 还没有对应的词?运行 term-check,向用户展示结果并取得确认,然后通过负责维护该文件的 domain-modeling 将这个词加入 GLOSSARY.md。

    好不好原因
    经术语检查并写入 GLOSSARY.md 的 carryOver在 PR 中自行发明的 carryOver新词需要用户确认
    记录了复数形式 caseStudies 的 caseStudy没有词条的 caseStudy下一个 Agent 可能会选用不同的词
    加入角色列表的 grid使用 Grid,但列表未更新闭合列表之外的角色是新词
  3. 按角色命名,而非按类型命名。不要加 I 或 T 前缀,不要使用匈牙利命名法,也不要使用噪声词(见 naming.json 中的 noiseWords)。

    好不好原因
    UserIUser不加 I 前缀
    countnCount不用匈牙利命名法
    accountsaccountList、accountData不用噪声词,复数形式已经表示多个
  4. 只用完整单词,不用单字母名称,也不用魔法数字。禁止使用的短词列在 naming.json 的 shortWords 中。

    好不好原因
    optionsopts使用完整单词
    errore、err不用单字母,也不用缩写
    const MAX_RETRIES = 3单独的 3数字需要有名称
  5. 不要重复调用处已经表达的内容。

    好不好原因
    user.nameuser.userName对象已经说明是 user
    testimonials.add(item)testimonials.addTestimonial(item)集合已经说明是 testimonial
    testimonials 表中的 name 字段testimonial_name 字段表名已经说明是 testimonial
  6. 动作名称以 naming.json 的 prefixes 中的动词开头,每种含义只用一个动词。纯派生值可以使用名词。

    好不好原因
    fetchTestimonials与之并存的 loadTestimonials每种含义只用一个动词;fetch 表示通过网络获取
    listUsersgetAllUserslist 表示多个
    branchShagetBranchSha纯派生值可以使用名词

    前缀代表其含义:get 只读取,set 不返回任何内容,is 返回布尔值;find 可能什么都找不到,而 get 不会。名称中带有 and(如 saveAndNotify)就意味着这是两个函数。

  7. 存储的布尔状态使用裸形容词;检查操作使用 is、has、can 或 should;绝不使用 notX。

    好不好原因
    archivedisArchived存储状态使用裸形容词
    isEmpty、canRetryempty()、retryAllowed检查操作要带前缀
    enablednotDisabled只用肯定形式的名称
  8. 实体使用单数,集合使用复数。在 GLOSSARY.md 中将不规则复数形式记录在对应词条旁。

    正确错误原因
    类型 Testimonial,文件 testimonial.ts类型 Testimonials单个实体用单数
    表、路径、文件夹 testimonials表 testimonial集合用复数
    case_studies,在 GLOSSARY.md 中记录不规则复数case_studys不规则复数只需记录一次
  9. 不使用 enum。使用字符串字面量联合类型或 as const 对象。命名中的判别键是 naming.json 中的 kind。自有值使用 kebab-case;从外部 API 镜像的值保持原样。

    正确错误原因
    type Status = 'open' | 'in-progress'enum Status { Open }不使用 enum
    { kind: 'pull-request' }{ type: 'pull-request' }判别键是 kind
    GitHub API 中的 'MERGED''merged'镜像值保持原样
  10. 按照从大到小的顺序,从 naming.json 中的 parts 构建每个名称:project · area · entity · role · action · attribute · consumer。选取所需部分,并保持顺序。每个 artifacts 条目都会列出部分、大小写形式和示例。role 是每个仓库中固定的列表(artifacts.component.roles、artifacts.env.roles)。环境变量遵循 artifacts.env.shape。Payload CMS:集合 slug = API 路径 = 表;slug 使用 kebab-case 和复数形式(case-studies),表名将连字符替换为下划线(case_studies)。

    正确错误原因
    COLIN_SYNC_KEY_FOR_TWENTYTWENTY_API_KEY先写颁发方,再写密钥用途,最后写持有者
    TestimonialGridGridTestimonial先写实体,再写角色
    testimonial.addedaddTestimonial事件描述过去发生的事实,而不是命令
  11. 大小写形式遵循语言指南和仓库的 linter。文件和文件夹使用小写 kebab-case。如果仓库已有约定,则以现有约定为准:在 artifacts.file.case 和 artifacts.folder.case 中设置,可指定一种大小写形式或列表(React 组件和钩子使用 ["kebab", "PascalCase", "camelCase"])。

    正确错误原因
    render-pr-body.mjsrenderPrBody.mjs文件使用 kebab-case
    src/components/case-studies/src/components/case_studies/文件夹使用 kebab-case
    在所有地方都使用 load 的仓库中使用 loadUser在旁边使用 fetchUser以现有约定为准
  12. 含义改变了?在同一次更改中到处重命名,参见 writing-rules 中的规则 204。

    正确错误原因
    在一个 PR 中将代码、文档和数据库中的 draft 重命名为 proposal代码已重命名,文档仍写着 draft同一事物不能有两个名称
    值不再表示上限后使用 retryCount仍使用 maxRetries名称不符合实际含义
    重命名并更新 GLOSSARY.md仅重命名术语表是权威来源

每个项目的覆盖项

覆盖文件:.skilly/naming.json,结构与 references/naming.json 相同,只包含需要更改的键。仅当 .skilly/naming.json 缺失时,才会读取旧的 docs/agents/naming.json:将其移至 .skilly/naming.json。

合并顺序:

  1. references/naming.json
  2. 按 .skilly/config.json 中 bundles 列出的顺序,依次合并 references/stacks/<bundle>.json。文件缺失时跳过。仅通过 includes 引入的 bundles 不计入。
  3. .skilly/naming.json

合并规则:

  • 对象按键合并。null 会删除对应键。
  • 数组追加并去重。"-Data" 会删除默认的 Data。
  • 标量值会覆盖。
{
  "prefixes": { "sync": { "meaning": "mirror to a remote system", "not": ["push", "mirror"] } },
  "noiseWords": ["-Data"],
  "allow": {
    "ctxTools": { "names": ["^ctx_"], "rules": ["short-word"], "why": "lean-ctx tool names." },
    "payload/migrations": null
  }
}

allow 存放命名条目。结构及其豁免的规则见:references/lint.md。

参考资料

评论

支持 Markdown