日記のはてなブログをVisualStudioCodeからAPI経由で更新するようにしたのだが、一つ問題があった。
はてなブログのAPIはXMLで更新することになっている。カテゴリは <category term="ゲームブック"/>
のようにXMLのタグをファイル内に記述する。
私の日記にはこのカテゴリーが大量にあるため、VisualStudioCodeのスニペットに登録しておいた。
ところが、一部のスニペットがうまく認識されず、prefixを入力してもサジェスト候補に出てこない。全部が出てこないわけではなく、出てくるものもある。
最初は読み込めるスニペットの数に上限が設けられているのではないかと疑ったけれど、どこを探してもそういう記述は見つからなかった。上限はないらしい。 Webで事例を探すといろいろある。
- [Q&A] [VSCode] scssのスニペットが候補に出ない - Qiita
- 設定ファイルの記述が間違っていたケース
- 【VS Code】 ユーザースニペットを設定したのに使えない時 | 謎の技術研究部
- markdownの場合には、デフォルトではSnippetが無効化されている、というケース。設定で回避できる。
しかし私の場合はいずれとも異なっていた。いや、設定ファイルの記述ミスという意味では同じなんだけど。
試しに、設定ファイルのどの単語が無視され、どの単語がサジェストされるのか調べてみた。 調べて見るとやはり、後半の単語が無視されている。 どこまで無視されているか、入力を試しながら遡っていくと、原因の箇所に行き当たった。
スニペットを作る際に、単語リストから正規表現置換でスニペットファイルを作ったんだけど、ある単語にダブルクォーテーションが含まれていることを見落としていた。本来、エスケープすべきダブルクォーテーションが、エスケープされていなかった。 そのためエラーが生じ、この単語より後ろに定義されたスニペットがすべて無視されてしまっていた。
バックスラッシュで正しくエスケープしなおす。
仮にその単語がsomething "foobar"
だったとすると、以下のような感じ。
"something \"foobar\"": { "scope": "xml,markdown", "prefix": "something \"foobar\"", "body": [ "<category term=\"something \"foobar\"/>" ], "description": "" },
これでスニペットファイルが最後まで認識されるようになり、無事解決した。
同じようにお悩みの方の一助になれば。