Xtextのコメントと空白文字のメモ。
Xtextでは、コメントや空白文字のルール名はデフォルトで以下の様になっている。
| ルール名 | 内容 |
|---|---|
| WS | 空白文字(white space) |
| ML_COMMENT | ブロックコメント(multi-line comment) |
| SL_COMMENT | 単一行コメント(single-line comment) |
空白文字やコメントの事を、Xtextでは「hidden」と呼んでいるようだ。
トークンが空白文字やコメントかどうかを判定するのはIHiddenTokenHelper(デフォルトの実装はDefaultHiddenTokenHelper)で行われる。
DefaultHiddenTokenHelperのソースの抜粋。
ルール名があちこちで使われているのが分かる。
package org.eclipse.xtext.parsetree.reconstr.impl;
public class DefaultHiddenTokenHelper extends AbstractHiddenTokenHelper {
〜
public boolean isWhitespace(AbstractRule rule) {
return rule != null && "WS".equals(rule.getName());
}
public boolean isComment(AbstractRule rule) {
return rule != null && ("ML_COMMENT".equals(rule.getName()) || "SL_COMMENT".equals(rule.getName()));
}
〜 }
IHiddenTokenHelperを使ってコメントかどうかを判定することが出来る。
import org.eclipse.xtext.AbstractRule; import org.eclipse.xtext.GrammarUtil; import org.eclipse.xtext.parsetree.reconstr.IHiddenTokenHelper; import org.eclipse.xtext.parsetree.reconstr.impl.DefaultHiddenTokenHelper;
public static boolean isComment(EObject object) {
IHiddenTokenHelper hiddenHelper = new DefaultHiddenTokenHelper(); //本来はインジェクションで初期化すべき
AbstractRule rule = GrammarUtil.containingRule(object);
if (rule != null) {
return hiddenHelper.isComment(rule);
}
return false;
}