Ond VS Code Extension
Ond向けのVisual Studio Code拡張です。拡張本体はLSP clientとeditor設定だけを所有し、
言語解析は別repositoryのond-lspを使用します。
現在の機能
.ond language registration
- editor comment and bracket configuration
- TextMate-based syntax highlighting
- VSCode client wiring for
ond-lsp
ond.toml依存、ond.lock、依存パッケージを含むproject再読込
- parse diagnostics over LSP
- top-level document symbols over LSP
- hover, completion, and go-to-definition over LSP
- definition navigation across local scopes, package files, imports, types, and struct fields
- symbol references and rename over LSP (F2 / Shift+F12)
- semantic token
- generic型を含むmethod receiver、method call、名前付きinterfaceの補完・hover・定義移動・rename
- 引数・receiver・local変数の型hover(generic関数の戻り値から推論した型を含む)
- method receiverの専用highlightingと、receiver・演算子直後を含む編集中の補完
- 型・関数・generic method・operatorの型parameter構文と、
alloc[T]、sizeof、alignof、trap "reason"を含む最新Ond構文のhighlighting・診断
- GoLandのNew Dark系配色を参考に整理した
Ond GoLand-inspired Dark color theme
ローカル開発
現在は、このrepositoryとond repositoryを兄弟directoryに置く構成を標準とします。
parent/
ond/
ond-vscode-extension/
npm install
npm run build:server
npm run build
別の場所にあるOnd repositoryを使用する場合は、OND_REPOSITORY_PATHにabsolute path、または
このrepositoryからのrelative pathを指定します。
$env:OND_REPOSITORY_PATH = "C:\path\to\ond"
npm run build:server
build:serverはOnd workspaceのond-lspをrelease buildし、server/ond-lsp.exeへcopyします。
拡張はこの同梱binaryをstdio modeで起動します。
Windows x64 VSIX
開発中にVSIX全体を確認する場合は、localのOnd repositoryからLanguage Serverをbuildし、
拡張clientとまとめてpackageします。
npm run package:vsix
生成されたVSIXにはond-lsp.exeが含まれます。VSIXのinstall後にRust、Cargo、Node.js、
またはOnd repositoryは必要ありません。
現在のpackage処理はWindows x64専用です。package:vsixは既定では兄弟directoryのOnd repositoryから
ond-lspをbuildします。build済みbinaryを使って開発時に確認する場合は、
OND_LSP_PATHとOND_LSP_VERSIONを指定します。
$env:OND_LSP_PATH = "C:\path\to\ond-lsp.exe"
$env:OND_LSP_VERSION = "0.1.1"
npm run package:vsix
VSIXには、同梱したLanguage Serverのversion、target、SHA-256を記録した
server/ond-lsp.jsonも含まれます。拡張起動時のdownloadは行いません。
正式なrelease packageには、OndのGitHub Releaseで配布された検証済みbinaryを使用します。
Ond repositoryはprivateのため、Contentsのread権限を持つGitHub tokenをGH_TOKENまたは
GITHUB_TOKENに設定して実行します。tokenは生成物へ保存されません。
$env:GH_TOKEN = "<GitHub token>"
npm run package:release -- -Version 0.1.0
package:releaseはOnd ReleaseのZIPとchecksumを取得し、archiveのSHA-256を検証してから
ond-lsp.exeをVSIXへ同梱します。同梱metadataにはOnd repository、tag、asset名、archiveの
SHA-256も記録します。これにより、公開済みのどのOnd配布物を使用したか追跡できます。
package:vsixは次の2ファイルを生成します。
ond-vscode-extension-0.1.1-windows-x86_64.vsix
ond-vscode-extension-0.1.1-windows-x86_64.vsix.sha256
検査
npm run check
npm run package:vsix
checkはTypeScriptとextension manifestを検査します。package:vsixは開発用のproduction build、
Language Serverの同梱、checksum照合を行ってからVSIXを生成します。正式公開前は
package:releaseを使い、Ond Release由来のbinaryで同じ検査を実行します。
補足
.ond documentを開くか、workspaceに.ond fileがあると拡張が起動します。
- 配色は
Preferences: Color ThemeからOnd GoLand-inspired Darkを選択できます。Ondのsemantic tokenとTextMate scopeを同じpaletteで揃えています。
- definition移動はF12、Ctrl/Cmd+click、Peek Definitionから利用できます。
- 変数、定数、関数、method、method receiver、型、構造体fieldなどの名前変更はF2、参照一覧はShift+F12から利用できます。
- package名、import alias、組み込みsymbol、外部依存内の宣言は名前変更の対象外です。
- 開いている
.ond bufferはproject overlayとして扱われ、未保存の内容も言語機能へ反映されます。
ond.tomlの依存先は、その依存先自身の[project].nameを名前空間としてimport候補へ表示されます。
利用側[dependencies]の登録名は候補名に影響しません。
OND_PATHに現在のproject root自身が含まれる場合は重複library指定として無視します。
manifestや依存の読込に失敗した場合も、型診断を黙って停止せずeditor上へ原因を表示します。