private Wrap createWrap(ASTNode child) { return Wrap.createWrap(WrapType.CHOP_DOWN_IF_LONG, false); }
HeredocLineBlock(ASTNode heredocLine, int heredocPrefixLength, @NotNull SpacingBuilder spacingBuilder) { super(heredocLine, Wrap.createWrap(WrapType.NONE, false), null); this.heredocPrefixLength = heredocPrefixLength; this.spacingBuilder = spacingBuilder; }
@NotNull private List<com.intellij.formatting.Block> buildInterpolationChildren(@NotNull ASTNode interpolation) { return buildContainerChildren( interpolation, INTERPOLATION_START, Wrap.createWrap(WrapType.NONE, false), INTERPOLATION_END ); }
@NotNull private Wrap listContainerValueWrap(@NotNull ASTNode list) { return Wrap.createWrap(listContainerValueWrapType(list), true); }
@NotNull private Wrap noParenthesesOneArgumentChildrenWrap(@NotNull ASTNode noParenthesesOneArgument) { return Wrap.createWrap( noParenthesesOneArgumentChildrenWrapType(noParenthesesOneArgument), // MUST NOT be `true` as wrapping the first argument disassociates the arguments with the call false ); }
@NotNull private Wrap stabOperationWrap(@NotNull CompositeElement stab) { return Wrap.createWrap(stabOperationWrapType(stab), true); }
@NotNull private Wrap containerValueWrap(@NotNull ASTNode container) { return Wrap.createWrap(containerValueWrapType(container), true); }
@NotNull private List<com.intellij.formatting.Block> buildBlockIdentifierChildren( @NotNull ASTNode blockIdentifier, @Nullable Alignment blockIdentifierAlignment ) { Wrap childrenWrap = Wrap.createWrap(WrapType.ALWAYS, true); return buildChildren( blockIdentifier, (child, childElementType, blockList) -> { blockList.add(buildChild(child, childrenWrap, blockIdentifierAlignment)); return blockList; } ); }
@NotNull private List<com.intellij.formatting.Block> buildKeywordPairChildren(@NotNull ASTNode keywordPair) { Wrap keywordKeyWrap = Wrap.createWrap(WrapType.NORMAL, true); Wrap keywordPairColonWrap = Wrap.createChildWrap(keywordKeyWrap, WrapType.NONE, true); Wrap keywordValueWrap = Wrap.createWrap(WrapType.NORMAL, true); return buildChildren( keywordPair, (child, childElementType, blockList) -> { if (childElementType == ACCESS_EXPRESSION) { blockList.addAll( buildContainerValueAccessExpressionChildren( child, Wrap.createWrap(WrapType.NONE, true) ) ); } else if (childElementType == KEYWORD_KEY) { blockList.add(buildChild(child, keywordKeyWrap, (Alignment) null)); } else if (childElementType == KEYWORD_PAIR_COLON) { blockList.add(buildChild(child, keywordPairColonWrap)); } else { blockList.add(buildChild(child, keywordValueWrap, null, (Alignment) null)); } return blockList; } ); }
@NotNull private List<com.intellij.formatting.Block> buildAssociationsChildren( @NotNull ASTNode associations, @NotNull Wrap associationExpressionWrap ) { return buildChildren( associations, (child, childElementType, blockList) -> { if (childElementType == ASSOCIATIONS_BASE) { blockList.addAll( buildAssociationsBaseChildren( child, associationExpressionWrap ) ); } else if (childElementType == COMMA) { blockList.add(buildChild(child, Wrap.createWrap(WrapType.NONE, false))); } else { // comment blockList.add(buildChild(child, (Indent) null)); } return blockList; } ); }
@NotNull private List<com.intellij.formatting.Block> buildParentheticalStabChildren(@NotNull ASTNode parentheticalStab) { Indent childIndent = Indent.getNormalIndent(); Wrap stabBodyChildrenWrap; if (parentheticalStab.textContains('\n')) { stabBodyChildrenWrap = null; } else { stabBodyChildrenWrap = Wrap.createWrap(WrapType.CHOP_DOWN_IF_LONG, true); } return buildChildren( parentheticalStab, (child, childElementType, blockList) -> { if (childElementType == SEMICOLON) { blockList.add( buildChild(child, Wrap.createWrap(WrapType.NONE, true), childIndent) ); } else if (childElementType == STAB) { blockList.addAll(buildStabChildren((CompositeElement) child, stabBodyChildrenWrap)); } else { blockList.add(buildChild(child)); } return blockList; } ); }
@NotNull private List<com.intellij.formatting.Block> buildLineChildren(@NotNull ASTNode line) { // Everything on a line contains significant white space, so no automatic newlines should be inserted Wrap none = Wrap.createWrap(WrapType.NONE, true); return buildChildren( line, (child, childElementType, blockList) -> { if (BODY_TOKEN_SET.contains(childElementType)) { /* Flatten body because its children represent textual elements that can't be aligned without changing their meaning, so there's no need for a formatting block for them */ blockList.addAll(buildBodyChildren(child, none)); } else if (childElementType == SIGIL_MODIFIERS) { blockList.addAll(buildSigilModifiersChildren(child, none)); } else { blockList.add(buildChild(child, none)); } return blockList; } ); }
@NotNull private List<com.intellij.formatting.Block> buildContainerAssociationOperation( @NotNull ASTNode containerAssociationOperation ) { Wrap keyWrap = Wrap.createWrap(WrapType.NORMAL, true); Wrap associationOperatorWrap = Wrap.createChildWrap(keyWrap, WrapType.NONE, true); Wrap valueWrap = Wrap.createWrap(WrapType.NORMAL, true); final Wrap[] operandWrap = {keyWrap}; final boolean[] rightOperand = {false}; return buildChildren( containerAssociationOperation, (child, childElementType, blockList) -> { if (childElementType == ACCESS_EXPRESSION) { if (rightOperand[0]) { blockList.addAll(buildContainerValueAccessExpressionChildren(child, operandWrap[0])); } else { blockList.addAll(buildAccessExpressionChildren(child, operandWrap[0])); } } else if (childElementType == ASSOCIATION_OPERATOR) { blockList.add(buildChild(child, associationOperatorWrap)); operandWrap[0] = valueWrap; rightOperand[0] = true; } else { blockList.add(buildChild(child, operandWrap[0])); } return blockList; } ); }
@NotNull private List<com.intellij.formatting.Block> buildWhenOperationChildren(@NotNull ASTNode whenOperation) { Wrap operatorWrap = Wrap.createWrap(WrapType.NORMAL, true); final Alignment[] operandAlignment = {null}; final Wrap[] operandWrap = {Wrap.createWrap(WrapType.NONE, false)}; return buildChildren( whenOperation, (child, childElementType, blockList) -> { if (childElementType == ACCESS_EXPRESSION) { blockList.addAll( buildAccessExpressionChildren(child, operandWrap[0], operandAlignment[0]) ); } else if (OPERATOR_RULE_TOKEN_SET.contains(childElementType)) { blockList.addAll(buildOperatorRuleChildren(child, operatorWrap)); operandAlignment[0] = Alignment.createAlignment(); operandWrap[0] = Wrap.createChildWrap(operatorWrap, WrapType.NORMAL, true); } else { blockList.add(buildChild(child, operandWrap[0], operandAlignment[0])); } return blockList; } ); }
@NotNull private List<com.intellij.formatting.Block> buildBlockItemChildren(@NotNull ASTNode blockItem, @Nullable Alignment blockItemAlignment) { return buildChildren( blockItem, (child, childElementType, blockList) -> { if (childElementType == BLOCK_IDENTIFIER) { blockList.addAll(buildBlockIdentifierChildren(child, blockItemAlignment)); } else if (childElementType == END_OF_EXPRESSION) { blockList.addAll(buildEndOfExpressionChildren(child, null, null)); } else if (childElementType == STAB) { Wrap stabBodyChildrenWrap; if (child.findChildByType(STAB_BODY) != null) { stabBodyChildrenWrap = Wrap.createWrap(WrapType.ALWAYS, true); } else { stabBodyChildrenWrap = null; } blockList.addAll(buildStabChildren((CompositeElement) child, stabBodyChildrenWrap)); } else { blockList.add(buildChild(child)); } return blockList; } ); }
Wrap aliasWrap = Wrap.createWrap( WrapType.NORMAL, blockList.add(buildChild(child)); } else if (childElementType == OPENING_CURLY) { blockList.add(buildChild(child, Wrap.createWrap(WrapType.NONE, false))); } else if (childElementType == ACCESS_EXPRESSION) { blockList.addAll(buildAccessExpressionChildren(child, aliasWrap, aliasAlignment));
document.getLineNumber(openingElement.getStartOffset()) != document.getLineNumber(closingElement.getStartOffset())) { tailWrap = Wrap.createWrap(WrapType.ALWAYS, true); tailWrap = Wrap.createWrap(WrapType.CHOP_DOWN_IF_LONG, true);
@NotNull private List<com.intellij.formatting.Block> buildNoParenthesesKeywordPairChildren( @NotNull ASTNode noParenthesesKeywordPair ) { Wrap keywordKeyWrap = Wrap.createWrap(WrapType.CHOP_DOWN_IF_LONG, true); Indent keywordKeyIndent = Indent.getIndent(Indent.Type.NONE, true, false); Wrap keywordPairColonWrap = Wrap.createChildWrap(keywordKeyWrap, WrapType.NONE, true); Wrap keywordValueWrap = Wrap.createChildWrap(keywordKeyWrap, WrapType.NONE, true); return buildChildren( noParenthesesKeywordPair, (child, childElementType, blockList) -> { if (childElementType == ACCESS_EXPRESSION) { blockList.addAll(buildContainerValueAccessExpressionChildren(child, keywordValueWrap)); } else if (childElementType == KEYWORD_KEY) { blockList.add(buildChild(child, keywordKeyWrap, keywordKeyIndent)); } else if (childElementType == KEYWORD_PAIR_COLON) { blockList.add(buildChild(child, keywordPairColonWrap)); } else { blockList.add(buildChild(child, keywordValueWrap)); } return blockList; } ); }
endWrap = Wrap.createWrap(WrapType.ALWAYS, true); } else { endWrap = Wrap.createWrap(WrapType.NORMAL, true); stabBodyChildrenWrap = Wrap.createWrap(WrapType.ALWAYS, true); } else { stabBodyChildrenWrap = null;
buildOperatorRuleChildren( child, Wrap.createWrap(WrapType.ALWAYS, true), operatorAlignment operandWrap[0] = Wrap.createWrap(WrapType.NONE, true); } else { blockList.add(buildChild(child, operandWrap[0], operandAlignment[0]));