Vicinae 贡献指南:从提交 Issue 到合并 PR 的规范、格式与静态检查全流程
桌面应用开发工具【免费下载链接】vicinaeA focused launcher for your desktop - native, fast, extensible项目地址https://gitcode.com/gh_mirrors/vi/vicinae点击查看免费下载Vicinae 是一个基于 QtQuick 的原生桌面启动器command palette仓库以 C 承担业务逻辑、QML 承担界面呈现并用 React/TypeScript 驱动扩展 API。本文以仓库根目录的 CONTRIBUTING.md 为骨架结合 AGENTS.md、根目录 Makefile、.clang-format、.clang-tidy 及src/server下的内置命令实现完整讲解向 Vicinae 提交 bug 报告与代码贡献时必须遵循的规范Issue 提交流程、代码通用准则、clang-format/clang-tidy格式化与静态检查体系以及针对 AI 生成代码的评审口径。读完本文你将清楚掌握如何提交一份会被认真对待的 Issue和如何写出能通过评审的 C/QML/TypeScript 补丁。一、总览贡献的两种途径Vicinae 的贡献者指南开宗明义这份文档包含你在贡献之前无论是以 bug 报告还是代码的形式必须遵循的一组准则。仓库本身是 C23 QML 的多平台项目Linux / macOS / Windows其开发工作流在不同平台上有明确分工UNIX 系使用make dev进入开发模式Windows 使用cmake --preset windows-relwithdebinfo仅在必要时才做完整 debug 构建。这两条开发入口同时记录在 AGENTS.md 中与贡献指南中的所有提交的代码都需要本地测试直接呼应任何补丁在提交前都应先在对应平台的开发模式下完成构建与验证。二、提交 Issue 的正确姿势2.1 Issue 追踪与查重所有 Issue 都通过仓库内置的 GitHub Issue 追踪器管理。如果拿不准自己的问题是否值得开一个新 Issue可以选择先创建 GitHub Discussion 或加入 Discord 服务器讨论避免污染 Issue 列表。在打开 Issue 之前务必先做一次快速搜索确认自己没有创建重复条目——这是开源仓库维护者最在意的基本礼仪之一。2.2 遵循 Issue 模板与内置报告命令提交时请确保遵循仓库提供的 Issue 模板。指南特别强调bug 类 Issue 应优先使用 Vicinae 内置的 Report Bug 命令直接提交除非该 bug 导致 Vicinae 服务器无法启动。这一要求在源码中有完整实现。report-bug-command.hpp 定义了内置命令report-bugid 为report-bug名称为 Report a Vicinae Bug其作用是用预填好的相关信息跳转到 Vicinae 的 Issue 创建页面它还接收一个可选的title参数并带有create issue关键字便于搜索命中。预填信息来自 bug-report-url.hpp 中的ISSUE_TEMPLATE会自动拼接以下系统信息让维护者无需反复追问环境细节Version版本号与 Build info构建信息来自generated/version.hProvenance来源渠道OS操作系统与 QT PlatformDE桌面环境来自internal/os-release.hpp模板正文还固定包含 Describe the bug、To Reproduce、Expected behavior 等小节。也就是说用内置命令提交 bug 时版本、OS、桌面环境等关键环境信息会被自动带出你只需要描述复现步骤与预期行为即可。该命令的入口在设置页的 About 页面AboutSettingsPage.qml 中Settings.reportBug()底层的reportBug()实现在 settings-window.cpp。2.3 扩展 bug 与安全问题走专门通道如果 bug 涉及官方 Vicinae 扩展商店中发布的扩展应在其扩展仓库vicinaehq/extensions中提交 Issue而不是主仓库——主仓库的 Issue 只跟踪 Vicinae 本体的问题。如果怀疑是严重的安全问题不要直接开公开 Issue应通过 vicinaehq 组织页面上列出的联系邮箱私下联系维护团队。三、贡献代码的通用准则3.1 Less is more小步提交指南的第一条原则直白而实用Less is more——每一行新代码都意味着项目额外的维护成本体量巨大的 PR 被接受的概率更低尤其是那些包含重大架构决策、且之前从未讨论过的改动。因此如果你打算做一个大改动建议先加入 Discord 服务器在 dev 频道中与维护者充分讨论后再动手。这既能避免方向性返工也能让后续评审更顺畅。3.2 本地测试是硬性要求所有提交的代码都需要在本地测试通过。构建说明与开发技巧见官方文档的 build 页面如前所述开发入口在 UNIX 上为make dev在 Windows 上为cmake --preset windows-relwithdebinfoAGENTS.md。注意仓库是只读的这里的构建与测试指的是在你自己的本地工作副本中进行。四、格式化与 Lint硬性门槛Vicinae 的格式化体系是分语言、多工具、可一键执行的语言/文件格式化工具触发方式C.cpp/.hpp/.mmclang-formatmake format内部clang-format目标QML.qmlqmlformatmake format内部qmlformat目标TypeScriptsrc/typescriptbiome format --writemake format内部tsfmt目标4.1 clang-format代码风格的唯一标准格式化统一由仓库根目录的.clang-format文件规定所有贡献必须尊重该格式。根目录 .clang-format 的关键配置为BasedOnStyle: LLVM——以 LLVM 风格为基础ColumnLimit: 110——单行最长 110 列AllowShortIfStatementsOnASingleLine: true、AllowShortBlocksOnASingleLine: Always、AllowShortFunctionsOnASingleLine: All——允许短语句/代码块/函数单行书写SortIncludes: false——头文件不自动排序include 顺序规则见下文 4.4。你可以运行make format一次性格式化整个项目的所有文件大多数现代 IDE 也能根据.clang-format自动拾取规则并在保存时自动格式化。对照 Makefile 可以看到clang-format目标的真实行为它遍历./src下所有*.cpp、*.hpp、*.mm文件按-n 10 -P $(NPROC)并行调用clang-format -i原地改写。如果想要只检查不改写CI / 提交前自检场景可运行make check-format它对同样范围的文件执行clang-format --dry-run -Werror任一文件格式漂移即返回非零退出码Makefile。4.2 需要跳过的文件.clang-format-ignore部分 vendored 依赖与生成代码不应被重新格式化它们记录在根目录 .clang-format-ignore 中包括src/lib/common/include/common/CLI11.hpp第三方 CLI 库src/lib/emoji/include/emoji/generated/*等生成目录src/server/src/lib/toml.hpp需要注意.clang-format-ignore只有clang-format 18才被支持。Windows 下的格式化脚本 scripts/format.ps1 对此专门做了版本兜底优先使用$env:CLANG_FORMAT覆盖其次寻找 VS 2022 自带的 LLVM若 PATH 上的版本低于 18 则尝试切换并输出警告旧版本会误改生成文件、造成无谓的 diff。4.3 Windows 贡献者scripts/format.ps1Windows 用户没有 GNU make / POSIX shell 时可以运行 PowerShell 脚本 scripts/format.ps1 作为make format的等价物pwsh scripts/format.ps1 # 原地格式化整个源码树 pwsh scripts/format.ps1 -Check # 仅校验 C 格式等价 make check-format漂移时以非零退出码失败该脚本同样覆盖 clang-formatC、qmlformatQML与 biomeTypeScript三段并以批处理方式每批 40 个文件调用工具以规避 Windows 命令行长度限制。4.4 注释纪律指南对注释的态度非常明确把注释数量控制在严格的最低限度好代码不需要大量注释。但也有例外如果你觉得自己的解决方案不理想、可以改进或者依赖某种奇怪的 hack那么用注释记录下来是被鼓励的。项目目前不使用文档生成器因此不需要为生成文档而写注释。AGENTS.md 进一步细化了编码风格中的注释与书写规则QObject 类中Q_OBJECT、Q_PROPERTY、Q_INVOKABLE、signals按顺序放在类顶部include 顺序系统头文件在前本地头文件在后头文件保护统一使用#pragma once字符串类型内部用std::stringQString只出现在 Qt 边界常量使用UPPER_SNAKE_CASE。4.5 clang-tidy新代码必须通过仓库最近才添加了.clang-tidy配置文件目前并未全局强制启用——因为还有大量代码尚未迁移。但新代码必须对照这些规则检查。多数 IDE 仅凭.clang-format/.clang-tidy文件的存在就能自动提供对应的智能提示intellisense。从根目录 .clang-tidy 可以看到这套检查体系的取向WarningsAsErrors将所有告警视为错误唯一豁免bugprone-unchecked-optional-access启用的检查族包括bugprone-*、concurrency-*、cppcoreguidelines-*、google-global-names-in-headers、misc-*、modernize-*、performance-*、portability-*、readability-*等同时针对项目实际逐条关闭了不合适的子规则如cppcoreguidelines-avoid-magic-numbers、readability-magic-numbers、modernize-use-trailing-return-type等CheckOptions中强制了命名规范类/结构体/枚举使用CamelCase函数使用camelBack.clang-tidyHeaderFilterRegex排除了 vendored 的CLI11、toml、rang头文件。关于 lint 违规的豁免策略AGENTS.md 给出了更细的指引个别违规在特定场景下可被接受应使用//NOLINTBEGIN(rule)与//NOLINTEND(rule)成对注释包裹行内//NOLINT注释一般不被鼓励格式化后可能错位失效若 NOLINT 指令本身无效例如 STL 内部误报才考虑在本地.clang-tidy配置中显式关闭对应检查。4.6 别忘了 QML 与 TypeScript虽然 CONTRIBUTING.md 只点名了clang-format但完整的make formatMakefile实际上串联了三段qmlformat tsfmt clang-format。其中 QML 还有独立的make qmllint用于运行 linterAGENTS.mdQML 内的 JavaScript 应尽量使用 ES6 语法且逻辑只服务于呈现关注点metrics 计算、hover 信号等。TypeScript 部分统一由biome format --write .格式化Makefile。五、AI 生成代码的处理政策CONTRIBUTING.md 对 AI 生成代码给出了非常明确的态度核心要点如下AI 生成代码与普通代码一视同仁上述所有规则本地测试、格式、lint同样适用没有任何豁免。AI 不能替代真正的理解与测试指南原文是 dont be lazy别偷懒。不遵守指南的懒 AI PR将被直接拒绝。PR 描述尽量简洁没有人会去读你写的长篇大论描述应直奔主题。披露使用情况良好实践如果贡献大部分由 AI 生成建议在 PR 中注明使用了哪个模型或工具——这有助于维护者评估与复核。结合前文 4.5 节可以理解背后的工程逻辑Vicinae 的clang-tidy检查族bugprone-*、cppcoreguidelines-*、performance-*等本质上就是为捕获 AI 代码常见的看似正确实则危险的模式而设因此新代码必须通过 clang-tidy 规则对 AI 生成代码尤为关键。六、总结一份合格贡献的检查清单综合 CONTRIBUTING.md 与仓库实现提交前可以对照这份清单自查是否为重复 Issue是否遵循 Issue 模板bug 是否通过 Vicinae 内置 Report Bug 命令提交除非服务器无法启动扩展相关 bug 是否已转到扩展仓库大改动是否已在 dev 频道提前讨论过代码是否在本地UNIX 用make devWindows 用cmake --preset windows-relwithdebinfo完成构建与测试是否运行了make formatWindows 用pwsh scripts/format.ps1并通过make check-format或-Check新代码是否通过了.clang-tidy规则检查必要时用NOLINTBEGIN/END成对豁免注释是否精简到最小、是否只在解释非理想方案/hack时使用若为 AI 生成代码是否真实理解并测试过、PR 描述是否简洁、是否注明了所用模型遵循这些约定你的 Issue 和 PR 就能以维护者最习惯的形态进入评审流程这也是 Vicinae 社区能保持代码少而精、评审可负担这一工程文化的基础。赞分享桌面应用开发工具【免费下载链接】vicinaeA focused launcher for your desktop - native, fast, extensible项目地址https://gitcode.com/gh_mirrors/vi/vicinae点击查看免费下载相关推荐Containerization 项目贡献指南从 Issue 提交到 PR 合并的完整流程与工程规范Containerization 项目贡献指南从 Issue 提交到 PR 合并的完整流程与工程规范 本文是 Containerization一个在 App容器运行时虚拟化云原生STK高级技巧如何通过Modal与BandedWG创建专业级合成音色STK高级技巧如何通过Modal与BandedWG创建专业级合成音色 在音乐制作和音频开发领域专业级合成音色的创建往往需要复杂的算法和精细的参数调整。 Sy音频处理音频有限状态机在Gin Web中的应用轻松实现复杂审批流程的终极指南有限状态机在Gin Web中的应用轻松实现复杂审批流程的终极指南 在现代化的企业应用中审批流程管理是每个业务系统都绕不开的核心需求。无论是请假申请、报销审批创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

