Preenchimento de tabulação para System.CommandLine
Importante
System.CommandLine
está atualmente em PREVIEW, e esta documentação é para a versão 2.0 beta 4.
Algumas informações estão relacionadas ao produto de pré-lançamento que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Os aplicativos que usam System.CommandLine
têm suporte interno para conclusão de guias em determinados shells. Para habilitá-lo, o usuário final precisa executar algumas etapas uma vez por shell. Depois que o usuário fizer isso, o preenchimento da guia será automático para valores estáticos em seu aplicativo, como valores de enum ou valores que você define chamando FromAmong. Você também pode personalizar o preenchimento da guia obtendo valores dinamicamente no tempo de execução.
Ativar a conclusão do separador
Na máquina em que você deseja habilitar o preenchimento de guias, execute as etapas a seguir.
Para a CLI do .NET:
- Consulte Como ativar o preenchimento de separadores.
Para outras aplicações de linha de comandos baseadas em System.CommandLine
:
Instale a
dotnet-suggest
ferramenta global.Adicione o script de shim apropriado ao seu perfil de shell. Talvez seja necessário criar um arquivo de perfil do shell. O script shim encaminha solicitações de conclusão do shell para a
dotnet-suggest
ferramenta, que delega aoSystem.CommandLine
aplicativo baseado apropriado.Para
bash
, adicione o conteúdo de dotnet-suggest-shim.bash a ~/.bash_profile.Para
zsh
, adicione o conteúdo de dotnet-suggest-shim.zsh a ~/.zshrc.Para o PowerShell, adicione o conteúdo de dotnet-suggest-shim.ps1 ao seu perfil do PowerShell. Você pode encontrar o caminho esperado para seu perfil do PowerShell executando o seguinte comando no console:
echo $profile
Depois que o shell do usuário estiver configurado, as finalizações funcionarão para todos os aplicativos criados usando System.CommandLine
o .
Para cmd.exe no Windows (o Prompt de Comando do Windows) não há nenhum mecanismo de conclusão de guia conectável, portanto, nenhum script de correção está disponível. Para outros shells, procure um problema do GitHub rotulado como Area-Completions
. Se não encontrar um problema, pode abrir um novo.
Obter valores de conclusão de tabulação em tempo de execução
O código a seguir mostra um aplicativo que obtém valores para conclusão de guia dinamicamente no tempo de execução. O código obtém uma lista das próximas duas semanas de datas após a data atual. A lista é fornecida à opção ligando para --date
AddCompletions
:
using System.CommandLine;
using System.CommandLine.Completions;
using System.CommandLine.Parsing;
await new DateCommand().InvokeAsync(args);
class DateCommand : Command
{
private Argument<string> subjectArgument =
new ("subject", "The subject of the appointment.");
private Option<DateTime> dateOption =
new ("--date", "The day of week to schedule. Should be within one week.");
public DateCommand() : base("schedule", "Makes an appointment for sometime in the next week.")
{
this.AddArgument(subjectArgument);
this.AddOption(dateOption);
dateOption.AddCompletions((ctx) => {
var today = System.DateTime.Today;
var dates = new List<CompletionItem>();
foreach (var i in Enumerable.Range(1, 7))
{
var date = today.AddDays(i);
dates.Add(new CompletionItem(
label: date.ToShortDateString(),
sortText: $"{i:2}"));
}
return dates;
});
this.SetHandler((subject, date) =>
{
Console.WriteLine($"Scheduled \"{subject}\" for {date}");
},
subjectArgument, dateOption);
}
}
Os valores mostrados quando a tecla tab é pressionada são fornecidos como CompletionItem
instâncias:
dates.Add(new CompletionItem(
label: date.ToShortDateString(),
sortText: $"{i:2}"));
As seguintes CompletionItem
propriedades são definidas:
Label
é o valor de conclusão a ser mostrado.SortText
garante que os valores na lista são apresentados na ordem correta. Ele é definido convertendoi
em uma cadeia de caracteres de dois dígitos, de modo que a classificação seja baseada em 01, 02, 03 e assim por diante, até 14. Se você não definir esse parâmetro, aLabel
classificação será baseada no , que neste exemplo está no formato de data abreviada e não será classificado corretamente.
Existem outras CompletionItem
propriedades, como Documentation
e Detail
, mas ainda não são usadas no System.CommandLine
.
A lista de conclusão de tabulação dinâmica criada por esse código também aparece na saída da ajuda:
Description:
Makes an appointment for sometime in the next week.
Usage:
schedule <subject> [options]
Arguments:
<subject> The subject of the appointment.
Options:
--date The day of week to schedule. Should be within one week.
<2/4/2022|2/5/2022|2/6/2022|2/7/2022|2/8/2022|2/9/2022|2/10/2022>
--version Show version information
-?, -h, --help