1
1
package com.github.imyuyu.sqltoy.provider
2
2
3
+ import com.github.imyuyu.sqltoy.dom.model.Sql
3
4
import com.github.imyuyu.sqltoy.util.XmlUtil
5
+ import com.intellij.codeInsight.documentation.DocumentationManagerProtocol
6
+ import com.intellij.codeInsight.documentation.DocumentationManagerUtil
4
7
import com.intellij.lang.documentation.AbstractDocumentationProvider
8
+ import com.intellij.lang.documentation.DocumentationMarkup
5
9
import com.intellij.lang.documentation.DocumentationMarkup.DEFINITION_ELEMENT
6
10
import com.intellij.openapi.util.text.HtmlBuilder
7
11
import com.intellij.openapi.util.text.HtmlChunk
8
12
import com.intellij.psi.PsiElement
13
+ import com.intellij.psi.util.PsiTreeUtil
14
+ import com.intellij.psi.util.PsiUtil
9
15
import com.intellij.psi.xml.XmlAttributeValue
16
+ import com.intellij.psi.xml.XmlTag
17
+ import com.intellij.util.xml.DomManager
10
18
11
19
12
20
class SqlIdQuickDoc : AbstractDocumentationProvider () {
@@ -29,12 +37,25 @@ class SqlIdQuickDoc : AbstractDocumentationProvider() {
29
37
30
38
val id = element.text.replace(" \" " , " " );
31
39
32
- // todo 下一步使用HtmlBuilder
40
+ // var stringBuilder = StringBuilder()
41
+ // DocumentationManagerUtil.createHyperlink(stringBuilder, element, element.toString(), "$id",true);
33
42
34
- return " <div class='definition'>" +
43
+ val sql = DomManager .getDomManager(element.project)
44
+ .getDomElement(PsiTreeUtil .getParentOfType(element, XmlTag ::class .java)) as Sql
45
+
46
+ return HtmlBuilder ().append(
47
+ HtmlChunk .div().setClass(DocumentationMarkup .CLASS_DEFINITION ).children(HtmlChunk .tag(" pre" )
48
+ .addText(" SQL ID " )
49
+ .child(HtmlChunk .link(DocumentationManagerProtocol .PSI_ELEMENT_PROTOCOL + PsiUtil .getName(element), id))
50
+ .addText(" is defined in " )
51
+ .child(HtmlChunk .link(" psi_element://" + (PsiUtil .getVirtualFile(element)?.path ? : " " ), element.containingFile.name)))
52
+ )
53
+ .append(HtmlChunk .div().setClass(DocumentationMarkup .CLASS_CONTENT ).addText(sql.getSqlValue().getValue()!! )).toString();
54
+
55
+ /* return "<div class='definition'>" +
35
56
"<pre>XML File : <a href=''>" + element.containingFile.name + "</a></pre>" +
36
57
"</div>" +
37
- " <div class='content'>SQLToy SqlId : " + id + " </div>"
58
+ "<div class='content'>SQLToy SqlId : " + id + "</div>"*/
38
59
39
60
// return "SQLToy SqlId : "+element.text
40
61
}
0 commit comments