コンテンツにスキップ

言語サーバー

Wippyには、LuaコードのIDE機能を提供するビルトインLSP (Language Server Protocol) サーバーが含まれています。サーバーはWippyランタイムの一部として動作し、TCPまたはHTTP経由でエディタに接続します。

  • 型認識による補完候補を含むコード補完
  • 型とシグネチャを表示するホバー情報
  • 定義へ移動
  • 参照の検索
  • ドキュメントおよびワークスペースシンボル
  • コール階層 (呼び出し元と呼び出し先)
  • リアルタイム診断 (パースエラー、型エラー)
  • 関数パラメータのシグネチャヘルプ

.wippy.yaml でLSPサーバーを有効にします:

version: "1.0"
lua:
type_system:
enabled: true
lsp:
enabled: true
address: ":7777"
フィールドデフォルト説明
enabledfalseTCPサーバーを有効化
address:7777TCPリッスンアドレス
http_enabledfalseHTTPトランスポートを有効化
http_address:7778HTTPリッスンアドレス
http_path/lspHTTPエンドポイントパス
http_allow_origin*CORS許可オリジン
max_message_bytes8388608受信メッセージの最大サイズ (バイト)

TCPサーバーは、標準的なLSPメッセージフレーミング (Content-Lengthヘッダー) を持つJSON-RPC 2.0を使用します。これはエディタ統合の主要なトランスポートです。

HTTPトランスポートはJSON-RPCペイロードを持つPOSTリクエストを受け付けます。ブラウザベースのエディタやWebツールに便利です。クロスオリジンアクセスのためにCORSヘッダーが含まれます。

lsp:
enabled: true
http_enabled: true
http_address: ":7778"
http_path: "/lsp"
http_allow_origin: "*"

LSPサーバーはレジストリエントリを識別するために wippy:// URIスキームを使用します:

wippy://namespace:entry_name

エディタはこれらのURIをレジストリ内のエントリIDにマッピングします。wippy:// スキームと生の namespace:entry_name 形式の両方が受け付けられます。

LSPサーバーは高速な検索のためにすべてのコードエントリのインデックスを維持します。インデクシングは複数のワーカーを使用してバックグラウンドで行われます。

主な動作:

  • エントリは依存関係の順序でインデックスされます (依存先が先)
  • 変更により影響を受けるエントリの再インデックスがトリガーされます
  • 未保存のエディタの変更はオーバーレイに保存されます
  • インデックスはインクリメンタルです - 変更されたエントリのみが再処理されます
メソッド説明
initialize機能ネゴシエーション
textDocument/didOpen開いたドキュメントの追跡
textDocument/didChangeドキュメント全体の同期
textDocument/didCloseドキュメントの解放
textDocument/hoverカーソル位置の型情報
textDocument/definition定義へジャンプ
textDocument/referencesすべての参照を検索
textDocument/completionコード補完
textDocument/signatureHelp関数シグネチャ
textDocument/diagnosticファイル診断
textDocument/documentSymbolファイルシンボル
workspace/symbolグローバルシンボル検索
textDocument/prepareCallHierarchyコール階層
callHierarchy/incomingCalls呼び出し元の検索
callHierarchy/outgoingCalls呼び出し先の検索

補完エンジンはコードグラフを通じて型を解決します。以下を提供します:

  • . および : の後のメンバー補完 (フィールド、メソッド)
  • ローカル変数の補完
  • モジュールレベルのシンボル補完
  • トリガー文字: .:

診断はインデクシング中に計算され、以下を含みます:

  • パースエラー (構文の問題)
  • 型チェックエラー (不一致、未定義のシンボル)
  • 重大度レベル: error、warning、information、hint

診断はドキュメントオーバーレイシステムを通じて入力中にリアルタイムで更新されます。

  • リンター - CLIベースのコードチェック
  • - 型システムのドキュメント
  • 設定 - ランタイム設定