VS CodeにはPascal CaseをCamel Caseに変換できないバグがある

VS Codeの選択中の文字列の変換機能

VS Codeには選択中の文字列をPascal Case (パスカルケース)やCamel Case (キャメルケース)に変換する機能があります。

使い方はVS Codeのパレットコマンド (shift + command + P) で「trans」を入力すると「Transform to 〜」の一覧が表示されて、例えば「foo_bar_baz」を選択中に「Transform to Camel Case」を選択すれば、「fooBarBaz」に変換できます。

「Transform to 〜」での変換一覧は以下のとおりです。

コマンド変換前変換後
Transform to Camel Casefoo_bar_bazfooBarBaz
Transform to Pascal Casefoo_bar_bazFooBarBaz
Transform to Snake CaseFooBarBazfoo_bar_baz
Transform to Upper Casefoo_bar_bazFOO_BAR_BAZ
Transform to Lower CaseFOO_BAR_BAZfoo_bar_baz
Transform to Kebab Casefoo_bar_bazfoo-bar-baz
Transform to Camel Casefoo_bar_bazFoo_Bar_Baz
VS CodeにはPascal CaseをCamel Caseに変換できないバグがある

Pascal CaseをCamel Caseに変換できないバグ

「Transform to 〜」の変換機能は便利ですが、Pascal CaseをCamel Caseに変換できないバグがあります。

よって、「FooBarBaz → fooBarBaz」の変換は「Transform to Camel Case」ではできません。

この問題は去年からVS Codeの中の人は把握していますが「仕様」となっており、バグ扱いされていないので、現在も修正されていません。

よって、Camel CaseからPascal Caseなども変換不可となっています。

プログラミングのコードではPascal CaseとCamel Caseは変数名などでよく使われるので、これらが変換できないと不便です。

Pascal CaseをCamel Caseに変換する方法

Pascal CaseをCamel Caseに変換できないと説明しましたがある方法を使うと変換できるようになります。

それは、Pascal CaseをSnake Caseに変換したあとに、Camel Caseに変換するというものです。

Pascal CaseとCamel CaseはSnake Caseに変換することはできます。

さらにSnake CaseはPascal CaseとCamel Caseへ変換することが可能なので、

「Transform to Snake Case」→「Transform to Pascal Case (Camel Case)」の手順で変換できます。

ショートカットキーで変換する方法

コマンドパレットからだとPascal CaseをCamel Caseに変換するには、変換前にSnake Caseの変換が必要なのでコマンドを2回実行しなくてはなりません。

VS Codeのショートカットキーを登録すれば途中のSnake Caseの処理を実行したあとに「alt + Q」でPascal Case、「alt + C」でCamel Caseに変換できるようになるので、登録しておくと便利です。

ショートカットキーのJSONファイルは、コマンドパレットで「shortcuts json」で検索すると開けます。

keybindings.json
[
  {
    "key": "alt+q",
    "command": "runCommands",
    "args": {
      "commands": ["editor.action.transformToSnakecase", "editor.action.transformToPascalcase"]
    },
    "when": "editorTextFocus"
  },
  {
    "key": "alt+c",
    "command": "runCommands",
    "args": {
      "commands": ["editor.action.transformToSnakecase", "editor.action.transformToCamelcase"]
    },
    "when": "editorTextFocus"
  }
]