Skip to content

Commit a38f6a2

Browse files
committed
add twig path configuration parser of yaml files #654
1 parent 2df1b16 commit a38f6a2

File tree

2 files changed

+92
-0
lines changed

2 files changed

+92
-0
lines changed

src/fr/adrienbrault/idea/symfony2plugin/TwigHelper.java

+46
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@
4646
import org.apache.commons.lang.StringUtils;
4747
import org.jetbrains.annotations.NotNull;
4848
import org.jetbrains.annotations.Nullable;
49+
import org.jetbrains.yaml.YAMLUtil;
50+
import org.jetbrains.yaml.psi.*;
4951

5052
import java.io.File;
5153
import java.util.*;
@@ -1804,4 +1806,48 @@ public static Pair<PsiFile[], Boolean> findScopedFile(@NotNull PsiElement psiEle
18041806

18051807
return Pair.create(new PsiFile[] {psiElement.getContainingFile()}, false);
18061808
}
1809+
1810+
/**
1811+
* Collects Twig path in given yaml configuration
1812+
*
1813+
* twig:
1814+
* paths:
1815+
* "%kernel.root_dir%/../src/vendor/bundle/Resources/views": core
1816+
*/
1817+
@NotNull
1818+
public static Collection<Pair<String, String>> getTwigPathFromYamlConfig(@NotNull YAMLFile yamlFile) {
1819+
YAMLKeyValue yamlKeyValue = YAMLUtil.getQualifiedKeyInFile(yamlFile, "twig", "paths");
1820+
if(yamlKeyValue == null) {
1821+
return Collections.emptyList();
1822+
}
1823+
1824+
YAMLValue value = yamlKeyValue.getValue();
1825+
if(!(value instanceof YAMLMapping)) {
1826+
return Collections.emptyList();
1827+
}
1828+
1829+
Collection<Pair<String, String>> pair = new ArrayList<>();
1830+
1831+
for (YAMLPsiElement element : value.getYAMLElements()) {
1832+
if(!(element instanceof YAMLKeyValue)) {
1833+
continue;
1834+
}
1835+
1836+
String keyText = ((YAMLKeyValue) element).getKeyText();
1837+
if(StringUtils.isBlank(keyText)) {
1838+
continue;
1839+
}
1840+
1841+
String valueText = ((YAMLKeyValue) element).getValueText();
1842+
1843+
// normalize null value
1844+
if(valueText.equals("~")) {
1845+
valueText = "";
1846+
}
1847+
1848+
pair.add(Pair.create(valueText, keyText));
1849+
}
1850+
1851+
return pair;
1852+
}
18071853
}

tests/fr/adrienbrault/idea/symfony2plugin/tests/TwigHelperLightTest.java

+46
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
package fr.adrienbrault.idea.symfony2plugin.tests;
22

3+
import com.intellij.openapi.util.Condition;
4+
import com.intellij.openapi.util.Pair;
35
import com.intellij.psi.PsiElement;
6+
import com.intellij.psi.PsiFile;
47
import com.intellij.psi.PsiFileFactory;
58
import com.intellij.psi.tree.IElementType;
9+
import com.intellij.util.containers.ContainerUtil;
610
import com.jetbrains.twig.TwigFile;
711
import com.jetbrains.twig.TwigFileType;
812
import com.jetbrains.twig.elements.TwigElementFactory;
@@ -11,8 +15,11 @@
1115
import com.jetbrains.twig.elements.TwigTagWithFileReference;
1216
import fr.adrienbrault.idea.symfony2plugin.TwigHelper;
1317
import fr.adrienbrault.idea.symfony2plugin.templating.dict.TwigBlock;
18+
import fr.adrienbrault.idea.symfony2plugin.util.yaml.YamlPsiElementFactory;
1419
import org.apache.commons.lang.StringUtils;
1520
import org.jetbrains.annotations.NotNull;
21+
import org.jetbrains.yaml.YAMLFileType;
22+
import org.jetbrains.yaml.psi.YAMLFile;
1623

1724
import java.util.*;
1825

@@ -124,6 +131,45 @@ public void testIncludeTagNonAllowedTags() {
124131
assertSize(0, getIncludeTemplates("{% import 'foo.html.twig' %}", TwigElementTypes.IMPORT_TAG));
125132
}
126133

134+
/**
135+
* @see TwigHelper#getTwigPathFromYamlConfig
136+
*/
137+
public void testGetTwigPathFromYamlConfig() {
138+
String content = "twig:\n" +
139+
" paths:\n" +
140+
" \"%kernel.root_dir%/../src/views\": core\n" +
141+
" \"%kernel.root_dir%/../src/views2\": 'core2'\n" +
142+
" \"%kernel.root_dir%/../src/views3\": \"core3\"\n" +
143+
" \"%kernel.root_dir%/../src/views4\": ~\n" +
144+
" \"%kernel.root_dir%/../src/views5\": \n"
145+
;
146+
147+
YAMLFile fileFromText = (YAMLFile) PsiFileFactory.getInstance(getProject())
148+
.createFileFromText("DUMMY__." + YAMLFileType.YML.getDefaultExtension(), YAMLFileType.YML, content, System.currentTimeMillis(), false);
149+
150+
Collection<Pair<String, String>> map = TwigHelper.getTwigPathFromYamlConfig(fileFromText);
151+
152+
assertNotNull(ContainerUtil.find(map, pair ->
153+
pair.getFirst().equals("core") && pair.getSecond().equals("%kernel.root_dir%/../src/views")
154+
));
155+
156+
assertNotNull(ContainerUtil.find(map, pair ->
157+
pair.getFirst().equals("core2") && pair.getSecond().equals("%kernel.root_dir%/../src/views2")
158+
));
159+
160+
assertNotNull(ContainerUtil.find(map, pair ->
161+
pair.getFirst().equals("core3") && pair.getSecond().equals("%kernel.root_dir%/../src/views3")
162+
));
163+
164+
assertNotNull(ContainerUtil.find(map, pair ->
165+
pair.getFirst().equals("") && pair.getSecond().equals("%kernel.root_dir%/../src/views4")
166+
));
167+
168+
assertNotNull(ContainerUtil.find(map, pair ->
169+
pair.getFirst().equals("") && pair.getSecond().equals("%kernel.root_dir%/../src/views5")
170+
));
171+
}
172+
127173
/**
128174
* @see TwigHelper#getBlockTagPattern
129175
*/

0 commit comments

Comments
 (0)