init/RegisterArgumentCompleters.ps1

using namespace System.Management.Automation

$CommandNames = @(
    "Get-Task"
    "Get-TodoList"
    "New-Task"
    "New-TodoList"
    "Remove-Task"
    "Remove-TodoList"
    "Update-Task"
)

$RegisterUserParameter = {
    param($Command, $Parameter, $WordToComplete, $CommandAst, $FakeBoundParameters)
    $SavePath = Join-Path -Path $([Environment]::GetFolderPath("ApplicationData")) -ChildPath "Todo"
    $Users = Get-ChildItem -Path $SavePath -Filter "*.db"
    $Users | ForEach-Object { [CompletionResult]::new($_.BaseName) }
}

$CommandNames | ForEach-Object { Register-ArgumentCompleter -CommandName $_ -ParameterName User -ScriptBlock $RegisterUserParameter }

$RegisterProjectParameter = {
    param($Command, $Parameter, $WordToComplete, $CommandAst, $FakeBoundParameters)
    $Projects = Get-TodoList | Select-Object -Property Project -Unique
    $Projects | ForEach-Object { [CompletionResult]::new($_.Project) }
}

@("New-Task", "Update-Task") | ForEach-Object { Register-ArgumentCompleter -CommandName $_ -ParameterName Project -ScriptBlock $RegisterProjectParameter }