Skip to content

Commit 040158f

Browse files
authored
Merge pull request #1954 from Haehnchen/feature/twig-function-leaf
Twig form linemarker should only be triggered on smallest (leaf) elements
2 parents 2ed3a3e + b52613b commit 040158f

File tree

3 files changed

+25
-24
lines changed

3 files changed

+25
-24
lines changed

src/main/java/fr/adrienbrault/idea/symfony2plugin/templating/TwigLineMarkerProvider.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,10 @@ public void collectSlowLineMarkers(@NotNull List<? extends PsiElement> psiElemen
105105
if(lineOverwrites != null) {
106106
results.add(lineOverwrites);
107107
}
108-
} else if(TwigPattern.getFunctionPattern("form_start", "form", "form_end", "form_rest").accepts(psiElement)) {
109-
LineMarkerInfo<?> lineOverwrites = attachFormType(psiElement);
108+
} else if(TwigPattern.getLeafFunctionPattern("form_start", "form", "form_end", "form_rest").accepts(psiElement)) {
109+
PsiElement parent = psiElement.getParent();
110+
111+
LineMarkerInfo<?> lineOverwrites = attachFormType(parent);
110112
if(lineOverwrites != null) {
111113
results.add(lineOverwrites);
112114
}

src/main/java/fr/adrienbrault/idea/symfony2plugin/templating/TwigPattern.java

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -175,11 +175,8 @@ public static ElementPattern<PsiElement> getPrintBlockOrTagFunctionPattern(Strin
175175

176176
/**
177177
* Check for {{ include('|') }}, {% include('|') %}
178-
*
179-
* @param functionName twig function name
180178
*/
181179
public static ElementPattern<PsiElement> getPrintBlockOrTagFunctionPattern() {
182-
//noinspection unchecked
183180
return PlatformPatterns
184181
.psiElement(TwigTokenTypes.STRING_TEXT)
185182
.withParent(
@@ -579,17 +576,19 @@ static ElementPattern<PsiElement> getPrintBlockFunctionPattern() {
579576
.withLanguage(TwigLanguage.INSTANCE);
580577
}
581578

582-
public static ElementPattern<PsiElement> getFunctionPattern(@NotNull String ...functionName) {
583-
return PlatformPatterns.psiElement(TwigElementTypes.FUNCTION_CALL).withText(PlatformPatterns.string().with(new PatternCondition<String>("Twig: Function call") {
584-
@Override
585-
public boolean accepts(@NotNull String function, ProcessingContext processingContext) {
586-
String funcWithoutSpace = function.replaceAll(" +", "");
587-
588-
return Arrays.stream(functionName).anyMatch(wantFunction ->
589-
funcWithoutSpace.startsWith(wantFunction + "(") || funcWithoutSpace.equals(wantFunction)
590-
);
591-
}
592-
}));
579+
public static ElementPattern<PsiElement> getLeafFunctionPattern(@NotNull String ...functionName) {
580+
return PlatformPatterns.psiElement(TwigTokenTypes.IDENTIFIER)
581+
.withParent(PlatformPatterns.psiElement(TwigElementTypes.FUNCTION_CALL))
582+
.withText(PlatformPatterns.string().with(new PatternCondition<>("Twig: Leaf function call") {
583+
@Override
584+
public boolean accepts(@NotNull String function, ProcessingContext processingContext) {
585+
String funcWithoutSpace = function.replaceAll(" +", "");
586+
587+
return Arrays.stream(functionName).anyMatch(wantFunction ->
588+
funcWithoutSpace.startsWith(wantFunction + "(") || funcWithoutSpace.equals(wantFunction)
589+
);
590+
}
591+
}));
593592
}
594593

595594
/**

src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/templating/TwigPatternTest.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -69,19 +69,19 @@ public void testGetPrintBlockOrTagFunctionPattern() {
6969
}
7070

7171
/**
72-
* @see fr.adrienbrault.idea.symfony2plugin.templating.TwigPattern#getFunctionPattern
72+
* @see fr.adrienbrault.idea.symfony2plugin.templating.TwigPattern#getLeafFunctionPattern
7373
*/
74-
public void testgetFunctionPattern() {
75-
assertTrue(fr.adrienbrault.idea.symfony2plugin.templating.TwigPattern.getFunctionPattern("form").accepts(
76-
findElementAt(TwigFileType.INSTANCE, "{{ for<caret>m(test) }}").getParent()
74+
public void testGetFunctionPattern() {
75+
assertTrue(fr.adrienbrault.idea.symfony2plugin.templating.TwigPattern.getLeafFunctionPattern("form").accepts(
76+
findElementAt(TwigFileType.INSTANCE, "{{ for<caret>m(test) }}")
7777
));
7878

79-
assertTrue(fr.adrienbrault.idea.symfony2plugin.templating.TwigPattern.getFunctionPattern("form").accepts(
80-
findElementAt(TwigFileType.INSTANCE, "{{ for<caret>m (test) }}").getParent()
79+
assertTrue(fr.adrienbrault.idea.symfony2plugin.templating.TwigPattern.getLeafFunctionPattern("form").accepts(
80+
findElementAt(TwigFileType.INSTANCE, "{{ for<caret>m (test) }}")
8181
));
8282

83-
assertFalse(fr.adrienbrault.idea.symfony2plugin.templating.TwigPattern.getFunctionPattern("f").accepts(
84-
findElementAt(TwigFileType.INSTANCE, "{{ for<caret>m(test) }}").getParent()
83+
assertFalse(fr.adrienbrault.idea.symfony2plugin.templating.TwigPattern.getLeafFunctionPattern("f").accepts(
84+
findElementAt(TwigFileType.INSTANCE, "{{ for<caret>m(test) }}")
8585
));
8686
}
8787

0 commit comments

Comments
 (0)