From 8467ac6cd36834efc254b69703bd98e54e97c531 Mon Sep 17 00:00:00 2001 From: Daniel Espendiller Date: Fri, 3 Jun 2022 18:02:06 +0200 Subject: [PATCH] constraint message property linemarker should only be triggered on smallest (leaf) elements --- ...straintMessageGotoCompletionRegistrar.java | 6 ++++- .../config/ServiceLineMarkerProviderTest.java | 22 +++++++++++++++---- .../fixtures/ServiceLineMarkerProvider.php | 7 ++++++ .../tests/config/fixtures/validators.de.yml | 3 +++ 4 files changed, 33 insertions(+), 5 deletions(-) create mode 100644 src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/config/fixtures/validators.de.yml diff --git a/src/main/java/fr/adrienbrault/idea/symfony2plugin/translation/ConstraintMessageGotoCompletionRegistrar.java b/src/main/java/fr/adrienbrault/idea/symfony2plugin/translation/ConstraintMessageGotoCompletionRegistrar.java index 1fc25f340..5eb453271 100644 --- a/src/main/java/fr/adrienbrault/idea/symfony2plugin/translation/ConstraintMessageGotoCompletionRegistrar.java +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/translation/ConstraintMessageGotoCompletionRegistrar.java @@ -3,6 +3,7 @@ import com.intellij.patterns.PlatformPatterns; import com.intellij.patterns.PsiElementPattern; import com.intellij.psi.PsiElement; +import com.jetbrains.php.lang.lexer.PhpTokenTypes; import com.jetbrains.php.lang.psi.elements.Field; import com.jetbrains.php.lang.psi.elements.StringLiteralExpression; import fr.adrienbrault.idea.symfony2plugin.codeInsight.GotoCompletionContributor; @@ -33,7 +34,10 @@ public void register(@NotNull GotoCompletionRegistrarParameter registrar) { @NotNull public static PsiElementPattern.Capture getConstraintPropertyMessagePattern() { - return PlatformPatterns.psiElement().withParent(PlatformPatterns.psiElement(StringLiteralExpression.class) + return PlatformPatterns.psiElement().withElementType(PlatformPatterns.elementType().or( + PhpTokenTypes.STRING_LITERAL_SINGLE_QUOTE, + PhpTokenTypes.STRING_LITERAL + )).withParent(PlatformPatterns.psiElement(StringLiteralExpression.class) .withParent(PlatformPatterns.psiElement(Field.class) .withName(PlatformPatterns.string().startsWith("message")) )); diff --git a/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/config/ServiceLineMarkerProviderTest.java b/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/config/ServiceLineMarkerProviderTest.java index 2fcbc972e..8b8b4c4a1 100644 --- a/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/config/ServiceLineMarkerProviderTest.java +++ b/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/config/ServiceLineMarkerProviderTest.java @@ -4,7 +4,6 @@ import com.intellij.patterns.PatternCondition; import com.intellij.patterns.PlatformPatterns; import com.intellij.patterns.XmlPatterns; -import com.intellij.psi.PsiFile; import com.intellij.util.ProcessingContext; import com.jetbrains.php.lang.PhpFileType; import com.jetbrains.php.lang.psi.PhpPsiElementFactory; @@ -13,9 +12,6 @@ import org.jetbrains.yaml.YAMLFileType; import org.jetbrains.yaml.psi.YAMLKeyValue; -import java.util.Arrays; -import java.util.Collection; - /** * @author Daniel Espendiller * @@ -25,6 +21,8 @@ public class ServiceLineMarkerProviderTest extends SymfonyLightCodeInsightFixtur public void setUp() throws Exception { super.setUp(); + + myFixture.copyFileToProject("validators.de.yml", "translations/validators.de.yml"); myFixture.configureFromExistingVirtualFile(myFixture.copyFileToProject("ServiceLineMarkerProvider.php")); myFixture.configureFromExistingVirtualFile(myFixture.copyFileToProject("SymfonyPhpReferenceContributor.php")); } @@ -211,4 +209,20 @@ public void testThatAutowireConstructorIsGivenALineMarker() { "}" ), markerInfo -> markerInfo.getLineMarkerTooltip() != null && markerInfo.getLineMarkerTooltip().toLowerCase().contains("autowire")); } + + public void testNavigateToTranslationForConstraintMessage() { + assertLineMarker(myFixture.configureByText(PhpFileType.INSTANCE, "