public void collapse(@NotNull IElementType iElementType) { original.collapse(iElementType); psiBuilder.recycle(this); }
public void collapse(@NotNull IElementType iElementType) { delegate.collapse(iElementType); }
/** * Parses nested-call like wrappers: <code>custom_token()</code>, converting custom token to sub and making custom nested * call wrapper * * @param nestedCallType wrapper element type * @return parsing result */ protected boolean parseCustomNestedCall(@NotNull PerlBuilder builder, int level, @NotNull IElementType nestedCallType) { PsiBuilder.Marker wrapperMarker = builder.mark(); if (PerlParserImpl.nested_call_inner( builder, level, (b, l) -> { PsiBuilder.Marker m = b.mark(); b.advanceLexer(); m.collapse(SUB_NAME); return true; }, PerlParserImpl.optional_expression_parser_ )) { wrapperMarker.done(nestedCallType); return true; } wrapperMarker.rollbackTo(); return false; } }
evalMarker.collapse(BashElementTypes.EVAL_BLOCK); } else { evalMarker.drop();
perlMarker.collapse(perlTokenType); perlMarker.setCustomEdgeTokenBinders(WhitespacesBinders.GREEDY_LEFT_BINDER, WhitespacesBinders.GREEDY_RIGHT_BINDER);
evalMarker.collapse(EVAL_BLOCK); } else { evalMarker.drop();
public static boolean parseFileAsString(PsiBuilder b, int l) { if (b.eof()) { return false; } if (isEndMarker(b)) { return false; } boolean gotItem = false; PsiBuilder.Marker stringMarker = b.mark(); while (!b.eof()) { if (isEndMarker(b)) { break; } boolean isLastToken = TemplateToolkitParserDefinition.WHITE_SPACES.contains(b.rawLookup(1)); PsiBuilder.Marker m = b.mark(); b.advanceLexer(); m.collapse(TT2_STRING_CONTENT); gotItem = true; if (isLastToken) { break; } } if (gotItem) { stringMarker.done(SQ_STRING_EXPR); } else { stringMarker.drop(); } return gotItem; }
public static boolean parseMasonNamedBlock(PsiBuilder b, int l, IElementType closeToken, IElementType statementTokenType) { boolean r = false; PsiBuilder.Marker methodMarker = b.mark(); b.advanceLexer(); PsiBuilder.Marker subMarker = b.mark(); if (PerlParserUtil.consumeToken(b, IDENTIFIER)) { subMarker.collapse(SUB_NAME); if (PerlParserUtil.consumeToken(b, HTML_MASON_TAG_CLOSER)) { PsiBuilder.Marker blockMarker = b.mark(); PerlParserProxy.block_content(b, l); if (b.getTokenType() == closeToken) { blockMarker.done(HTML_MASON_BLOCK); blockMarker.setCustomEdgeTokenBinders(WhitespacesBinders.GREEDY_LEFT_BINDER, WhitespacesBinders.GREEDY_RIGHT_BINDER); b.advanceLexer(); methodMarker.done(statementTokenType); r = true; } } } if (!r) { methodMarker.rollbackTo(); } return r || MasonParserUtil.recoverToGreedy(b, closeToken, "Error"); } }
public static boolean parseMasonMethod(PsiBuilder b, int l, IElementType closeToken, IElementType statementTokenType) { boolean r = false; PsiBuilder.Marker methodMarker = b.mark(); b.advanceLexer(); PsiBuilder.Marker subMarker = b.mark(); if (PerlParserUtil.consumeToken(b, SUB_NAME)) { subMarker.collapse(SUB_NAME); PerlParserProxy.method_signature(b, l); if (PerlParserUtil.consumeToken(b, MASON_TAG_CLOSER)) { PsiBuilder.Marker blockMarker = b.mark(); PerlParserProxy.block_content(b, l); if (b.getTokenType() == closeToken) { blockMarker.done(BLOCK); blockMarker.setCustomEdgeTokenBinders(WhitespacesBinders.GREEDY_LEFT_BINDER, WhitespacesBinders.GREEDY_RIGHT_BINDER); b.advanceLexer(); methodMarker.done(statementTokenType); r = true; } } } if (!r) { methodMarker.rollbackTo(); } return r || MasonParserUtil.recoverToGreedy(b, closeToken, "Error"); }
/** * Parses SQ string with optional conversion to the use_vars lp string * * @param b PerlBuilder * @param l parsing level * @return parsing result */ public static boolean mapUseVars(PsiBuilder b, int l, Parser parser) { PsiBuilder.Marker m = b.mark(); boolean r = parser.parse(b, l); // fixme prepend last done marker if (r) { m.collapse(PARSABLE_STRING_USE_VARS); } else { m.drop(); } return r; }
@Override public boolean parse(BashPsiBuilder builder) { PsiBuilder.Marker marker = builder.mark(); //eat the "let" token builder.advanceLexer(); PsiBuilder.Marker letExpressionMarker = builder.mark(); //read the params and redirects boolean paramsAreFine = CommandParsingUtil.readCommandParams(builder, VALID_EXTRA_TOKENS); if (paramsAreFine) { letExpressionMarker.collapse(BashElementTypes.LET_LAZY_EXPRESSION); marker.done(LET_COMMAND); } else { letExpressionMarker.drop(); marker.drop(); builder.error("Expected an arithmetic expression"); } return true; } }
private boolean readComposedValue(BashPsiBuilder builder) { PsiBuilder.Marker marker = builder.mark(); int count = 0; IElementType next = builder.getTokenType(true); while (validTokens.contains(next) || ParserUtil.isWordToken(next)) { builder.advanceLexer(); count++; next = builder.getTokenType(true); } if (count > 0) { marker.collapse(WORD); } else { marker.drop(); } return count > 0; }
/** * Checks for version token and convert if necessary * * @param b PerlBuilder * @param l parsing level * @return parsing result */ public static boolean parsePerlVersion(PsiBuilder b, @SuppressWarnings("unused") int l) { if (VERSION_TOKENS.contains(b.getTokenType())) { PsiBuilder.Marker m = b.mark(); b.advanceLexer(); m.collapse(VERSION_ELEMENT); return true; } return false; }
public static boolean parseTags(PsiBuilder b, int l) { PsiBuilder.Marker m = null; while (!b.eof() && !isEndMarker(b)) { if (m == null) { m = b.mark(); } b.advanceLexer(); } if (m != null) { m.collapse(TT2_STRING_CONTENT); m.precede().done(SQ_STRING_EXPR); } return true; }
public static boolean collapseNonSpaceTo(PsiBuilder b, int l, IElementType targetElement) { IElementType tokenType = b.getTokenType(); if (tokenType == POD_IDENTIFIER) { PsiBuilder.Marker m = b.mark(); while (!b.eof() && !PodParserDefinition.ALL_WHITE_SPACES.contains(b.rawLookup(1))) { b.advanceLexer(); } b.advanceLexer(); m.collapse(targetElement); return true; } return false; }
public static boolean parseHashKey(PsiBuilder b, int l) { PsiBuilder.Marker m = b.mark(); if (TemplateToolkitParser.keyword_or_identifier_term(b, l)) { m.collapse(TT2_STRING_CONTENT); m.precede().done(SQ_STRING_EXPR); return true; } return false; }
public static boolean parseIdentifier(PsiBuilder b, int l) { if (consumeToken(b, TT2_IDENTIFIER)) { return true; } else if (TemplateToolkitSyntaxElements.POSSIBLE_IDENTIFIERS.contains(b.getTokenType())) { PsiBuilder.Marker m = b.mark(); b.advanceLexer(); m.collapse(TT2_IDENTIFIER); return true; } return false; }
public static boolean parseHardNewline(PsiBuilder b) { if (b.getTokenType() == HTML_MASON_HARD_NEWLINE) { PsiBuilder.Marker m = b.mark(); b.advanceLexer(); m.collapse(TokenType.WHITE_SPACE); return true; } return false; }
public static boolean parseUnaryMinus(PsiBuilder b, int l) { if (b.getTokenType() == TT2_MINUS) { PsiBuilder.Marker m = b.mark(); b.advanceLexer(); m.collapse(TT2_MINUS_UNARY); return true; } return false; } }
public static boolean checkAndConvert(PsiBuilder b, int l, IElementType sourceType, IElementType targetType) { if (b.getTokenType() == sourceType) { PsiBuilder.Marker m = b.mark(); b.advanceLexer(); m.collapse(POD_INDENT_LEVEL); return true; } return false; }