全开源H5在线聊天室源码:即时通讯底层链路拆解与实战

全开源H5在线聊天室源码:即时通讯底层链路拆解与实战

简介:这是一套基于H5技术的在线聊天室即时通讯与交友系统源码,面向希望快速搭建实时通信平台的开发者与创业者,尤其适合具备一定PHP基础、想省去从零开发成本的中级开发者。压缩包共1296个文件,约56.7MB,以369个php业务…

2026/10/9 13:58:52 阅读更多 →
斯坦福李瑞江团队Nat Med多模态医学AI框架:用TaoToken统一Key跑通病理切片与虚拟CODEX染色融合流程

斯坦福李瑞江团队Nat Med多模态医学AI框架:用TaoToken统一Key跑通病理切片与虚拟CODEX染色融合流程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 13:58:52 阅读更多 →
t3code:让AI代码生成从玩具走向工程实战

t3code:让AI代码生成从玩具走向工程实战

在AI写代码这件事上,我发现一个很残酷的现实:很多人不是不会用AI,而是被AI写出来的“幻觉代码”坑得死去活来。尤其是当你接手一个需要严格遵循团队规范的工程化项目,AI补全的代码常常看起来头头是道,一编译全是错&…

2026/10/9 13:57:51 阅读更多 →

最新新闻

