だいぶ前にVisual Studioの拡張機能でエディタ部分をいじりましたが、その時にどのレイヤに拡張部分を差し込むのかちゃんと説明できてませんでした。
具体的にいうと AdornmentLayerDefinition の Order属性のAfterとBeforeで指定する値ですね。
![]()
ここで指定する値は PredefinedAdornmentLayers になるんですが、どのレイヤがどういう順番なのかさっぱりわかりませんね。
※以前は説明文すらなかったけど、今はドキュメント更新されてますね。よかったよかった。
というわけで、MSのサポートさんから情報をもらったのでここで公開しておきます。
| 名前 | 説明 | 順番(Z-Order) |
| Caret | テキストのキャレットを描画してるレイヤ | 最前面 |
| Text | エディタのコンテンツ(テキスト)を描画してるレイヤ | 7 |
| Squiggle | 構文エラーとかで表示される波線とかを描画してるレイヤ | 6 |
| Selection | IME入力時の選択領域を描画してるレイヤ | 5 |
| TextMarker | ITextMarkerProviderFactoryで提供してるテキストマーカーを描画してるレイヤ | 4 |
| CurrentLineHighlighter | 現在行のハイライトを表示しているレイヤ(キャレットがある行) | 3 |
| Outlining | 折り畳みヒントを描画してるレイヤ | 2 |
| DifferenceSpace | IDifferenceViewerで提供されるブロックの位置合わせ表記などを表示するレイヤ(差分ビューアなどで見るやつ) | 1 |
| DifferenceChanges | IDifferenceViewerで提供されるコード差異や線などを表示するレイヤ(差分ビューアなどで見るやつ) | 最背面 |
※Outliningだけ特殊みたいでCurrentLineHighlighterからDifferenceChangesの間の任意のレイヤに差し込まれるみたいです。
ちなみにAfterとBeforeに矛盾した設定(例:Before=Squiggle, After=Textなど)をした場合、無条件に最前面になるので注意。
最後に、Microsoftサポートのみなさんありがとうございました。