Java Code Examples for com.intellij.lang.PsiBuilder#lookAhead()
The following examples show how to use
com.intellij.lang.PsiBuilder#lookAhead() .
These examples are extracted from open source projects.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source Project: reasonml-idea-plugin File: RmlParser.java License: MIT License | 6 votes |
private void parseStringValue(@NotNull PsiBuilder builder, @NotNull ParserState state) { if (state.isCurrentContext(macroRaw)) { state.wrapWith(m_types.C_MACRO_RAW_BODY); } else if (state.isCurrentContext(raw)) { state.complete().add(mark(builder, rawBody, m_types.C_MACRO_RAW_BODY).complete()).advance().popEnd(); } else if (state.isCurrentResolution(annotationName)) { state.popEndUntilStartScope(); } else if (state.isCurrentResolution(maybeRecordUsage)) { IElementType nextToken = builder.lookAhead(1); if (m_types.COLON.equals(nextToken)) { state.updateCurrentContext(object).updateCurrentResolution(object).updateCurrentCompositeElementType(m_types.C_JS_OBJECT); state.add(markScope(builder, object, objectField, m_types.C_OBJECT_FIELD, m_types.STRING_VALUE)); } } else if (state.isCurrentResolution(object)) { state.add(markScope(builder, object, objectField, m_types.C_OBJECT_FIELD, m_types.STRING_VALUE)); } }
Example 2
Source Project: BashSupport File: ParserUtil.java License: Apache License 2.0 | 6 votes |
public static boolean containsTokenInLookahead(PsiBuilder builder, IElementType token, int maxLookahead, boolean allowWhitespace) { int i = 0; while (i < maxLookahead) { IElementType current = allowWhitespace ? builder.lookAhead(i) : builder.rawLookup(i); if (current == null) { return false; } if (current == token) { return true; } i++; } return false; }
Example 3
Source Project: react-templates-plugin File: RTJSParser.java License: MIT License | 5 votes |
public RTJSParser(PsiBuilder builder) { super(JavaScriptSupportLoader.JAVASCRIPT_1_5, builder); myExpressionParser = new RTExpressionParser(); myStatementParser = new StatementParser<RTJSParser>(this) { @Override protected void doParseStatement(boolean canHaveClasses) { final IElementType firstToken = builder.getTokenType(); if (firstToken == JSTokenTypes.LBRACE) { parseExpressionStatement(); checkForSemicolon(); return; } if (isIdentifierToken(firstToken)) { final IElementType nextToken = builder.lookAhead(1); if (nextToken == JSTokenTypes.IN_KEYWORD) { parseInStatement(); return; } } if (builder.getTokenType() == JSTokenTypes.LPAR) { if (parseInStatement()) { return; } } super.doParseStatement(canHaveClasses); } private boolean parseInStatement() { PsiBuilder.Marker statement = builder.mark(); if (!getExpressionParser().parseInExpression()) { statement.drop(); return false; } statement.done(JSElementTypes.EXPRESSION_STATEMENT); return true; } }; }
Example 4
Source Project: BashSupport File: ParserUtil.java License: Apache License 2.0 | 5 votes |
public static boolean hasNextTokens(PsiBuilder builder, boolean enableWhitespace, IElementType... tokens) { for (int i = 0, tokensLength = tokens.length; i < tokensLength; i++) { IElementType lookAheadToken = enableWhitespace ? builder.rawLookup(i) : builder.lookAhead(i); if (lookAheadToken != tokens[i]) { return false; } } return true; }
Example 5
Source Project: react-templates-plugin File: RTJSParser.java License: MIT License | 5 votes |
public RTJSParser(PsiBuilder builder) { super(JavaScriptSupportLoader.JAVASCRIPT_1_5, builder); myExpressionParser = new RTExpressionParser(); myStatementParser = new StatementParser<RTJSParser>(this) { @Override protected void doParseStatement(boolean canHaveClasses) { final IElementType firstToken = builder.getTokenType(); if (firstToken == JSTokenTypes.LBRACE) { parseExpressionStatement(); checkForSemicolon(); return; } if (isIdentifierToken(firstToken)) { final IElementType nextToken = builder.lookAhead(1); if (nextToken == JSTokenTypes.IN_KEYWORD) { parseInStatement(); return; } } if (builder.getTokenType() == JSTokenTypes.LPAR) { if (parseInStatement()) { return; } } super.doParseStatement(canHaveClasses); } private boolean parseInStatement() { PsiBuilder.Marker statement = builder.mark(); if (!getExpressionParser().parseInExpression()) { statement.drop(); return false; } statement.done(JSElementTypes.EXPRESSION_STATEMENT); return true; } }; }
Example 6
Source Project: intellij-latte File: LatteParserUtil.java License: MIT License | 5 votes |
public static boolean isNamespace(PsiBuilder builder, int level) { PsiBuilder.Marker marker = builder.mark(); boolean result = false; IElementType type = builder.getTokenType(); IElementType nextToken = builder.lookAhead(1); if (type == LatteTypes.T_PHP_NAMESPACE_REFERENCE && nextToken == LatteTypes.T_PHP_NAMESPACE_RESOLUTION) { result = true; } marker.rollbackTo(); return result; }
Example 7
Source Project: reasonml-idea-plugin File: RmlParser.java License: MIT License | 4 votes |
private void parseLBrace(@NotNull PsiBuilder builder, @NotNull ParserState state) { if (state.previousElementType1 == m_types.DOT && state.previousElementType2 == m_types.UIDENT) { // Local open a js object // Xxx.|>{<| .. } state.add(markScope(builder, localOpen, localObjectOpen, m_types.C_LOCAL_OPEN, m_types.LPAREN).complete()); } if (state.isCurrentResolution(typeNamedEq)) { boolean isJsObject = builder.lookAhead(1) == m_types.DOT; state.add(markScope(builder, isJsObject ? jsObject : recordBinding, isJsObject ? m_types.C_JS_OBJECT : m_types.C_RECORD_EXPR, m_types.LBRACE)); } else if (state.isCurrentResolution(tryBody)) { // A try expression // try (..) |>{<| .. } state.updateCurrentResolution(tryBodyWith). add(markScope(builder, state.currentContext(), tryBodyWith, m_types.C_TRY_HANDLERS, m_types.LBRACE)); } else if (state.isCurrentResolution(moduleNamedEq) || state.isCurrentResolution(moduleNamedSignature)) { state.add(markScope(builder, moduleBinding, m_types.C_SCOPED_EXPR, m_types.LBRACE)); } else if (state.isCurrentResolution(letNamedEq)) { state.add(markScope(builder, maybeRecord, maybeRecordUsage, m_types.C_SCOPED_EXPR, m_types.LBRACE)); } else if (state.isCurrentResolution(ifThenStatement)) { state.add(markScope(builder, scope, brace, m_types.C_SCOPED_EXPR, m_types.LBRACE)); } else if (state.isCurrentResolution(clazzNamedEq)) { state.add(markScope(builder, clazzBodyScope, m_types.C_SCOPED_EXPR, m_types.LBRACE)); } else if (state.isCurrentResolution(switchBinaryCondition)) { boolean isSwitch = state.popEndUntilContext(switch_).isCurrentResolution(switch_); state.add(markScope(builder, isSwitch ? switchBody : brace, m_types.C_SCOPED_EXPR, isSwitch ? m_types.SWITCH : m_types.LBRACE)); } else if (state.isCurrentResolution(jsxTagPropertyEqValue)) { // A scoped property state.updateScopeToken(m_types.LBRACE); } else if (state.isCurrentResolution(functorParamColon)) { state.updateCurrentResolution(functorParamColonSignature). add(markScope(builder, state.currentContext(), functorParamColonSignature, m_types.C_SIG_EXPR, m_types.LBRACE).complete()); } else if (state.isCurrentContext(functorDeclaration) && state.previousElementType1 == m_types.ARROW) { // Functor implementation // module M = (..) => |>{<| .. } state.add(markScope(builder, functorBinding, functorBinding, m_types.C_FUNCTOR_BINDING, m_types.LBRACE).complete()); } else { // it might be a js object IElementType nextElement = builder.lookAhead(1); if (state.isCurrentResolution(signatureItem) && nextElement == m_types.DOT) { // js object detected (in definition) // let x: |>{<|. ___ } state.add(markScope(builder, state.currentContext(), jsObject, m_types.C_JS_OBJECT, m_types.LBRACE)); } else if (nextElement == m_types.STRING_VALUE || nextElement == m_types.DOT) { // js object detected (in usage) // |>{<| "x" ___ } state.add(markScope(builder, state.currentContext(), jsObject, m_types.C_JS_OBJECT, m_types.LBRACE)). advance(). add(mark(builder, state.currentContext(), objectField, m_types.C_OBJECT_FIELD)); } else { state.add(markScope(builder, scope, brace, m_types.C_SCOPED_EXPR, m_types.LBRACE)); } } }