Skip to content

Commit

Permalink
support donenv type cast syntax #1080
Browse files Browse the repository at this point in the history
  • Loading branch information
Haehnchen committed Nov 17, 2017
1 parent 6fc281f commit eff58f7
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -41,19 +41,25 @@ public class DotEnvUtil {
/**
* Provide targets for "%env(FOOBAR)%"
*
* @param parameter %env(FOOBAR)%
* @param parameter "%env(FOOBAR)%", "%env(resolve:DB)%"
*/
@NotNull
public static Collection<PsiElement> getEnvironmentVariableTargetsForParameter(@NotNull Project project, @NotNull String parameter) {
Collection<PsiElement> targets = new ArrayList<>();
if(parameter.length() < 7 || !parameter.startsWith("%env(") || !parameter.endsWith(")%")) {
return Collections.emptyList();
}

if(parameter.length() > 7 && parameter.startsWith("%env(") && parameter.endsWith(")%")) {
targets.addAll(
DotEnvUtil.getEnvironmentVariableTargets(project, parameter.substring(5, parameter.length() - 2))
);
String parameterName = parameter.substring(5, parameter.length() - 2);

// https://github.com/symfony/symfony/pull/23901 => RegisterEnvVarProcessorsPass
// '%env(int:DATABASE_PORT)%'
// '%env(resolve:DB)%'
Matcher matcher = Pattern.compile("^[\\w]+:(.*)$", Pattern.MULTILINE).matcher(parameterName);
if(matcher.find()){
parameterName = matcher.group(1);
}

return targets;
return DotEnvUtil.getEnvironmentVariableTargets(project, parameterName);
}

@NotNull
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,18 @@ public void testEnvironmentParameter() {
"</container>\n",
PlatformPatterns.psiElement()
);

assertReferenceMatch(XmlFileType.INSTANCE, "" +
"<?xml version=\"1.0\"?>\n" +
"<container>\n" +
" <services>\n" +
" <service>\n" +
" <argument>%env(int:FOOB<caret>AR_ENV)%</argument>\n" +
" </service>\n" +
" </services>\n" +
"</container>\n",
PlatformPatterns.psiElement()
);
}

public void testServiceIdAsClassReferences() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,9 +101,9 @@ public void testParameter() {
public void testEnvironmentParameter() {
assertNavigationMatch(YAMLFileType.YML, "bar: %env(FOOBA<caret>R_ENV)%");
assertNavigationMatch(YAMLFileType.YML, "bar: '%env(FOOBA<caret>R_ENV)%'");
assertNavigationMatch(YAMLFileType.YML, "bar: '%env(resolve:FOOBA<caret>R_ENV)%'");
}


public void testResourcesInsideSameDirectoryProvidesNavigation() {
assertNavigationContainsFile(YAMLFileType.YML, "imports:\n" +
" - { resource: config_<caret>foo.yml }",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package fr.adrienbrault.idea.symfony2plugin.tests.dic.container.util;

import com.intellij.psi.PsiFile;
import fr.adrienbrault.idea.symfony2plugin.dic.container.util.DotEnvUtil;
import fr.adrienbrault.idea.symfony2plugin.tests.SymfonyLightCodeInsightFixtureTestCase;

Expand All @@ -26,6 +27,24 @@ public void testGetEnvironmentVariables() {
}

public void testGetEnvironmentVariableTargets() {
assertTrue(DotEnvUtil.getEnvironmentVariableTargets(getProject(), "foobar").size() > 0);
assertEquals(1, DotEnvUtil.getEnvironmentVariableTargets(getProject(), "foobar")
.stream()
.filter(psiElement -> psiElement instanceof PsiFile && "env.env".equals(((PsiFile) psiElement).getName()))
.count()
);
}

public void testGetEnvironmentVariableTargetsForParameter() {
assertEquals(1, DotEnvUtil.getEnvironmentVariableTargetsForParameter(getProject(), "%env(int:foobar)%")
.stream()
.filter(psiElement -> psiElement instanceof PsiFile && "env.env".equals(((PsiFile) psiElement).getName()))
.count()
);

assertEquals(1, DotEnvUtil.getEnvironmentVariableTargetsForParameter(getProject(), "%env(foobar)%")
.stream()
.filter(psiElement -> psiElement instanceof PsiFile && "env.env".equals(((PsiFile) psiElement).getName()))
.count()
);
}
}

0 comments on commit eff58f7

Please sign in to comment.