やりたいこと
Sublime Text を使って Groovy の構文エラーを表示させたい。
まずはビルドさせてみる
メニューから [Tools] > [Build System] > [New Build System] を選択すると新しい設定ファイルが開かれるので、Groovy の情報を書き込む。
{ "cmd": ["C:\\groovy\\2.2.0\\bin\\groovy.bat", "$file"] }
これを名前の先頭に Groovy とつけて保存(場所はたぶん変更しなくてOK)
再びメニューから [Tools] > [Build System] > [Groovy] を選択して、Groovy ファイルを開いた状態で Ctrl + b
できた。
でも違う!
1、2年前 PHP の開発を行った時に Sublime Text を使い始めたのですが、その時は SublimeLinter を使ってファイル保存時に構文チェックをかけて、エラーの箇所にアラートを表示してたのですが、それを Groovy でもやりたい!
※ SublimeLinter のインストールは省略します
SublimeLinter を Groovy に対応させる
Sublime Text のプラグインは Python で作成されているため、Groovy 用の Python コードを書きます。
メニューから [Preferences] > [Brose package] でパッケージディレクトリが開かれます。 SublimeLinter > sublimelinter > modules の中に各種言語用の処理が記載されています。今のバージョンでは Groovy は無いっぽいので自作してしまいます。
groovy.py
import re from base_linter import BaseLinter, INPUT_METHOD_FILE CONFIG = { 'language': 'Groovy', 'executable': 'groovy', 'lint_args': ['-e', 'new GroovyShell().parse(new FileReader(args[0]), args[0])', '{filename}'], 'input_method': INPUT_METHOD_FILE } class Linter(BaseLinter): def parse_errors(self, view, errors, lines, errorUnderlines, violationUnderlines, warningUnderlines, errorMessages, violationMessages, warningMessages): for line in errors.splitlines(): match = re.match(r'^(?P<file>.*\.groovy)[\d: ]+(?P<error>.*)\s+@\s+line\s+(?P<line>\d+)\s*,\s*column\s+(?P<column>\d+)\s*.', line) if match: break if match: error, line = match.group('error'), match.group('line') self.add_message(int(line), lines, error, errorMessages)
Groovy には PHP の -l オプションの様な構文チェックオプションがありません。そのため GroovyShell クラスを使用して構文チェックを行います。 内容は既存のコードを参考にしています(主に php.py)
チェック用の python コードができたら今度は SublimeLinter の設定。
[Preferences] > [Package Settings] > [SublimeLinter] > [Settings - User] で、Groovy のパスを通します。
{ "sublimelinter_executable_map": { "groovy": "C:\\groovy\\2.2.0\\bin\\groovy.bat" } }
さて、これで Groovy ファイルを編集&保存を行うと
でた!
行番号の箇所にエラーが表示されました。 (表示のされ方が以前とちょっと違う気がしますがプラグインのバージョンの違いでしょうか)
groovyserv を使ってもっと早く!
チェックはできたのですが、反応が一瞬遅れて表示されます。sublimelinter_executable_map の設定に groovyclient のパスを指定すれば速度が向上します。
Windows 環境の場合、Cygwin 上で GVM を使っている場合でも、別途 groovyserv の公式サイトから Windows 用の groovyclient.exe を落としてくる必要があると思います。 かつ自前の環境では、事前に groovyserv を起動していないと Sublime Text が固まってしまいました。