src/ArgumentCompleter.cs

using Microsoft.PowerShell.PowerShellGet.RepositorySettings;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Management.Automation;
using System.Management.Automation.Language;
 
internal class RepositoryNameCompleter : IArgumentCompleter
{
    public IEnumerable<CompletionResult> CompleteArgument(
        string commandName, // For cmdlets Get-PSResource, Set-PSResource, and Unregister-PSResource
        string parameterName, // For -Name parameter
        string wordToComplete,
        CommandAst commandAst,
        IDictionary fakeBoundParameters)
    {
        return CompleteRepositoryName(wordToComplete);
    }
 
 
    private IEnumerable<CompletionResult> CompleteRepositoryName(string wordToComplete)
    {
        List<CompletionResult> res = new List<CompletionResult>();
 
        RespositorySettings repositorySettings = new RespositorySettings();
        IReadOnlyList<PSObject> listOfRepositories = repositorySettings.Read(null);
 
        foreach (PSObject repo in listOfRepositories)
         {
            string repoName = repo.Properties["Name"].Value.ToString();
            if (repoName.StartsWith(wordToComplete, StringComparison.OrdinalIgnoreCase))
            {
                res.Add(new CompletionResult(repoName));
            }
        }
 
        return res;
    }
}