CAP理论与数据库分片架构:一致性、可用性与分库分表实战解析

CAP理论与数据库分片架构:一致性、可用性与分库分表实战解析

做分布式系统做了这么久,我发现一个特别有意思的现象:很多人都把CAP背得滚瓜烂熟,一问你“CAP是什么”,张口就来“一致性、可用性、分区容错性,三者不可兼得”。可真到设计一个数据库分片架构的时候,该选什…

2026/10/9 14:29:54 阅读更多 →
银行汇款单网页制作:HTML表单与CSS布局实战详解

银行汇款单网页制作:HTML表单与CSS布局实战详解

上学时做的第一个像样的网页作业,就是这份银行汇款单。当时觉得不就是画个表格、填几个输入框嘛,真动手才发现,越看着简单的页面,越考验基本功。汇款单这玩意儿信息密度高、对齐要求严格、表单控件类型多,还要考虑打印…

2026/10/9 14:29:54 阅读更多 →
MySQL root密码忘记怎么办?重置原理与多环境实操指南

MySQL root密码忘记怎么办?重置原理与多环境实操指南

半夜十二点,微信突然响了。同事发来一串带汗的表情:“生产库连不上了,root密码不对,之前管库的兄弟走了,交接文档里写的是另一个密码……”这种场景我遇到过好几次。MySQL的root密码一旦丢失,正常的登录入口…

