LoginSignup
0
0

More than 1 year has passed since last update.

VSCodeでApexのフォーマッターを使う(Windows版)

Last updated at Posted at 2023-01-27

VSCodeの拡張機能にApexのフォーマッターが無いため、外部ツールと組み合わせて実現させます。

参考にした記事

Uncrustify インストール

Uncrustify という外部ツールをインストールします。
下記サイトから Uncrustify の最新版バイナリをダウンロードします。(投稿時点の最新は 0.76.0)

ダウンロードした zip ファイルを解凍し、任意のフォルダに配置します。
ここでは C:\dev\uncrustify-0.76.0_f-win64 とします。

C:\dev
  └ uncrustify-0.76.0_f-win64
    ├ bin
    │ └ uncrustify.exe  ← 必要なのはこのファイルです
    └ share
      ├ doc
      └ man

uncrustify.exe のあるフォルダ C:\dev\uncrustify-0.76.0_f-win64\bin を環境変数PATHに通します。
ユーザー環境変数かシステム環境変数かは都合に合わせて設定してください。
image.png

VSCode の Uncrustify 拡張機能セットアップ

VSCode の拡張機能の検索窓から uncrustify と入力し、Uncrustify の拡張機能が表示されたらインストールボタンをクリックします。
image.png
インストールが完了したら、拡張機能の歯車マークから設定画面を開きます。(ウィンドウ左下の大きな歯車から設定を開き、検索窓から uncrustify と入力しても表示されます)
Uncrustify: Lang Overridesettings.json で編集 をクリックします。
image.png
apex のコードを Java のルールでフォーマットするために下記のように記載します。

    "uncrustify.langOverrides": {
        "apex": "JAVA",
        "apex-anon": "JAVA"
    },

追記した様子。
image.png
設定が反映されるよう、念のため VSCode を再起動します。
以上で設定は完了です。

Uncrustify の設定ファイル作成

設定ファイルが用意されている場合はこの作業は不要です

[表示] - [コマンドパレット] を開き、SFDX と入力して候補に表示される SFDX: プロジェクトを作成 から指示に従ってプロジェクトを作成します。
image.png
次に [表示] - [コマンドパレット] を開き、uncrustify と入力して候補に表示される Uncrustify: Create default config file を選択します。そうするとプロジェクト直下に uncrustify.cfg というファイルが作成されます。
image.png
image.png
ただ、デフォルトの設定のままだときれいにフォーマットされない場合があるので、下記のコードを上書きします。
(設定ファイルの項目一つ一つを把握しきれていないため、どなたかが Apex用に作成してくださったものを拝借しています)

フォーマット操作

手動フォーマット

Apex のコードを開いた状態で Alt+Shift+F でフォーマットされます。
【例】
image.png
Alt+Shift+F を押すと、、、こうなります↓
image.png

自動フォーマット設定

自動フォーマット設定をすることで、ファイル保存時に自動フォーマットしてくれるため、上記手動フォーマットは不要になるのでおススメです。
設定画面から Editor: Format On Save のチェックボックスを付けます。
image.png
(注)Files: Auto Save 設定が afterDelay になっていると自動フォーマットが効かないので注意してください。

(補足)フォーマットされない表現

switch ステートメント

Apex の switch 文が含まれているコードはフォーマットされないことを確認しています。
if 文に置き換えることをおススメします。

switch on i {
    when 2 {
        System.debug('i is 2');
    }
    when -3 {
        System.debug('i is -3');
    }
    when else {
        System.debug('default');
    }
}
if (i == 2) {
    System.debug('i is 2');
} else if (i == -3) {
    System.debug('i is -3');
} else {
    System.debug('default');
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0