godwit 0.1.1

A hackable yet sane project manager and automation suite.
Documentation

using namespace System.Management.Automation
using namespace System.Management.Automation.Language

Register-ArgumentCompleter -Native -CommandName 'godwit' -ScriptBlock {
    param($wordToComplete, $commandAst, $cursorPosition)

    $commandElements = $commandAst.CommandElements
    $command = @(
        'godwit'
        for ($i = 1; $i -lt $commandElements.Count; $i++) {
            $element = $commandElements[$i]
            if ($element -isnot [StringConstantExpressionAst] -or
                $element.StringConstantType -ne [StringConstantType]::BareWord -or
                $element.Value.StartsWith('-')) {
                break
        }
        $element.Value
    }) -join ';'

    $completions = @(switch ($command) {
        'godwit' {
            [CompletionResult]::new('-o', 'o', [CompletionResultType]::ParameterName, 'Organization (for all operations) (Overrides glyph)')
            [CompletionResult]::new('--org', 'org', [CompletionResultType]::ParameterName, 'Organization (for all operations) (Overrides glyph)')
            [CompletionResult]::new('-p', 'p', [CompletionResultType]::ParameterName, 'Project in organization (for all operations) (Overrides glyph)')
            [CompletionResult]::new('--project', 'project', [CompletionResultType]::ParameterName, 'Project in organization (for all operations) (Overrides glyph)')
            [CompletionResult]::new('-q', 'q', [CompletionResultType]::ParameterName, 'Silence all output')
            [CompletionResult]::new('--quiet', 'quiet', [CompletionResultType]::ParameterName, 'Silence all output')
            [CompletionResult]::new('-v', 'v', [CompletionResultType]::ParameterName, 'Debug mode')
            [CompletionResult]::new('--verbose', 'verbose', [CompletionResultType]::ParameterName, 'Debug mode')
            [CompletionResult]::new('-h', 'h', [CompletionResultType]::ParameterName, 'Prints help information')
            [CompletionResult]::new('--help', 'help', [CompletionResultType]::ParameterName, 'Prints help information')
            [CompletionResult]::new('-V', 'V', [CompletionResultType]::ParameterName, 'Prints version information')
            [CompletionResult]::new('--version', 'version', [CompletionResultType]::ParameterName, 'Prints version information')
            [CompletionResult]::new('init', 'init', [CompletionResultType]::ParameterValue, 'Setup Godwit working directory')
            [CompletionResult]::new('switch', 'switch', [CompletionResultType]::ParameterValue, 'Switch to target glyph, organization or project')
            [CompletionResult]::new('add', 'add', [CompletionResultType]::ParameterValue, 'Add projects under Godwit')
            [CompletionResult]::new('remove', 'remove', [CompletionResultType]::ParameterValue, 'Remove projects under Godwit')
            [CompletionResult]::new('status', 'status', [CompletionResultType]::ParameterValue, 'Display Godwit''s status')
            [CompletionResult]::new('help', 'help', [CompletionResultType]::ParameterValue, 'Prints this message or the help of the given subcommand(s)')
            break
        }
        'godwit;init' {
            [CompletionResult]::new('-o', 'o', [CompletionResultType]::ParameterName, 'Organization (for all operations) (Overrides glyph)')
            [CompletionResult]::new('--org', 'org', [CompletionResultType]::ParameterName, 'Organization (for all operations) (Overrides glyph)')
            [CompletionResult]::new('-p', 'p', [CompletionResultType]::ParameterName, 'Project in organization (for all operations) (Overrides glyph)')
            [CompletionResult]::new('--project', 'project', [CompletionResultType]::ParameterName, 'Project in organization (for all operations) (Overrides glyph)')
            [CompletionResult]::new('--headless', 'headless', [CompletionResultType]::ParameterName, 'Headless setup')
            [CompletionResult]::new('--refresh', 'refresh', [CompletionResultType]::ParameterName, 'Purge existing settings before setup')
            [CompletionResult]::new('-h', 'h', [CompletionResultType]::ParameterName, 'Prints help information')
            [CompletionResult]::new('--help', 'help', [CompletionResultType]::ParameterName, 'Prints help information')
            [CompletionResult]::new('-V', 'V', [CompletionResultType]::ParameterName, 'Prints version information')
            [CompletionResult]::new('--version', 'version', [CompletionResultType]::ParameterName, 'Prints version information')
            [CompletionResult]::new('-q', 'q', [CompletionResultType]::ParameterName, 'Silence all output')
            [CompletionResult]::new('--quiet', 'quiet', [CompletionResultType]::ParameterName, 'Silence all output')
            [CompletionResult]::new('-v', 'v', [CompletionResultType]::ParameterName, 'Debug mode')
            [CompletionResult]::new('--verbose', 'verbose', [CompletionResultType]::ParameterName, 'Debug mode')
            break
        }
        'godwit;switch' {
            [CompletionResult]::new('-o', 'o', [CompletionResultType]::ParameterName, 'Organization (for all operations) (Overrides glyph)')
            [CompletionResult]::new('--org', 'org', [CompletionResultType]::ParameterName, 'Organization (for all operations) (Overrides glyph)')
            [CompletionResult]::new('-p', 'p', [CompletionResultType]::ParameterName, 'Project in organization (for all operations) (Overrides glyph)')
            [CompletionResult]::new('--project', 'project', [CompletionResultType]::ParameterName, 'Project in organization (for all operations) (Overrides glyph)')
            [CompletionResult]::new('--default', 'default', [CompletionResultType]::ParameterName, 'Use as default project')
            [CompletionResult]::new('-h', 'h', [CompletionResultType]::ParameterName, 'Prints help information')
            [CompletionResult]::new('--help', 'help', [CompletionResultType]::ParameterName, 'Prints help information')
            [CompletionResult]::new('-V', 'V', [CompletionResultType]::ParameterName, 'Prints version information')
            [CompletionResult]::new('--version', 'version', [CompletionResultType]::ParameterName, 'Prints version information')
            [CompletionResult]::new('-q', 'q', [CompletionResultType]::ParameterName, 'Silence all output')
            [CompletionResult]::new('--quiet', 'quiet', [CompletionResultType]::ParameterName, 'Silence all output')
            [CompletionResult]::new('-v', 'v', [CompletionResultType]::ParameterName, 'Debug mode')
            [CompletionResult]::new('--verbose', 'verbose', [CompletionResultType]::ParameterName, 'Debug mode')
            break
        }
        'godwit;add' {
            [CompletionResult]::new('-o', 'o', [CompletionResultType]::ParameterName, 'Organization (for all operations) (Overrides glyph)')
            [CompletionResult]::new('--org', 'org', [CompletionResultType]::ParameterName, 'Organization (for all operations) (Overrides glyph)')
            [CompletionResult]::new('-p', 'p', [CompletionResultType]::ParameterName, 'Project in organization (for all operations) (Overrides glyph)')
            [CompletionResult]::new('--project', 'project', [CompletionResultType]::ParameterName, 'Project in organization (for all operations) (Overrides glyph)')
            [CompletionResult]::new('-e', 'e', [CompletionResultType]::ParameterName, 'Add existing project (Doesn''t trigger weaver)')
            [CompletionResult]::new('--existing', 'existing', [CompletionResultType]::ParameterName, 'Add existing project (Doesn''t trigger weaver)')
            [CompletionResult]::new('--active', 'active', [CompletionResultType]::ParameterName, 'Add as active project')
            [CompletionResult]::new('--default', 'default', [CompletionResultType]::ParameterName, 'Add as default project')
            [CompletionResult]::new('-h', 'h', [CompletionResultType]::ParameterName, 'Prints help information')
            [CompletionResult]::new('--help', 'help', [CompletionResultType]::ParameterName, 'Prints help information')
            [CompletionResult]::new('-V', 'V', [CompletionResultType]::ParameterName, 'Prints version information')
            [CompletionResult]::new('--version', 'version', [CompletionResultType]::ParameterName, 'Prints version information')
            [CompletionResult]::new('-q', 'q', [CompletionResultType]::ParameterName, 'Silence all output')
            [CompletionResult]::new('--quiet', 'quiet', [CompletionResultType]::ParameterName, 'Silence all output')
            [CompletionResult]::new('-v', 'v', [CompletionResultType]::ParameterName, 'Debug mode')
            [CompletionResult]::new('--verbose', 'verbose', [CompletionResultType]::ParameterName, 'Debug mode')
            break
        }
        'godwit;remove' {
            [CompletionResult]::new('-o', 'o', [CompletionResultType]::ParameterName, 'Organization (for all operations) (Overrides glyph)')
            [CompletionResult]::new('--org', 'org', [CompletionResultType]::ParameterName, 'Organization (for all operations) (Overrides glyph)')
            [CompletionResult]::new('-p', 'p', [CompletionResultType]::ParameterName, 'Project in organization (for all operations) (Overrides glyph)')
            [CompletionResult]::new('--project', 'project', [CompletionResultType]::ParameterName, 'Project in organization (for all operations) (Overrides glyph)')
            [CompletionResult]::new('-h', 'h', [CompletionResultType]::ParameterName, 'Prints help information')
            [CompletionResult]::new('--help', 'help', [CompletionResultType]::ParameterName, 'Prints help information')
            [CompletionResult]::new('-V', 'V', [CompletionResultType]::ParameterName, 'Prints version information')
            [CompletionResult]::new('--version', 'version', [CompletionResultType]::ParameterName, 'Prints version information')
            [CompletionResult]::new('-q', 'q', [CompletionResultType]::ParameterName, 'Silence all output')
            [CompletionResult]::new('--quiet', 'quiet', [CompletionResultType]::ParameterName, 'Silence all output')
            [CompletionResult]::new('-v', 'v', [CompletionResultType]::ParameterName, 'Debug mode')
            [CompletionResult]::new('--verbose', 'verbose', [CompletionResultType]::ParameterName, 'Debug mode')
            break
        }
        'godwit;status' {
            [CompletionResult]::new('-o', 'o', [CompletionResultType]::ParameterName, 'Organization (for all operations) (Overrides glyph)')
            [CompletionResult]::new('--org', 'org', [CompletionResultType]::ParameterName, 'Organization (for all operations) (Overrides glyph)')
            [CompletionResult]::new('-p', 'p', [CompletionResultType]::ParameterName, 'Project in organization (for all operations) (Overrides glyph)')
            [CompletionResult]::new('--project', 'project', [CompletionResultType]::ParameterName, 'Project in organization (for all operations) (Overrides glyph)')
            [CompletionResult]::new('-h', 'h', [CompletionResultType]::ParameterName, 'Prints help information')
            [CompletionResult]::new('--help', 'help', [CompletionResultType]::ParameterName, 'Prints help information')
            [CompletionResult]::new('-V', 'V', [CompletionResultType]::ParameterName, 'Prints version information')
            [CompletionResult]::new('--version', 'version', [CompletionResultType]::ParameterName, 'Prints version information')
            [CompletionResult]::new('-q', 'q', [CompletionResultType]::ParameterName, 'Silence all output')
            [CompletionResult]::new('--quiet', 'quiet', [CompletionResultType]::ParameterName, 'Silence all output')
            [CompletionResult]::new('-v', 'v', [CompletionResultType]::ParameterName, 'Debug mode')
            [CompletionResult]::new('--verbose', 'verbose', [CompletionResultType]::ParameterName, 'Debug mode')
            break
        }
        'godwit;help' {
            [CompletionResult]::new('-o', 'o', [CompletionResultType]::ParameterName, 'Organization (for all operations) (Overrides glyph)')
            [CompletionResult]::new('--org', 'org', [CompletionResultType]::ParameterName, 'Organization (for all operations) (Overrides glyph)')
            [CompletionResult]::new('-p', 'p', [CompletionResultType]::ParameterName, 'Project in organization (for all operations) (Overrides glyph)')
            [CompletionResult]::new('--project', 'project', [CompletionResultType]::ParameterName, 'Project in organization (for all operations) (Overrides glyph)')
            [CompletionResult]::new('-h', 'h', [CompletionResultType]::ParameterName, 'Prints help information')
            [CompletionResult]::new('--help', 'help', [CompletionResultType]::ParameterName, 'Prints help information')
            [CompletionResult]::new('-V', 'V', [CompletionResultType]::ParameterName, 'Prints version information')
            [CompletionResult]::new('--version', 'version', [CompletionResultType]::ParameterName, 'Prints version information')
            [CompletionResult]::new('-q', 'q', [CompletionResultType]::ParameterName, 'Silence all output')
            [CompletionResult]::new('--quiet', 'quiet', [CompletionResultType]::ParameterName, 'Silence all output')
            [CompletionResult]::new('-v', 'v', [CompletionResultType]::ParameterName, 'Debug mode')
            [CompletionResult]::new('--verbose', 'verbose', [CompletionResultType]::ParameterName, 'Debug mode')
            break
        }
    })

    $completions.Where{ $_.CompletionText -like "$wordToComplete*" } |
        Sort-Object -Property ListItemText
}