A Zed extension for ArkTS (aka.ETS) development support.
This project is based on Million-mo/tree-sitter-arkts and ohosvscode/arkTS. Thanks for offering an excellent foundation for ArkTS.
- Syntax Highlighting: Provides TypeScript-based syntax highlighting for ETS files
- Language Server: Provides basic language server support, such as go to definition, and find references.
This is a Zed language extension that provides:
- File type detection (
.ets→ ETS language) - Syntax highlighting extending TypeScript grammar
- Go to definition
- Find references
- Module definition
- Code formatting support (via Language Server or external tools)
- Compatible with more Node.js versions.
- Autocomplete.
- JSON5 schemas support for
oh-package.json5.
- Debuggers.
- Code snippets.
- OpenHarmony SDK management.
You need a Node.js environment to build this extension. Prefer Node.js 24 currently.
- Clone this repository
- Open extension page in Zed and install extension from directory
All you need is to put language server settings in zed's settings.json:
{
"lsp": {
"arkts-language-server": {
"initialization_options": {
"tsdk": "/path/to/typescript/lib",
"ohosSdkPath": "/path/to/OpenHarmony/xx"
}
}
}
}tsdk: Path to typescript declarations.ohosSdkPathPath to certain Harmony SDK.
The extension supports code formatting through the language server.
The ArkTS language server provides built-in formatting support through the custom ets/formatDocument request. The extension automatically forwards standard LSP formatting requests to this custom endpoint, so no additional configuration is required. Simply use Zed's standard formatting commands (e.g., format on save or manual format).
You can configure external formatters in your settings.json:
{
"languages": {
"ArkTS Language": {
"formatter": {
"external": {
"command": "prettier",
"arguments": ["--stdin-filepath", "{buffer_path}", "--parser", "typescript"]
}
}
}
}
}# Build in development mode
cargo build
# Build for release
cargo build --release
# Use the build script
./build.shThis project includes comprehensive fully automated testing for the LSP implementation.
# Complete end-to-end automated test (no manual steps!)
# 完全自动化端到端测试(无需人工操作!)
./scripts/e2e-automated-test.shThis script automatically:
- ✅ Installs Zed editor
- ✅ Installs OpenHarmony SDK (mock version)
- ✅ Builds and installs the extension
- ✅ Verifies Zed-LSP integration using real Zed CLI
- ✅ Runs automated LSP tests
- ✅ Validates results programmatically
Test with actual Zed CLI and log analysis!
# Test using real Zed editor
# 使用真实 Zed 编辑器测试
./scripts/test-zed-real.sh
# This script:
# - Launches actual Zed with test files
# - Monitors Zed's log files in real-time
# - Detects extension loading and LSP startup
# - Extracts LSP messages from logs
# - Requires Zed to be installed# Install Zed automatically
./scripts/auto-install-zed.sh
# Install extension automatically
./scripts/auto-install-local-extension.sh
# Install OpenHarmony SDK (mock for testing)
./scripts/install-mock-ohos-sdk.sh
# Test with real Zed CLI
./scripts/test-zed-real.sh
# Run automated LSP tests (no GUI required)
./scripts/test-lsp-automated.shThe project includes comprehensive automated tests for the code formatting functionality with actual content validation:
# Run formatting tests only
cd zed-ets-language-server
npm run test:formattingThe formatting tests verify:
- ✅ Actual formatting results: Validates that unformatted code becomes properly formatted
- ✅ TextEdit application: Verifies that formatting edits produce expected output
- ✅ Standard LSP formatting requests are forwarded to
ets/formatDocument - ✅ Range formatting requests are properly handled
- ✅ Formatting options (tab size, spaces vs tabs) are preserved and applied correctly
- ✅ Multiple sequential formatting requests work correctly
- ✅ Formatted code is syntactically valid with proper indentation
- ✅ Edge cases and various formatting configurations
Test Suite: 24 comprehensive test cases including:
- Content validation tests that check actual formatted output
- LSP protocol forwarding tests
- TextEdit structure and application tests
# Run all unit tests
cd zed-ets-language-server
npm test
# Run integration tests
npm run test:integration
# Run with coverage
npm run test -- --coverageFor detailed information about the automated testing design:
- Automation Design (自动化设计) - High-level design overview
A sample ArkTS project is provided in test-fixtures/arkts-sample-project/ for testing. See Sample Project README for details.
MIT License - see LICENSE file for details
