10000 add support for Twig apply tag filters · SylApps/idea-php-symfony2-plugin@bc2eebd · GitHub
[go: up one dir, main page]

Skip to content

Commit bc2eebd

Browse files
committed
add support for Twig apply tag filters
1 parent e076431 commit bc2eebd

File tree

4 files changed

+45
-3
lines changed

4 files changed

+45
-3
lines changed

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

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1089,6 +1089,27 @@ public static ElementPattern<PsiElement> getFilterPattern() {
10891089
.withLanguage(TwigLanguage.INSTANCE);
10901090
}
10911091

1092+
/**
1093+
* {% apply <caret> %}foobar{% endapply %}
1094+
*/
1095+
static ElementPattern<PsiElement> getApplyFilterPattern() {
1096+
return PlatformPatterns
1097+
.psiElement(TwigTokenTypes.IDENTIFIER)
1098+
.afterLeafSkipping(
1099+
PlatformPatterns.or(
1100+
PlatformPatterns.psiElement(PsiWhiteSpace.class),
1101+
PlatformPatterns.psiElement(TwigTokenTypes.WHITE_SPACE)
1102+
),
1103+
PlatformPatterns.psiElement(TwigTokenTypes.TAG_NAME).with(new PatternCondition<PsiElement>("aa") {
1104+
@Override
1105+
public boolean accepts(@NotNull PsiElement psiElement, ProcessingContext processingContext) {
1106+
return "apply".equalsIgnoreCase(psiElement.getText());
1107+
}
1108+
})
1109+
)
1110+
.withLanguage(TwigLanguage.INSTANCE);
1111+
}
1112+
10921113
public static ElementPattern<PsiElement> getForTagInVariablePattern() {
10931114

10941115
// {% for key, user in "users" %}

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,21 @@ private void attachLookupElements(@NotNull CompletionResultSet resultSet, Collec
171171
new FilterCompletionProvider()
172172
);
173173

174+
// {% apply upper %}This text becomes uppercase{% endapply %}
175+
extend(
176+
CompletionType.BASIC,
177+
TwigPattern.getApplyFilterPattern(),
178+
new CompletionProvider<CompletionParameters>() {
179+
@Override
180+
protected void addCompletions(@NotNull CompletionParameters completionParameters, @NotNull ProcessingContext processingContext, @NotNull CompletionResultSet completionResultSet) {
181+
Project project = completionParameters.getPosition().getProject();
182+
for(Map.Entry<String, TwigExtension> entry : new TwigExtensionParser(project).getFilters().entrySet()) {
183+
completionResultSet.addElement(new TwigExtensionLookupElement(project, entry.getKey(), entry.getValue()));
184+
}
185+
}
186+
}
187+
);
188+
174189
// provides support for {{ '<xxx>' }}
175190
extend(
176191
CompletionType.BASIC,

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ public PsiElement[] getGotoDeclarationTargets(PsiElement psiElement, int offset,
103103
targets.addAll(TranslationUtil.getDomainPsiFiles(psiElement.getProject(), psiElement.getText()));
104104
}
105105

106-
if(TwigPattern.getFilterPattern().accepts(psiElement)) {
106+
if(PlatformPatterns.or(TwigPattern.getFilterPattern(), TwigPattern.getApplyFilterPattern()).accepts(psiElement)) {
107107
targets.addAll(getFilterGoTo(psiElement));
108108
}
109109

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

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,12 @@
66
import com.jetbrains.twig.TwigFileType;
77
import com.jetbrains.twig.elements.TwigElementTypes;
88
import fr.adrienbrault.idea.symfony2plugin.templating.TwigPattern;
9+
import fr.adrienbrault.idea.symfony2plugin.templating.TwigTemplateCompletionContributor;
910
import fr.adrienbrault.idea.symfony2plugin.tests.SymfonyLightCodeInsightFixtureTestCase;
1011

1112
/**
1213
* @author Daniel Espendiller <daniel@espendiller.net>
13-
* @see com.jetbrains.twig.completion.TwigCompletionContributor
14+
* @see TwigTemplateCompletionContributor
1415
*/
1516
public class TwigFilterCompletionContributorTest extends SymfonyLightCodeInsightFixtureTestCase {
1617

@@ -30,6 +31,11 @@ public void testTwigExtensionFilterCompletion() {
3031
assertCompletionContains(TwigFileType.INSTANCE, "{{ 'test' | <caret> }}", "doctrine_minify_query", "doctrine_pretty_query");
3132
}
3233

34+
public void testTwigExtensionFilterViaApplyCompletion() {
35+
assertCompletionContains(TwigFileType.INSTANCE, "{% apply <caret> %}foo{% endapply %}", "doctrine_minify_query", "doctrine_pretty_query");
36+
assertNavigationContains(TwigFileType.INSTANCE, "{% apply doctrine<caret>_minify_query %}foo{% endapply %}", "Doctrine\\Bundle\\DoctrineBundle\\Twig\\DoctrineExtension::minifyQuery");
37+
}
38+
3339
public void testTwigExtensionFilterNavigation() {
3440
assertNavigationContains(TwigFileType.INSTANCE, "{{ 'test'|<caret>doctrine_minify_query }}", "Doctrine\\Bundle\\DoctrineBundle\\Twig\\DoctrineExtension::minifyQuery");
3541
assertNavigationContains(TwigFileType.INSTANCE, "{{ 'test'|<caret>doctrine_pretty_query }}", "SqlFormatter::format");
@@ -164,7 +170,7 @@ public void testControllerReferences() {
164170

165171
/**
166172
* @see fr.adrienbrault.idea.symfony2plugin.templating.TwigTemplateCompletionContributor
167-
* @see fr.adrienbrault.idea.symfony2plugin.templating.TwigTemplateGoToLocalDeclarationHandler
173+
* @see fr.adrienbrault.idea.symfony2plugin.templating.TwigTemplateGoToDeclarationHandler
168174
*/
169175
public void testSetTagIsAvailableForFunctionReferences() {
170176
assertCompletionContains(TwigFileType.INSTANCE, "{% set = <caret> %}", "json_bar");

0 commit comments

Comments
 (0)
0