/** * We have to override {@link com.intellij.formatting.templateLanguages.TemplateLanguageFormattingModelBuilder#createModel} * since after we delegate to some templated languages, those languages (xml/html for sure, potentially others) * delegate right back to us to format the DustTypes.OUTER_TYPE token we tell them to ignore, * causing an stack-overflowing loop. */ @NotNull public FormattingModel createModel(PsiElement element, CodeStyleSettings settings) { final PsiFile file = element.getContainingFile(); Block rootBlock; ASTNode node = element.getNode(); if (node.getElementType() == DustFileViewProvider.OUTER_TYPE) { // If we're looking at a DustTypes.HTML element, then we've been invoked by our templated // language. Make a dummy block to allow that formatter to continue return new SimpleTemplateLanguageFormattingModelBuilder().createModel(element, settings); } else { rootBlock = getRootBlock(file, file.getViewProvider(), settings); } return new DocumentBasedFormattingModel(rootBlock, element.getProject(), settings, file.getFileType(), file); }
@NotNull public FormattingModel createModel(PsiElement element, CodeStyleSettings settings) { final PsiFile file = element.getContainingFile(); if (element.getNode().getElementType() == SoyTypes.OTHER) { return new SimpleTemplateLanguageFormattingModelBuilder().createModel(element, settings); } else { return new DocumentBasedFormattingModel( getRootBlock(file, file.getViewProvider(), settings), element.getProject(), settings, file.getFileType(), file); } }
@NotNull public FormattingModel createModel(PsiElement element, CodeStyleSettings settings) { final PsiFile file = element.getContainingFile(); Block rootBlock; ASTNode node = element.getNode(); if (node.getElementType() == RYTHM) { return new SimpleTemplateLanguageFormattingModelBuilder().createModel(element, settings); } else { rootBlock = getRootBlock(file, file.getViewProvider(), settings); } return new DocumentBasedFormattingModel(rootBlock, element.getProject(), settings, file.getFileType(), file); }