8000 Support new snake_case templates · SylApps/idea-php-symfony2-plugin@0dd6e85 · GitHub
[go: up one dir, main page]

Skip to content

Commit 0dd6e85

Browse files
committed
Support new snake_case templates
This was introduced in SensioFrameworkExtraBundle 4.0. https://github.com/sensiolabs/SensioFrameworkExtraBundle/blob/master/CHANGELOG.md#40
1 parent 7b0b16b commit 0dd6e85

File tree

2 files changed

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

2 files changed

+52
-8
lines changed

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

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,8 @@
7474
import java.util.regex.Pattern;
7575
import java.util.stream.Collectors;
7676

77+
import static fr.adrienbrault.idea.symfony2plugin.util.StringUtils.underscore;
78+
7779
/**
7880
* @author Adrien Brault <adrien.brault@gmail.com>
7981
* @author Daniel Espendiller <daniel@espendiller.net>
@@ -150,21 +152,39 @@ public static String[] getControllerMethodShortcut(@NotNull Method method) {
150152
templateFolderName = templateFolderName.replace("\\", "/");
151153

152154
String shortcutName;
155+
String shortcutNameForOldNotation;
153156

154157
// Foobar without (.html.twig)
155158
String templateName = className.substring(0, className.lastIndexOf("Controller"));
156159

157160
if(methodName.equals("__invoke")) {
158-
// AppBundle::Foobar.html.twig
161+
// AppBundle::foo_bar.html.twig
159162
shortcutName = String.format(
163+
"%s::%s%s",
164+
symfonyBundle.getName(),
165+
underscore(templateFolderName),
166+
underscore(templateName)
167+
);
168+
169+
// AppBundle::FooBar.html.twig
170+
shortcutNameForOldNotation = String.format(
160171
"%s::%s%s",
161172
symfonyBundle.getName(),
162173
templateFolderName,
163174
templateName
164175
);
165176
} else {
166-
// FooBundle:Foobar:foobar.html.twig
177+
// FooBundle:foo_bar:foo_bar.html.twig
167178
shortcutName = String.format(
179+
"%s:%s%s:%s",
180+
symfonyBundle.getName(),
181+
underscore(templateFolderName),
182+
underscore(templateName),
183+
underscore(StringUtils.removeEnd(methodName, "Action"))
184+
);
185+
186+
// FooBundle:FooBar:fooBar.html.twig
187+
shortcutNameForOldNotation = String.format(
168188
"%s:%s%s:%s",
169189
symfonyBundle.getName(),
170190
templateFolderName,
@@ -179,6 +199,9 @@ public static String[] getControllerMethodShortcut(@NotNull Method method) {
179199
shortcutName + ".html.twig",
180200
shortcutName + ".json.twig",
181201
shortcutName + ".xml.twig",
202+
shortcutNameForOldNotation + ".html.twig",
203+
shortcutNameForOldNotation + ".json.twig",
204+
shortcutNameForOldNotation + ".xml.twig",
182205
};
183206
}
184207

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

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -422,9 +422,9 @@ public void testGetControllerMethodShortcut() {
422422

423423
List<String> strings = Arrays.asList(TwigUtil.getControllerMethodShortcut((Method) psiElement.getParent()));
424424

425-
assertContainsElements(strings, "FooBundle:Foobar:" + string[1] + ".html.twig");
426-
assertContainsElements(strings, "FooBundle:Foobar:" + string[1] + ".json.twig");
427-
assertContainsElements(strings, "FooBundle:Foobar:" + string[1] + ".xml.twig");
425+
assertContainsElements(strings, "FooBundle:foobar:" + string[1] + ".html.twig");
426+
assertContainsElements(strings, "FooBundle:foobar:" + string[1] + ".json.twig");
427+
assertContainsElements(strings, "FooBundle:foobar:" + string[1] + ".xml.twig");
428428
}
429429
}
430430

@@ -444,9 +444,30 @@ public void testGetControllerMethodShortcutForInvoke() {
444444

445445
List<String> strings = Arrays.asList(TwigUtil.getControllerMethodShortcut((Method) psiElement.getParent()));
446446

447-
assertContainsElements(strings, "FooBundle::Foobar.html.twig");
448-
assertContainsElements(strings, "FooBundle::Foobar.json.twig");
449-
assertContainsElements(strings, "FooBundle::Foobar.xml.twig");
447+
assertContainsElements(strings, "FooBundle::foobar.html.twig");
448+
assertContainsElements(strings, "FooBundle::foobar.json.twig");
449+
assertContainsElements(strings, "FooBundle::foobar.xml.twig");
450+
}
451+
452+
public void testGetControllerMethodShortcutForInvokeWithSnakeCase() {
453+
myFixture.copyFileToProject("controller_method.php");
454+
455+
myFixture.configureByText(PhpFileType.INSTANCE, "<?php\n" +
456+
"namespace FooBundle\\Controller;\n" +
457+
"class FooBarController\n" +
458+
"{\n" +
459+
" public function __in<caret>voke() {}\n" +
460+
"" +
461+
"}\n"
462+
);
463+
464+
PsiElement psiElement = myFixture.getFile().findElementAt(myFixture.getCaretOffset());
465+
466+
List<String> strings = Arrays.asList(TwigUtil.getControllerMethodShortcut((Method) psiElement.getParent()));
467+
468+
assertContainsElements(strings, "FooBundle::foo_bar.html.twig");
469+
assertContainsElements(strings, "FooBundle::foo_bar.json.twig");
470+
assertContainsElements(strings, "FooBundle::foo_bar.xml.twig");
450471
}
451472

452473
public void testFindTwigFileController() {

0 commit comments

Comments
 (0)
0