Skip to content

Commit 01b49bc

Browse files
committed
support Twig component template and namespace mapping
1 parent 4c7dbfd commit 01b49bc

File tree

12 files changed

+273
-142
lines changed

12 files changed

+273
-142
lines changed

src/main/java/fr/adrienbrault/idea/symfony2plugin/routing/PhpLineMarkerProvider.java

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -57,15 +57,8 @@ private void attachUxComponents(@NotNull Collection<? super LineMarkerInfo<?>> l
5757
}
5858

5959
if (leaf.getParent() instanceof PhpClass phpClass) {
60-
Collection<String> templates = new ArrayList<>();
61-
62-
UxUtil.visitComponents(phpClass, t -> {
63-
templates.add(Objects.requireNonNullElseGet(t.template(), () -> "components/" + t.name() + ".html.twig"));
64-
});
65-
6660
Collection<PsiFile> files = new HashSet<>();
67-
68-
for (String template : templates) {
61+
for (String template : UxUtil.getComponentTemplatesForPhpClass(phpClass)) {
6962
files.addAll(TwigUtil.getTemplatePsiElements(phpClass.getProject(), template));
7063
}
7164

src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/dict/UxComponent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
/**
1111
* @author Daniel Espendiller <[email protected]>
1212
*/
13-
public record UxComponent(@NotNull String name, @NotNull String phpClass, @Nullable String template, fr.adrienbrault.idea.symfony2plugin.util.UxUtil.TwigComponentType type) implements Serializable {
13+
public record UxComponent(@Nullable String name, @NotNull String phpClass, @Nullable String template, @NotNull fr.adrienbrault.idea.symfony2plugin.util.UxUtil.TwigComponentType type) implements Serializable {
1414
@Override
1515
public int hashCode() {
1616
return new HashCodeBuilder()

src/main/java/fr/adrienbrault/idea/symfony2plugin/stubs/indexes/UxTemplateStubIndex.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public class UxTemplateStubIndex extends FileBasedIndexExtension<String, UxCompo
3333
Map<String, UxComponent> map = new HashMap<>();
3434

3535
if(inputData.getPsiFile() instanceof PhpFile phpFile) {
36-
UxUtil.visitComponents(phpFile, t -> map.put(t.name(), new UxComponent(t.name(), t.phpClass().getFQN(), t.template(), t.type())));
36+
UxUtil.visitComponentsForIndex(phpFile, t -> map.put(t.phpClass().getFQN(), new UxComponent(t.name(), t.phpClass().getFQN(), t.template(), t.type())));
3737
}
3838

3939
return map;
@@ -52,7 +52,7 @@ public class UxTemplateStubIndex extends FileBasedIndexExtension<String, UxCompo
5252

5353
@Override
5454
public int getVersion() {
55-
return 2;
55+
return 3;
5656
}
5757

5858
public FileBasedIndex.@NotNull InputFilter getInputFilter() {

src/main/java/fr/adrienbrault/idea/symfony2plugin/templating/HtmlTemplateGoToDeclarationHandler.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package fr.adrienbrault.idea.symfony2plugin.templating;
22

33
import com.intellij.codeInsight.navigation.actions.GotoDeclarationHandler;
4-
import com.intellij.codeInspection.ProblemHighlightType;
54
import com.intellij.openapi.editor.Editor;
65
import com.intellij.openapi.project.Project;
76
import com.intellij.psi.PsiElement;
@@ -10,20 +9,16 @@
109
import com.intellij.psi.xml.XmlElementType;
1110
import com.intellij.psi.xml.XmlToken;
1211
import com.intellij.psi.xml.XmlTokenType;
13-
import com.jetbrains.php.lang.psi.elements.Field;
1412
import com.jetbrains.php.lang.psi.elements.PhpClass;
15-
import com.jetbrains.php.lang.psi.elements.PhpNamedElement;
1613
import fr.adrienbrault.idea.symfony2plugin.Symfony2ProjectComponent;
1714
import fr.adrienbrault.idea.symfony2plugin.routing.Route;
1815
import fr.adrienbrault.idea.symfony2plugin.routing.RouteHelper;
1916
import fr.adrienbrault.idea.symfony2plugin.templating.util.TwigHtmlCompletionUtil;
2017
import fr.adrienbrault.idea.symfony2plugin.util.UxUtil;
21-
import kotlin.Pair;
2218
import org.apache.commons.lang3.StringUtils;
2319

2420
import java.util.ArrayList;
2521
import java.util.Collection;
26-
import java.util.function.Consumer;
2722

2823
/**
2924
* @author Daniel Espendiller <[email protected]>
@@ -72,7 +67,8 @@ public PsiElement[] getGotoDeclarationTargets(PsiElement psiElement, int offset,
7267

7368
String componentName = StringUtils.stripStart(text, "twig:");
7469
if (!componentName.isBlank()) {
75-
targets.addAll(UxUtil.getTwigComponentNameTargets(project, componentName));
70+
targets.addAll(UxUtil.getTwigComponentPhpClasses(project, componentName));
71+
targets.addAll(UxUtil.getComponentTemplates(project, componentName));
7672
}
7773
}
7874
} else {
@@ -89,7 +85,7 @@ public PsiElement[] getGotoDeclarationTargets(PsiElement psiElement, int offset,
8985
String text = psiElement.getText();
9086
Project project = psiElement.getProject();
9187

92-
for (PhpClass phpClass : UxUtil.getTwigComponentNameTargets(project, htmlTag.getName().substring(5))) {
88+
for (PhpClass phpClass : UxUtil.getTwigComponentPhpClasses(project, htmlTag.getName().substring(5))) {
9389
UxUtil.visitComponentVariables(phpClass, pair -> {
9490
if (pair.getFirst().equals(StringUtils.stripStart(text, ":"))) {
9591
targets.add(pair.getSecond());

src/main/java/fr/adrienbrault/idea/symfony2plugin/templating/TwigTemplateGoToDeclarationHandler.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.intellij.codeInsight.navigation.actions.GotoDeclarationHandler;
44
import com.intellij.openapi.actionSystem.DataContext;
55
import com.intellij.openapi.editor.Editor;
6+
import com.intellij.openapi.project.Project;
67
import com.intellij.openapi.vfs.VfsUtil;
78
import com.intellij.openapi.vfs.VirtualFile;
89
import com.intellij.patterns.PlatformPatterns;
@@ -313,12 +314,15 @@ private Collection<PsiElement> getRouteGoTo(@NotNull PsiElement psiElement) {
313314

314315
private Collection<? extends PsiElement> getComponentGoTo(@NotNull PsiElement psiElement) {
315316
String text = PsiElementUtils.getText(psiElement);
316-
317-
if(StringUtils.isBlank(text)) {
317+
if (StringUtils.isBlank(text)) {
318318
return Collections.emptyList();
319319
}
320320

321-
return UxUtil.getTwigComponentNameTargets(psiElement.getProject(), text);
321+
Project project = psiElement.getProject();
322+
return new ArrayList<>() {{
323+
addAll(UxUtil.getComponentTemplates(project, text));
324+
addAll(UxUtil.getTwigComponentPhpClasses(project, text));
325+
}};
322326
}
323327

324328
@NotNull

src/main/java/fr/adrienbrault/idea/symfony2plugin/templating/completion/TwigHtmlCompletionContributor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ protected void addCompletions(@NotNull CompletionParameters parameters, @NotNull
183183
return;
184184
}
185185

186-
for (PhpClass phpClass : UxUtil.getTwigComponentNameTargets(position.getProject(), parentOfType.getName().substring(5))) {
186+
for (PhpClass phpClass : UxUtil.getTwigComponentPhpClasses(position.getProject(), parentOfType.getName().substring(5))) {
187187
UxUtil.visitComponentVariables(phpClass, pair -> {
188188
PhpNamedElement field = pair.getSecond();
189189

0 commit comments

Comments
 (0)