diff --git a/src/main/java/fr/adrienbrault/idea/symfony2plugin/templating/util/TwigUtil.java b/src/main/java/fr/adrienbrault/idea/symfony2plugin/templating/util/TwigUtil.java index 4e86e3368..f7c785643 100644 --- a/src/main/java/fr/adrienbrault/idea/symfony2plugin/templating/util/TwigUtil.java +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/templating/util/TwigUtil.java @@ -2216,84 +2216,55 @@ public static Map> getBlockNamesForFiles(@NotNul * Visit all possible Twig include file pattern */ public static void visitTemplateIncludes(@NotNull TwigFile twigFile, @NotNull Consumer consumer) { - visitTemplateIncludes( - twigFile, - consumer, - TemplateInclude.TYPE.EMBED, - TemplateInclude.TYPE.INCLUDE, - TemplateInclude.TYPE.INCLUDE_FUNCTION, - TemplateInclude.TYPE.FROM, - TemplateInclude.TYPE.IMPORT, - TemplateInclude.TYPE.FORM_THEME - ); - } - - private static void visitTemplateIncludes(@NotNull TwigFile twigFile, @NotNull Consumer consumer, @NotNull TemplateInclude.TYPE... types) { - if(types.length == 0) { - return; - } - - List myTypes = Arrays.asList(types); - PsiTreeUtil.collectElements(twigFile, psiElement -> { if(psiElement instanceof TwigTagWithFileReference) { // {% include %} - if(myTypes.contains(TemplateInclude.TYPE.INCLUDE)) { - if(psiElement.getNode().getElementType() == TwigElementTypes.INCLUDE_TAG) { - for (String templateName : getIncludeTagStrings((TwigTagWithFileReference) psiElement)) { - if(StringUtils.isNotBlank(templateName)) { - consumer.consume(new TemplateInclude(psiElement, templateName, TemplateInclude.TYPE.INCLUDE)); - } + if(psiElement.getNode().getElementType() == TwigElementTypes.INCLUDE_TAG) { + for (String templateName : getIncludeTagStrings((TwigTagWithFileReference) psiElement)) { + if(StringUtils.isNotBlank(templateName)) { + consumer.consume(new TemplateInclude(psiElement, templateName, TemplateInclude.TYPE.INCLUDE)); } } } // {% import "foo.html.twig" - if(myTypes.contains(TemplateInclude.TYPE.IMPORT)) { - PsiElement embedTag = PsiElementUtils.getChildrenOfType(psiElement, TwigPattern.getTagNameParameterPattern(TwigElementTypes.IMPORT_TAG, "import")); - if(embedTag != null) { - String templateName = embedTag.getText(); - if(StringUtils.isNotBlank(templateName)) { - consumer.consume(new TemplateInclude(psiElement, templateName, TemplateInclude.TYPE.IMPORT)); - } + PsiElement importTag = PsiElementUtils.getChildrenOfType(psiElement, TwigPattern.getTagNameParameterPattern(TwigElementTypes.IMPORT_TAG, "import")); + if(importTag != null) { + String templateName = importTag.getText(); + if(StringUtils.isNotBlank(templateName)) { + consumer.consume(new TemplateInclude(psiElement, templateName, TemplateInclude.TYPE.IMPORT)); } } // {% from 'forms.html' import ... %} - if(myTypes.contains(TemplateInclude.TYPE.FROM)) { - PsiElement embedTag = PsiElementUtils.getChildrenOfType(psiElement, TwigPattern.getTagNameParameterPattern(TwigElementTypes.IMPORT_TAG, "from")); - if(embedTag != null) { - String templateName = embedTag.getText(); - if(StringUtils.isNotBlank(templateName)) { - consumer.consume(new TemplateInclude(psiElement, templateName, TemplateInclude.TYPE.IMPORT)); - } + PsiElement fromTag = PsiElementUtils.getChildrenOfType(psiElement, TwigPattern.getTagNameParameterPattern(TwigElementTypes.IMPORT_TAG, "from")); + if(fromTag != null) { + String templateName = fromTag.getText(); + if(StringUtils.isNotBlank(templateName)) { + consumer.consume(new TemplateInclude(psiElement, templateName, TemplateInclude.TYPE.IMPORT)); } } } else if(psiElement instanceof TwigCompositeElement) { // {{ include() }} // {{ source() }} - if(myTypes.contains(TemplateInclude.TYPE.INCLUDE_FUNCTION)) { - PsiElement includeTag = PsiElementUtils.getChildrenOfType(psiElement, TwigPattern.getPrintBlockOrTagFunctionPattern("include", "source")); - if(includeTag != null) { - String templateName = includeTag.getText(); - if(StringUtils.isNotBlank(templateName)) { - consumer.consume(new TemplateInclude(psiElement, templateName, TemplateInclude.TYPE.INCLUDE_FUNCTION)); - } + PsiElement includeTag = PsiElementUtils.getChildrenOfType(psiElement, TwigPattern.getPrintBlockOrTagFunctionPattern("include", "source")); + if(includeTag != null) { + String templateName = includeTag.getText(); + if(StringUtils.isNotBlank(templateName)) { + consumer.consume(new TemplateInclude(psiElement, templateName, TemplateInclude.TYPE.INCLUDE_FUNCTION)); } } // {% embed "foo.html.twig" - if(myTypes.contains(TemplateInclude.TYPE.EMBED)) { - PsiElement embedTag = PsiElementUtils.getChildrenOfType(psiElement, TwigPattern.getEmbedPattern()); - if(embedTag != null) { - String templateName = embedTag.getText(); - if(StringUtils.isNotBlank(templateName)) { - consumer.consume(new TemplateInclude(psiElement, templateName, TemplateInclude.TYPE.EMBED)); - } + PsiElement embedTag = PsiElementUtils.getChildrenOfType(psiElement, TwigPattern.getEmbedPattern()); + if(embedTag != null) { + String templateName = embedTag.getText(); + if(StringUtils.isNotBlank(templateName)) { + consumer.consume(new TemplateInclude(psiElement, templateName, TemplateInclude.TYPE.EMBED)); } } - if(myTypes.contains(TemplateInclude.TYPE.FORM_THEME) && psiElement.getNode().getElementType() == TwigElementTypes.TAG) { + if(psiElement.getNode().getElementType() == TwigElementTypes.TAG) { PsiElement tagElement = PsiElementUtils.getChildrenOfType(psiElement, PlatformPatterns.psiElement().withElementType(TwigTokenTypes.TAG_NAME)); if(tagElement != null) { String text = tagElement.getText(); diff --git a/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/templating/util/TwigUtilTest.java b/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/templating/util/TwigUtilTest.java index e6d77e2dd..59c8c5f35 100644 --- a/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/templating/util/TwigUtilTest.java +++ b/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/templating/util/TwigUtilTest.java @@ -272,15 +272,23 @@ public void testVisitTemplateIncludes() { PsiFile fileFromText = PsiFileFactory.getInstance(getProject()).createFileFromText(TwigLanguage.INSTANCE, "{% form_theme form ':Foobar:fields.html.twig' %}" + - "{% form_theme form.foobar \":Foobar:fields_foobar.html.twig\" %}" + - "{% form_theme form.foobar with [\":Foobar:fields_foobar_1.html.twig\"] %}" + - "{% form_theme form.foobar with {\":Foobar:fields_foobar_2.html.twig\", \":Foobar:fields_foobar_3.html.twig\", \":Foobar:fields_foobar_4.html.twig\"} %}" + "{% include 'include.html.twig' %}" + + "{% import 'import.html.twig' %}" + + "{% from 'from.html.twig' import foobar %}" + + "{% import 'import.html.twig' %}" + + "{{ include('include_function.html.twig') }}" + + "{{ source('source_function.html.twig') }}" + + "{% embed 'embed.html.twig' %}" + + "{% form_theme form.foobar \":Foobar:fields_foobar.html.twig\" %}" + + "{% form_theme form.foobar with [\":Foobar:fields_foobar_1.html.twig\"] %}" + + "{% form_theme form.foobar with {\":Foobar:fields_foobar_2.html.twig\", \":Foobar:fields_foobar_3.html.twig\", \":Foobar:fields_foobar_4.html.twig\"} %}" ); TwigUtil.visitTemplateIncludes((TwigFile) fileFromText, templateInclude -> includes.add(templateInclude.getTemplateName()) ); + assertContainsElements(includes, "include.html.twig", "import.html.twig", "from.html.twig", "include_function.html.twig", "source_function.html.twig", "embed.html.twig"); assertContainsElements(includes, ":Foobar:fields.html.twig", ":Foobar:fields_foobar.html.twig", ":Foobar:fields_foobar_1.html.twig"); assertContainsElements(includes, ":Foobar:fields_foobar_2.html.twig", ":Foobar:fields_foobar_3.html.twig", ":Foobar:fields_foobar_4.html.twig"); }