config/config/auto-completers/complete.invoke-build.ps1

if (Test-Command "Invoke-Build") {
    WriteDebug "Found 'invoke-build', registering completer."

    Register-ArgumentCompleter -CommandName Invoke-Build.ps1 -ParameterName Task -ScriptBlock {
        param($commandName, $parameterName, $wordToComplete, $commandAst, $boundParameters)

        (Invoke-Build -Task ?? -File ($boundParameters['File'])).get_Keys() -like "$wordToComplete*" | .{process{
            New-Object System.Management.Automation.CompletionResult $_, $_, 'ParameterValue', $_
        }}
    }

    Register-ArgumentCompleter -CommandName Invoke-Build.ps1 -ParameterName File -ScriptBlock {
        param($commandName, $parameterName, $wordToComplete, $commandAst, $boundParameters)

        Get-ChildItem -Directory -Name "$wordToComplete*" | .{process{
            New-Object System.Management.Automation.CompletionResult $_, $_, 'ProviderContainer', $_
        }}

        if (!($boundParameters['Task'] -eq '**')) {
            Get-ChildItem -File -Name "$wordToComplete*.ps1" | .{process{
                New-Object System.Management.Automation.CompletionResult $_, $_, 'Command', $_
            }}
        }
    }
}