いろきゅうの(元)はてなダイアリー

はてなダイアリーから移行中…

24時間プログラミング[3時間目] 〜聖夜に舞い降りるバグと妖精〜

ぬぉぉぉ、もう3時間経ってしまったのか! 時間の流れは早い…。 誰か咲夜さん呼んできてぇ〜

enum の値で switch したいことが時々あると思います。こんな感じ。

enum EHoge
{
  HOGE_VALUE1,
  HOGE_VALUE2,
  HOGE_VALUE3,

  HOGE_MAX
};


switch(eHoge)
{
  case HOGE_VALUE1: 〜; break;
  case HOGE_VALUE2: 〜; break;
  case HOGE_VALUE3: 〜; break;
}

こういうコードを描くとき、私は enum の要素をコピり、とりあえず switch の中に貼り付けます。 で、あとは、case HOGE_VALUE1: に展開できれば良いわけですが、手動でやるのはメンドクサイ。というわけで、マクロ書きました。こんなの。

Sub EnumToSwitch()
    DTE.ExecuteCommand("Edit.Replace")
    With DTE.Find
        .FindWhat = "^[\t ]*{:i},*{[\t ]*.*}"
        .ReplaceWith = "\tcase \1:\2;"
        .Target = vsFindTarget.vsFindTargetCurrentDocumentSelection
        .MatchCase = True
        .MatchWholeWord = True
        .MatchInHiddenText = False
        .PatternSyntax = vsFindPatternSyntax.vsFindPatternSyntaxRegExpr
        .ResultsLocation = vsFindResultsLocation.vsFindResultsNone
        .Action = vsFindAction.vsFindActionReplaceAll
        .Execute()
        .PatternSyntax = vsFindPatternSyntax.vsFindPatternSyntaxLiteral
    End With
    DTE.Windows.Item(Constants.vsWindowKindFindReplace).Close()
End Sub
switch(eHoge)
{
  HOGE_VALUE1,
  HOGE_VALUE2,
  HOGE_VALUE3,
}

↑こんな switch 文の状態から置換えで来ます。 但し、実行するときは、選択範囲で囲う必要がありますので、ちょっと注意。

つか、その前に誰か使ってくれるんでしょーか?(ぉ