Compose/completers4arguments.ps1

$profileAll = {
    param ($WordToComplete, $CommandAst)

    $commandTextsOriginal = Get-ComposeCommandText -CommandAst $CommandAst
    $commandTexts = New-Object System.Collections.ArrayList

    # Remove all `--profile stringArray`
    # Because this scriptblock is used for `--profile` argument completion
    $ignoreNext = $false
    foreach ($text in $commandTextsOriginal) {
        if ($ignoreNext) {
            $ignoreNext = $false
            continue
        }

        if ($text -eq '--profile') {
            $ignoreNext = $true
        } else {
            $commandTexts.Add($text) > $null
        }
    }

    Invoke-Expression -Command ("{0} convert --profiles" -f ($commandTexts -join ' ')) | Sort-Object
}

$serviceAll = {
    param ($WordToComplete, $CommandAst)

    $commandTexts = Get-ComposeCommandText -CommandAst $CommandAst
    Invoke-Expression -Command ("{0} convert --services" -f ($commandTexts -join ' ')) | Sort-Object
}

$serviceRunning = {
    param ($WordToComplete, $CommandAst)

    $commandTexts = Get-ComposeCommandText -CommandAst $CommandAst
    $services = Invoke-Expression -Command ("{0} ps --format json --status running | ConvertFrom-Json" -f ($commandTexts -join ' '))
    $services.Service | Sort-Object -Unique
}

$serviceStartable = {
    param ($WordToComplete, $CommandAst)

    $commandTexts = Get-ComposeCommandText -CommandAst $CommandAst
    # Multi-status, `--status created --status exited`, is prefered, but it does not work with Compose v2.0.0
    # See: https://github.com/docker/compose/issues/8700
    $services = Invoke-Expression -Command ("{0} ps --format json --all | ConvertFrom-Json" -f ($commandTexts -join ' '))
    ($services | Where-Object State -In @('created', 'exited')).Service | Sort-Object -Unique
}

$servicePaused = {
    param ($WordToComplete, $CommandAst)

    $commandTexts = Get-ComposeCommandText -CommandAst $CommandAst
    $services = Invoke-Expression -Command ("{0} ps --format json --status paused | ConvertFrom-Json" -f ($commandTexts -join ' '))
    $services.Service | Sort-Object -Unique
}

Register-Completer docker_compose_--ansi { 'always', 'auto', 'never' }
Register-Completer docker_compose_--profile $profileAll
Register-Completer docker_compose_--progress { 'auto', 'json', 'plain', 'quiet', 'tty' }
Register-Completer docker_compose_build $serviceAll
Register-Completer docker_compose_build_--progress { 'auto', 'json', 'plain', 'quiet', 'tty' }
Register-Completer docker_compose_config_--format { 'json', 'yaml' }
Register-Completer docker_compose_create $serviceAll
Register-Completer docker_compose_create_--pull { 'always', 'build', 'missing', 'never' }
Register-Completer docker_compose_down_--rmi { 'all', 'local' }
Register-Completer docker_compose_events $serviceAll
Register-Completer docker_compose_exec $serviceRunning
Register-Completer docker_compose_images $serviceAll
Register-Completer docker_compose_images_--format { 'json', 'table' }
Register-Completer docker_compose_kill $serviceRunning
Register-Completer docker_compose_kill_--signal {
    'SIGCONT'
    'SIGHUP'
    'SIGINT'
    'SIGKILL'
    'SIGSTOP'
    'SIGUSR1'
    'SIGUSR2'
}
Register-Completer docker_compose_kill_-s (Get-Completer docker_compose_kill_--signal)
Register-Completer docker_compose_logs $serviceAll
Register-Completer docker_compose_ls_--format { 'json', 'table' }
Register-Completer docker_compose_pause $serviceRunning
Register-Completer docker_compose_port $serviceAll
Register-Completer docker_compose_port_--protocol { 'tcp', 'udp' }
Register-Completer docker_compose_ps $serviceAll
Register-Completer docker_compose_ps_--format { 'json', 'table' }
Register-Completer docker_compose_ps_--status { 'created', 'dead', 'exited', 'paused', 'removing', 'restarting', 'running' }
Register-Completer docker_compose_pull $serviceAll
Register-Completer docker_compose_push $serviceAll
Register-Completer docker_compose_restart $serviceRunning
Register-Completer docker_compose_rm $serviceAll
Register-Completer docker_compose_run $serviceAll
Register-Completer docker_compose_scale $serviceAll
Register-Completer docker_compose_start $serviceStartable
Register-Completer docker_compose_stop $serviceRunning
Register-Completer docker_compose_top $serviceRunning
Register-Completer docker_compose_unpause $servicePaused
Register-Completer docker_compose_up $serviceAll
Register-Completer docker_compose_up_--exit-code-from $serviceAll
Register-Completer docker_compose_up_--pull { 'always', 'missing', 'never' }
Register-Completer docker_compose_up_--scale $serviceAll
Register-Completer docker_compose_version_--format { 'json', 'pretty' }
Register-Completer docker_compose_version_-f (Get-Completer docker_compose_version_--format)