
xi-editor 贡献指南从开启 Issue 到合入 Pull Request 的完整参与流程【免费下载链接】xi-editorA modern editor with a backend written in Rust.项目地址: https://gitcode.com/gh_mirrors/xie/xi-editorxi-editor 是一个后端使用 Rust 编写的现代文本编辑器项目本指南依据仓库内 docs/contribute.md 编写系统梳理了从「第一次接触项目」到「提交 PR 并被合入」的完整协作流程并结合作业区内的源码与脚本给出可执行的实操细节。读完本文你将掌握如何正确地开启 Issue、选择任务、通过run_all_checks完成本地全量检查以及理解 xi-editor 的评审与角色晋升机制。维护状态提示根据 README.md 的说明xi-editor 目前已停止新功能开发discontinued但仍欢迎并接受 Bug 修复类贡献。这意味着当前环境下优先关注缺陷修复与文档改进是更切合实际的参与方式。项目背景先理解你将要贡献的代码库在动手之前理解 xi-editor 的架构有助于你判断「一个问题应该报到哪里」。从 README.md 的设计决策一节可以确认以下事实前后端分离前端frontend负责绘制窗口与 UI、处理事件后端core即本仓库主体持有文件缓冲区并负责所有可能耗时的编辑操作。核心用 Rust 编写后端要求极高的性能且内存占用应接近被编辑缓冲区本身的大小Rust 在提供可靠性的同时保持了足够的抽象层次。持久化 rope 数据结构核心编辑数据基于持久化 rope对超大文件依然高效且对外表现为类似字符串的字符序列。异步操作编辑器不应阻塞用户操作例如自动保存会在后台线程中利用 rope 的写时复制特性进行快照写入。插件优先于脚本通过管道与插件通信插件可以用任意语言编写。JSON 协议前端与后端之间、后端与插件之间的通信均基于简单 JSON 消息。本仓库rust/是完整的 Cargo workspace成员包括xi-core主程序以及core-lib、rope、rpc、plugin-lib、lsp-lib、syntect-plugin、sample-plugin、trace、unicode、experimental/lang等子 crate完整清单见 rust/Cargo.toml。核心可执行目标名为xi-core见 rust/Cargo.toml。入门第一步构建并跑通测试「确保你能构建并运行测试」是参与贡献的第一道门槛。如果做不到请直接开启一个 Issue会有维护者协助排查。构建核心xi-editor 面向「较新的稳定版 Rust」建议通过 rustup 安装工具链。根据 README.md 与 rust/Cargo.toml 中的rust 1.40字段当前最低支持版本为 Rust 1.40crate 使用 2018 edition。# 从仓库根目录进入 rust 工作区 cd rust cargo build# 若要克隆本仓库后自行构建可执行 git clone https://gitcode.com/gh_mirrors/xie/xi-editor运行测试整个工作区的测试可以统一执行cargo test --all核心逻辑的测试分为两类一是各源码文件内的单元测试例如 rust/core-lib/src/editor.rs、rust/core-lib/src/find.rs 等文件均内置大量#[test]二是集成测试位于 rust/core-lib/tests/rpc.rs它直接实例化XiCore并通过xi_rpc的测试通道模拟完整启动序列client_started、set_theme、new_view、close_view等 RPC 消息验证视图与缓冲区的创建、销毁行为。如果你修改了核心的状态管理逻辑跑通这一集成测试尤为重要。以正确的姿势开启 Issue文档明确鼓励遇到疑问、功能请求或疑似 Bug请开启 Issue。但开启之前有三件事要做。先判断问题归属前端还是核心这是文档强调的第一步——在开 Issue 之前先识别问题属于哪个仓库前端负责绘制窗口和 UI、处理事件。核心负责除前端之外的大多数事情缓冲、编辑操作、语法等。前端问题应提交到对应前端的仓库核心问题才提交到本仓库。参考 README.md 的 Frontends 一节xi-editor 存在多个前端实现macOS 官方前端、GTK、终端、Electron、Qt、Vim 风格等彼此独立归属判断错误会直接导致问题被转移或延迟处理。先搜索再提问使用 GitHub 的搜索栏确认是否已有相同无论 open 还是 closed的 Issue避免重复提交。提供充分的上下文对于Bug给出可复现的步骤。对于功能请求详细描述你设想的交互行为、使用方式的大致轮廓以及该功能在其他编辑器中的做法示例。参与讨论、改进文档、评审他人的变更xi-editor 的明确目标之一是成为教育资源原文用 an educational resource 表述因此社区鼓励各种程度的参与而不仅仅是提交代码参与讨论带discussion或planning标签的讨论型 Issue 欢迎所有人参与。参与者被期望尊重彼此不同的背景与经验水平看不懂的地方尽管提问——你看不懂多半别人也看不懂。改进与评审文档文档不清晰或不完整时开 Issue 或提 PR 改进它。对新贡献者而言这是特别有价值的反馈形式因为新人第一次接触项目时最容易被「只有老手才懂」的坑绊住。评审与手动测试变更阅读他人的 Pull Request 是熟悉项目的最佳途径之一遇到看不懂的提交内容正是提问的好时机。手动测试尤其是针对 Bug 修复与功能新增同样非常有价值——checkout 一个变更实际跑一跑它能工作吗你能发现边界情况吗找到值得做的任务如果你在寻找可做的任务可以浏览仓库的 Issues优先关注带以下标签的问题help wanted明确寻求外部帮助的问题easy难度较低、适合上手的入口。如果这些还不够可以在社区频道如 Zulip 的 #xi-editor 频道询问或者自己动手玩一玩编辑器找出你认为缺失的东西。结合当前维护状态见 README.md新功能类 Issue 可能不再规划Bug 修复类任务与文档改进是最合适的起点。动手之前三个关键决策文档要求你在开始实现前先对变更的性质做一次分类是 Bug 修复或小改动如果你发现了小 Bug 且自认有修复方案可以直接提交 Pull Request无需事先沟通。是一个功能如果新功能与现有功能思路相近文档举的例子是为选中区域添加一个「反转字母顺序」的命令考虑先开一个简短的 Issue 描述你的设想。其他贡献者可能帮你发现潜在问题或提出改进——这不是强制的但可能帮你省下返工而且 PR 合入后还能顺手关掉那个 Issue。是影响前端外观/行为、或影响核心 API/架构的重大特性动手前必须先开一个讨论/提案 Issue描述要解决的问题与计划采用的方法——这可以视为 Rust RFC 流程的「轻量版」xi-editor 的 RFC 风格提案归档可参考 rfcs/ 目录例如 rfcs/2018-11-23-annotations.md。提交 PR 前的自检清单按下「Create pull request」按钮之前文档给出了四项必须完成的动作。1. 运行全部本地检查rust/run_all_checks这是文档点名的检查入口。仓库根目录下的 rust/run_all_checks 是一份 bash 脚本即使很小的改动也可能无意间破坏东西因此提交或更新PR 之前必须本地跑一遍。该脚本依次执行以下阶段阶段实际执行的命令失败时的提示rustfmt 检查cargo fmt --all -- --check提示运行 rustfmtClippy 静态检查cargo clippy --all -- -D warningsClippy has nits.编译器警告检查RUSTFLAGS-D warnings cargo check --all任何警告都会导致失败全量测试cargo test --all测试失败即退出基准测试rustup run nightly cargo bench --all需要 nightly 工具链脚本开头会先检查依赖组件是否就绪缺失时给出提示命令rustup component add clippy-preview # 缺少 clippy 时 rustup component add rustfmt-preview # 缺少 rustfmt 时 rustup install nightly # 缺少 nightly 工具链基准测试需要时注意最后一步基准测试需要 nightly 编译器脚本会在没有 nightly 时明确提示后退出。本地格式化风格以 rust/rustfmt.toml 为准use_small_heuristics Max、max_width 100、use_field_init_shorthand true、newline_style Unix这也是 review 阶段格式审查的依据。2. 为评审者写一段说明提交 PR 时充分利用消息区目标是帮助评审者你对自己改动中哪些部分没有把握某些决定是否有不显而易见的理由如果改动改变了行为应当如何测试3. 做你自己的第一个评审者在填写 PR 消息的页面上你能看到 PR 最终呈现在评审者面前的样子。把它当成别人的作品来评审你会给出什么评论发现笔误或问题可以就地推送更新而不会丢失 PR 消息或其他状态。4. 把自己加进 AUTHORS 文件如果这是你在本仓库的第一份实质性 PR欢迎把自己加入 AUTHORS 文件。该文件用于版权目的的作者名单注释中也说明它不一定列出所有贡献过代码的人某些情况下雇主才是版权持有者完整贡献者列表以版本控制历史为准。评审流程与合入条件文档明确了合入门槛每个非平凡的 Pull Request 都要经过评审。谁可以批准所有 Pull Request 在合并前必须获得合适的评审者批准Bug 修复与小改动任何对该仓库有提交权限的人均可批准较大改动新增功能、显著改变行为或 API还应获得一名maintainer的批准。合入前变更必须通过CI持续集成。批准评审者的责任如果你批准了一个变更意味着你理解该变更要做什么、以及它是怎么做的已经手动构建并测试过该变更确认其按预期工作相信该变更符合相关仓库的惯用写法、格式化规则与整体代码风格准备好并且有能力帮助解决合入该变更可能引入的任何问题。此外如果补丁新增或修改了客户端可观察的行为评审者应当构建该补丁并验证其表现符合预期。谁负责合并如果 PR 作者本身对相关仓库拥有写权限则批准后由作者自己负责 merge/rebasing否则由评审者代为合并。提交之后等待与跟进变更提交后文档给出了两点建议阅读其他 PR等待评审期间去看看其他待评审的 PR 以及上面的评审意见这既能了解项目正在进行的工作也可能让你预判自己会收到什么类型的反馈。保持耐心项目的一般目标是几天内响应所有 PR、一周内完成初步评审但并不总能做到。如果你开了 PR 却毫无音讯可以在 PR 上留言或到 Zulip 频道询问——它很可能只是被淹没了。深入参与三种社区角色持续以各种形式参与上述任何形式均可可能获得更多权限Organization membership组织成员如果你定期向 xi 系列项目做出贡献会被加入 xi-editor 组织从而获得给 Issue 打标签、查看进行中项目等能力。Contributor贡献者如果你定期向某个具体 xi 项目提交实质性贡献会被添加为该仓库的贡献者。贡献者被鼓励参与评审与批准变更、响应 Issue并帮助维护该项目。Maintainer维护者如果你在较长时间内对多个仓库做出实质性贡献、定期评审他人工作、积极参与规划与讨论可能由项目负责人 raphlinus 酌情被邀请承担维护者角色。维护者负责协调项目总体方向、解决架构问题以及推进项目的日常工作。结语从本文出发继续深入本指南对应的原始文档为 docs/contribute.md社区行为规范详见 CODE_OF_CONDUCT.md采用 Rust Code of Conduct。想要进一步理解你将维护的代码建议接着阅读README.md架构设计决策与前端列表docs/index.md项目文档索引docs/frontend-protocol.md前后端通信协议说明rust/core-lib/tests/rpc.rs核心 RPC 集成测试是理解核心行为边界的直接入口rust/compile_size_compare.py用于比较两个提交编译产物体积的辅助脚本可在rust/目录下执行帮助评审「改动是否显著增大二进制」。参与开源不只是提交代码。按照本文的流程——先跑通构建、开对 Issue、选对任务、跑全检查、认真评审——无论你是第一次接触 Rust 编辑器内核还是资深贡献者都能在 xi-editor 找到适合自己的参与方式。【免费下载链接】xi-editorA modern editor with a backend written in Rust.项目地址: https://gitcode.com/gh_mirrors/xie/xi-editor创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考