diff --git a/src/main/java/fr/adrienbrault/idea/symfony2plugin/config/yaml/YamlElementPatternHelper.java b/src/main/java/fr/adrienbrault/idea/symfony2plugin/config/yaml/YamlElementPatternHelper.java index 3f13ed3aa..e6a079696 100644 --- a/src/main/java/fr/adrienbrault/idea/symfony2plugin/config/yaml/YamlElementPatternHelper.java +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/config/yaml/YamlElementPatternHelper.java @@ -716,21 +716,43 @@ public static ElementPattern getTaggedServicePattern() { * _defaults: * bind: * $: '' + * + * _defaults: + * bind: + * $ */ - static PsiElementPattern.Capture getNamedDefaultBindPattern() { - return PlatformPatterns.psiElement(YAMLTokenTypes.SCALAR_KEY).withText(PlatformPatterns.string().startsWith("$")).withParent( - PlatformPatterns.psiElement(YAMLKeyValue.class).withParent(PlatformPatterns.psiElement(YAMLMapping.class).withParent(PlatformPatterns.psiElement(YAMLKeyValue.class).with(new PatternCondition("KeyText") { - @Override - public boolean accepts(@NotNull YAMLKeyValue yamlKeyValue, ProcessingContext context) { - return "bind".equals(yamlKeyValue.getKeyText()); - } - }).withParent(PlatformPatterns.psiElement(YAMLMapping.class).withParent(PlatformPatterns.psiElement(YAMLKeyValue.class).with(new PatternCondition("KeyText") { - @Override - public boolean accepts(@NotNull YAMLKeyValue yamlKeyValue, ProcessingContext context) { - return "_defaults".equals(yamlKeyValue.getKeyText()); - } - }))))) + static ElementPattern getNamedDefaultBindPattern() { + // "__defaults" key + PsiElementPattern.Capture defaultsKey = PlatformPatterns.psiElement(YAMLMapping.class).withParent(PlatformPatterns.psiElement(YAMLKeyValue.class).with(new PatternCondition("KeyText") { + @Override + public boolean accepts(@NotNull YAMLKeyValue yamlKeyValue, ProcessingContext context) { + return "_defaults".equals(yamlKeyValue.getKeyText()); + } + })); + + // "bind" bind + PsiElementPattern.Capture bindKey = PlatformPatterns.psiElement(YAMLMapping.class).withParent(PlatformPatterns.psiElement(YAMLKeyValue.class).with(new PatternCondition("KeyText") { + @Override + public boolean accepts(@NotNull YAMLKeyValue yamlKeyValue, ProcessingContext context) { + return "bind".equals(yamlKeyValue.getKeyText()); + } + }).withParent(defaultsKey)); + + // complete code + // bind: + // $: '' + PsiElementPattern.Capture argumentPattern = PlatformPatterns.psiElement(YAMLTokenTypes.SCALAR_KEY).withText(PlatformPatterns.string().startsWith("$")).withParent( + PlatformPatterns.psiElement(YAMLKeyValue.class).withParent(bindKey) ); + + // incomplete code + // bind: + // $ + PsiElementPattern.Capture incompleteCodePattern = PlatformPatterns.psiElement(YAMLTokenTypes.TEXT).withText(PlatformPatterns.string().startsWith("$")).withParent( + PlatformPatterns.psiElement(YAMLScalar.class).withParent(bindKey) + ); + + return PlatformPatterns.or(argumentPattern, incompleteCodePattern); } /** diff --git a/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/config/yaml/YamlCompletionContributorTest.java b/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/config/yaml/YamlCompletionContributorTest.java index d512835b6..d9f89b0f0 100644 --- a/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/config/yaml/YamlCompletionContributorTest.java +++ b/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/config/yaml/YamlCompletionContributorTest.java @@ -1,15 +1,9 @@ package fr.adrienbrault.idea.symfony2plugin.tests.config.yaml; -import com.intellij.patterns.PlatformPatterns; import com.jetbrains.php.lang.PhpFileType; -import com.jetbrains.php.lang.psi.elements.PhpClass; -import fr.adrienbrault.idea.symfony2plugin.config.yaml.YamlCompletionContributor; import fr.adrienbrault.idea.symfony2plugin.tests.SymfonyLightCodeInsightFixtureTestCase; import org.jetbrains.yaml.YAMLFileType; -import java.io.File; -import java.net.URL; - /** * @author Daniel Espendiller *