Scalaでコンパイル時に正規表現をチェックする「マクロかつString Interpolation」


「マクロかつString Interpolation」って何言ってるかわからないですが、つまりそういうことです(どういうことだ)。String Interpolationの中で、マクロ呼べばできるんですね。*1 このblog post

http://hootenannylas.blogspot.com.au/2013/02/syntax-checking-in-scala-string.html
https://bitbucket.org/inkytonik/stringinterp/src

読んで知りました。コンパイル時に正規表現をチェックするマクロなら以下のような感じで簡単に書けるわけですが

https://github.com/retronym/macrocosm/blob/521dfc0bcd1/src/main/scala/com/github/retronym/macrocosm/Macrocosm.scala#L102-L128

使うときに
r("hoge")
というように括弧を付けないといけなくて、通常の
"hoge".r
より微妙に長くなってカッコ悪い!
r"hoge"
と呼び出したい!と前述のblog見て思いついてやったらできました。



だがしかし、
$の文字が含まれていると、先にString Interpolationの構文で認識されてしまって、エラーになって使えません!!!
エスケープするのもダサいし(そもそもできるのか?)なんか無理っぽいですが、$が含まれている場合でもうまくやる方法誰か思いついたら教えてください(´・ω・`)




以下教えてもらった対策を追記

やっぱりそうなるか・・・



さらに追記
こっちのほうが良さそう

*1:構文木を自分で組み立てないといけなくなって、単なるマクロよりも面倒になりますが