diff --git a/src/main/java/fr/adrienbrault/idea/symfony2plugin/templating/util/TwigUtil.java b/src/main/java/fr/adrienbrault/idea/symfony2plugin/templating/util/TwigUtil.java index 883d21dec..762bd739b 100644 --- a/src/main/java/fr/adrienbrault/idea/symfony2plugin/templating/util/TwigUtil.java +++ b/src/main/java/fr/adrienbrault/idea/symfony2plugin/templating/util/TwigUtil.java @@ -74,6 +74,8 @@ import java.util.regex.Pattern; import java.util.stream.Collectors; +import static fr.adrienbrault.idea.symfony2plugin.util.StringUtils.underscore; + /** * @author Adrien Brault * @author Daniel Espendiller @@ -150,21 +152,39 @@ public static String[] getControllerMethodShortcut(@NotNull Method method) { templateFolderName = templateFolderName.replace("\\", "/"); String shortcutName; + String shortcutNameForOldNotation; // Foobar without (.html.twig) String templateName = className.substring(0, className.lastIndexOf("Controller")); if(methodName.equals("__invoke")) { - // AppBundle::Foobar.html.twig + // AppBundle::foo_bar.html.twig shortcutName = String.format( + "%s::%s%s", + symfonyBundle.getName(), + underscore(templateFolderName), + underscore(templateName) + ); + + // AppBundle::FooBar.html.twig + shortcutNameForOldNotation = String.format( "%s::%s%s", symfonyBundle.getName(), templateFolderName, templateName ); } else { - // FooBundle:Foobar:foobar.html.twig + // FooBundle:foo_bar:foo_bar.html.twig shortcutName = String.format( + "%s:%s%s:%s", + symfonyBundle.getName(), + underscore(templateFolderName), + underscore(templateName), + underscore(StringUtils.removeEnd(methodName, "Action")) + ); + + // FooBundle:FooBar:fooBar.html.twig + shortcutNameForOldNotation = String.format( "%s:%s%s:%s", symfonyBundle.getName(), templateFolderName, @@ -179,6 +199,9 @@ public static String[] getControllerMethodShortcut(@NotNull Method method) { shortcutName + ".html.twig", shortcutName + ".json.twig", shortcutName + ".xml.twig", + shortcutNameForOldNotation + ".html.twig", + shortcutNameForOldNotation + ".json.twig", + shortcutNameForOldNotation + ".xml.twig", }; } diff --git a/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/templating/util/TwigUtilTest.java b/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/templating/util/TwigUtilTest.java index 59c8c5f35..859f5d476 100644 --- a/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/templating/util/TwigUtilTest.java +++ b/src/test/java/fr/adrienbrault/idea/symfony2plugin/tests/templating/util/TwigUtilTest.java @@ -422,9 +422,9 @@ public void testGetControllerMethodShortcut() { List strings = Arrays.asList(TwigUtil.getControllerMethodShortcut((Method) psiElement.getParent())); - assertContainsElements(strings, "FooBundle:Foobar:" + string[1] + ".html.twig"); - assertContainsElements(strings, "FooBundle:Foobar:" + string[1] + ".json.twig"); - assertContainsElements(strings, "FooBundle:Foobar:" + string[1] + ".xml.twig"); + assertContainsElements(strings, "FooBundle:foobar:" + string[1] + ".html.twig"); + assertContainsElements(strings, "FooBundle:foobar:" + string[1] + ".json.twig"); + assertContainsElements(strings, "FooBundle:foobar:" + string[1] + ".xml.twig"); } } @@ -444,9 +444,30 @@ public void testGetControllerMethodShortcutForInvoke() { List strings = Arrays.asList(TwigUtil.getControllerMethodShortcut((Method) psiElement.getParent())); - assertContainsElements(strings, "FooBundle::Foobar.html.twig"); - assertContainsElements(strings, "FooBundle::Foobar.json.twig"); - assertContainsElements(strings, "FooBundle::Foobar.xml.twig"); + assertContainsElements(strings, "FooBundle::foobar.html.twig"); + assertContainsElements(strings, "FooBundle::foobar.json.twig"); + assertContainsElements(strings, "FooBundle::foobar.xml.twig"); + } + + public void testGetControllerMethodShortcutForInvokeWithSnakeCase() { + myFixture.copyFileToProject("controller_method.php"); + + myFixture.configureByText(PhpFileType.INSTANCE, "voke() {}\n" + + "" + + "}\n" + ); + + PsiElement psiElement = myFixture.getFile().findElementAt(myFixture.getCaretOffset()); + + List strings = Arrays.asList(TwigUtil.getControllerMethodShortcut((Method) psiElement.getParent())); + + assertContainsElements(strings, "FooBundle::foo_bar.html.twig"); + assertContainsElements(strings, "FooBundle::foo_bar.json.twig"); + assertContainsElements(strings, "FooBundle::foo_bar.xml.twig"); } public void testFindTwigFileController() {