Register-TFArgumentCompleter.ps1

<#
.SYNOPSIS
    Register PowerShell completer for Terraform.
#>

function Register-TFArgumentCompleter () {
    if ( -not (IsTerraformInstalled) ) {
        return
    }

    # register completer
    Register-ArgumentCompleter -Native -CommandName 'terraform' -ScriptBlock {
        param($wordToComplete, $commandAst, $cursorPosition)

        $env:COMP_LINE = $commandAst.ToString()
        terraform | ForEach-Object {
            $toolTip = switch ($_) {
                # Main commands
                'init' { 'Prepare your working directory for other commands' }
                'validate' { 'Check whether the configuration is valid' }
                'plan' { 'Show changes required by the current configuration' }
                'apply' { 'Create or update infrastructure' }
                'destroy' { 'Destroy previously-created infrastructure' }
                # All other commands:
                'console' { 'Try Terraform expressions at an interactive command prompt' }
                'fmt' { 'Reformat your configuration in the standard style' }
                'force-unlock' { 'Release a stuck lock on the current workspace' }
                'get' { 'Install or upgrade remote Terraform modules' }
                'graph' { 'Generate a Graphviz graph of the steps in an operation' }
                'import' { 'Associate existing infrastructure with a Terraform resource' }
                'login' { 'Obtain and save credentials for a remote host' }
                'logout' { 'Remove locally-stored credentials for a remote host' }
                'output' { 'Show output values from your root module' }
                'providers' { 'Show the providers required for this configuration' }
                'refresh' { 'Update the state to match remote systems' }
                'show' { 'Show the current state or a saved plan' }
                'state' { 'Advanced state management' }
                'taint' { 'Mark a resource instance as not fully functional' }
                'test' { 'Experimental support for module integration testing' }
                'untaint' { 'Remove the ''tainted'' state from a resource instance' }
                'version' { 'Show the current Terraform version' }
                'workspace' { 'Workspace management' }
                # Global options (exclude -chdir)
                '-help' { 'Show this help output, or the help for a specified subcommand.' }
                '-version' { 'An alias for the "version" subcommand.' }
                # Others
                '-install-autocomplete' { 'Install tab-completion configuration for bash and zsh.' }
                '-uninstall-autocomplete' { 'Unnstall tab-completion configuration for bash and zsh.' }
                Default { $_ }
            }
            [System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $toolTip)
        }
        Remove-Item Env:\COMP_LINE     
    }
}

<#
.SYNOPSIS
    UnRegister PowerShell completer for Terraform.
#>

function UnRegister-TFArgumentCompleter () {
    if ( -not (IsTerraformInstalled) ) {
        return
    }
    
    # unregister completer
    Register-ArgumentCompleter -Native -CommandName 'terraform' -ScriptBlock $null
}