From 028f97d15179bd897c18537eb495e21ca654fab7 Mon Sep 17 00:00:00 2001 From: Daniel Espendiller Date: Thu, 25 Jul 2019 20:09:46 +0200 Subject: [PATCH] extract more possible Docker env keys --- .../dic/container/util/DotEnvUtil.java | 25 ++++++++++++++++--- .../symfony2plugin/util/yaml/YamlHelper.java | 22 ++++++++++++++++ .../dic/container/util/DotEnvUtilTest.java | 2 +- .../dic/container/util/fixtures/Dockerfile | 3 ++- .../util/fixtures/docker-compose.yml | 9 ++++++- 5 files changed, 54 insertions(+), 7 deletions(-) diff --git a/src/main/java/fr/adrienbrault/idea/symfony2plugin/dic/container/util/DotEnvUtil.java b/src/main/java/fr/adrienbrault/idea/symfony2plugin/dic/container/util/DotEnvUtil.java index 9ecf443ee..25ab8431a 100644 --- a/src/main/java/fr/adrienbrault/idea/symfony2plugin/dic/container/util/DotEnvUtil.java +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/dic/container/util/DotEnvUtil.java @@ -10,10 +10,7 @@ import com.intellij.psi.PsiManager; import com.intellij.psi.search.FilenameIndex; import com.intellij.psi.search.GlobalSearchScope; -import com.intellij.psi.util.CachedValue; -import com.intellij.psi.util.CachedValueProvider; -import com.intellij.psi.util.CachedValuesManager; -import com.intellij.psi.util.PsiModificationTracker; +import com.intellij.psi.util.*; import fr.adrienbrault.idea.symfony2plugin.util.yaml.YamlHelper; import org.apache.commons.lang.StringUtils; import org.jetbrains.annotations.NotNull; @@ -158,10 +155,18 @@ private static void visitEnvironment(@NotNull Project project, @NotNull Consumer for (String file : DOCKER_FILES) { for (PsiFile psiFile : FilenameIndex.getFilesByName(project, file, GlobalSearchScope.allScope(project))) { + // ENV DOCKERFILE_FOO /bar Matcher matcher = Pattern.compile("ENV\\s+([^\\s]*)\\s+").matcher(psiFile.getText()); while(matcher.find()){ consumer.accept(Pair.create(matcher.group(1), psiFile)); } + + // ENV ADMIN_USER_DOCKERFILE="mark" + // ENV ADMIN_USER_DOCKERFILE ="mark" + matcher = Pattern.compile("ENV\\s+([\\w+]*)\\s*=").matcher(psiFile.getText()); + while(matcher.find()){ + consumer.accept(Pair.create(matcher.group(1), psiFile)); + } } } } @@ -169,10 +174,14 @@ private static void visitEnvironment(@NotNull Project project, @NotNull Consumer /** * environment: * - FOOBAR=0 + * + * environment: + * FOOBAR: 0 */ private static void visitEnvironmentSquenceItems(@NotNull Consumer> consumer, @NotNull YAMLKeyValue yamlKeyValue) { YAMLKeyValue environment = YamlHelper.getYamlKeyValue(yamlKeyValue, "environment"); if (environment != null) { + // FOOBAR=0 for (YAMLSequenceItem yamlSequenceItem : YamlHelper.getSequenceItems(environment)) { YAMLValue value = yamlSequenceItem.getValue(); if (value instanceof YAMLScalar) { @@ -185,6 +194,14 @@ private static void visitEnvironmentSquenceItems(@NotNull Consumer entry : YamlHelper.getYamlArrayKeyMap(childOfType).entrySet()) { + consumer.accept(Pair.create(entry.getKey(), entry.getValue())); + } + } } } } diff --git a/src/main/java/fr/adrienbrault/idea/symfony2plugin/util/yaml/YamlHelper.java b/src/main/java/fr/adrienbrault/idea/symfony2plugin/util/yaml/YamlHelper.java index ba6c171c0..08f07bd4a 100644 --- a/src/main/java/fr/adrienbrault/idea/symfony2plugin/util/yaml/YamlHelper.java +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/util/yaml/YamlHelper.java @@ -297,6 +297,28 @@ public static YAMLKeyValue getYamlKeyValue(@NotNull YAMLMapping yamlHash, String return getYamlKeyValue(yamlHash, keyName, false); } + /** + * test: + * DEBUG_WEB_1: 1 + * DEBUG_WEB_2: 1 + */ + @NotNull + public static Map getYamlArrayKeyMap(@NotNull YAMLMapping yamlHash) { + Map keys = new HashMap<>(); + + for(YAMLKeyValue yamlKeyValue: PsiTreeUtil.getChildrenOfAnyType(yamlHash, YAMLKeyValue.class)) { + String keyText = yamlKeyValue.getKeyText(); + if (StringUtils.isNotBlank(keyText)) { + YAMLValue value = yamlKeyValue.getValue(); + if (value != null) { + keys.put(keyText, value); + } + } + } + + return keys; + } + @Nullable public static String getYamlKeyValueAsString(@NotNull YAMLMapping yamlHash, @NotNull String keyName) { YAMLKeyValue yamlKeyValue = getYamlKeyValue(yamlHash, keyName, false); diff --git a/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/dic/container/util/DotEnvUtilTest.java b/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/dic/container/util/DotEnvUtilTest.java index 8682351ef..7ab5f081e 100644 --- a/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/dic/container/util/DotEnvUtilTest.java +++ b/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/dic/container/util/DotEnvUtilTest.java @@ -21,7 +21,7 @@ public String getTestDataPath() { } public void testGetEnvironmentVariables() { - assertContainsElements(DotEnvUtil.getEnvironmentVariables(getProject()), "foobar", "DEBUG_WEB", "DEBUG_SERVICES", "DOCKERFILE_FOO"); + assertContainsElements(DotEnvUtil.getEnvironmentVariables(getProject()), "foobar", "DEBUG_WEB", "DEBUG_SERVICES", "DOCKERFILE_FOO", "DEBUG_WEB_2", "DEBUG_SERVICES_2", "ADMIN_USER_DOCKERFILE"); } public void testGetEnvironmentVariableTargets() { diff --git a/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/dic/container/util/fixtures/Dockerfile b/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/dic/container/util/fixtures/Dockerfile index 03149eb54..380244971 100644 --- a/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/dic/container/util/fixtures/Dockerfile +++ b/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/dic/container/util/fixtures/Dockerfile @@ -2,4 +2,5 @@ FROM busybox ENV DOCKERFILE_FOO /bar WORKDIR ${foo} # WORKDIR /bar ADD . $foo # ADD . /bar -COPY \$foo /quux # COPY $foo /quux \ No newline at end of file +COPY \$foo /quux # COPY $foo /quux +ENV ADMIN_USER_DOCKERFILE="mark" \ No newline at end of file diff --git a/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/dic/container/util/fixtures/docker-compose.yml b/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/dic/container/util/fixtures/docker-compose.yml index f04d9b1bf..a03d43bc6 100644 --- a/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/dic/container/util/fixtures/docker-compose.yml +++ b/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/dic/container/util/fixtures/docker-compose.yml @@ -2,7 +2,14 @@ services: foobar: environment: - DEBUG_SERVICES=1 + foobar2: + environment: + DEBUG_SERVICES_2: 1 web: environment: - - DEBUG_WEB=1 \ No newline at end of file + - DEBUG_WEB=1 + +web2: + environment: + DEBUG_WEB_2: 1 \ No newline at end of file