Render hover messages according to LSP specification. (#2856)
If the hover message consists of multiple MarkedStrings then they should be joined via double newline, so they are rendered as seperate Markdown paragraphs. If a MarkedString has the `language` property provided then it should be rendered as a Markdown code block. Signed-off-by: Kaloyan Raev <kaloyan.r@zend.com>6.19.x
parent
ebe8ed9fac
commit
cc5fe6e62f
|
|
@ -10,13 +10,12 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.che.plugin.languageserver.ide.hover;
|
||||
|
||||
import com.google.common.base.Joiner;
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.Singleton;
|
||||
|
||||
import org.eclipse.che.api.languageserver.shared.lsapi.HoverDTO;
|
||||
import org.eclipse.che.api.languageserver.shared.lsapi.MarkedStringDTO;
|
||||
import org.eclipse.che.api.languageserver.shared.lsapi.PositionDTO;
|
||||
import org.eclipse.che.api.languageserver.shared.lsapi.TextDocumentIdentifierDTO;
|
||||
import org.eclipse.che.api.languageserver.shared.lsapi.TextDocumentPositionParamsDTO;
|
||||
import org.eclipse.che.api.promises.client.Function;
|
||||
import org.eclipse.che.api.promises.client.FunctionException;
|
||||
|
|
@ -34,6 +33,11 @@ import org.eclipse.che.plugin.languageserver.ide.editor.LanguageServerEditorConf
|
|||
import org.eclipse.che.plugin.languageserver.ide.service.TextDocumentServiceClient;
|
||||
import org.eclipse.che.plugin.languageserver.ide.util.DtoBuildHelper;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import io.typefox.lsapi.MarkedString;
|
||||
|
||||
/**
|
||||
* Provides hover LS functionality for Orion editor.
|
||||
*
|
||||
|
|
@ -80,11 +84,7 @@ public class HoverProvider implements OrionHoverHandler {
|
|||
public OrionHoverOverlay apply(HoverDTO arg) throws FunctionException {
|
||||
OrionHoverOverlay hover = OrionHoverOverlay.create();
|
||||
hover.setType("markdown");
|
||||
StringBuilder b = new StringBuilder();
|
||||
for (MarkedStringDTO dto : arg.getContents()) {
|
||||
b.append(dto.getValue());
|
||||
}
|
||||
String content = b.toString();
|
||||
String content = renderContent(arg);
|
||||
//do not show hover with only white spaces
|
||||
if (StringUtils.isNullOrWhitespace(content)) {
|
||||
return null;
|
||||
|
|
@ -93,6 +93,21 @@ public class HoverProvider implements OrionHoverHandler {
|
|||
|
||||
return hover;
|
||||
}
|
||||
|
||||
private String renderContent(HoverDTO hover) {
|
||||
List<String> contents = new ArrayList<String>();
|
||||
for (MarkedStringDTO dto : hover.getContents()) {
|
||||
String lang = dto.getLanguage();
|
||||
if (lang == null || MarkedString.PLAIN_STRING.equals(lang)) {
|
||||
// plain markdown text
|
||||
contents.add(dto.getValue());
|
||||
} else {
|
||||
// markdown code block
|
||||
contents.add("```" + lang + "\n" + dto.getValue() + "\n```");
|
||||
}
|
||||
}
|
||||
return Joiner.on("\n\n").join(contents);
|
||||
}
|
||||
});
|
||||
return (JsPromise<OrionHoverOverlay>)then;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue