forked from eclipse/lemminx
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Collect model documentation for completion items in the resolve step Fixes eclipse#616, redhat-developer/vscode-xml#679 Signed-off-by: David Thompson <[email protected]>
- Loading branch information
Showing
51 changed files
with
1,099 additions
and
323 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
51 changes: 51 additions & 0 deletions
51
...lemminx/extensions/contentmodel/participants/completion/AbstractCMCompletionResolver.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
package org.eclipse.lemminx.extensions.contentmodel.participants.completion; | ||
|
||
import org.eclipse.lemminx.dom.DOMAttr; | ||
import org.eclipse.lemminx.dom.DOMDocument; | ||
import org.eclipse.lemminx.dom.DOMElement; | ||
import org.eclipse.lemminx.dom.DOMNode; | ||
import org.eclipse.lemminx.services.extensions.completion.ICompletionItemResolveParticipant; | ||
import org.eclipse.lemminx.services.extensions.completion.ICompletionItemResolverRequest; | ||
import org.eclipse.lsp4j.CompletionItem; | ||
import org.eclipse.lsp4j.jsonrpc.CancelChecker; | ||
|
||
public abstract class AbstractCMCompletionResolver implements ICompletionItemResolveParticipant { | ||
|
||
public static final String OFFSET_KEY = "OFFSET"; | ||
|
||
@Override | ||
public CompletionItem resolveCompletionItem(ICompletionItemResolverRequest request, CancelChecker cancelChecker) { | ||
CompletionItem toResolve = request.getUnresolved(); | ||
|
||
DOMDocument document = request.getDocument(); | ||
|
||
Integer offset = request.getDataPropertyAsInt(OFFSET_KEY); | ||
if (document == null || offset == null) { | ||
return toResolve; | ||
} | ||
|
||
DOMAttr attr = document.findAttrAt(offset); | ||
|
||
DOMNode parentNode = document.findNodeAt(offset); | ||
if (parentNode == null || !parentNode.isElement()) { | ||
return toResolve; | ||
} | ||
DOMElement parentElement = (DOMElement) parentNode; | ||
|
||
addDocumentationToCompletion(request, toResolve, parentElement, attr); | ||
return toResolve; | ||
} | ||
|
||
/** | ||
* Add the documentation from the xml model to the given completion request. | ||
* | ||
* @param request the completion resolve request | ||
* @param toResolve the unresolved completion item to resolve | ||
* @param parentElement the parent element to where completion was opened on | ||
* @param attr the attribute that completion was opened on, may be null | ||
*/ | ||
abstract void addDocumentationToCompletion(ICompletionItemResolverRequest request, | ||
CompletionItem toResolve, | ||
DOMElement parentElement, DOMAttr attr); | ||
|
||
} |
54 changes: 54 additions & 0 deletions
54
...minx/extensions/contentmodel/participants/completion/AttributeNameCompletionResolver.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
package org.eclipse.lemminx.extensions.contentmodel.participants.completion; | ||
|
||
import java.util.Collection; | ||
|
||
import org.eclipse.lemminx.dom.DOMAttr; | ||
import org.eclipse.lemminx.dom.DOMElement; | ||
import org.eclipse.lemminx.extensions.contentmodel.model.CMAttributeDeclaration; | ||
import org.eclipse.lemminx.extensions.contentmodel.model.CMDocument; | ||
import org.eclipse.lemminx.extensions.contentmodel.model.CMElementDeclaration; | ||
import org.eclipse.lemminx.extensions.contentmodel.model.ContentModelManager; | ||
import org.eclipse.lemminx.extensions.contentmodel.utils.XMLGenerator; | ||
import org.eclipse.lemminx.services.extensions.completion.ICompletionItemResolverRequest; | ||
import org.eclipse.lemminx.uriresolver.CacheResourceDownloadingException; | ||
import org.eclipse.lsp4j.CompletionItem; | ||
import org.eclipse.lsp4j.MarkupContent; | ||
|
||
public class AttributeNameCompletionResolver extends AbstractCMCompletionResolver { | ||
|
||
public static final String PARTICIPANT_ID = AttributeNameCompletionResolver.class.getName(); | ||
|
||
@Override | ||
void addDocumentationToCompletion(ICompletionItemResolverRequest request, CompletionItem toResolve, | ||
DOMElement parentElement, DOMAttr attr) { | ||
String attributeName = request.getUnresolved().getFilterText(); | ||
try { | ||
ContentModelManager contentModelManager = request.getComponent(ContentModelManager.class); | ||
Collection<CMDocument> cmDocuments = contentModelManager.findCMDocument(parentElement); | ||
for (CMDocument cmDocument : cmDocuments) { | ||
CMElementDeclaration cmElement = cmDocument.findCMElement(parentElement, | ||
parentElement.getNamespaceURI()); | ||
if (cmElement != null) { | ||
MarkupContent documentation = getDocumentationForAttributeValue(cmElement, attributeName, request); | ||
if (documentation != null) { | ||
toResolve.setDocumentation(documentation); | ||
return; | ||
} | ||
} | ||
} | ||
} catch (CacheResourceDownloadingException e) { | ||
} | ||
|
||
} | ||
|
||
private MarkupContent getDocumentationForAttributeValue(CMElementDeclaration cmElement, String attributeName, | ||
ICompletionItemResolverRequest request) { | ||
CMAttributeDeclaration cmAttribute = cmElement.findCMAttribute(attributeName); | ||
if (cmAttribute != null) { | ||
return XMLGenerator.createMarkupContent(cmAttribute, cmElement, | ||
request); | ||
} | ||
return null; | ||
} | ||
|
||
} |
Oops, something went wrong.