package org.jetbrains.plugins.clojure.documentation; import com.intellij.codeInsight.javadoc.JavaDocUtil; import com.intellij.lang.documentation.DocumentationProvider; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiManager; import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.clojure.psi.ClojurePsiElement; import org.jetbrains.plugins.clojure.psi.api.defs.ClDef; import org.jetbrains.plugins.clojure.psi.api.symbols.ClSymbol; import java.util.List; /** * @author ilyas */ public class ClojureDocumentationProvider implements DocumentationProvider { public String getQuickNavigateInfo(PsiElement element, PsiElement originalElement) { if (element instanceof ClDef) { ClDef def = (ClDef) element; return def.getPresentationText(); } if (element instanceof ClSymbol) { ClSymbol symbol = (ClSymbol) element; return symbol.getNameString(); } return null; } public String generateDoc(PsiElement element, PsiElement originalElement) { final String str = getDocString(element); if (str == null) return null; /* final StringBuffer buffer = new StringBuffer(); final Iterable<String> lines = StringUtil.tokenize(str, "\n\n"); for (String line : lines) { final Iterable<String> words = StringUtil.tokenize(line, " \t\f"); buffer.append(StringUtil.join(words, new Function<String, String>() { public String fun(String s) { if (s != null && s.startsWith(":")) return "<b>" + s + "</b>"; return s; } }, " ")).append("<br/><br/>"); }*/ // return buffer.toString(); return "<pre>" + str + "</pre>"; } @Nullable private static String getDocString(PsiElement element) { if (element instanceof ClDef) { ClDef def = (ClDef) element; return def.getDocString(); } if (element instanceof ClSymbol && element.getParent() instanceof ClDef) { final ClDef def = (ClDef) element.getParent(); if (def.getNameSymbol() == element) { return def.getDocString(); } } return null; } public PsiElement getDocumentationElementForLookupItem(PsiManager psiManager, Object object, PsiElement element) { if (object instanceof ClojurePsiElement) { return ((ClojurePsiElement) object); } return null; } public PsiElement getDocumentationElementForLink(PsiManager psiManager, String link, PsiElement context) { return JavaDocUtil.findReferenceTarget(psiManager, link, context); } public List<String> getUrlFor(PsiElement element, PsiElement originalElement) { return null; } }