Skip to content

Commit 7c98ab0

Browse files
committed
Add support for Twig attributes extension inside the TwigExtension template (NewTwigExtensionAction)
1 parent 9e58fa8 commit 7c98ab0

File tree

2 files changed

+41
-2
lines changed

2 files changed

+41
-2
lines changed

src/main/java/fr/adrienbrault/idea/symfony2plugin/action/NewTwigExtensionAction.java

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,15 @@
1111
import com.jetbrains.php.roots.PhpNamespaceCompositeProvider;
1212
import fr.adrienbrault.idea.symfony2plugin.Symfony2Icons;
1313
import fr.adrienbrault.idea.symfony2plugin.Symfony2ProjectComponent;
14+
import fr.adrienbrault.idea.symfony2plugin.util.PhpElementsUtil;
1415
import fr.adrienbrault.idea.symfony2plugin.util.psi.PhpBundleFileFactory;
1516
import org.apache.commons.lang3.StringUtils;
1617
import org.jetbrains.annotations.NotNull;
1718

1819
import javax.swing.*;
1920
import java.util.HashMap;
2021
import java.util.List;
22+
import java.util.Map;
2123

2224
/**
2325
* @author Daniel Espendiller <daniel@espendiller.net>
@@ -63,16 +65,19 @@ public void actionPerformed(@NotNull AnActionEvent event) {
6365
return;
6466
}
6567

68+
// Detect available Twig attributes in the project
69+
String templateName = detectTemplate(project);
70+
6671
ApplicationManager.getApplication().runWriteAction(() -> {
67-
HashMap<String, String> hashMap = new HashMap<>() {{
72+
Map<String, String> hashMap = new HashMap<>() {{
6873
put("class", className);
6974
put("namespace", strings.get(0));
7075
}};
7176

7277
PsiElement commandAttributes = PhpBundleFileFactory.createFile(
7378
project,
7479
directory.getVirtualFile(),
75-
"twig_extension",
80+
templateName,
7681
className,
7782
hashMap
7883
);
@@ -81,6 +86,17 @@ public void actionPerformed(@NotNull AnActionEvent event) {
8186
});
8287
}
8388

89+
@NotNull
90+
private static String detectTemplate(@NotNull Project project) {
91+
// If attributes are available, use the new attribute-based template
92+
if (PhpElementsUtil.getClassInterface(project, "\\Twig\\Attribute\\AsTwigFunction") != null) {
93+
return "twig_extension_function_attribute";
94+
}
95+
96+
// Default to traditional template
97+
return "twig_extension";
98+
}
99+
84100
public static class Shortcut extends NewTwigExtensionAction {
85101
@Override
86102
public void update(@NotNull AnActionEvent event) {
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace {{ namespace }};
6+
7+
use Twig\Attribute\AsTwigFunction;
8+
use Twig\Attribute\AsTwigFilter;
9+
10+
class {{ class }}
11+
{
12+
#[AsTwigFilter('my_filter')]
13+
public function myFilter(): string
14+
{
15+
return 'Hello from PhpStorm';
16+
}
17+
18+
#[AsTwigFunction('my_function')]
19+
public function myFunction(): string
20+
{
21+
return 'Hello from PhpStorm';
22+
}
23+
}

0 commit comments

Comments
 (0)