Skip to content

Commit b5468ad

Browse files
committed
#2283 allowing resolving named "domain" argument for "trans" and "transchoice"
1 parent 6e20613 commit b5468ad

File tree

2 files changed

+45
-0
lines changed
  • src
    • main/java/fr/adrienbrault/idea/symfony2plugin/templating/util
    • test/java/fr/adrienbrault/idea/symfony2plugin/tests/templating/util

2 files changed

+45
-0
lines changed

src/main/java/fr/adrienbrault/idea/symfony2plugin/templating/util/TwigUtil.java

+37
Original file line numberDiff line numberDiff line change
@@ -503,6 +503,10 @@ public static String getDomainTrans(@NotNull PsiElement psiElement) {
503503
}
504504
}
505505
}
506+
507+
if (brace != null) {
508+
return extractDomainFromNamedParameter(brace);
509+
}
506510
} else if ("transchoice".equalsIgnoreCase(filterNameText)) {
507511
PsiElement brace = PsiTreeUtil.nextVisibleLeaf(filterName);
508512
if (PsiElementAssertUtil.isNotNullAndIsElementType(brace, TwigTokenTypes.LBRACE)) {
@@ -525,6 +529,10 @@ public static String getDomainTrans(@NotNull PsiElement psiElement) {
525529
}
526530
}
527531
}
532+
533+
if (brace != null) {
534+
return extractDomainFromNamedParameter(brace);
535+
}
528536
}
529537

530538
return null;
@@ -548,6 +556,35 @@ private static String extractDomainFromParameter(@NotNull PsiElement comma) {
548556
return null;
549557
}
550558

559+
/**
560+
* ('aaa', name: "foobar", )
561+
*/
562+
@Nullable
563+
private static String extractDomainFromNamedParameter(@NotNull PsiElement psiElement) {
564+
for (TwigVariableReference variableReference : PsiElementUtils.getNextSiblingOfTypes(psiElement, TwigVariableReference.class)) {
565+
if (!"domain".equals(variableReference.getName())) {
566+
continue;
567+
}
568+
569+
PsiElement parameterValue = PsiElementUtils.getNextSiblingAndSkip(
570+
variableReference,
571+
TwigTokenTypes.STRING_TEXT,
572+
TwigTokenTypes.EQ, TwigTokenTypes.WHITE_SPACE, TwigTokenTypes.SINGLE_QUOTE, TwigTokenTypes.DOUBLE_QUOTE
573+
);
574+
575+
if (parameterValue == null) {
576+
continue;
577+
}
578+
579+
String text = parameterValue.getText();
580+
if (!text.isBlank()) {
581+
return text;
582+
}
583+
}
584+
585+
return null;
586+
}
587+
551588
/**
552589
* {% import _self as %}
553590
* {% import 'foobar.html.twig' as %}

src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/templating/util/TwigUtilTest.java

+8
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,14 @@ public void testGetDomainTrans() {
8080
"{{ '<caret>' | transchoice(foo.bar - bar, {'%var%': value}, 'foo') }}",
8181
"{{ '<caret>'|trans({'%some%': \"button.reserve\"|trans,}, 'foo') }}",
8282
"{{ 'bar'|trans({'%some%': \"<caret>\"|trans({}, 'foo'),}) }}",
83+
"{{ '<caret>'|trans(domain = 'foo') }}",
84+
"{{ '<caret>'|trans('', {}, '', domain = \"foo\") }}",
85+
"{{ '<caret>'|trans(foo:'', {}, '', domain='foo') }}",
86+
"{{ '<caret>'|trans(foo:'', {}, domain='foo', '', ) }}",
87+
"{{ '<caret>'|transchoice(domain = 'foo') }}",
88+
"{{ '<caret>'|transchoice('', {}, '', domain = \"foo\") }}",
89+
"{{ '<caret>'|transchoice(foo: '', {}, '', domain='foo') }}",
90+
"{{ '<caret>'|transchoice(foo:'', {}, domain='foo', '', ) }}",
8391
};
8492

8593
for (String s : blocks) {

0 commit comments

Comments
 (0)