@Override
    public Hover onTag(IHoverRequest request, CancelChecker cancelChecker) throws Exception {
        if (!VespaExtension.match(request.getXMLDocument()))
            return null;

        if (request.getCurrentTag() == null) return null;

        DOMNode iterator = request.getNode();

        List<String> nodePath = new LinkedList<>();
        while (iterator != null) {
            nodePath.add(0, iterator.getNodeName());
            iterator = iterator.getParentNode();
        }

        Optional<MarkupContent> content = getFileHover(request.getCurrentTag(), nodePath);

        if (content.isEmpty()) return null;

        return new Hover(content.get(), request.getHoverRange());
    }
TODO: refactor and handle tags with the same name based on context.
integration/schema-language-server/lemminx-vespa/src/main/java/ai/vespa/lemminx/participants/HoverParticipant.java