diff --git a/org.eclipse.lemminx/src/main/java/org/eclipse/lemminx/services/XMLHover.java b/org.eclipse.lemminx/src/main/java/org/eclipse/lemminx/services/XMLHover.java index c330a0b109..0fb132a5d2 100644 --- a/org.eclipse.lemminx/src/main/java/org/eclipse/lemminx/services/XMLHover.java +++ b/org.eclipse.lemminx/src/main/java/org/eclipse/lemminx/services/XMLHover.java @@ -22,6 +22,7 @@ import org.eclipse.lemminx.dom.DOMDocument; import org.eclipse.lemminx.dom.DOMElement; import org.eclipse.lemminx.dom.DOMNode; +import org.eclipse.lemminx.dom.DOMText; import org.eclipse.lemminx.dom.parser.Scanner; import org.eclipse.lemminx.dom.parser.TokenType; import org.eclipse.lemminx.dom.parser.XMLScanner; @@ -77,6 +78,7 @@ public Hover doHover(DOMDocument xmlDocument, Position position, XMLHoverSetting if (tagRange != null) { return getTagHover(hoverRequest, tagRange, true); } + } else if (node.isAttribute()) { DOMAttr attr = (DOMAttr) node; if (attr.valueContainsOffset(offset)) { @@ -84,10 +86,35 @@ public Hover doHover(DOMDocument xmlDocument, Position position, XMLHoverSetting } // Attribute is hover return getAttrNameHover(hoverRequest, null); + } else if (node.isText()){ + DOMText text = (DOMText) node; + try { + Range textRange = new Range(xmlDocument.positionAt(text.getStart()), xmlDocument.positionAt(text.getEnd())); + return getTextHover(hoverRequest, textRange); + } catch (BadLocationException e) { + LOGGER.log(Level.SEVERE, "While creating Range in XMLHover the Scanner's Offset was a BadLocation", e); + return null; + } } return null; } + private Hover getTextHover(HoverRequest hoverRequest, Range textRange) { + hoverRequest.setTagRange(textRange); + List contentValues = new ArrayList(); + for (IHoverParticipant participant : extensionsRegistry.getHoverParticipants()) { + try { + String contentValue = participant.onTagText(hoverRequest); + if (contentValue != null) { + contentValues.add(contentValue); + } + } catch (Exception e) { + LOGGER.log(Level.SEVERE, "While performing IHoverParticipant#onTagText", e); + } + } + return createHover(contentValues, hoverRequest); + } + /** * Returns the LSP hover from the hovered element. * @@ -111,7 +138,7 @@ private Hover getTagHover(HoverRequest hoverRequest, Range tagRange, boolean ope LOGGER.log(Level.SEVERE, "While performing IHoverParticipant#onTag", e); } } - return creatHover(contentValues, hoverRequest); + return createHover(contentValues, hoverRequest); } private Range getTagNameRange(TokenType tokenType, int startOffset, int offset, DOMDocument document) { @@ -154,7 +181,7 @@ private Hover getAttrNameHover(HoverRequest hoverRequest, Range attrRange) { LOGGER.log(Level.SEVERE, "While performing IHoverParticipant#onTag", e); } } - return creatHover(contentValues, hoverRequest); + return createHover(contentValues, hoverRequest); } /** @@ -178,7 +205,7 @@ private Hover getAttrValueHover(HoverRequest hoverRequest, Range attrRange) { LOGGER.log(Level.SEVERE, "While performing IHoverParticipant#onTag", e); } } - return creatHover(contentValues, hoverRequest); + return createHover(contentValues, hoverRequest); } /** @@ -188,7 +215,7 @@ private Hover getAttrValueHover(HoverRequest hoverRequest, Range attrRange) { * @param hoverRequest the hover request. * @return the aggregated LSP hover from the value list. */ - private static Hover creatHover(List contentValues, HoverRequest hoverRequest) { + private static Hover createHover(List contentValues, HoverRequest hoverRequest) { if (!contentValues.isEmpty()) { return new Hover(MarkupContentFactory.creatMarkupContent(contentValues, hoverRequest), hoverRequest.getTagRange()); } diff --git a/org.eclipse.lemminx/src/main/java/org/eclipse/lemminx/services/extensions/HoverParticipantAdapter.java b/org.eclipse.lemminx/src/main/java/org/eclipse/lemminx/services/extensions/HoverParticipantAdapter.java index e8ce6e1343..0ba1638cf7 100644 --- a/org.eclipse.lemminx/src/main/java/org/eclipse/lemminx/services/extensions/HoverParticipantAdapter.java +++ b/org.eclipse.lemminx/src/main/java/org/eclipse/lemminx/services/extensions/HoverParticipantAdapter.java @@ -33,4 +33,9 @@ public String onAttributeValue(IHoverRequest request) throws Exception { return null; } + @Override + public String onTagText(IHoverRequest resquest) throws Exception { + return null; + } + } diff --git a/org.eclipse.lemminx/src/main/java/org/eclipse/lemminx/services/extensions/IHoverParticipant.java b/org.eclipse.lemminx/src/main/java/org/eclipse/lemminx/services/extensions/IHoverParticipant.java index 587dda8687..f8442715e4 100644 --- a/org.eclipse.lemminx/src/main/java/org/eclipse/lemminx/services/extensions/IHoverParticipant.java +++ b/org.eclipse.lemminx/src/main/java/org/eclipse/lemminx/services/extensions/IHoverParticipant.java @@ -41,5 +41,13 @@ public interface IHoverParticipant { * @return the Value of MarkupContent {@link String} */ String onAttributeValue(IHoverRequest request) throws Exception; + + /** + * onTagText method + * + * @param hoverRequest the hover request. + * @return the Value of MarkupContent {@link String} + */ + String onTagText(IHoverRequest resquest) throws Exception; }