Skip to content

Commit eff58f7

Browse files
committed
support donenv type cast syntax #1080
1 parent 6fc281f commit eff58f7

File tree

4 files changed

+46
-9
lines changed

4 files changed

+46
-9
lines changed

src/fr/adrienbrault/idea/symfony2plugin/dic/container/util/DotEnvUtil.java

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -41,19 +41,25 @@ public class DotEnvUtil {
4141
/**
4242
* Provide targets for "%env(FOOBAR)%"
4343
*
44-
* @param parameter %env(FOOBAR)%
44+
* @param parameter "%env(FOOBAR)%", "%env(resolve:DB)%"
4545
*/
4646
@NotNull
4747
public static Collection<PsiElement> getEnvironmentVariableTargetsForParameter(@NotNull Project project, @NotNull String parameter) {
48-
Collection<PsiElement> targets = new ArrayList<>();
48+
if(parameter.length() < 7 || !parameter.startsWith("%env(") || !parameter.endsWith(")%")) {
49+
return Collections.emptyList();
50+
}
4951

50-
if(parameter.length() > 7 && parameter.startsWith("%env(") && parameter.endsWith(")%")) {
51-
targets.addAll(
52-
DotEnvUtil.getEnvironmentVariableTargets(project, parameter.substring(5, parameter.length() - 2))
53-
);
52+
String parameterName = parameter.substring(5, parameter.length() - 2);
53+
54+
// https://github.com/symfony/symfony/pull/23901 => RegisterEnvVarProcessorsPass
55+
// '%env(int:DATABASE_PORT)%'
56+
// '%env(resolve:DB)%'
57+
Matcher matcher = Pattern.compile("^[\\w]+:(.*)$", Pattern.MULTILINE).matcher(parameterName);
58+
if(matcher.find()){
59+
parameterName = matcher.group(1);
5460
}
5561

56-
return targets;
62+
return DotEnvUtil.getEnvironmentVariableTargets(project, parameterName);
5763
}
5864

5965
@NotNull

tests/fr/adrienbrault/idea/symfony2plugin/tests/config/xml/XmlReferenceContributorTest.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,18 @@ public void testEnvironmentParameter() {
120120
"</container>\n",
121121
PlatformPatterns.psiElement()
122122
);
123+
124+
assertReferenceMatch(XmlFileType.INSTANCE, "" +
125+
"<?xml version=\"1.0\"?>\n" +
126+
"<container>\n" +
127+
" <services>\n" +
128+
" <service>\n" +
129+
" <argument>%env(int:FOOB<caret>AR_ENV)%</argument>\n" +
130+
" </service>\n" +
131+
" </services>\n" +
132+
"</container>\n",
133+
PlatformPatterns.psiElement()
134+
);
123135
}
124136

125137
public void testServiceIdAsClassReferences() {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,9 +101,9 @@ public void testParameter() {
101101
public void testEnvironmentParameter() {
102102
assertNavigationMatch(YAMLFileType.YML, "bar: %env(FOOBA<caret>R_ENV)%");
103103
assertNavigationMatch(YAMLFileType.YML, "bar: '%env(FOOBA<caret>R_ENV)%'");
104+
assertNavigationMatch(YAMLFileType.YML, "bar: '%env(resolve:FOOBA<caret>R_ENV)%'");
104105
}
105106

106-
107107
public void testResourcesInsideSameDirectoryProvidesNavigation() {
108108
assertNavigationContainsFile(YAMLFileType.YML, "imports:\n" +
109109
" - { resource: config_<caret>foo.yml }",

tests/fr/adrienbrault/idea/symfony2plugin/tests/dic/container/util/DotEnvUtilTest.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package fr.adrienbrault.idea.symfony2plugin.tests.dic.container.util;
22

3+
import com.intellij.psi.PsiFile;
34
import fr.adrienbrault.idea.symfony2plugin.dic.container.util.DotEnvUtil;
45
import fr.adrienbrault.idea.symfony2plugin.tests.SymfonyLightCodeInsightFixtureTestCase;
56

@@ -26,6 +27,24 @@ public void testGetEnvironmentVariables() {
2627
}
2728

2829
public void testGetEnvironmentVariableTargets() {
29-
assertTrue(DotEnvUtil.getEnvironmentVariableTargets(getProject(), "foobar").size() > 0);
30+
assertEquals(1, DotEnvUtil.getEnvironmentVariableTargets(getProject(), "foobar")
31+
.stream()
32+
.filter(psiElement -> psiElement instanceof PsiFile && "env.env".equals(((PsiFile) psiElement).getName()))
33+
.count()
34+
);
35+
}
36+
37+
public void testGetEnvironmentVariableTargetsForParameter() {
38+
assertEquals(1, DotEnvUtil.getEnvironmentVariableTargetsForParameter(getProject(), "%env(int:foobar)%")
39+
.stream()
40+
.filter(psiElement -> psiElement instanceof PsiFile && "env.env".equals(((PsiFile) psiElement).getName()))
41+
.count()
42+
);
43+
44+
assertEquals(1, DotEnvUtil.getEnvironmentVariableTargetsForParameter(getProject(), "%env(foobar)%")
45+
.stream()
46+
.filter(psiElement -> psiElement instanceof PsiFile && "env.env".equals(((PsiFile) psiElement).getName()))
47+
.count()
48+
);
3049
}
3150
}

0 commit comments

Comments
 (0)