这是一个用于测试 Zed ArkTS 扩展的样板项目。
arkts-sample-project/
├── oh-package.json5 # 项目配置和依赖
├── src/
│ ├── main.ets # 应用入口
│ ├── components/
│ │ └── HelloWorld.ets # 示例组件
│ └── pages/
│ ├── Index.ets # 首页
│ └── HelloWorld.ets # Hello World 页面
└── README.md
HelloWorld.ets演示了如何定义和导出组件- 使用
@Component装饰器 - 定义组件接口
HelloWorldProps
@State- 组件内部状态@Prop- 组件属性
- 使用
@kit.ArkUI的 router 进行页面跳转
onClick事件处理- 状态更新
此项目用于测试以下 LSP 功能:
- 在
Index.ets中点击router.pushUrl应该跳转到定义 - 在
HelloWorld.ets中点击HelloWorldProps应该跳转到接口定义 - 在
main.ets中点击HelloWorld应该跳转到组件定义
- 查找
HelloWorld组件的所有引用 - 应该在
main.ets和pages/HelloWorld.ets中找到
- 输入
@应该提示装饰器:@Component,@State,@Prop等 - 输入
this.应该提示组件属性
- 类型错误检查
- 未使用的导入
- 语法错误
#!/bin/bash
cd /home/runner/work/zed-arkts/zed-arkts
# 启动语言服务器并发送初始化请求
node zed-ets-language-server/index.js << EOF
Content-Length: 200
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"processId":null,"rootUri":"file://$(pwd)/test-fixtures/arkts-sample-project","capabilities":{}}}
EOF// 测试从 main.ets 跳转到 HelloWorld 定义
const request = {
jsonrpc: '2.0',
id: 2,
method: 'textDocument/definition',
params: {
textDocument: {
uri: 'file:///test-fixtures/arkts-sample-project/src/main.ets'
},
position: { line: 3, character: 10 } // HelloWorld 位置
}
};
// 期望结果:返回 src/components/HelloWorld.ets 的位置const request = {
jsonrpc: '2.0',
id: 3,
method: 'textDocument/references',
params: {
textDocument: {
uri: 'file:///test-fixtures/arkts-sample-project/src/components/HelloWorld.ets'
},
position: { line: 6, character: 15 }, // HelloWorld 组件名
context: { includeDeclaration: true }
}
};
// 期望结果:找到 2-3 个引用位置# 构建扩展
cd /home/runner/work/zed-arkts/zed-arkts
cargo build --release
# 安装到 Zed(如果在本地环境)
# 在 Zed 中打开扩展页面,选择 "Install from Directory"
# 选择此项目目录在 Zed 中打开 test-fixtures/arkts-sample-project 目录
- 打开
src/main.ets,语法高亮应该正常工作 - 将鼠标悬停在
HelloWorld上,应该显示类型信息 - 右键点击
HelloWorld,选择 "Go to Definition",应该跳转到components/HelloWorld.ets - 右键点击
HelloWorld,选择 "Find All References",应该列出所有引用 - 尝试修改代码,应该有实时的语法检查
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"capabilities": {
"textDocumentSync": 2,
"completionProvider": {
"resolveProvider": true,
"triggerCharacters": [".", "@"]
},
"definitionProvider": true,
"referencesProvider": true,
"documentSymbolProvider": true,
"workspaceSymbolProvider": true
}
}
}{
"jsonrpc": "2.0",
"id": 2,
"result": {
"uri": "file:///test-fixtures/arkts-sample-project/src/components/HelloWorld.ets",
"range": {
"start": { "line": 6, "character": 14 },
"end": { "line": 6, "character": 24 }
}
}
}检查 Zed 的日志:
tail -f ~/.local/share/zed/logs/Zed.log确保配置了正确的 tsdk 路径:
{
"lsp": {
"arkts-language-server": {
"initialization_options": {
"tsdk": "/path/to/typescript/lib"
}
}
}
}此示例项目用于测试目的。如有改进建议,欢迎提交 PR。