@Override public boolean process(@NotNull String name, @NotNull GoNamedElement element, @NotNull ExistingImportData importData, @NotNull CompletionResultSet result) { GoFunctionDeclaration function = (GoFunctionDeclaration)element; double priority = importData.exists ? GoCompletionUtil.FUNCTION_PRIORITY : GoCompletionUtil.NOT_IMPORTED_FUNCTION_PRIORITY; result.addElement(GoCompletionUtil.createFunctionOrMethodLookupElement(function, replacePackageWithAlias(name, importData.alias), GoAutoImportInsertHandler.FUNCTION_INSERT_HANDLER, priority)); return true; }
@Override protected void addCompletions(@NotNull CompletionParameters parameters, ProcessingContext context, @NotNull CompletionResultSet set) { GoReferenceExpressionBase expression = PsiTreeUtil.getParentOfType(parameters.getPosition(), GoReferenceExpressionBase.class); PsiFile originalFile = parameters.getOriginalFile(); if (expression != null) { fillVariantsByReference(expression.getReference(), originalFile, set.withPrefixMatcher(createPrefixMatcher(set.getPrefixMatcher()))); } PsiElement parent = parameters.getPosition().getParent(); if (parent != null) { fillVariantsByReference(parent.getReference(), originalFile, set.withPrefixMatcher(createPrefixMatcher(set.getPrefixMatcher()))); } }
if (identifier != null) { if (myResult != null) { myResult.addElement(BallerinaCompletionUtils.createPackageLookup(identifier, ColonInsertHandler.INSTANCE_WITH_AUTO_POPUP)); } else if (myElement.getText().equals(identifier.getText())) { Module module = ModuleUtilCore.findModuleForPsiElement(element); if (module != null) { myResult.addAllElements(BallerinaPsiImplUtil.getAllUnImportedImports(element.getProject(), module, cachedImports));
PrefixMatcher matcher = result.getPrefixMatcher(); if (parameters.getInvocationCount() < 2 && matcher.getPrefix().isEmpty()) { result.restartCompletionOnPrefixChange(StandardPatterns.string().longerThan(0)); return;
public static void addClassCompletion(CompletionParameters parameters, final CompletionResultSet resultSet, PsiElement psiElement, boolean withInterface, boolean withLeadBackslash) { // Foo\|Bar // Foo|\Bar PhpElementsUtil.visitNamespaceClassForCompletion(psiElement, parameters.getOffset(), (phpClass, presentableFQN, prefix) -> resultSet.addElement(LookupElementBuilder.create(prefix + presentableFQN).withIcon(phpClass.getIcon())) ); PhpIndex phpIndex = PhpIndex.getInstance(psiElement.getProject()); for (String className : phpIndex.getAllClassNames(resultSet.getPrefixMatcher())) { for(PhpClass phpClass: phpIndex.getClassesByName(className)) { resultSet.addElement( wrapInsertHandler(new MyPhpLookupElement(phpClass), withLeadBackslash) ); } if(withInterface) { for(PhpClass phpClass: phpIndex.getInterfacesByName(className)) { resultSet.addElement( wrapInsertHandler(new MyPhpLookupElement(phpClass), withLeadBackslash) ); } } } }
@Override protected void addCompletions(@NotNull CompletionParameters parameters, ProcessingContext context, @NotNull CompletionResultSet result) { PsiElement position = parameters.getPosition(); JFlexComposite parent = PsiTreeUtil.getParentOfType( position, JFlexDeclarationsSection.class, JFlexRule.class, JFlexJavaCode.class, JFlexJavaType.class); boolean inJava = parent instanceof JFlexJavaCode || parent instanceof JFlexJavaType; if (!inJava && parameters.getInvocationCount() < 2) { int start = position.getTextRange().getStartOffset(); CompletionResultSet result2 = start > 0 && parameters.getEditor().getDocument().getText().charAt(start - 1) == '%' ? result.withPrefixMatcher(result.getPrefixMatcher().cloneWithPrefix("%" + result.getPrefixMatcher().getPrefix())) : result; for (String keyword : suggestKeywords(parameters.getPosition())) { result2.addElement(createKeywordLookupItem(keyword)); } } } });
@Override protected void addCompletions(@NotNull CompletionParameters parameters, @NotNull ProcessingContext context, @NotNull CompletionResultSet result) { PsiElement current = parameters.getPosition(); if (current.getParent() instanceof IgnoreSyntax && current.getPrevSibling() != null) { result.addAllElements(SYNTAX_ELEMENTS); } } }
@Override protected void addCompletions(@NotNull CompletionParameters parameters, ProcessingContext context, @NotNull CompletionResultSet result) { if (parameters.getInvocationCount() > 0) { if (isEmptyComment(parameters)) { int priority = 100; for (String section : COMMENT_SECTIONS) { priority--; final LookupElementBuilder elm = LookupElementBuilder.create(" ::" + section + ":: ") .withPresentableText("::" + section + "::"); result.withPrefixMatcher(new PlainPrefixMatcher("")) .addElement(PrioritizedLookupElement.withPriority(elm, priority)); } for (String tag : COMMENT_TAGS) { result.withPrefixMatcher(new PlainPrefixMatcher("")) .addElement(LookupElementBuilder.create(" :" + tag + ": ")); } } else { final PsiFile file = parameters.getOriginalFile(); final MathematicaGlobalResolveCache symbolCache = MathematicaGlobalResolveCache.getInstance(file.getProject()); final List<String> cachedDefinitions = symbolCache.getCachedFileSymbolNames(file); for (String definition : cachedDefinitions) { result.addElement(LookupElementBuilder.create(definition)); } } } }
@Override public void getLookupElements(@NotNull GotoCompletionProviderLookupArguments arguments) { final CompletionResultSet resultSet = arguments.getResultSet(); String blockNamePrefix = resultSet.getPrefixMatcher().getPrefix(); // find caret position: // - "has_role('" // - "has_role('YAML_ROLE_" if(!blockNamePrefix.matches("^.*(has_role|is_granted)\\s*\\(\\s*'[\\w-]*$")) { return; } // clear prefix caret string; for a clean completion independent from inside content CompletionResultSet myResultSet = resultSet.withPrefixMatcher(""); VoterUtil.LookupElementPairConsumer consumer = new VoterUtil.LookupElementPairConsumer(); VoterUtil.visitAttribute(getProject(), consumer); myResultSet.addAllElements(consumer.getLookupElements()); }
protected void addBashCompletions(String currentText, CompletionParameters parameters, ProcessingContext context, CompletionResultSet resultWithoutPrefix) { if (currentText == null || !currentText.startsWith("/")) { return; } PsiElement parentElement = parameters.getPosition().getParent(); String parentText = parentElement.getText(); if (parentText.startsWith("$HOME") || parentText.startsWith("~")) { return; } int invocationCount = parameters.getInvocationCount(); CompletionResultSet result = resultWithoutPrefix.withPrefixMatcher(new PathPrefixMatcher(currentText)); Predicate<File> incovationCountPredicate = file -> { //accept hidden file with more than one invocation //return file.isHidden() ? invocationCount >= 2 : true; boolean isHidden = file.isHidden() || file.getName().startsWith("."); return (isHidden && (invocationCount >= 2)) || ((invocationCount >= 1) && !isHidden); }; List<String> completions = CompletionUtil.completeAbsolutePath(currentText, createFileFilter().and(incovationCountPredicate)); result.addAllElements(CompletionProviderUtils.createPathItems(completions)); int validResultCount = computeResultCount(completions, result); if (validResultCount == 0 && invocationCount == 1) { //do hidden-completion now List<String> secondCompletions = CompletionUtil.completeAbsolutePath(currentText, createFileFilter()); result.addAllElements(CompletionProviderUtils.createPathItems(secondCompletions)); } if (invocationCount == 1) { result.addLookupAdvertisement("Press twice for hidden files"); } }
private CompletionResultSet adjustMatcher(@NotNull CompletionParameters parameters, @NotNull CompletionResultSet result, @NotNull PsiElement parent) { int startOffset = parent.getTextRange().getStartOffset(); String newPrefix = parameters.getEditor().getDocument().getText(TextRange.create(startOffset, parameters.getOffset())); return result.withPrefixMatcher(createPrefixMatcher(newPrefix)); } });
public static void addPrioritizedServiceLookupElements(@NotNull CompletionParameters parameters, @NotNull CompletionResultSet resultSet, @NotNull PrioritizedLookupResult result) { // move known elements to top if(result.getTopStrings().size() > 0) { CompletionSorter completionSorter = CompletionService.getCompletionService() .defaultSorter(parameters, resultSet.getPrefixMatcher()) .weighBefore("priority", new MyLookupElementWeigher(result.getTopStrings())); resultSet = resultSet.withRelevanceSorter(completionSorter); } resultSet.addAllElements(result.getLookupElements()); }
@Override public void fillCompletionVariants( @NotNull CompletionParameters parameters, @NotNull CompletionResultSet result) { final Optional<OpenApiFileType> maybeFileType = openApiIndexService.getFileType(parameters); maybeFileType.ifPresent( fileType -> { final PathResolver pathResolver = PathResolverFactory.fromOpenApiFileType(fileType); final PsiElement psiElement = parameters.getPosition(); final OpenApiCompletionHelper completionHelper = new OpenApiCompletionHelper(psiElement, yamlTraversal, pathResolver); OpenApiFieldCompletionFactory.from(completionHelper, result) .ifPresent(FieldCompletion::fill); OpenApiValueCompletionFactory.from( completionHelper, CompletionResultSetFactory.forValue(parameters, result)) .ifPresent(ValueCompletion::fill); result.stopHere(); }); } }
@Override protected void addBashCompletions(String currentText, CompletionParameters parameters, ProcessingContext context, CompletionResultSet result) { //if we are in a combined word, get it PsiElement parentElement = parameters.getPosition().getParent(); if (parentElement instanceof BashWord) { currentText = findCurrentText(parameters, parentElement); } result = result.withPrefixMatcher(currentText); String usedPrefix = findUsedPrefix(currentText); if (usedPrefix == null) { return; } //fixme shouldn't be needed String baseDir = findBaseDir(parameters, usedPrefix); if (baseDir == null) { return; } String relativePath = currentText.substring(usedPrefix.length()); if (relativePath.startsWith("/")) { relativePath = relativePath.substring(1); } List<String> completions = CompletionUtil.completeRelativePath(baseDir, usedPrefix, relativePath); result.addAllElements(CompletionProviderUtils.createPathItems(completions)); }
.replace(CompletionInitializationContext.DUMMY_IDENTIFIER_TRIMMED, ""); final CompletionResultSet finalResultSet = result.withPrefixMatcher(fullPrefix); result.stopHere(); break;
protected int computeResultCount(List<String> completions, CompletionResultSet result) { PrefixMatcher prefixMatcher = result.getPrefixMatcher(); int resultCount = 0; for (String c : completions) { if (prefixMatcher.prefixMatches(c)) { resultCount++; } } return resultCount; } }
public void addCompletions(@NotNull CompletionParameters parameters, ProcessingContext context, @NotNull CompletionResultSet resultSet) { if(!Symfony2ProjectComponent.isEnabled(parameters.getPosition())) { return; } PhpIndex phpIndex = PhpIndex.getInstance(parameters.getOriginalFile().getProject()); Map<String, String> entityNamespaces = ServiceXmlParserFactory.getInstance(parameters.getOriginalFile().getProject(), EntityNamesServiceParser.class).getEntityNameMap(); // copied from PhpCompletionUtil::addClassesInNamespace looks the official way to find classes in namespaces // its a really performance nightmare Collection<String> names = phpIndex.getAllClassNames(new CamelHumpMatcher(resultSet.getPrefixMatcher().getPrefix())); for (String name : names) { Collection<PhpClass> classes = phpIndex.getClassesByName(name); for(Map.Entry<String, String> entry: entityNamespaces.entrySet()) { String namespaceFqn = PhpLangUtil.toFQN(entry.getValue()); Collection<PhpClass> filtered = PhpCompletionUtil.filterByNamespace(classes, namespaceFqn); for (PhpClass phpClass : filtered) { resultSet.addElement(new PhpClassLookupElement(phpClass, true, PhpClassReferenceInsertHandler.getInstance())); } } } } }
@Override protected void addCompletions(@NotNull CompletionParameters parameters, @NotNull ProcessingContext context, @NotNull CompletionResultSet result) { PsiElement method = parameters.getPosition().getParent(); if (!(method instanceof PsiPerlMethod)) { LOG.warn("Expected PsiPerlMethod, got psiElement=[" + method.getClass() + "]; text=[" + method.getText() + "]"); return; } String explicitNamespace = ((PsiPerlMethod)method).getExplicitPackageName(); String currentPrefixMatcher = result.getPrefixMatcher().getPrefix(); String newPrefixMathcer = (explicitNamespace == null ? currentPrefixMatcher : (explicitNamespace + PerlPackageUtil.PACKAGE_SEPARATOR) + currentPrefixMatcher); result = result.withPrefixMatcher(new PlainPrefixMatcher(newPrefixMathcer)); if (!((PsiPerlMethod)method).isObjectMethod()) { PerlPackageCompletionUtil.fillWithAllPackageNamesWithAutocompletion(parameters.getPosition(), result); } else { if (!StringUtil.equals(PerlPackageUtil.SUPER_PACKAGE_FULL, newPrefixMathcer)) { LookupElementBuilder newElement = PerlPackageCompletionUtil.getPackageLookupElementWithAutocomplete(method.getProject(), PerlPackageUtil.SUPER_PACKAGE_FULL, null); newElement.putUserData(PerlCompletionWeighter.WEIGHT, -1); result.addElement(newElement); } } } }
public void addAllElements(@NotNull Iterable<? extends LookupElement> elements) { resultSet.addAllElements(elements); } }
@Override protected void addCompletions(@NotNull CompletionParameters parameters, ProcessingContext context, @NotNull CompletionResultSet result) { final PsiFile containingFile = parameters.getOriginalFile(); String prefix = findCurrentText(parameters, parameters.getPosition()); if (!parameters.isExtendedCompletion() && !prefix.isEmpty() && containingFile instanceof MathematicaPsiFile) { final CamelHumpMatcher matcher = new CamelHumpMatcher(prefix, true); CompletionResultSet result2 = result.withPrefixMatcher(matcher); final HashSet<SymbolResolveResult> cachedDefinitions = ((MathematicaPsiFile) containingFile).getCachedDefinitions(); for (SymbolResolveResult cachedDefinition : cachedDefinitions) { if (cachedDefinition.isValidResult() && cachedDefinition.getElement() != null) { result2.addElement( PrioritizedLookupElement .withPriority( LookupElementBuilder .create(cachedDefinition.getElement()) .bold() .withTypeText("(" + containingFile.getName() + ")", true), GLOBAL_VARIABLE_PRIORITY)); } } } }