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; }