Skip to content

Commit f240369

Browse files
authored
Merge pull request #1974 from Haehnchen/feature/tagged-iterator
provide complete for tag name of yaml "!tagged_iterator"
2 parents 4998b64 + 656f471 commit f240369

File tree

5 files changed

+47
-29
lines changed

5 files changed

+47
-29
lines changed

src/main/java/fr/adrienbrault/idea/symfony2plugin/config/yaml/YamlElementPatternHelper.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -857,6 +857,13 @@ public boolean accepts(@NotNull YAMLKeyValue yamlKeyValue, ProcessingContext con
857857
return PlatformPatterns.or(argumentPattern, incompleteCodePattern, incompleteCodePattern2);
858858
}
859859

860+
public static ElementPattern<PsiElement> getTaggedIteratorTagNamePattern() {
861+
return PlatformPatterns.psiElement().afterLeafSkipping(
862+
PlatformPatterns.psiElement(PsiWhiteSpace.class),
863+
PlatformPatterns.psiElement().withElementType(YAMLTokenTypes.TAG).withText("!tagged_iterator")
864+
);
865+
}
866+
860867
/**
861868
* Match elements types
862869
*/

src/main/java/fr/adrienbrault/idea/symfony2plugin/config/yaml/YamlGoToDeclarationHandler.java

Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -194,19 +194,11 @@ public PsiElement[] getGotoDeclarationTargets(PsiElement psiElement, int i, Edit
194194
targets.addAll(attachResourceOrExcludeGlobNamespaceElements(psiElement));
195195
}
196196

197-
// !tagged_iterator app.handler
198-
if (PlatformPatterns.psiElement(YAMLTokenTypes.TEXT).accepts(psiElement) || PlatformPatterns.psiElement(YAMLTokenTypes.TAG).accepts(psiElement)) {
197+
// !tagged_iterator
198+
if (PlatformPatterns.psiElement(YAMLTokenTypes.TAG).accepts(psiElement)) {
199199
targets.addAll(attachTaggedIteratorClasses(psiElement));
200200
}
201201

202-
// !tagged_iterator { tag: app.handler, default_priority_method: getPriority }
203-
if (YamlElementPatternHelper.getSingleLineScalarKey("tag").accepts(psiElement)) {
204-
String tag = psiElement.getText();
205-
if (StringUtils.isNotBlank(tag)) {
206-
targets.addAll(ServiceUtil.getTaggedClassesWithCompiled(psiElement.getProject(), tag));
207-
}
208-
}
209-
210202
return targets.toArray(new PsiElement[0]);
211203
}
212204

@@ -528,23 +520,13 @@ private Collection<PsiElement> attachResourceOnPathGoto(@NotNull PsiElement psiE
528520
}
529521

530522
/**
531-
* Both elements are clickable, as parent element does not allow navigation
523+
* Click on "tagged_iterator"
532524
*
533525
* "!tagged_iterator app.handler"
534526
*/
535527
@NotNull
536528
private Collection<PsiElement> attachTaggedIteratorClasses(@NotNull PsiElement psiElement) {
537-
if (psiElement.getNode().getElementType() == YAMLTokenTypes.TEXT) {
538-
PsiElement prevLeaf = PsiTreeUtil.prevCodeLeaf(psiElement);
539-
if (prevLeaf != null && prevLeaf.getNode().getElementType() == YAMLTokenTypes.TAG) {
540-
if ("!tagged_iterator".equals(prevLeaf.getText())) {
541-
String tag = psiElement.getText();
542-
if (StringUtils.isNotBlank(tag)) {
543-
return new ArrayList<>(ServiceUtil.getTaggedClassesWithCompiled(psiElement.getProject(), tag));
544-
}
545-
}
546-
}
547-
} else if (psiElement.getNode().getElementType() == YAMLTokenTypes.TAG) {
529+
if (psiElement.getNode().getElementType() == YAMLTokenTypes.TAG) {
548530
// - !tagged_iterator ...
549531

550532
if ("!tagged_iterator".equals(psiElement.getText())) {

src/main/java/fr/adrienbrault/idea/symfony2plugin/dic/TaggedParameterGotoCompletionRegistrar.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ public void register(@NotNull GotoCompletionRegistrarParameter registrar) {
3030
registrar.register(
3131
PlatformPatterns.or(
3232
YamlElementPatternHelper.getTaggedServicePattern(),
33+
YamlElementPatternHelper.getSingleLineScalarKey("tag"),
34+
YamlElementPatternHelper.getTaggedIteratorTagNamePattern(),
3335
XmlPatterns.psiElement().withParent(XmlHelper.getTypeTaggedTagAttribute())
3436
),
3537
new MyTagGotoCompletionContributor()

src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/config/yaml/YamlGoToDeclarationHandlerTest.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -172,13 +172,6 @@ public void testNavigateToTaggedIteratorServices() {
172172
}
173173

174174
public void testNavigateToTagInsideHash() {
175-
assertNavigationMatch(YAMLFileType.YML, "" +
176-
"App\\HandlerCollection:\n" +
177-
" arguments:\n" +
178-
" - !tagged_iterator { tag: my_ni<caret>ce_tag, default_priority_method: getPriority }\n",
179-
PlatformPatterns.psiElement(PhpClass.class)
180-
);
181-
182175
assertNavigationMatch(YAMLFileType.YML, "" +
183176
"App\\HandlerCollection:\n" +
184177
" arguments:\n" +

src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/dic/TaggedParameterGotoCompletionRegistrarTest.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,24 @@ public void testThatYamlTaggedParameterProvidesNavigation() {
2626
"arguments: [!tagged foo<caret>bar]",
2727
PlatformPatterns.psiElement()
2828
);
29+
30+
assertNavigationMatch(
31+
YAMLFileType.YML,
32+
"services:\n" +
33+
" App\\HandlerCollection:\n" +
34+
" arguments:\n" +
35+
" - !tagged_iterator { tag: foo<caret>bar, default_priority_method: getPriority }",
36+
PlatformPatterns.psiElement()
37+
);
38+
39+
assertNavigationMatch(
40+
YAMLFileType.YML,
41+
"services:\n" +
42+
" App\\HandlerCollection:\n" +
43+
" arguments:\n" +
44+
" - !tagged_iterator foo<caret>bar",
45+
PlatformPatterns.psiElement()
46+
);
2947
}
3048

3149
public void testThatYamlTaggedParameterProvidesCompletion() {
@@ -34,6 +52,22 @@ public void testThatYamlTaggedParameterProvidesCompletion() {
3452
"arguments: [!tagged <caret>]",
3553
"foobar"
3654
);
55+
56+
assertCompletionContains(YAMLFileType.YML, "" +
57+
"services:\n" +
58+
" App\\HandlerCollection:\n" +
59+
" arguments:\n" +
60+
" - !tagged_iterator { tag: <caret>, default_priority_method: getPriority }",
61+
"foobar"
62+
);
63+
64+
assertCompletionContains(YAMLFileType.YML, "" +
65+
"services:\n" +
66+
" App\\HandlerCollection:\n" +
67+
" arguments:\n" +
68+
" - !tagged_iterator <caret>",
69+
"foobar"
70+
);
3771
}
3872

3973
public void testThatXmlTaggedParameterProvidesNavigation() {

0 commit comments

Comments
 (0)