QuickRepo.psm1
|
#Requires -Version 5.1 # -- dot-source private helpers ----------------------------------------------──── Get-ChildItem -Path "$PSScriptRoot\Private\*.ps1" | ForEach-Object { . $_.FullName } # -- dot-source public functions ---------------------------------------------──── Get-ChildItem -Path "$PSScriptRoot\Public\*.ps1" | ForEach-Object { . $_.FullName } # ── alias ───────────────────────────────────────────────────────────────────── Set-Alias -Name repo -Value Invoke-Repo -Scope Global # -- tab completions --------------------------------------------------------- $subcommands = @('list', 'save', 'rm', 'rename', 'move') # Completer for Invoke-Repo (covers the `repo` alias too) Register-ArgumentCompleter -CommandName 'Invoke-Repo' -ParameterName 'Subcommand' -ScriptBlock { param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters) $store = Get-RepoStore # Merge subcommands + alias names so bare `repo f[tab]` works for both $candidates = $subcommands + $store.Keys $candidates | Where-Object { $_ -like "$wordToComplete*" } | Sort-Object | ForEach-Object { $tooltip = if ($store.ContainsKey($_)) { "$_ -> $($store[$_])" } else { $_ } [System.Management.Automation.CompletionResult]::new( $_, $_, 'ParameterValue', $tooltip ) } } # Arg1 completer: alias names for commands that take an alias as first arg Register-ArgumentCompleter -CommandName 'Invoke-Repo' -ParameterName 'Arg1' -ScriptBlock { param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters) # Only complete alias names; for `save` there is no existing alias expected $subcommand = $fakeBoundParameters['Subcommand'] if ($subcommand -eq 'save') { return } $store = Get-RepoStore $store.Keys | Where-Object { $_ -like "$wordToComplete*" } | Sort-Object | ForEach-Object { [System.Management.Automation.CompletionResult]::new( $_, $_, 'ParameterValue', "$_ → $($store[$_])" ) } } # Native completers for the individual public cmdlets (for direct cmdlet use) foreach ($cmdlet in @('Enter-Repository','Remove-Repository','Rename-Repository','Set-Repository')) { Register-ArgumentCompleter -CommandName $cmdlet -ParameterName 'Name' -ScriptBlock { param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters) $store = Get-RepoStore $store.Keys | Where-Object { $_ -like "$wordToComplete*" } | Sort-Object | ForEach-Object { [System.Management.Automation.CompletionResult]::new( $_, $_, 'ParameterValue', "$_ → $($store[$_])" ) } } } |