From fed03dc999c57d31578bb17acdb73e5dfbfda2fd Mon Sep 17 00:00:00 2001 From: Daniel Espendiller Date: Tue, 30 Oct 2018 18:07:43 +0100 Subject: [PATCH] Provide class existing inspection for class named service #1239 --- .../dic/inspection/YamlClassInspection.java | 17 ++++++++++++----- .../dic/inspection/YamlClassInspectionTest.java | 3 +++ 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/main/java/fr/adrienbrault/idea/symfony2plugin/dic/inspection/YamlClassInspection.java b/src/main/java/fr/adrienbrault/idea/symfony2plugin/dic/inspection/YamlClassInspection.java index 58a8ba386..4c54d5a2b 100644 --- a/src/main/java/fr/adrienbrault/idea/symfony2plugin/dic/inspection/YamlClassInspection.java +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/dic/inspection/YamlClassInspection.java @@ -14,7 +14,9 @@ import fr.adrienbrault.idea.symfony2plugin.util.PhpElementsUtil; import fr.adrienbrault.idea.symfony2plugin.util.PsiElementUtils; import fr.adrienbrault.idea.symfony2plugin.util.yaml.YamlHelper; +import org.apache.commons.lang.StringUtils; import org.jetbrains.annotations.NotNull; +import org.jetbrains.yaml.YAMLTokenTypes; /** * Check if class exists @@ -35,13 +37,18 @@ public PsiElementVisitor buildVisitor(final @NotNull ProblemsHolder holder, bool return new PsiElementVisitor() { @Override public void visitElement(PsiElement psiElement) { - if (!((YamlElementPatternHelper.getSingleLineScalarKey("class", "factory_class").accepts(psiElement) || YamlElementPatternHelper.getParameterClassPattern().accepts(psiElement)) && YamlElementPatternHelper.getInsideServiceKeyPattern().accepts(psiElement))) { - super.visitElement(psiElement); - return; + if ((YamlElementPatternHelper.getSingleLineScalarKey("class", "factory_class").accepts(psiElement) || YamlElementPatternHelper.getParameterClassPattern().accepts(psiElement)) && YamlElementPatternHelper.getInsideServiceKeyPattern().accepts(psiElement)) { + // foobar.foo: + // class: Foobar\Foo + invoke(psiElement, holder); + } else if (psiElement.getNode().getElementType() == YAMLTokenTypes.SCALAR_KEY && YamlElementPatternHelper.getServiceIdKeyValuePattern().accepts(psiElement.getParent())) { + // Foobar\Foo: ~ + String text = PsiElementUtils.getText(psiElement); + if (StringUtils.isNotBlank(text) && YamlHelper.isClassServiceId(text) && text.contains("\\")) { + invoke(psiElement, holder); + } } - invoke(psiElement, holder); - super.visitElement(psiElement); } }; diff --git a/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/dic/inspection/YamlClassInspectionTest.java b/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/dic/inspection/YamlClassInspectionTest.java index f32c4953a..9cdb04698 100644 --- a/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/dic/inspection/YamlClassInspectionTest.java +++ b/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/dic/inspection/YamlClassInspectionTest.java @@ -40,5 +40,8 @@ public void testInspectionForClass() { assertLocalInspectionContains("services.yml", "parameters:\n foo.class: 'Args\\FoO'", YamlClassInspection.MESSAGE_WRONG_CASING); assertLocalInspectionContains("services.yml", "parameters:\n foo.class: \"Args\\FoO\"", YamlClassInspection.MESSAGE_WRONG_CASING); assertLocalInspectionNotContains("services.yml", "parameters:\n foo.class: Args\\Foo", YamlClassInspection.MESSAGE_WRONG_CASING); + + assertLocalInspectionContains("services.yml", "services:\n Args\\FooBar: ~", YamlClassInspection.MESSAGE_MISSING_CLASS); + assertLocalInspectionNotContains("services.yml", "services:\n foo.class: Args\\Foo", YamlClassInspection.MESSAGE_WRONG_CASING); } }