Skip to content

Commit ec08dcc

Browse files
committed
Format hover with Markdown. See
#102
1 parent 63c1fa1 commit ec08dcc

File tree

4 files changed

+44
-10
lines changed

4 files changed

+44
-10
lines changed

eclipse/ts.eclipse.ide.ui/META-INF/MANIFEST.MF

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,10 @@ Require-Bundle: org.eclipse.ui,
2525
org.eclipse.search,
2626
org.eclipse.debug.ui,
2727
org.eclipse.core.variables,
28-
org.eclipse.core.externaltools
28+
org.eclipse.core.externaltools,
29+
org.eclipse.tm4e.markdown,
30+
org.eclipse.tm4e.core,
31+
org.eclipse.tm4e.ui
2932
Bundle-ActivationPolicy: lazy
3033
Bundle-Activator: ts.eclipse.ide.ui.TypeScriptUIPlugin
3134
Import-Package: com.eclipsesource.json;version="[0.9.4,0.9.5)"

eclipse/ts.eclipse.ide.ui/src/ts/eclipse/ide/ui/hover/HTMLTypeScriptQuickInfoCollector.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,24 @@
11
package ts.eclipse.ide.ui.hover;
22

3+
import org.eclipse.core.resources.IFile;
4+
import org.eclipse.jface.text.IDocument;
5+
36
import ts.client.quickinfo.ITypeScriptQuickInfoCollector;
47
import ts.eclipse.ide.ui.utils.HTMLTypeScriptPrinter;
58

