Skip to content

Commit db51b8c

Browse files
committed
Keep original styling for code reference links
1 parent 49f97ea commit db51b8c

File tree

4 files changed

+43
-31
lines changed

4 files changed

+43
-31
lines changed

src/main/java/com/intellij/plugins/haxe/ide/HaxeCodeReferenceToLinksExtension.java

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.intellij.plugins.haxe.ide;
22

3-
import com.intellij.codeInsight.documentation.DocumentationManagerProtocol;
43
import com.intellij.openapi.project.Project;
54
import com.intellij.plugins.haxe.ide.index.HaxeComponentIndex;
65
import com.intellij.plugins.haxe.lang.psi.HaxeClass;
@@ -92,7 +91,7 @@ private boolean replaceClassMemberReference(Code code, String literal) {
9291
HaxeNamedComponent haxeMemberByName = haxeClass.findHaxeMemberByName(member, null);
9392
if (haxeMemberByName instanceof PsiMember psiMember) {
9493
PsiClass containingClass = psiMember.getContainingClass();
95-
replaceCodeWithLink(code, containingClass.getQualifiedName() + "."+ member, literal);
94+
replaceCodeWithReferenceCodeLink(code, containingClass.getQualifiedName() + "." + member, literal);
9695
return true;
9796
}
9897
}
@@ -103,7 +102,7 @@ private boolean replaceClassMemberReference(Code code, String literal) {
103102
private boolean replaceIndexedClassName(Code code, String literal) {
104103
HaxeClass haxeClass = findUniqueClassFromIndex(literal);
105104
if (haxeClass != null) {
106-
replaceCodeWithLink(code, haxeClass.getQualifiedName(), literal);
105+
replaceCodeWithReferenceCodeLink(code, haxeClass.getQualifiedName(), literal);
107106
return true;
108107
}
109108
return false;
@@ -123,16 +122,16 @@ private HaxeClass findUniqueClassFromIndex(String literal) {
123122
private boolean replaceFullyQualifiedClass(Code code, String literal) {
124123
HaxeClass classByQName = HaxeResolveUtil.findClassByQName(literal, service, GlobalSearchScope.allScope(project));
125124
if (classByQName != null) {
126-
replaceCodeWithLink(code, literal, literal);
125+
replaceCodeWithReferenceCodeLink(code, literal, literal);
127126
return true;
128127
}
129128
return false;
130129
}
131130

132-
private static void replaceCodeWithLink(Code code, String qname, String linkText) {
133-
Link link = new Link();
134-
link.setDestination(DocumentationManagerProtocol.PSI_ELEMENT_PROTOCOL + qname);
135-
link.appendChild(new Text(linkText));
131+
private static void replaceCodeWithReferenceCodeLink(Code code, String qname, String linkText) {
132+
ReferenceCodeLink link = new ReferenceCodeLink();
133+
link.setPsiReference(qname);
134+
link.setLinkText(linkText);
136135
code.insertBefore(link);
137136
code.unlink();
138137
}

src/main/java/com/intellij/plugins/haxe/ide/HaxeDocumentationRenderer.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.intellij.plugins.haxe.ide;
22

3-
import com.google.common.base.CharMatcher;
3+
import com.intellij.codeInsight.documentation.DocumentationManagerUtil;
44
import com.intellij.lang.Language;
55
import com.intellij.lang.documentation.DocumentationSettings;
66
import com.intellij.lang.documentation.QuickDocHighlightingHelper;
@@ -15,14 +15,12 @@
1515
import org.commonmark.parser.Parser;
1616
import org.commonmark.renderer.NodeRenderer;
1717
import org.commonmark.renderer.html.*;
18-
import org.jetbrains.annotations.NotNull;
1918

2019
import java.awt.*;
2120
import java.util.Arrays;
2221
import java.util.List;
2322
import java.util.Optional;
2423
import java.util.Set;
25-
import java.util.stream.Collectors;
2624

2725
public class HaxeDocumentationRenderer {
2826

@@ -73,11 +71,19 @@ public NodeRenderer create(HtmlNodeRendererContext context) {
7371
return new NodeRenderer() {
7472
@Override
7573
public Set<Class<? extends Node>> getNodeTypes() {
76-
return Set.of(FencedCodeBlock.class, Code.class, HtmlBlock.class);
74+
return Set.of(FencedCodeBlock.class, Code.class, HtmlBlock.class, ReferenceCodeLink.class);
7775
}
7876

7977
@Override
8078
public void render(Node node) {
79+
if (node instanceof ReferenceCodeLink link) {
80+
StringBuilder builder = new StringBuilder();
81+
DocumentationManagerUtil.createHyperlink(builder, link.getPsiReference(), link.getLinkText(), false);
82+
context.getWriter().tag("code");
83+
context.getWriter().raw(builder.toString());
84+
context.getWriter().tag("/code");
85+
}
86+
8187
if (node instanceof Code code) {
8288

8389
String highlighting = renderer.languageHighlighting(code.getLiteral());

src/main/java/com/intellij/plugins/haxe/ide/HaxeDocumentationTagsExtension.java

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ class HaxeDocumentationTagsVisitor extends AbstractVisitor {
4141

4242
public static Pattern docTagPattern = Pattern.compile("(@\\w+)(.*)");
4343
public static Pattern parameterContentPattern = Pattern.compile("(\\S+)\\s+(.*)");
44-
public static Pattern qNamePattern = Pattern.compile("(\\w+)(\\.(\\w+))*");
4544

4645
public static final String TAG_SINCE = "@since";
4746
public static final String TAG_SEE = "@see";
@@ -60,16 +59,6 @@ class HaxeDocumentationTagsVisitor extends AbstractVisitor {
6059
);
6160

6261

63-
// @Override
64-
// protected void visitChildren(Node parent) {
65-
// Node node = parent.getLastChild();
66-
// while (node != null) {
67-
// // we move nodes into sub blocks so make sure we do not start iterating in a different block we walk backwards
68-
// Node previous = node.getPrevious();
69-
// node.accept(this);
70-
// node = previous;
71-
// }
72-
// }
7362

7463
@Override
7564
public void visit(Text text) {
@@ -93,14 +82,6 @@ public void visit(Text text) {
9382
}
9483
}
9584
}
96-
97-
//TODO mlo: try to add resolve link for references found codeblocks (might be its own extension)
98-
// HtmlBlock htmlBlock = new HtmlBlock();
99-
// DocumentationManagerUtil.createHyperlink(stringBuilder, qualifiedName, qualifiedName, false, true);
100-
// htmlBlock.setLiteral();
101-
102-
103-
10485
}
10586

10687
private void processSinceTag(Text text, String tag, String content) {
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package com.intellij.plugins.haxe.ide;
2+
3+
import lombok.Getter;
4+
import lombok.Setter;
5+
import org.commonmark.node.CustomNode;
6+
import org.commonmark.node.Visitor;
7+
8+
9+
@Getter
10+
@Setter
11+
public class ReferenceCodeLink extends CustomNode {
12+
private String linkText;
13+
private String psiReference;
14+
15+
public ReferenceCodeLink() {
16+
}
17+
18+
public ReferenceCodeLink(String linkText, String psiReference) {
19+
this.linkText = linkText;
20+
this.psiReference = psiReference;
21+
}
22+
23+
public void accept(Visitor visitor) {
24+
visitor.visit(this);
25+
}
26+
}

0 commit comments

Comments
 (0)