Zedファーストインプレッション

Introduction

Rust製コードエディター「Zed」がオープンソースに ~v1.0リリースへ向けて門戸を開く - 窓の杜 にもある通り、zed-industries/zedが公開されたのでコードをざっくり読んでみたのでメモする。

Rustへの知見が皆無であること、雑なコードリーディング要素があるのでご了承ください。

Feature

https://zed.dev/ には以下のようなことを書いている。

  • ハイパフォーマンス
  • AIサポート
  • LSP
  • Package
    • vim-mode
    • terminal
    • theme
    • etc.
  • チーム開発
  • UI/データ構造
    • マルチコアサポート
    • Tree-sitterサポート
    • 共同編集アルゴリズムCRDT

Local Build

docs/src/developing_zed__building_zed.md にある手順通りコマンドを実行したら手元で簡単にBuildできた。

docs/src/system_requirements.md にはMacしかサポートしてないことが記述されている。

Docs

docs/src/configuring_zed.md に設定方法が書いてあるが、基本的にjson5で管理していて細かい設定ができそうなことが伺える。

docs/src/configuring_zed__configuring_vim.md にvim-modeの使い方が書かれている。

docs/src/telemetry.md にサービス改善の為に匿名でzed.devに利用状況を送信することが書かれている。

コードリーディング

ディレクトリごとに雑にコメントを書いていく。

$ tree -L 1 .
.
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── Cargo.lock
├── Cargo.toml
├── Dockerfile
├── LICENSE-AGPL
├── LICENSE-APACHE
├── LICENSE-GPL
├── Procfile
├── README.md
├── assets
├── crates
├── debug.plist
├── docker-compose.sql
├── docker-compose.yml
├── docs
├── plugins
├── rust-toolchain.toml
├── script
├── target
└── typos.toml

assets/

font情報やiconsoundsが入っている。 また、keymapssettingsにデフォルトの設定がjsonで格納されている。

crates/

package by featureのような設計になっている。各ディレクトリに Cargo.toml があり、それぞれのディレクトリでRustが書かれている。

$ tree -L 1 crates/
crates/
├── activity_indicator
├── ai
├── assets
├── assistant
├── audio
├── auto_update
├── breadcrumbs
├── call
├── channel
├── cli
├── client
├── clock
├── collab
├── collab_ui
├── collections
├── color
├── command_palette
├── copilot
├── copilot_ui
├── db
├── diagnostics
├── editor
├── feature_flags
├── feedback
├── file_finder
├── fs
├── fsevent
├── fuzzy
├── git
├── go_to_line
├── gpui
├── gpui_macros
├── install_cli
├── journal
├── language
├── language_selector
├── language_tools
├── live_kit_client
├── live_kit_server
├── lsp
├── media
├── menu
├── multi_buffer
├── node_runtime
├── notifications
├── outline
├── picker
├── plugin
├── plugin_macros
├── plugin_runtime
├── prettier
├── project
├── project_panel
├── project_symbols
├── quick_action_bar
├── recent_projects
├── refineable
├── rich_text
├── rope
├── rpc
├── search
├── semantic_index
├── settings
├── snippet
├── sqlez
├── sqlez_macros
├── story
├── storybook
├── sum_tree
├── terminal
├── terminal_view
├── text
├── theme
├── theme_importer
├── theme_selector
├── ui
├── util
├── vcs_menu
├── vim
├── welcome
├── workspace
├── zed
└── zed_actions

84 directories, 0 files

docs/

各ドキュメントが書かれている。

plugins/

plugins/test_pluginplugins/json_languageにプラグインの実装例が書いてある。Rustで拡張が書けるらしい。

script/

開発用scriptが置いてある。

Mac前提なのかHomebrewの記述がある。 また、kubectlの記述もあるのでどこかしらへのホスティングを想定されているようです。

雑感

Atomの後継としてatom-archive/xrayに期待してたがArchiveされてしまってがっかりしていた身としてはZedに期待したい。