Riderがサポートするシェーダー周りの機能メモ

#Riderの導入
[Rider202.5958.478以降](https://www.jetbrains.com/rider/nextversion/)をインストールした後に、PackageManagerのJetBrains Rider Editor(2019系だとRider Editor)のパッケージを2.0.5にアップデートする。
プロジェクト内にC#スクリプトがないとシェーダーの補完とかも効かないようなのでC#スクリプトを作成しておく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173366/a296cf78-3b8c-6983-e57e-11cee0848ec3.png)
ここまでの作業で導入終了。シェーダーのサポートが効くはず。

ダメなときは、Preferences>External ToolsのRegenerate Project filesボタンを押すと良かったりするのかもしれない。[New Shader Support - How To?](https://youtrack.jetbrains.com/issue/RIDER-47360)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173366/5505440c-bca2-59fc-76a8-50612acf7f05.png)

#機能紹介
サッと触ってみて見つけた機能を列挙。[VSCodeのUnityシェーダー用のプラグイン](https://assetstore.unity.com/packages/tools/utilities/shaderlabvscode-94653)をこれまで使っていたのでそれとの比較も併せて書きます。

##入力補完
HLSLの組み込み関数もUnityの関数もユーザー定義の関数やら変数やらも全部出てきてくれます。前述のVSCodeのプラグインより網羅している感じ。ShaderLab部分の記述についてはサポートされていないみたい。（Blend構文とかPropertiesの型とか）
ShaderLab部分の補完に関してはVSCodeのプラグインの方が良い。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173366/4d4309cd-4e57-ebcf-f2fc-faca9788ceca.png)

##Rename
Shift+F6でリネームできる。VSCodeではCtrl+Hで文字列置換でやっていたけど、Riderはちゃんと識別子に対応してリネームしてくれる。cgincファイルで定義されている関数をリネームすると関数を呼び出してるファイル側でもリネームされる。

##Find Usage
Ctrl+Alt+F7でUsageを見つけてくれてそこに飛べる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173366/d50951fc-75f5-8edb-589d-2436aa1fa797.png)

#Go to Declaration
Ctrl+Bで宣言に飛べる。

##include周り
`#include "."`と入力すると候補を出してくれる。誤字しないし、フォルダを潜ってcgincを探すのも楽。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173366/27b0d7e7-c2fe-7beb-70f0-6f0e4c7d0ae4.png)

cgincの位置を変えたり、includeしてない状態で関数を呼び出そうとするとエラーで適切なインクルードを指摘してくれて、おすと`#include`文を自動挿入してくれる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173366/5c659b08-2eae-d598-4930-ede78eaad8c2.png)

##キーワード
`#ifdef`系は対応する`#endif`が分かりやすく表示される。入力時に既存のキーワードが表示されるので誤字、重複が防げる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173366/59bf96c5-fc38-db93-0ced-2189a2c754f2.png)

##コード整形
Riderは通常はCtrl+Alt+Enterで自動フォーマットしてくれるみたいだけど、シェーダーで打つと改行されちゃうので、
1. `Ctrl+A`で全選択
2. `Alt+Enter`でメニュー表示
3. `Enter`でFormat Selection実行
でやれば自動整形してくれる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173366/15771093-d8cb-b742-4233-0756cd7607a9.png)

ShaderLab部分も整形してくれて助かるんだけど、`#pragma`とか`#include`とか`#`始まりの行はインデントされてない状態になってしまう。設定でどうにかできそうな気もするけどCode Styleの設定にcg/HLSLがないんですよね...
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173366/d4f0f7e6-2092-9695-47e9-86e5f59b20a8.png)
VSCodeのプラグインだとここもインデントされる。けどVSCodeの方は特定の書き方するとインデントがずれるバグがあるのでどっこいどっこい。

##ShaderLab補完への対応
Riderの[Live Template](https://qiita.com/r-ngtm/items/ba875d32c17c5aacf80c)なる機能を使って予めShaderLabの定型文を用意しておけばCtrl+Jで簡単に入力できる。っていうのがぱっと見つけられたShaderLab補完への対応策。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173366/a63e9682-3b99-f29e-d705-9724fcc3e3f9.png)
`add`と入力すれば`Blend One One`を定型文として入力できるテンプレートを設定しておいたもの。
ただ、ShaderLab部分では`add`と入力しても自動でテンプレートが出てこないので、Ctrl+Jを押してテンプレート一覧を表示して選んだり、`add`と入力した後にCtrl+Jを押してテンプレート候補を表示させて選んだりする手間はある。

##備考
既存の複雑目なシェーダー(cginc)を開いてみたら、入力補完は表示されるけどシンタックスハイライトが効いてない表示になっていたけど、再度確認しようとして開いてたら直ってたから、導入前にRiderを開いてたりしてなんかおかしいときは一度RiderかUnityかを閉じたりするといいのかもしれない。