diff --git a/src/main/java/fr/adrienbrault/idea/symfony2plugin/templating/TwigLineMarkerProvider.java b/src/main/java/fr/adrienbrault/idea/symfony2plugin/templating/TwigLineMarkerProvider.java index cce53dbc7..28869a1fe 100644 --- a/src/main/java/fr/adrienbrault/idea/symfony2plugin/templating/TwigLineMarkerProvider.java +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/templating/TwigLineMarkerProvider.java @@ -105,8 +105,10 @@ public void collectSlowLineMarkers(@NotNull List psiElemen if(lineOverwrites != null) { results.add(lineOverwrites); } - } else if(TwigPattern.getFunctionPattern("form_start", "form", "form_end", "form_rest").accepts(psiElement)) { - LineMarkerInfo lineOverwrites = attachFormType(psiElement); + } else if(TwigPattern.getLeafFunctionPattern("form_start", "form", "form_end", "form_rest").accepts(psiElement)) { + PsiElement parent = psiElement.getParent(); + + LineMarkerInfo lineOverwrites = attachFormType(parent); if(lineOverwrites != null) { results.add(lineOverwrites); } diff --git a/src/main/java/fr/adrienbrault/idea/symfony2plugin/templating/TwigPattern.java b/src/main/java/fr/adrienbrault/idea/symfony2plugin/templating/TwigPattern.java index a0e858db4..b94ff1a71 100644 --- a/src/main/java/fr/adrienbrault/idea/symfony2plugin/templating/TwigPattern.java +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/templating/TwigPattern.java @@ -175,11 +175,8 @@ public static ElementPattern getPrintBlockOrTagFunctionPattern(Strin /** * Check for {{ include('|') }}, {% include('|') %} - * - * @param functionName twig function name */ public static ElementPattern getPrintBlockOrTagFunctionPattern() { - //noinspection unchecked return PlatformPatterns .psiElement(TwigTokenTypes.STRING_TEXT) .withParent( @@ -579,17 +576,19 @@ static ElementPattern getPrintBlockFunctionPattern() { .withLanguage(TwigLanguage.INSTANCE); } - public static ElementPattern getFunctionPattern(@NotNull String ...functionName) { - return PlatformPatterns.psiElement(TwigElementTypes.FUNCTION_CALL).withText(PlatformPatterns.string().with(new PatternCondition("Twig: Function call") { - @Override - public boolean accepts(@NotNull String function, ProcessingContext processingContext) { - String funcWithoutSpace = function.replaceAll(" +", ""); - - return Arrays.stream(functionName).anyMatch(wantFunction -> - funcWithoutSpace.startsWith(wantFunction + "(") || funcWithoutSpace.equals(wantFunction) - ); - } - })); + public static ElementPattern getLeafFunctionPattern(@NotNull String ...functionName) { + return PlatformPatterns.psiElement(TwigTokenTypes.IDENTIFIER) + .withParent(PlatformPatterns.psiElement(TwigElementTypes.FUNCTION_CALL)) + .withText(PlatformPatterns.string().with(new PatternCondition<>("Twig: Leaf function call") { + @Override + public boolean accepts(@NotNull String function, ProcessingContext processingContext) { + String funcWithoutSpace = function.replaceAll(" +", ""); + + return Arrays.stream(functionName).anyMatch(wantFunction -> + funcWithoutSpace.startsWith(wantFunction + "(") || funcWithoutSpace.equals(wantFunction) + ); + } + })); } /** diff --git a/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/templating/TwigPatternTest.java b/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/templating/TwigPatternTest.java index 7280ceec6..0a5ac1b30 100644 --- a/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/templating/TwigPatternTest.java +++ b/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/templating/TwigPatternTest.java @@ -69,19 +69,19 @@ public void testGetPrintBlockOrTagFunctionPattern() { } /** - * @see fr.adrienbrault.idea.symfony2plugin.templating.TwigPattern#getFunctionPattern + * @see fr.adrienbrault.idea.symfony2plugin.templating.TwigPattern#getLeafFunctionPattern */ - public void testgetFunctionPattern() { - assertTrue(fr.adrienbrault.idea.symfony2plugin.templating.TwigPattern.getFunctionPattern("form").accepts( - findElementAt(TwigFileType.INSTANCE, "{{ form(test) }}").getParent() + public void testGetFunctionPattern() { + assertTrue(fr.adrienbrault.idea.symfony2plugin.templating.TwigPattern.getLeafFunctionPattern("form").accepts( + findElementAt(TwigFileType.INSTANCE, "{{ form(test) }}") )); - assertTrue(fr.adrienbrault.idea.symfony2plugin.templating.TwigPattern.getFunctionPattern("form").accepts( - findElementAt(TwigFileType.INSTANCE, "{{ form (test) }}").getParent() + assertTrue(fr.adrienbrault.idea.symfony2plugin.templating.TwigPattern.getLeafFunctionPattern("form").accepts( + findElementAt(TwigFileType.INSTANCE, "{{ form (test) }}") )); - assertFalse(fr.adrienbrault.idea.symfony2plugin.templating.TwigPattern.getFunctionPattern("f").accepts( - findElementAt(TwigFileType.INSTANCE, "{{ form(test) }}").getParent() + assertFalse(fr.adrienbrault.idea.symfony2plugin.templating.TwigPattern.getLeafFunctionPattern("f").accepts( + findElementAt(TwigFileType.INSTANCE, "{{ form(test) }}") )); }