private static void setMeta(CompletionItem item, BTypeSymbol bSymbol) { if (bSymbol == null) { item.setKind(CompletionItemKind.Class); return; } //Or, else if (bSymbol instanceof BPackageSymbol) { // package item.setKind(CompletionItemKind.Module); } else if (bSymbol.kind != null) { // class / objects item.setKind(CompletionItemKind.Class); } else if (bSymbol.type instanceof BFiniteType || bSymbol.type instanceof BUnionType) { // enums item.setKind(CompletionItemKind.Enum); } else if (bSymbol.pkgID.orgName.equals(Names.BUILTIN_ORG) && bSymbol.pkgID.name.equals(Names.BUILTIN_PACKAGE)) { // keyword item.setKind(CompletionItemKind.Keyword); } else { // default item.setKind(CompletionItemKind.Unit); } if (bSymbol.markdownDocumentation != null) { item.setDocumentation(bSymbol.markdownDocumentation.description); } } }
private static void setMeta(CompletionItem item, BVarSymbol bSymbol) { if (bSymbol == null) { item.setKind(CompletionItemKind.Variable); return; } //Or, else if ((bSymbol.flags & Flags.FINAL) == Flags.FINAL) { if (bSymbol.type.tsymbol != null && TypeKind.STRING.typeName().equals(bSymbol.type.tsymbol.name.value)) { // string final item.setKind(CompletionItemKind.Text); } else { // non-string final item.setKind(CompletionItemKind.Unit); } } else { // variables item.setKind(CompletionItemKind.Variable); } if (bSymbol.markdownDocumentation != null) { item.setDocumentation(bSymbol.markdownDocumentation.description); } } }
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 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); } }
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 populateTrueFalseKeywords(List<CompletionItem> completionItems) { CompletionItem trueItem = new CompletionItem(); trueItem.setLabel(ItemResolverConstants.TRUE_KEYWORD); trueItem.setInsertText(ItemResolverConstants.TRUE_KEYWORD); trueItem.setDetail(ItemResolverConstants.KEYWORD_TYPE); trueItem.setKind(CompletionItemKind.Value); completionItems.add(trueItem); CompletionItem falseItem = new CompletionItem(); falseItem.setLabel(ItemResolverConstants.FALSE_KEYWORD); falseItem.setInsertText(ItemResolverConstants.FALSE_KEYWORD); falseItem.setDetail(ItemResolverConstants.KEYWORD_TYPE); trueItem.setKind(CompletionItemKind.Value); completionItems.add(falseItem); } }
/** * Get completion items list for struct fields. * * @param structFields List of struct fields * @return {@link List} List of completion items for the struct fields */ public static List<CompletionItem> getStructFieldCompletionItems(List<BField> structFields) { List<CompletionItem> completionItems = new ArrayList<>(); structFields.forEach(bStructField -> { StringBuilder insertText = new StringBuilder(bStructField.getName().getValue() + ": "); if (bStructField.getType() instanceof BStructureType) { insertText.append("{").append(LINE_SEPARATOR).append("\t${1}").append(LINE_SEPARATOR).append("}"); } else { insertText.append("${1:").append(getDefaultValueForType(bStructField.getType())).append("}"); } CompletionItem fieldItem = new CompletionItem(); fieldItem.setInsertText(insertText.toString()); fieldItem.setInsertTextFormat(InsertTextFormat.Snippet); fieldItem.setLabel(bStructField.getName().getValue()); fieldItem.setDetail(ItemResolverConstants.FIELD_TYPE); fieldItem.setKind(CompletionItemKind.Field); fieldItem.setSortText(Priority.PRIORITY120.toString()); completionItems.add(fieldItem); }); return completionItems; }
private static CompletionItem getImportCompletion(String label, String insertText) { CompletionItem item = new CompletionItem(); item.setLabel(label); item.setInsertText(insertText); item.setKind(CompletionItemKind.Module); item.setDetail(ItemResolverConstants.PACKAGE_TYPE); return item; } }
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; } }
/** * Populate a completion item with the given data and return it. * * @param insertText insert text * @param type type of the completion item * @param label completion item label * @return {@link CompletionItem} Populated Completion Item */ private CompletionItem populateCompletionItem(String insertText, String type, String label) { CompletionItem completionItem = new CompletionItem(); completionItem.setInsertText(insertText); completionItem.setDetail(type); completionItem.setLabel(label); completionItem.setKind(CompletionItemKind.Keyword); return completionItem; } }
/** * Get the completion item to fill all the struct fields. * * @param fields List of struct fields * @return {@link CompletionItem} Completion Item to fill all the options */ public static CompletionItem getFillAllStructFieldsItem(List<BField> fields) { List<String> fieldEntries = new ArrayList<>(); fields.forEach(bStructField -> { String defaultFieldEntry = bStructField.getName().getValue() + UtilSymbolKeys.PKG_DELIMITER_KEYWORD + " " + getDefaultValueForType(bStructField.getType()); fieldEntries.add(defaultFieldEntry); }); String insertText = String.join(("," + LINE_SEPARATOR), fieldEntries); String label = "Add All Attributes"; CompletionItem completionItem = new CompletionItem(); completionItem.setLabel(label); completionItem.setInsertText(insertText); completionItem.setDetail(ItemResolverConstants.NONE); completionItem.setKind(CompletionItemKind.Property); completionItem.setSortText(Priority.PRIORITY110.toString()); return completionItem; }
item.setInsertText(CommonUtil.getLastItem(bLangImportPackage.getPackageName()).value); item.setDetail(ItemResolverConstants.PACKAGE_TYPE); item.setKind(CompletionItemKind.Module); populatedList.add(orgName + "/" + pkgName); return item; item.setInsertText(name); item.setDetail(ItemResolverConstants.PACKAGE_TYPE); item.setKind(CompletionItemKind.Module); item.setAdditionalTextEdits(CommonUtil.getAutoImportTextEdits(ctx, orgName, name)); completionItems.add(item);
/** * Create a given completionItem's insert text. * * @param completionItem CompletionItem to modify * @param isSnippetSupported Whether snippet is expected or plain text expected * @return modified Completion Item */ public CompletionItem build(CompletionItem completionItem, boolean isSnippetSupported) { if (isSnippetSupported) { completionItem.setInsertText(this.snippet); completionItem.setInsertTextFormat(InsertTextFormat.Snippet); } else { completionItem.setInsertText(getPlainTextSnippet()); completionItem.setInsertTextFormat(InsertTextFormat.PlainText); } if (!label.isEmpty()) { completionItem.setLabel(label); } if (!detail.isEmpty()) { completionItem.setDetail(detail); } completionItem.setKind(getKind()); return completionItem; }
memberItem.setDetail(ItemResolverConstants.SNIPPET_TYPE); memberItem.setInsertText(entry.getValue()); memberItem.setKind(CompletionItemKind.Snippet); memberItem.setInsertTextFormat(InsertTextFormat.Snippet); memberItem.setSortText(Priority.PRIORITY130.toString()); allFillerItem.setLabel(matchSnippet + bType.toString()); allFillerItem.setDetail(ItemResolverConstants.SNIPPET_TYPE); allFillerItem.setKind(CompletionItemKind.Snippet); allFillerItem.setInsertTextFormat(InsertTextFormat.Snippet); allFillerItem.setSortText(Priority.PRIORITY110.toString()); anyFillerItem.setLabel(matchSnippet + UtilSymbolKeys.ANY_KEYWORD_KEY); anyFillerItem.setDetail(ItemResolverConstants.SNIPPET_TYPE); anyFillerItem.setKind(CompletionItemKind.Snippet); anyFillerItem.setInsertTextFormat(InsertTextFormat.Snippet); anyFillerItem.setSortText(Priority.PRIORITY120.toString());
annotationItem.setInsertTextFormat(InsertTextFormat.Snippet); annotationItem.setDetail(ItemResolverConstants.ANNOTATION_TYPE); annotationItem.setKind(CompletionItemKind.Property); String relativePath = ctx.get(DocumentServiceKeys.RELATIVE_FILE_PATH_KEY); BLangPackage pkg = ctx.get(DocumentServiceKeys.CURRENT_BLANG_PACKAGE_CONTEXT_KEY);
/** * Get the Ballerina Constant Completion Item. * * @param symbolInfo symbol information * @param context Language Server Operation Context * @return {@link CompletionItem} completion item */ private CompletionItem getBallerinaConstantCompletionItem(SymbolInfo symbolInfo, LSContext context) { BSymbol bSymbol = symbolInfo.getScopeEntry().symbol; if (!(bSymbol instanceof BConstantSymbol)) { return null; } CompletionItem completionItem = new CompletionItem(); completionItem.setLabel(bSymbol.getName().getValue()); completionItem.setInsertText(bSymbol.getName().getValue()); completionItem.setDetail(CommonUtil.getBTypeName(((BConstantSymbol) bSymbol).literalValueType, context)); completionItem.setDocumentation(ItemResolverConstants.CONSTANT_TYPE); completionItem.setKind(CompletionItemKind.Variable); return completionItem; } }
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; }
@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(); }