確かatomではrubyのsnippetを使ってクラスを書くときに、ファイル名から自動で生成してくれたと思うのですが、
vscodeのruby snippetではクラス名は ClassName
固定でセットされています。
これが煩わしいので、独自のsnippetsを書いて対応しました。
やり方
vscodeのコマンドパレットで snippets と打ち、次に言語選択でrubyを指定すると、
~/Library/Application Support/Code/User/snippets/ruby.json
が生成されます。
"Class definition from filename": { "prefix": "class", "body": [ "class ${TM_FILENAME_BASE/(.*)/${1:/pascalcase}/}", "\t$0", "end" ],
こんな感じのsnippetを定義すればokです。
foo_bar_baz.rb ファイルでcla と打つと(classと打たなくても、途中まででsuggestionされる) 以下が自動で入力されます。
class FooBarBaz end
メデタシ、メデタシ。
少し解説
参考)
vscode-rubyの定義
vscode-ruby/ruby.json at main · rubyide/vscode-ruby
ファイル名
公式ドキュメントに利用可能な変数定義が記載されています。
拡張子は不要なので、 TM_FILENAME_BASE を利用します。
Variables
passcalcase
passcalcaseへの変換ですが、非常にわかりにくいのですが、公式ドキュメントにEBNFで使えると書いています。
要は正規表現にマッチする値に対して、各種変換処理が利用できるとのことです。
Grammar#
おまけ:既存のsnippetsを非表示にする方法
ドキュメントを読んでいて気づいたのですが、不要なsnippetsを非表示にする方法の記載がありました。 Can I remove snippets from IntelliSense?
やり方は、コマンドパレットから Insert Snippet
を選んで、
非表示にしたいsnippet名を入力し、非表示アイコンを押すだけ。
この情報がどの設定ファイルに書き込まれているのかは不明。 syncの対象になっているかなどは気になるところ。