private void createSimpleLabelWithType(CompletionProposal proposal, CompletionItem item) { StringBuilder nameBuffer= new StringBuilder(); nameBuffer.append(proposal.getCompletion()); item.setInsertText(nameBuffer.toString()); char[] typeName= Signature.getSignatureSimpleName(proposal.getSignature()); if (typeName.length > 0) { nameBuffer.append(VAR_TYPE_SEPARATOR); nameBuffer.append(typeName); } item.setLabel(nameBuffer.toString()); }
/** * 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; }
private CompletionItem getVariableCompletionItem(BVarSymbol varSymbol, String matchFieldSnippet, String label) { CompletionItem completionItem = BVariableCompletionItemBuilder.build(varSymbol, label, varSymbol.type.toString()); completionItem.setInsertText(varSymbol.getName().getValue() + " " + matchFieldSnippet); completionItem.setInsertTextFormat(InsertTextFormat.Snippet); return completionItem; }
void createTypeProposalLabel(char[] fullName, CompletionItem item) { // only display innermost type name as type name, using any // enclosing types as qualification int qIndex= findSimpleNameStart(fullName); String name = new String(fullName, qIndex, fullName.length - qIndex); StringBuilder nameBuffer= new StringBuilder(); nameBuffer.append(name); if (qIndex > 0) { nameBuffer.append(PACKAGE_NAME_SEPARATOR); nameBuffer.append(new String(fullName,0,qIndex-1)); } item.setFilterText(name); item.setInsertText(name); item.setLabel(nameBuffer.toString()); }
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; } }
@Override public List<CompletionItem> resolveItems(LSServiceOperationContext context) { List<String> consumedTokens = context.get(CompletionKeys.FORCE_CONSUMED_TOKENS_KEY).stream() .map(Token::getText) .collect(Collectors.toList()); if (!consumedTokens.get(0).equals(UtilSymbolKeys.FUNCTION_KEYWORD_KEY)) { return new ArrayList<>(); } return context.get(CompletionKeys.VISIBLE_SYMBOLS_KEY).stream() .filter(symbolInfo -> symbolInfo.getScopeEntry().symbol instanceof BObjectTypeSymbol) .map(symbolInfo -> { BSymbol symbol = symbolInfo.getScopeEntry().symbol; String symbolName = symbol.getName().getValue(); CompletionItem completionItem = BTypeCompletionItemBuilder.build((BTypeSymbol) symbol, symbolName); completionItem.setInsertText(symbolName + "."); return completionItem; }).collect(Collectors.toList()); } }
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 * @param label label * @param type variable type * @return {@link CompletionItem} */ public static CompletionItem build(BVarSymbol bSymbol, String label, String type) { CompletionItem item = new CompletionItem(); item.setLabel(label); String[] delimiterSeparatedTokens = (label).split("\\."); item.setInsertText(delimiterSeparatedTokens[delimiterSeparatedTokens.length - 1]); item.setDetail((type.equals("")) ? ItemResolverConstants.NONE : type); setMeta(item, bSymbol); return item; }
/** * Creates and returns a completion item. * * @param bSymbol BSymbol * @return {@link CompletionItem} */ public static CompletionItem build(BInvokableSymbol bSymbol) { CompletionItem item = new CompletionItem(); setMeta(item, bSymbol); if (bSymbol != null) { // Override function signature Pair<String, String> functionSignature = getFunctionSignature(bSymbol); item.setInsertText(functionSignature.getLeft()); item.setLabel(functionSignature.getRight()); } return item; }
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 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); } }
/** * Creates and returns a completion item. * * @param bSymbol BSymbol or null * @param label label * @return {@link CompletionItem} */ public static CompletionItem build(BTypeSymbol bSymbol, String label) { CompletionItem item = new CompletionItem(); item.setLabel(label); String[] delimiterSeparatedTokens = (label).split("\\."); item.setInsertText(delimiterSeparatedTokens[delimiterSeparatedTokens.length - 1]); item.setDetail(ItemResolverConstants.B_TYPE); setMeta(item, bSymbol); return item; }
/** * 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; }
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 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())); }
/** * 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; } }
private static CompletionItem getClassSnippet(ICompilationUnit cu, CompletionContext completionContext, boolean needsPublic, IProgressMonitor monitor) { if (!accept(cu, completionContext, true)) { return null; } if (monitor.isCanceled()) { return null; } final CompletionItem classSnippetItem = new CompletionItem(); classSnippetItem.setLabel(CLASS_SNIPPET_LABEL); classSnippetItem.setFilterText(CLASS_SNIPPET_LABEL); classSnippetItem.setSortText(SortTextHelper.convertRelevance(1)); try { if (needsPublic) { classSnippetItem.setInsertText(getSnippetContent(cu, CodeGenerationTemplate.CLASSSNIPPET_PUBLIC, cu.findRecommendedLineSeparator(), true)); } else { classSnippetItem.setInsertText(getSnippetContent(cu, CodeGenerationTemplate.CLASSSNIPPET_DEFAULT, cu.findRecommendedLineSeparator(), true)); } setFields(classSnippetItem, cu); } catch (CoreException e) { JavaLanguageServerPlugin.log(e.getStatus()); return null; } return classSnippetItem; }
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; }
/** * 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; } }
@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(); }