package com.wix.rt.lang.parser; import com.intellij.lang.ASTNode; import com.intellij.lang.PsiParser; import com.intellij.lang.javascript.JavascriptParserDefinition; import com.intellij.lang.javascript.types.JSFileElementType; import com.intellij.lexer.Lexer; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiElement; import com.intellij.psi.tree.IElementType; import com.intellij.psi.tree.IFileElementType; import com.wix.rt.lang.RTLanguage; import com.wix.rt.lang.lexer.RTLexer; import com.wix.rt.lang.psi.RTAsExpression; import com.wix.rt.lang.psi.RTFilterExpression; import com.wix.rt.lang.psi.RTRepeatExpression; import org.jetbrains.annotations.NotNull; /** * @author Dennis.Ushakov */ public class RTParserDefinition extends JavascriptParserDefinition { private static final IFileElementType FILE = JSFileElementType.create(RTLanguage.INSTANCE); @NotNull @Override public Lexer createLexer(Project project) { return new RTLexer(); } @NotNull @Override public PsiParser createParser(Project project) { return new RTParser(); } @NotNull @Override public PsiElement createElement(ASTNode node) { final IElementType type = node.getElementType(); if (type.equals(RTElementTypes.REPEAT_EXPRESSION)) { return new RTRepeatExpression(node); } if (type.equals(RTElementTypes.FILTER_EXPRESSION)) { return new RTFilterExpression(node); } if (type.equals(RTElementTypes.AS_EXPRESSION)) { return new RTAsExpression(node); } return super.createElement(node); } @Override public IFileElementType getFileNodeType() { return FILE; } }