@NotNull @Override public TextRange getTextRange() { if (textRange == null) { TextRange superTextRange = super.getTextRange(); int startOffset = superTextRange.getStartOffset(); int endOffset = superTextRange.getEndOffset(); int length = endOffset - startOffset; int maxLength = min(length, heredocPrefixLength); CharSequence charSequence = myNode.getChars(); int prefixLength; for (prefixLength = 0; prefixLength < maxLength; prefixLength++) { if (!isWhitespace(charSequence.charAt(prefixLength))) { break; } } if (prefixLength == 0) { textRange = superTextRange; } else { int startedOffsetWithoutPrefix = startOffset + prefixLength; textRange = new TextRange(startedOffsetWithoutPrefix, endOffset); } } return textRange; }
@Nullable @Override protected ASTNode doParseContents(@NotNull ASTNode chameleon, @NotNull PsiElement psi) { Project project = psi.getProject(); Language languageForParser = getLanguageForParser(psi); PsiBuilder builder = PsiBuilderFactory.getInstance().createBuilder(project, chameleon, null, languageForParser, chameleon.getChars()); PsiParser parser = LanguageParserDefinitions.INSTANCE.forLanguage(languageForParser).createParser(project); builder.putUserData(VIRTUAL_FILE, psi.getContainingFile().getVirtualFile()); ASTNode node = parser.parse(this, builder); return node.getFirstChildNode(); } }
@Override public ASTNode parseContents(ASTNode chameleon) { PsiElement psi = chameleon.getPsi(); assert psi != null : "Bad chameleon: " + chameleon; Project project = psi.getProject(); Language languageForParser = this.getLanguageForParser(psi); PsiBuilder builder = PsiBuilderFactory.getInstance().createBuilder( project, chameleon, new org.elixir_lang.eex.lexer.EmbeddedElixir(project), languageForParser, chameleon.getChars() ); PsiParser parser = LanguageParserDefinitions.INSTANCE.forLanguage(languageForParser).createParser(project); builder.putUserData(VIRTUAL_FILE, psi.getContainingFile().getVirtualFile()); ASTNode node = parser.parse(this, builder); return node.getFirstChildNode(); } }
@Override public boolean decode(@NotNull TextRange rangeInsideHost, @NotNull StringBuilder outChars) { outChars.append(rangeInsideHost.subSequence(myHost.getNode().getChars())); return true; }
protected void checkPerlIdentifier(@NotNull PsiElement element) { checkPerlIdentifier(element.getNode().getChars(), element); }
/** * @return real indentaion of heredoc. Handles cases of improperly formatted heredocs, where content is less indented * than terminator; returns 0 for unindentable heredocs */ public int getRealIndentSize() { int explicitIndentSize = getIndentSize(); if (explicitIndentSize == 0) { return 0; } return calcRealIndent(getNode().getChars(), explicitIndentSize); }
@NotNull protected PsiBuilder getBuilder(PsiElement psi, ASTNode chameleon) { return PsiBuilderFactory.getInstance() .createBuilder(psi.getProject(), chameleon, getLexer(psi), getLanguageForParser(psi), chameleon.getChars()); } }
boolean supportEvalEscapes = BashProjectSettings.storedSettings(project).isEvalEscapesEnabled(); String originalText = chameleon.getChars().toString(); ParserDefinition def = LanguageParserDefinitions.INSTANCE.forLanguage(BashFileType.BASH_LANGUAGE);
CharSequence sourceText = heredocElement.getNode().getChars();
@Override public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) { PsiElement method = descriptor.getPsiElement(); assert method instanceof PerlMethod; PsiElement callExpression = method.getParent(); assert callExpression instanceof PsiPerlSubCallExpr; PerlNamespaceElement namespaceElement = ((PerlMethod)method).getNamespaceElement(); assert namespaceElement != null; PerlSubNameElement subNameElement = ((PerlMethod)method).getSubNameElement(); assert subNameElement != null; StringBuilder argsBuilder = new StringBuilder(); PsiElement run = callExpression.getFirstChild(); while (run != null) { if (run != method) { argsBuilder.append(run.getNode().getChars()); } run = run.getNextSibling(); } callExpression.replace(PerlElementFactory.createMethodCall(project, namespaceElement.getText(), subNameElement.getName(), argsBuilder.toString())); } }
/** * registers an ASTNode in some internal structure if it's necessary. * e.g. comments, here-docs */ @NotNull public ASTNode registerNode(@NotNull ASTNode node) { if (getDocument() == null) { return node; } IElementType nodeType = PsiUtilCore.getElementType(node); if (nodeType == COMMENT_LINE) { ASTNode prevNode = node.getTreePrev(); if (prevNode != null && !StringUtil.containsLineBreak(prevNode.getChars())) { myCommentsLines.set(getNodeLine(node)); } } else if (nodeType == HEREDOC_OPENER) { myHeredocRangesList.add( TextRange.create(node.getStartOffset() + 1, getDocument().getLineEndOffset(getNodeLine(node))) ); } return node; }
@NotNull @Override public TextRange getRangeInIdentifier() { PsiElement nameIdentifier = getNameIdentifier(); ElementManipulator<PsiElement> manipulator = ElementManipulators.getNotNullManipulator(nameIdentifier); TextRange defaultRange = manipulator.getRangeInElement(nameIdentifier); return StringUtil.startsWith(defaultRange.subSequence(nameIdentifier.getNode().getChars()), "+") ? TextRange.create(defaultRange.getStartOffset() + 1, defaultRange.getEndOffset()) : defaultRange; } }
CharSequence nodeChars = trimmedRange.shiftRight(-myNode.getStartOffset()).subSequence(myNode.getChars()); int effectiveCharsLength = nodeChars.length(); int realSpaces;
if (StringUtil.containsLineBreak(lastComment.getNode().getChars())) { isCollapsable = true; break;
falseAlarm = openerPattern.matcher(run.getNode().getChars()).find();