TypeScript Go贡献指南:如何向开源项目提交代码

TypeScript Go贡献指南:如何向开源项目提交代码

【免费下载链接】typescript-go Staging repo for development of native port of TypeScript 【免费下载链接】typescript-go 项目地址: https://gitcode.com/GitHub_Trending/ty/typescript-go

概述

TypeScript Go(代号Corsa)是微软正在开发的TypeScript原生Go语言移植版本,旨在提供与现有TypeScript相同的功能,但使用Go语言实现以获得更好的性能和原生体验。作为开源项目,它欢迎开发者贡献代码,本文将详细介绍如何为这个项目做出贡献。

环境准备

系统要求

在开始贡献之前,请确保您的开发环境满足以下要求:

工具版本要求安装指南
Go1.25或更高官方下载
Rust1.85或更高官方安装
Node.js最新LTS版本Node.js官网
hereby最新版本npm install -g hereby

项目克隆

正确克隆项目是贡献的第一步,由于项目包含子模块,需要使用特殊命令:

# 使用递归克隆确保子模块正确初始化
git clone --recurse-submodules https://gitcode.com/GitHub_Trending/ty/typescript-go.git

# 如果已经克隆但未初始化子模块
git submodule update --init --recursive

开发工作流

1. 代码构建

项目使用hereby作为构建工具,提供与TypeScript原仓库相似的开发体验:

# 安装依赖
npm ci

# 构建tsgo二进制文件
hereby build

# 运行测试
hereby test

# 代码格式化
hereby format

# 代码检查
hereby lint

# 安装额外工具
hereby install-tools

# 生成Go代码(如诊断信息)
hereby generate

2. 本地测试

项目支持标准的Go工具链,您也可以直接使用Go命令:

# 使用Go构建
go build ./cmd/tsgo

# 运行所有测试
go test ./...

# 运行特定包测试
go test ./internal/ast/...

3. LSP服务器调试

对于语言服务器协议相关的开发,可以使用VS Code进行调试:

  1. 在项目根目录打开VS Code:code .
  2. 复制.vscode/launch.template.json.vscode/launch.json
  3. 按F5启动调试会话

代码贡献流程

1. 寻找贡献点

mermaid

2. 功能状态检查

在开始贡献前,请检查目标功能的状态:

功能领域状态贡献建议
程序创建✅ 完成可报告bug,不建议重构
解析/扫描✅ 完成可报告bug
类型检查✅ 完成可报告bug
JavaScript推断🔄 进行中欢迎贡献
声明发射🔄 进行中欢迎贡献
代码发射🔄 进行中欢迎贡献
监视模式⚠️ 原型仅报告崩溃
语言服务🔄 进行中欢迎贡献
API❌ 未就绪暂不接收贡献

3. 代码规范

Go代码风格

项目遵循标准的Go编码规范,并使用gofumpt进行格式化:

// 正确的函数声明格式
func (c *Checker) checkBinaryExpression(
    expr *ast.BinaryExpression,
    context checkingContext,
) (*types.Type, *diagnostics.Diagnostic) {
    // 使用明确的错误处理
    if err := validateExpression(expr); err != nil {
        return nil, diagnostics.NewError(err)
    }
    // ...
}
测试要求

所有代码变更必须包含相应的测试用例:

func TestBinaryExpressionChecking(t *testing.T) {
    testCases := []struct {
        name     string
        input    string
        expected string
    }{
        {
            name:     "simple addition",
            input:    "1 + 2",
            expected: "number",
        },
        {
            name:     "string concatenation", 
            input:    `"hello" + "world"`,
            expected: "string",
        },
    }
    
    for _, tc := range testCases {
        t.Run(tc.name, func(t *testing.T) {
            result := parseAndCheck(tc.input)
            if result != tc.expected {
                t.Errorf("Expected %s, got %s", tc.expected, result)
            }
        })
    }
}

4. 提交信息规范

提交信息应遵循约定式提交规范:

feat(parser): add support for optional chaining syntax

- Implement ?. operator parsing
- Add corresponding AST node types
- Include comprehensive test cases

Fixes #123

常见的提交类型包括:

  • feat: 新功能
  • fix: bug修复
  • docs: 文档更新
  • test: 测试相关
  • refactor: 重构代码
  • chore: 构建过程或辅助工具变更

法律要求

贡献者许可协议(CLA)

所有贡献者必须签署Microsoft贡献者许可协议:

  1. 提交Pull Request时,CLA机器人会自动检查
  2. 如果需要签署CLA,机器人会提供详细指引
  3. 只需签署一次,适用于所有Microsoft开源项目

行为准则

项目遵循Microsoft开源行为准则,要求所有参与者:

  • 保持尊重和专业的交流
  • 欢迎不同背景和经验的贡献者
  • 建设性地处理分歧

常见问题解答

Q: 我应该从哪里开始贡献?

A: 建议从文档改进、测试用例添加或标记为"进行中"的功能开始。

Q: 如何处理TypeScript子模块?

A: 子模块指向正在移植的TypeScript提交,通常不需要手动修改。如果遇到子模块问题,运行git submodule update --init --recursive

Q: 我的Pull Request需要多长时间审核?

A: 审核时间因变更复杂度和维护者可用性而异,通常需要1-2周。

Q: 如何知道我的变更是否被接受?

A: 维护者会在Pull Request中提供反馈,可能包括代码审查意见、测试要求或合并确认。

最佳实践

1. 小步提交

将大型变更分解为多个小提交,每个提交解决一个具体问题:

# 不好的做法 - 大型单次提交
git commit -m "实现整个模块系统"

# 好的做法 - 多个小提交  
git commit -m "feat(parser): 添加模块导入解析"
git commit -m "feat(binder): 实现模块符号绑定"
git commit -m "test(module): 添加模块解析测试用例"

2. 测试驱动开发

在实现功能前先编写测试用例:

// 先写测试
func TestNewFeature(t *testing.T) {
    want := expectedResult
    got := newFeature(input)
    if got != want {
        t.Errorf("newFeature() = %v, want %v", got, want)
    }
}

// 再实现功能
func newFeature(input string) string {
    // 实现逻辑
}

3. 文档更新

代码变更应同步更新相关文档:

  • README中的功能说明
  • CONTRIBUTING.md中的流程变更
  • 代码中的注释和Godoc

总结

为TypeScript Go项目贡献代码是一个很好的学习机会,既能深入了解TypeScript编译器的工作原理,又能参与大型开源项目的开发。记住:

  1. 从小处着手 - 从简单的bug修复或文档改进开始
  2. 遵循规范 - 严格遵守代码风格和提交规范
  3. 充分测试 - 确保所有变更都有相应的测试覆盖
  4. 保持耐心 - 开源项目审核需要时间,积极回应反馈

通过遵循本指南,您将能够为TypeScript Go项目做出有价值的贡献,并成为开源社区的重要成员。

【免费下载链接】typescript-go Staging repo for development of native port of TypeScript 【免费下载链接】typescript-go 项目地址: https://gitcode.com/GitHub_Trending/ty/typescript-go

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值