private CompletionItem getMatchFieldSnippetCompletion(String snippet, String label) { CompletionItem completionItem = new CompletionItem(); completionItem.setInsertText(snippet); completionItem.setLabel(label); completionItem.setInsertTextFormat(InsertTextFormat.Snippet); completionItem.setDetail(ItemResolverConstants.SNIPPET_TYPE); completionItem.setKind(CompletionItemKind.Snippet); return completionItem; } }
private static CompletionItem createExpandedAbbr(String abbr, Range abbreviationRange, String abbreviation, String syntax, String filter, ExpandOptions expandOptions) { String expandedText = null; try { expandedText = expand(abbr, expandOptions); } catch (Exception e) { } if (expandedText != null && isExpandedTextNoise(syntax, abbr, expandedText)) { expandedText = ""; } if (expandedText != null) { CompletionItem expandedAbbr = new CompletionItem(abbr); expandedAbbr.setTextEdit( new TextEdit(abbreviationRange, escapeNonTabStopDollar(addFinalTabStop(expandedText)))); expandedAbbr.setDocumentation(replaceTabStopsWithCursors(expandedText)); expandedAbbr.setInsertTextFormat(InsertTextFormat.Snippet); expandedAbbr.setDetail("Emmet Abbreviation"); expandedAbbr.setLabel(abbreviation + (filter != null ? "|" + filter.replaceAll(",", "|") : "")); return expandedAbbr; } return null; }
/** * Sort Completion Items based on a particular criteria. * * @param ctx Completion context * @param completionItems List of initial completion items */ @Override public void sortItems(LSServiceOperationContext ctx, List<CompletionItem> completionItems) { this.setPriorities(completionItems); completionItems.forEach(completionItem -> { String detail = completionItem.getDetail(); String label = completionItem.getLabel(); if (detail.equals(ItemResolverConstants.FUNCTION_TYPE)) { String signature = completionItem.getLabel(); String returnType = signature .substring(signature.lastIndexOf(OPEN_BRACKET), signature.lastIndexOf(CLOSE_BRACKET)).trim(); if (returnType.endsWith(ItemResolverConstants.BOOLEAN_TYPE)) { completionItem.setSortText(Priority.shiftPriority(completionItem.getSortText(), -1)); } } else if (detail.equals(ItemResolverConstants.BOOLEAN_TYPE)) { completionItem.setSortText(Priority.shiftPriority(completionItem.getSortText(), -1)); } else if (ItemResolverConstants.TRUE_KEYWORD.equals(label) || ItemResolverConstants.FALSE_KEYWORD.equals(label)) { completionItem.setSortText(Priority.PRIORITY110.toString()); } }); } }
private String sortKey(CompletionItem item) { String k = item.getSortText(); if (k==null) { k = item.getLabel(); } return k; } });
private static void setMeta(CompletionItem item, BInvokableSymbol bSymbol) { item.setInsertTextFormat(InsertTextFormat.Snippet); item.setDetail(ItemResolverConstants.FUNCTION_TYPE); item.setKind(CompletionItemKind.Function); if (bSymbol != null && bSymbol.markdownDocumentation != null) { item.setDocumentation(bSymbol.markdownDocumentation.description); } }
protected CompletionItem toCompletionItem(final ContentAssistEntry entry, final int caretOffset, final Position caretPosition, final Document document) { final CompletionItem completionItem = new CompletionItem(); String _elvis = null; String _label = entry.getLabel(); completionItem.setLabel(_elvis); completionItem.setDetail(entry.getDescription()); completionItem.setDocumentation(entry.getDocumentation()); String _elvis_1 = null; String _prefix = entry.getPrefix(); String _proposal_1 = entry.getProposal(); TextEdit _textEdit = new TextEdit(_range, _proposal_1); completionItem.setTextEdit(_textEdit); completionItem.setKind(this.translateKind(entry)); boolean _isEmpty = entry.getTextReplacements().isEmpty(); boolean _not = (!_isEmpty); if (_not) { List<TextEdit> _additionalTextEdits = completionItem.getAdditionalTextEdits(); boolean _tripleEquals = (_additionalTextEdits == null); if (_tripleEquals) { int _size = entry.getTextReplacements().size(); ArrayList<TextEdit> _arrayList = new ArrayList<TextEdit>(_size); completionItem.setAdditionalTextEdits(_arrayList); List<TextEdit> _additionalTextEdits_1 = completionItem.getAdditionalTextEdits(); TextEdit _textEdit_1 = this.toTextEdit(it, document); _additionalTextEdits_1.add(_textEdit_1); boolean _equals = Objects.equal(_kind, ContentAssistEntry.KIND_SNIPPET);
final CompletionItem ci = new CompletionItem(); Range range = JDTUtils.toRange(unit, offset, 0); boolean isSnippetSupported = JavaLanguageServerPlugin.getPreferencesManager().getClientPreferences().isCompletionSnippetsSupported(); String replacement = prepareTemplate(buf.toString(), lineDelimiter, isSnippetSupported); ci.setTextEdit(new TextEdit(range, replacement)); ci.setFilterText(JAVA_DOC_COMMENT); ci.setLabel(JAVA_DOC_COMMENT); ci.setSortText(SortTextHelper.convertRelevance(0)); ci.setKind(CompletionItemKind.Snippet); ci.setInsertTextFormat(isSnippetSupported ? InsertTextFormat.Snippet : InsertTextFormat.PlainText); String documentation = prepareTemplate(buf.toString(), lineDelimiter, false); if (documentation.indexOf(lineDelimiter) == 0) { documentation = documentation.replaceFirst(lineDelimiter, ""); ci.setDocumentation(documentation); Map<String, String> data = new HashMap<>(3); data.put(CompletionResolveHandler.DATA_FIELD_URI, JDTUtils.toURI(cu)); data.put(CompletionResolveHandler.DATA_FIELD_REQUEST_ID, "0"); data.put(CompletionResolveHandler.DATA_FIELD_PROPOSAL_ID, "0"); ci.setData(data); result.add(ci); } catch (BadLocationException excp) {
private CompletionItem adaptItem(TextDocument doc, ICompletionProposal completion, SortKeys sortkeys) throws Exception { CompletionItem item = new CompletionItem(); item.setLabel(completion.getLabel()); item.setKind(completion.getKind()); item.setSortText(sortkeys.next()); item.setFilterText(completion.getFilterText()); item.setDetail(completion.getDetail()); if (completion.isDeprecated()) { item.setDeprecated(completion.isDeprecated()); } resolveEdits(doc, completion, item); //Warning. Its not allowed by LSP spec to resolveEdits //lazy as we used to do in the past. if (resolver!=null) { item.setData(resolver.resolveLater(completion, doc)); } else { resolveItem(doc, completion, item); } return item; }
public CompletionItemDto(org.eclipse.lsp4j.CompletionItem o) { if (o.getDeprecated() == null) { setDeprecated((java.lang.Boolean)null); } else { java.lang.Boolean deprecatedVal = (java.lang.Boolean)makeDto(o.getDeprecated());; setDeprecated((java.lang.Boolean)deprecatedVal); if (o.getData() == null) { setData((java.lang.Object)null); } else { java.lang.Object dataVal = (java.lang.Object)makeDto(o.getData());; setData((java.lang.Object)dataVal); if (o.getCommand() == null) { setCommand((org.eclipse.lsp4j.Command)null); } else { org.eclipse.lsp4j.Command commandVal = new CommandDto(o.getCommand()); setCommand((org.eclipse.lsp4j.Command)commandVal); if (o.getKind() == null) { setKind((org.eclipse.lsp4j.CompletionItemKind)null); } else { org.eclipse.lsp4j.CompletionItemKind kindVal = (org.eclipse.lsp4j.CompletionItemKind)makeDto(o.getKind());; setKind((org.eclipse.lsp4j.CompletionItemKind)kindVal); if (o.getDocumentation() == null) { setDocumentation((org.eclipse.lsp4j.jsonrpc.messages.Either<java.lang.String, org.eclipse.lsp4j.MarkupContent>)null); } else { org.eclipse.lsp4j.jsonrpc.messages.Either<java.lang.String, org.eclipse.lsp4j.MarkupContent> documentationVal; if (o.getDocumentation().getLeft() != null) {
@Test public void testRequest() throws Exception { CompletionParams p = new CompletionParams(); p.setPosition(new Position(1,1)); p.setTextDocument(new TextDocumentIdentifier("test/foo.txt")); CompletionList result = new CompletionList(); result.setIsIncomplete(true); result.setItems(new ArrayList<>()); CompletionItem item = new CompletionItem(); item.setDetail("test"); item.setDocumentation("doc"); item.setFilterText("filter"); item.setInsertText("insert"); item.setKind(CompletionItemKind.Field); result.getItems().add(item); server.expectedRequests.put("textDocument/completion", new Pair<>(p, result)); CompletableFuture<Either<List<CompletionItem>, CompletionList>> future = clientLauncher.getRemoteProxy().getTextDocumentService().completion(p); Assert.assertEquals(Either.forRight(result).toString(), future.get(TIMEOUT, TimeUnit.MILLISECONDS).toString()); client.joinOnEmpty(); }
private static CompletionItem getInterfaceSnippet(ICompilationUnit cu, CompletionContext completionContext, boolean needsPublic, IProgressMonitor monitor) { if (!accept(cu, completionContext, false)) { return null; } if (monitor.isCanceled()) { return null; } final CompletionItem interfaceSnippetItem = new CompletionItem(); interfaceSnippetItem.setFilterText(INTERFACE_SNIPPET_LABEL); interfaceSnippetItem.setLabel(INTERFACE_SNIPPET_LABEL); interfaceSnippetItem.setSortText(SortTextHelper.convertRelevance(0)); try { if (needsPublic) { interfaceSnippetItem.setInsertText(getSnippetContent(cu, CodeGenerationTemplate.INTERFACESNIPPET_PUBLIC, cu.findRecommendedLineSeparator(), true)); } else { interfaceSnippetItem.setInsertText(getSnippetContent(cu, CodeGenerationTemplate.INTERFACESNIPPET_DEFAULT, cu.findRecommendedLineSeparator(), true)); } setFields(interfaceSnippetItem, cu); } catch (CoreException e) { JavaLanguageServerPlugin.log(e.getStatus()); return null; } return interfaceSnippetItem; }
private void fillInitializerSignature(List<CompletionItem> completionItems, boolean snippetCapability) { CompletionItem constructorItem = new CompletionItem(); Snippet.DEF_NEW_OBJECT_INITIALIZER.get().build(constructorItem, snippetCapability); completionItems.add(constructorItem); }
private static void setFields(CompletionItem ci, ICompilationUnit cu) { ci.setKind(CompletionItemKind.Snippet); ci.setInsertTextFormat(InsertTextFormat.Snippet); ci.setDocumentation(ci.getInsertText()); Map<String, String> data = new HashMap<>(3); data.put(CompletionResolveHandler.DATA_FIELD_URI, JDTUtils.toURI(cu)); data.put(CompletionResolveHandler.DATA_FIELD_REQUEST_ID, "0"); data.put(CompletionResolveHandler.DATA_FIELD_PROPOSAL_ID, "0"); ci.setData(data); }
private void createAnonymousTypeLabel(CompletionProposal proposal, CompletionItem item) { char[] declaringTypeSignature= proposal.getDeclarationSignature(); declaringTypeSignature= Signature.getTypeErasure(declaringTypeSignature); String name = new String(Signature.getSignatureSimpleName(declaringTypeSignature)); item.setInsertText(name); StringBuilder buf= new StringBuilder(); buf.append(name); buf.append('('); appendUnboundedParameterList(buf, proposal); buf.append(')'); buf.append(" "); //$NON-NLS-1$ buf.append("Anonymous Inner Type"); //TODO: consider externalization item.setLabel(buf.toString()); if (proposal.getRequiredProposals() != null) { char[] signatureQualifier= Signature.getSignatureQualifier(declaringTypeSignature); if (signatureQualifier.length > 0) { item.setDetail(String.valueOf(signatureQualifier)); } } setDeclarationSignature(item, String.valueOf(declaringTypeSignature)); }
private void resolveEdits(TextDocument doc, ICompletionProposal completion, CompletionItem item) { Optional<TextEdit> mainEdit = adaptEdits(doc, completion.getTextEdit()); if (mainEdit.isPresent()) { item.setTextEdit(mainEdit.get()); item.setInsertTextFormat(completion.getInsertTextFormat()); } else { item.setInsertText(""); } completion.getAdditionalEdit().ifPresent(edit -> { adaptEdits(doc, edit).ifPresent(extraEdit -> { item.setAdditionalTextEdits(ImmutableList.of(extraEdit)); }); }); }
/** * Creates and returns a completion item. * * @param bSymbol BSymbol or null * @param label label * @param insertText insert text * @return {@link CompletionItem} */ public static CompletionItem build(BInvokableSymbol bSymbol, String label, String insertText) { CompletionItem item = new CompletionItem(); item.setLabel(label); item.setInsertText(insertText); setMeta(item, bSymbol); return item; }
public CompletionItem toCompletionItem(CompletionProposal proposal, int index) { final CompletionItem $ = new CompletionItem(); $.setKind(mapKind(proposal.getKind())); Map<String, String> data = new HashMap<>(); // append data field so that resolve request can use it. data.put(CompletionResolveHandler.DATA_FIELD_URI, JDTUtils.toURI(unit)); data.put(CompletionResolveHandler.DATA_FIELD_REQUEST_ID,String.valueOf(response.getId())); data.put(CompletionResolveHandler.DATA_FIELD_PROPOSAL_ID,String.valueOf(index)); $.setData(data); this.descriptionProvider.updateDescription(proposal, $); $.setSortText(SortTextHelper.computeSortText(proposal)); return $; }
public static CompletionList createCompletionListFromSymbols(Set<SymbolInformation> symbols) { if (symbols == null) { return new CompletionList(); } return new CompletionList( false, symbols.stream() .map(symbol -> { CompletionItem item = new CompletionItem(symbol.getName()); item.setKind(symbolKindToCompletionItemKind(symbol.getKind())); return item; }) .collect(Collectors.toList())); }
private void createOverrideMethodProposalLabel(CompletionProposal methodProposal, CompletionItem item) { StringBuilder nameBuffer= new StringBuilder(); // method name String name = new String(methodProposal.getName()); item.setInsertText(name); nameBuffer.append(name); // parameters nameBuffer.append('('); appendUnboundedParameterList(nameBuffer, methodProposal); nameBuffer.append(')'); nameBuffer.append(RETURN_TYPE_SEPARATOR); // return type // TODO remove SignatureUtil.fix83600 call when bugs are fixed char[] returnType= createTypeDisplayName(SignatureUtil.getUpperBound(Signature.getReturnType(SignatureUtil.fix83600(methodProposal.getSignature())))); nameBuffer.append(returnType); item.setLabel(nameBuffer.toString()); item.setFilterText(name); // declaring type StringBuilder typeBuffer = new StringBuilder(); String declaringType= extractDeclaringTypeFQN(methodProposal); declaringType= Signature.getSimpleName(declaringType); typeBuffer.append(String.format("Override method in '%s'", declaringType)); item.setDetail(typeBuffer.toString()); setSignature(item, String.valueOf(methodProposal.getSignature())); setDeclarationSignature(item, String.valueOf(methodProposal.getDeclarationSignature())); setName(item, String.valueOf(methodProposal.getName())); }
private void createJavadocTypeProposalLabel(char[] fullName, CompletionItem item) { // only display innermost type name as type name, using any // enclosing types as qualification int qIndex= findSimpleNameStart(fullName); StringBuilder nameBuffer= new StringBuilder(); String name = new String(fullName, qIndex, fullName.length - qIndex); nameBuffer.append("{@link "); //$NON-NLS-1$ nameBuffer.append(name); nameBuffer.append('}'); item.setLabel(nameBuffer.toString()); item.setFilterText(name); if (qIndex > 0) { item.setDetail(new String(fullName, 0, qIndex - 1)); } }