Skip to content

Commit 282945b

Browse files
kaloyan-raevVitalii Parfonov
authored andcommitted
CHE-3218: improves the documentation popup for LSP code completion (eclipse-che#3224)
Signed-off-by: Kaloyan Raev <kaloyan.r@zend.com>
1 parent 64625bc commit 282945b

2 files changed

Lines changed: 25 additions & 28 deletions

File tree

plugins/plugin-languageserver/che-plugin-languageserver-ide/src/main/java/org/eclipse/che/plugin/languageserver/ide/editor/codeassist/CompletionItemBasedCompletionProposal.java

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,10 @@
1313
import io.typefox.lsapi.ServerCapabilities;
1414

1515
import com.google.gwt.dom.client.Style;
16+
import com.google.gwt.dom.client.Style.Overflow;
1617
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
1718
import com.google.gwt.user.client.rpc.AsyncCallback;
18-
import com.google.gwt.user.client.ui.Label;
19+
import com.google.gwt.user.client.ui.HTML;
1920
import com.google.gwt.user.client.ui.Widget;
2021

2122
import org.eclipse.che.api.languageserver.shared.lsapi.CompletionItemDTO;
@@ -37,6 +38,8 @@
3738

3839
import java.util.List;
3940

41+
import static org.eclipse.che.ide.api.theme.Style.theme;
42+
4043
/**
4144
* @author Anatolii Bazko
4245
* @author Kaloyan Raev
@@ -99,12 +102,15 @@ private Widget createAdditionalInfoWidget() {
99102
documentation = "No documentation found.";
100103
}
101104

102-
Label label = new Label(documentation);
103-
label.setWordWrap(true);
104-
label.getElement().getStyle().setFontSize(13, Style.Unit.PX);
105-
label.getElement().getStyle().setMarginLeft(4, Style.Unit.PX);
106-
label.setSize("100%", "100%");
107-
return label;
105+
HTML widget = new HTML(documentation);
106+
widget.setWordWrap(true);
107+
widget.getElement().getStyle().setColor(theme.completionPopupItemTextColor());
108+
widget.getElement().getStyle().setFontSize(13, Style.Unit.PX);
109+
widget.getElement().getStyle().setMarginLeft(4, Style.Unit.PX);
110+
widget.getElement().getStyle().setOverflow(Overflow.AUTO);
111+
widget.getElement().getStyle().setProperty("userSelect", "text");
112+
widget.setHeight("100%");
113+
return widget;
108114
}
109115

110116
@Override

plugins/plugin-orion/che-plugin-orion-editor/src/main/java/org/eclipse/che/ide/editor/orion/client/ContentAssistWidget.java

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,9 @@ public void handleEvent(final Event evt) {
126126
final EventTarget target = mouseEvent.getTarget();
127127
if (target instanceof Element) {
128128
final Element elementTarget = (Element)target;
129-
if (elementTarget.equals(docPopup.getElement()) && docPopup.isVisible()) {
129+
if (docPopup.isVisible() &&
130+
(elementTarget.equals(docPopup.getElement()) ||
131+
elementTarget.getParentElement().equals(docPopup.getElement()))) {
130132
return;
131133
}
132134

@@ -219,16 +221,11 @@ public void onSuccess(Widget info) {
219221
if (info != null) {
220222
docPopup.clear();
221223
docPopup.add(info);
224+
docPopup.getElement().getStyle().setOpacity(1);
222225

223-
if (docPopup.isAttached()) {
224-
return;
226+
if (!docPopup.isAttached()) {
227+
RootPanel.get().add(docPopup);
225228
}
226-
227-
docPopup.getElement().getStyle()
228-
.setLeft(popupElement.getOffsetLeft() + popupElement.getOffsetWidth() + 3, Style.Unit.PX);
229-
docPopup.getElement().getStyle().setTop(popupElement.getOffsetTop(), Style.Unit.PX);
230-
RootPanel.get().add(docPopup);
231-
docPopup.getElement().getStyle().setOpacity(1);
232229
} else {
233230
docPopup.getElement().getStyle().setOpacity(0);
234231
}
@@ -412,7 +409,6 @@ private void select(Element element) {
412409
selectedElement = element;
413410
selectedElement.setAttribute("selected", "true");
414411

415-
docPopup.clear();
416412
showDocTimer.cancel();
417413
showDocTimer.schedule(docPopup.isAttached() ? 100 : 1500);
418414

@@ -521,7 +517,7 @@ public void show(final List<CompletionProposal> proposals) {
521517
this.popupElement.getStyle().setProperty("maxWidth", viewportWidth + caretLocation.getX() + "px");
522518
}
523519

524-
/* Don't attach handlers twice. Visible popup must already their attached. */
520+
/* Don't attach handlers twice. Visible popup must already have their attached. */
525521
if (!visible) {
526522
addPopupEventListeners();
527523
}
@@ -530,16 +526,11 @@ public void show(final List<CompletionProposal> proposals) {
530526
visible = true;
531527
focused = false;
532528

533-
if (docPopup.isAttached()) {
534-
docPopup.getElement().getStyle().setOpacity(0);
535-
new Timer() {
536-
@Override
537-
public void run() {
538-
docPopup.removeFromParent();
539-
showDocTimer.schedule(1500);
540-
}
541-
}.schedule(250);
542-
}
529+
/* Update documentation popup position */
530+
docPopup.getElement().getStyle()
531+
.setLeft(popupElement.getOffsetLeft() + popupElement.getOffsetWidth() + 3, Style.Unit.PX);
532+
docPopup.getElement().getStyle()
533+
.setTop(popupElement.getOffsetTop(), Style.Unit.PX);
543534

544535
/* Select first row. */
545536
selectFirst();

0 commit comments

Comments
 (0)