読み書きプログラミング

日常のプログラミングで気づいたことを綴っています

underscore形式の名前をCamelCaseに変換する

Atomのfind-and-replaceは正規表現が使えますが、JavaScript仕様なので、置換文字に\u(小文字を大文字に変える)などのメタ文字が使えません。
JavaScriptのreplaceは置換文字列引数に関数を与えることができ、それでなんでも変換できるようになっていますが、find-and-replaceには文字列しか渡せないので、表題である「underscore形式の名前をCamelCaseに変換する」ことができません。

なので、init.coffeeに簡単なコマンドを追加しました。

atom.commands.add 'atom-text-editor', 'my-tools:underscore-to-camelcase', ->
  return unless editor = atom.workspace.getActiveTextEditor()

  editor.buffer.replace /_[a-z]/, (str) ->
    str[1].toUpperCase()

これで、コマンドパレット(shift-cmd-p)からmy-tools:underscore-to-camelcaseを実行すれば、名前を変換してくれます。

逆変換は本来もっとややこしい気もしますが、あまりこだわらない単純な実装なら、以下のような感じ。

atom.commands.add 'atom-text-editor', 'my-tools:camelcase-to-underscore', ->
  return unless editor = atom.workspace.getActiveTextEditor()

  editor.buffer.replace /[a-z][A-Z]/, (str) ->
    str[0] + '_' + str[1].toLowerCase()