69
public class HTMLTypeScriptQuickInfoCollector implements ITypeScriptQuickInfoCollector {
710

11+
private final IFile tsFile;
812
private String html;
913

14+
public HTMLTypeScriptQuickInfoCollector(IFile tsFile) {
15+
this.tsFile = tsFile;;
16+
}
17+
1018
@Override
1119
public void setInfo(String kind, String kindModifiers, int startLine, int startOffset, int endLine, int endOffset,
1220
String displayString, String documentation) {
13-
this.html = HTMLTypeScriptPrinter.getQuickInfo(kind, kindModifiers, displayString, documentation);
21+
this.html = HTMLTypeScriptPrinter.getQuickInfo(kind, kindModifiers, displayString, documentation, tsFile);
1422
}
1523

1624
public String getInfo() {

eclipse/ts.eclipse.ide.ui/src/ts/eclipse/ide/ui/hover/TypeScriptHover.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import ts.eclipse.ide.core.resources.IIDETypeScriptProject;
2121
import ts.eclipse.ide.core.utils.TypeScriptResourceUtil;
2222
import ts.eclipse.ide.ui.TypeScriptUIPlugin;
23+
import ts.eclipse.ide.ui.preferences.TypeScriptUIPreferenceConstants;
2324
import ts.eclipse.jface.text.html.TypeScriptBrowserInformationControlInput;
2425
import ts.resources.ITypeScriptFile;
2526
import ts.utils.StringUtils;
@@ -52,7 +53,9 @@ public Object getHoverInfo2(ITextViewer textViewer, IRegion hoverRegion) {
5253
int position = hoverRegion.getOffset();
5354
ITypeScriptFile tsFile = tsProject.openFile(scriptFile, textViewer.getDocument());
5455

55-
HTMLTypeScriptQuickInfoCollector collector = new HTMLTypeScriptQuickInfoCollector();
56+
HTMLTypeScriptQuickInfoCollector collector = new HTMLTypeScriptQuickInfoCollector(
57+
TypeScriptUIPlugin.getDefault().getPreferenceStore().getBoolean(
58+
TypeScriptUIPreferenceConstants.USE_TEXMATE_FOR_SYNTAX_COLORING) ? scriptFile : null);
5659
tsProject.quickInfo(tsFile, position, collector);
5760

5861
String text = collector.getInfo();

eclipse/ts.eclipse.ide.ui/src/ts/eclipse/ide/ui/utils/HTMLTypeScriptPrinter.java

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,19 @@
55
import java.io.InputStreamReader;
66
import java.net.URL;
77

8+
import org.eclipse.core.resources.IFile;
89
import org.eclipse.core.runtime.Platform;
910
import org.eclipse.jface.internal.text.html.HTMLPrinter;
1011
import org.eclipse.jface.resource.ImageDescriptor;
1112
import org.eclipse.jface.resource.JFaceResources;
1213
import org.eclipse.swt.graphics.FontData;
1314
import org.eclipse.swt.graphics.RGB;
15+
import org.eclipse.tm4e.markdown.TMHTMLRenderer;
16+
import org.eclipse.tm4e.markdown.marked.HTMLRenderer;
17+
import org.eclipse.tm4e.markdown.marked.IRenderer;
18+
import org.eclipse.tm4e.markdown.marked.Marked;
19+
import org.eclipse.tm4e.ui.TMUIPlugin;
20+
import org.eclipse.tm4e.ui.themes.ITheme;
1421
import org.osgi.framework.Bundle;
1522

1623
import ts.eclipse.ide.internal.ui.TypeScriptUIMessages;
@@ -37,23 +44,34 @@ public static void setColorInfoForeground(RGB colorInfoForeground) {
3744
HTMLTypeScriptPrinter.colorInfoForeground = colorInfoForeground;
3845
}
3946

40-
public static String getQuickInfo(String kind, String kindModifiers, String displayString, String documentation) {
47+
public static String getQuickInfo(String kind, String kindModifiers, String displayString, String documentation,
48+
IFile tsFile) {
4149
StringBuffer info = new StringBuffer();
4250
ImageDescriptor descriptor = null; // TypeScriptImagesRegistry.getTypeScriptImageDescriptor(kind,
4351
// kindModifiers, null);
4452
startPage(info, null, descriptor);
4553
if (!StringUtils.isEmpty(displayString)) {
46-
info.append("<pre class=\"displayString\">");
47-
info.append(displayString);
48-
info.append("</pre>");
54+
if (tsFile == null) {
55+
info.append("<pre class=\"displayString\">");
56+
info.append(displayString);
57+
info.append("</pre>");
58+
} else {
59+
IRenderer renderer = createMarkdownRenderer(tsFile);
60+
info.append(Marked.parse("```ts\n" + displayString + "```", renderer));
61+
}
4962
}
5063
if (!StringUtils.isEmpty(documentation)) {
51-
HTMLPrinter.addParagraph(info, documentation);
64+
IRenderer renderer = createMarkdownRenderer(tsFile);
65+
info.append(Marked.parse(documentation, renderer));
5266
}
5367
endPage(info);
5468
return info.toString();
5569
}
5670

71+
private static IRenderer createMarkdownRenderer(IFile file) {
72+
return file != null ? new TMHTMLRenderer(file.getFileExtension()) : new HTMLRenderer();
73+
}
74+
5775
public static String getError(String message) {
5876
StringBuffer info = new StringBuffer();
5977
ImageDescriptor descriptor = null;
@@ -66,8 +84,9 @@ public static String getError(String message) {
6684
}
6785

6886
public static void endPage(StringBuffer buffer) {
87+
ITheme theme = TMUIPlugin.getThemeManager().getDefaultTheme();
6988
HTMLPrinter.insertPageProlog(buffer, 0, colorInfoForeground, colorInfoBackround,
70-
HTMLTypeScriptPrinter.getStyleSheet());
89+
HTMLTypeScriptPrinter.getStyleSheet() + theme.toCSSStyleSheet());
7190
HTMLPrinter.addPageEpilog(buffer);
7291
}
7392

@@ -171,7 +190,8 @@ public static void startPage(StringBuffer buf, String title, ImageDescriptor des
171190
// $NON-NLS-1$
172191
// $NON-NLS-1$
173192
// $NON-NLS-1$
174-
//$NON-NLS-1$ //$NON-NLS-3$
193+
// $NON-NLS-1$
194+
// //$NON-NLS-3$
175195
buf.append("<span ").append(tooltip).append("style=\"").append(imageStyle). //$NON-NLS-1$ //$NON-NLS-2$
176196
append("filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='").append(imageSrcPath) //$NON-NLS-1$
177197
.append("')\"></span>\n"); //$NON-NLS-1$

0 commit comments

Comments
 (0)