2026/10/9 14:29:54 阅读更多 →
MySQL root密码忘记?用skip-grant-tables重置密码实操指南

MySQL root密码忘记?用skip-grant-tables重置密码实操指南

哎,MySQL 的 root 密码忘了,这种事谁遇上谁知道。平时数据库跑得好好的,某天要改个慢查询配置或者导一份数据,输错三次直接被拒,那一刻是真的慌。其实 MySQL 官方留了一条“紧急通道”——启动时跳过授权表&#xff0c…

2026/10/9 14:29:54 阅读更多 →
数据库原理复习链路:往年卷拆解、SQL作业与课设避坑指南

数据库原理复习链路:往年卷拆解、SQL作业与课设避坑指南

简介:面向天津大学「数据库应用(原理)」课程的备考者与自学者,资源包集中整理往年试卷、课程大作业与实验报告,内容覆盖SQL语言、关系数据库模型、数据完整性、事务处理、索引构建与查询优化等核心考点,并包…

2026/10/9 14:29:54 阅读更多 →
MOSS-Transcribe-Diarize Web后端架构解析:任务状态机、作业管理与 FastAPI 实现

MOSS-Transcribe-Diarize Web后端架构解析:任务状态机、作业管理与 FastAPI 实现

MOSS-Transcribe-Diarize Web后端架构解析:任务状态机、作业管理与 FastAPI 实现 【免费下载链接】MOSS-Transcribe-Diarize A 0.9B model for long-form transcription in 50 languages with speaker diarization, timestamps, and acoustic event awareness 项目…

2026/10/9 14:28:53 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 10:11:06 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 21:13:17 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 6:17:20 阅读更多 →