Kaihatsu

atomのgrammarの構文がいまいちよく分からない

https://github.com/e-jigsaw/atom-jade/blob/ac7246406c9a1753cef1403ec16025150315ce68/grammars/jade.cson

Atom の language-jade で coffeescript がシンタックスハイライトされなくて困ったなあとなったのでとりあえず直してみることにしたら意外と大変だった。

some
  script(type='text/coffeescript').
    x = 100
    x.toString()

こういうやつ。元々 JavaScript のコードをハイライトさせるやつはあったから、それの JS になってる部分を Coffee に変えればいいや、とおもってコピペしてそれっぽく source.coffee に変えるとハイライトされるようにはなった。

が、

some

  script(type='text/coffeescript').
    x = 100
    x.toString()

みたいな感じで改行が入ると tag.jade と認識されてハイライトされなくなって困った。試行錯誤してみると https://github.com/e-jigsaw/atom-jade/blob/ac7246406c9a1753cef1403ec16025150315ce68/grammars/jade.cson#L927-L959 こんな感じで repository に追加して https://github.com/e-jigsaw/atom-jade/blob/ac7246406c9a1753cef1403ec16025150315ce68/grammars/jade.cson#L316 を付け足してやるとなんとなく動くようになったので一旦これでいくことにした。

とはいえ正規表現が雑なので

some

  script(type='text/coffeescript', data='hoge').
    x = 100
    x.toString()

みたいなことされると死ぬ。あと (type='text/coffeescript') のところがハイライトされない問題も抱えている。TextMate の構文をそのまま持ってきているらしいけど、絶望的に分かりにくくてめっちゃつらかった。かといってこの辺の知見全くないのでどうこうできるアレもなく...。