Skip to content

Latest commit

 

History

History

vscode-ext

HSP3 アナライザー・ミニ for VSCode

HSP3 の静的解析ツールです。

解析の精度は不十分なので、ご了承ください。マクロなど、一部の機能に対応していません。

インストール

  • Visual Studio Code をインストールしてください。
  • VSCode で次の拡張機能をインストールしてください:
    • language-hsp3
    • hsp3-analyzer-mini
  • HSP3 のインストールディレクトリを設定してください。例:
{
    "hsp3-analyzer-mini.hsp3-root": "C:/Program Files/hsp36"
}

その後、HSP のファイル (.hsp ファイル) を開くと動作するはずです。

機能

  • ホバー
    • 変数や命令などにカーソルをのせると関連情報が表示されます。
    • hsphelp にヘルプファイルがある場合は、その内容の一部 (パラメータ情報と説明) を表示します。
    • あるいは、定義箇所 (#deffunc など) の上にあるコメントを表示します。
  • 入力補完
    • Ctrl+Space で入力補完 (オートコンプリート) の一覧が表示されます。
  • 定義・使用箇所の参照
    • 変数や命令を選択して右クリックメニューから「定義へ移動」(F12)をすると定義箇所に移動します。(Alt+← で戻る。)
    • 「すべての参照を表示」(Shift+F12)で定義・使用箇所の一覧を表示します。
    • 「名前の変更」(F2)で定義・使用箇所を一括で変更します。(変更処理の正確性は保証されませんので、ご注意ください。)
  • シグネチャヘルプ
    • 命令や関数の引数の情報が表示されます。
  • セマンティックハイライト
    • 変数や命令などが種類によって色分けされます。

定義・使用箇所

変数や命令など識別子が定義されている場所を定義箇所 (def-site)、使用されている場所を使用箇所 (use-site) と呼びます。

例えば以下のスクリプトでは、最初の行でラベル *l_main が「定義」されていて、ここがラベルの定義箇所です。一方、goto *l_main ではラベルが「使用」されていて、ここがラベルの使用箇所です。

*l_main
    await 17
    goto *l_main

この LSP は変数の定義・使用箇所を正確に解析できません。代わりに、代入や dim 命令などを見つけたら変数が定義されたとみなすことにしています。

    ; dim 命令の最初の引数に指定されたので、変数 x が「定義」されたとみなす
    dim x

    ; = の左辺にあるので、変数 y が「定義」されたとみなす
    y = 1

繰り返しになりますが、この LSP による定義・使用箇所の検査は不正確なので、過信しないでください。

その他

  • エディターで開いているファイルと同じディレクトリ (またはその下にディレクトリ) にある .hsp ファイルも自動的に解析されます。

未対応

  • #comfunc
  • #define
  • #if
  • #undef
  • .as ファイル
  • カレントディレクトリにあるヘルプソースファイルの解析

細かい機能

コードフォーマット

「ドキュメントのフォーマット」コマンドにより、字下げや空白を自動で調整します。

💡 インクルードガードの生成

ファイルの先頭付近でコードアクション「インクルードガードを生成する」を実行すると、ファイル名に基づいてインクルードガードを生成します。

💡 カンマの両側を交換する

カンマ , にカーソルが当たっているときにコードアクション「カンマの両側を交換する」を実行すると、そのカンマの両側の式を交換します。


実験的機能

ginger.txt という名前のファイルを配置して、スクリプトファイルのファイル名を書いておくと、そのファイルおよびそこからincludeされている一連のファイルを1個のプロジェクトとみなします。 プロジェクトに属するスクリプトは追加の解析の対象となります。

構文リント (syntax_lint)

スクリプトの字面をみて 怪しい (誤りの可能性がある) 部分を検出し、警告します。 いまのところrepeat-loopの中にreturnがあるパターンだけ実装されています。(アイディア募集中)

    repeat
        return ; ← 警告
    loop

意味検査 (sema)

スクリプトを解析して実行時エラーが発生すると思われる部分を検出し、警告します。 いまのところ変数を受け取る引数に、変数でないものを渡すパターンだけ実装しています。

#module
#deffunc use_var var x ; ← 変数を受け取る命令
    return
#global

    use_var 1 ; ← 明らかに変数でない (警告)

インクルード先への移動

#include の上で「定義に移動」すると、include先とみなされるファイルに移動できます。


設定

機能の無効化

設定によって一部の機能を選択して無効にできます。(はじめはすべての機能が有効になっています)

また、一部の機能はVSCodeがはじめから提供している設定項目によって無効化できます。 これらは [hsp3] セクション内に指定することで、HSPのファイルを開いている場合に限定して設定できます。

{
    // リント
    "hsp3-analyzer-mini.lint-enabled": false,

    // ドキュメントシンボル、アウトライン
    "hsp3-analyzer-mini.documentSymbol.enabled": false,

    "[hsp3]": {
        // ホバー (マウスカーソルを合わせるとツールチップが出る機能)
        "editor.hover.enabled": false,

        // 入力補完
        "editor.suggestOnTriggerCharacters": false,

        // パラメーターヒント
        // (命令や関数のパラメータの入力中にツールチップが出る機能。シグネチャヘルプともいう)
        "editor.parameterHints.enabled": false,

        // セマンティックハイライト (定義済みの単語を種類別に色分けする機能。シンタックスハイライトとは別)
        "editor.semanticHighlighting.enabled": false,

        // カッコや引用符 ('") がペアで入力される機能
        "editor.autoClosingBrackets": "never",
        "editor.autoClosingQuotes": "never",
    }
}