Because We Love Happy Coding

フリーライターからエンジニア × 講師。発信力だけあり余ってる感じ

VisualStudioCodeのスニペットのうち、一部の候補がサジェストされない現象を解決した

今日もまたコーディング。だって僕らはHappy Codingが大好きだから。

日記のはてなブログをVisualStudioCodeからAPI経由で更新するようにしたのだが、一つ問題があった。 はてなブログAPIXMLで更新することになっている。カテゴリは <category term="ゲームブック"/>のようにXMLのタグをファイル内に記述する。 私の日記にはこのカテゴリーが大量にあるため、VisualStudioCodeのスニペットに登録しておいた。 ところが、一部のスニペットがうまく認識されず、prefixを入力してもサジェスト候補に出てこない。全部が出てこないわけではなく、出てくるものもある。

最初は読み込めるスニペットの数に上限が設けられているのではないかと疑ったけれど、どこを探してもそういう記述は見つからなかった。上限はないらしい。 Webで事例を探すといろいろある。

しかし私の場合はいずれとも異なっていた。いや、設定ファイルの記述ミスという意味では同じなんだけど。

試しに、設定ファイルのどの単語が無視され、どの単語がサジェストされるのか調べてみた。 調べて見るとやはり、後半の単語が無視されている。 どこまで無視されているか、入力を試しながら遡っていくと、原因の箇所に行き当たった。

スニペットを作る際に、単語リストから正規表現置換でスニペットファイルを作ったんだけど、ある単語にダブルクォーテーションが含まれていることを見落としていた。本来、エスケープすべきダブルクォーテーションが、エスケープされていなかった。 そのためエラーが生じ、この単語より後ろに定義されたスニペットがすべて無視されてしまっていた。

バックスラッシュで正しくエスケープしなおす。

仮にその単語がsomething "foobar"だったとすると、以下のような感じ。

  "something \"foobar\"": {
    "scope": "xml,markdown",
    "prefix": "something \"foobar\"",
    "body": [
      "<category term=\"something \"foobar\"/>"
    ],
    "description": ""
  },

これでスニペットファイルが最後まで認識されるようになり、無事解決した。

同じようにお悩みの方の一助になれば。