Groovy用のSublimeSocketのfilter書いた
概要
以前Ruby用のSublimeSocketフィルタを書いたのだけど、
それのGroovy用を、#yokohamagroovy で書いた。
https://github.com/sassembla/SublimeSocket3/tree/master/samples/groovySample
内容
保存するとGroovyのファイルを動かす。
ファイル保存後、非同期でファイルを実行する。
実行時にエラーが出れば表示を行う。
セットアップ
・Groovy入っている
・SublimeSocket3をST3のpackageに入れる
・sample/groovySample フォルダを適当にどこかにコピー
・groovyFilter.txt 内のパスを変更(runShellとstartTailing)
https://github.com/sassembla/SublimeSocket3/blob/master/samples/groovySample/groovyFilter.txt#L69
https://github.com/sassembla/SublimeSocket3/blob/master/samples/groovySample/groovyFilter.txt#L71
https://github.com/sassembla/SublimeSocket3/blob/master/samples/groovySample/groovyFilter.txt#L81
・CommandPalette > "SublimeSocket: run SushiJSON"
・画面下のバーに入力窓がでるので、rubyFilter.txtのファイルパスを入れてエンター
どこか/groovyFilter.txt
これで、パスが合っていれば、以降hello.groovyを保存するごとに実行され、
エラーがあれば表示される。
今回捕獲したエラー
とりあえずク構文まわりだけカバーした。
typoとかでへんなとこにdefが来たり、
コンストラクタをtypoしたりすると下記みたいなエラーが出るので、
Method definition not expected here. Please define the method at an appropriate place or perhaps try using a block/Closure instead. at line: 8 column: 2. File: /Users/highvision/Desktop/groovySample/hello.groovy @ line 8, column 2.
とかが発生したら、原因箇所をこれでもかと赤く囲む。
やらなかった事
groovyさんはかなり頭がよく、
例えばメソッド名typoしちゃったりすると、
groovy.lang.MissingMethodException: No signature of method: Greet.sayHello() is applicable for argument types: () values: []
at Greet.salute(hello.groovy:15)
というエラーとともに、
Possible solutions: salutde(), split(groovy.lang.Closure), asType(java.lang.Class), wait(), wait(long), use([Ljava.lang.Object;)
とか出してくれるので、関連性がログから拾えれば
quickFix とかも組み合わせで出せるなーと思ったんだけど、
まあデモだし。(逃げた)