diff --git a/src/classes/public/Config/GitHubConfig.ps1 b/src/classes/public/Config/GitHubConfig.ps1 index ac8ffd8b8..b0289ce68 100644 --- a/src/classes/public/Config/GitHubConfig.ps1 +++ b/src/classes/public/Config/GitHubConfig.ps1 @@ -38,6 +38,9 @@ # The environment type, which is used to determine the context of the GitHub API calls. [string] $EnvironmentType + # The completion mode for argument completers. Options: 'StartsWith', 'Contains'. + [string] $CompletionMode + # Simple parameterless constructor GitHubConfig() {} diff --git a/src/completers.ps1 b/src/completers.ps1 index 1491a5b8a..901d1de8e 100644 --- a/src/completers.ps1 +++ b/src/completers.ps1 @@ -1,39 +1,39 @@ Register-ArgumentCompleter -CommandName Connect-GitHubApp -ParameterName User -ScriptBlock { param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters) $null = $commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters - + $pattern = switch (Get-GitHubConfig -Name CompletionMode) { 'Contains' { "*$wordToComplete*" } default { "$wordToComplete*" } } $params = @{ Context = $fakeBoundParameters.Context Verbose = $false Debug = $false } - Get-GitHubAppInstallation @params | Where-Object { $_.Type -eq 'User' -and $_.Target.Name -like "$wordToComplete*" } | ForEach-Object { + Get-GitHubAppInstallation @params | Where-Object { $_.Type -eq 'User' -and $_.Target.Name -like $pattern } | ForEach-Object { [System.Management.Automation.CompletionResult]::new($_.Target.Name, $_.Target.Name, 'ParameterValue', $_.Target.Name) } } Register-ArgumentCompleter -CommandName Connect-GitHubApp -ParameterName Organization -ScriptBlock { param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters) $null = $commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters - + $pattern = switch (Get-GitHubConfig -Name CompletionMode) { 'Contains' { "*$wordToComplete*" } default { "$wordToComplete*" } } $params = @{ Context = $fakeBoundParameters.Context Verbose = $false Debug = $false } - Get-GitHubAppInstallation @params | Where-Object { $_.Type -eq 'Organization' -and $_.Target.Name -like "$wordToComplete*" } | ForEach-Object { + Get-GitHubAppInstallation @params | Where-Object { $_.Type -eq 'Organization' -and $_.Target.Name -like $pattern } | ForEach-Object { [System.Management.Automation.CompletionResult]::new($_.Target.Name, $_.Target.Name, 'ParameterValue', $_.Target.Name) } } Register-ArgumentCompleter -CommandName Connect-GitHubApp -ParameterName Enterprise -ScriptBlock { param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters) $null = $commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters - + $pattern = switch (Get-GitHubConfig -Name CompletionMode) { 'Contains' { "*$wordToComplete*" } default { "$wordToComplete*" } } $params = @{ Context = $fakeBoundParameters.Context Verbose = $false Debug = $false } - Get-GitHubAppInstallation @params | Where-Object { $_.Type -eq 'Enterprise' -and $_.Target.Name -like "$wordToComplete*" } | ForEach-Object { + Get-GitHubAppInstallation @params | Where-Object { $_.Type -eq 'Enterprise' -and $_.Target.Name -like $pattern } | ForEach-Object { [System.Management.Automation.CompletionResult]::new($_.Target.Name, $_.Target.Name, 'ParameterValue', $_.Target.Name) } } diff --git a/src/formats/GitHubConfig.Format.ps1xml b/src/formats/GitHubConfig.Format.ps1xml index cd556ceb4..807943b93 100644 --- a/src/formats/GitHubConfig.Format.ps1xml +++ b/src/formats/GitHubConfig.Format.ps1xml @@ -46,6 +46,9 @@ RetryInterval + + CompletionMode + diff --git a/src/functions/private/Config/Initialize-GitHubConfig.ps1 b/src/functions/private/Config/Initialize-GitHubConfig.ps1 index 651445856..c8d733fa4 100644 --- a/src/functions/private/Config/Initialize-GitHubConfig.ps1 +++ b/src/functions/private/Config/Initialize-GitHubConfig.ps1 @@ -32,43 +32,64 @@ Write-Debug "Force: [$Force]" if ($Force) { Write-Debug 'Forcing initialization of GitHubConfig.' - $context = Set-Context -Context $script:GitHub.DefaultConfig -Vault $script:GitHub.ContextVault -PassThru - $script:GitHub.Config = [GitHubConfig]$context + $config = Set-Context -Context $script:GitHub.DefaultConfig -Vault $script:GitHub.ContextVault -PassThru + $script:GitHub.Config = [GitHubConfig]$config return } - Write-Debug "GitHubConfig ID: [$($script:GitHub.Config.ID)]" if ($null -ne $script:GitHub.Config) { Write-Debug 'GitHubConfig already initialized and available in memory.' return } Write-Debug 'Attempt to load the stored GitHubConfig from ContextVault' - $context = Get-Context -ID $script:GitHub.DefaultConfig.ID -Vault $script:GitHub.ContextVault - if ($context) { + $config = Get-Context -ID $script:GitHub.DefaultConfig.ID -Vault $script:GitHub.ContextVault + if ($config) { Write-Debug 'GitHubConfig loaded into memory.' - Write-Debug 'Checking if new default properties are available in the stored context.' + Write-Debug 'Synchronizing stored context with GitHubConfig class definition.' $needsUpdate = $false - $defaultProperties = $script:GitHub.DefaultConfig.PSObject.Properties.Name - foreach ($propName in $defaultProperties) { - if (-not $context.PSObject.Properties.Name.Contains($propName)) { + $validProperties = [GitHubConfig].GetProperties().Name + $storedProperties = $config.PSObject.Properties.Name + + # Add missing properties from DefaultConfig + foreach ($propName in $validProperties) { + Write-Debug "Validating property [$propName]" + if (-not $storedProperties.Contains($propName)) { Write-Debug "Adding missing property [$propName] from DefaultConfig" - $context | Add-Member -MemberType NoteProperty -Name $propName -Value $script:GitHub.DefaultConfig.$propName + $defaultValue = $script:GitHub.DefaultConfig.$propName + $config | Add-Member -MemberType NoteProperty -Name $propName -Value $defaultValue + $needsUpdate = $true + } + } + + # Remove obsolete properties that are no longer supported + $propertiesToRemove = @() + foreach ($propName in $storedProperties) { + Write-Debug "Checking property [$propName] for obsolescence" + if (-not $validProperties.Contains($propName)) { + Write-Debug "Removing obsolete property [$propName] from stored context" + $propertiesToRemove += $propName $needsUpdate = $true } } + + # Remove the obsolete properties + foreach ($propName in $propertiesToRemove) { + $config.PSObject.Properties.Remove($propName) + } + if ($needsUpdate) { - Write-Debug 'Updating stored context with new default properties' - $context = Set-Context -Context $context -Vault $script:GitHub.ContextVault -PassThru + Write-Debug 'Updating stored context with synchronized properties' + $config = Set-Context -Context $config -Vault $script:GitHub.ContextVault -PassThru } - $script:GitHub.Config = [GitHubConfig]$context + $script:GitHub.Config = [GitHubConfig]$config return } Write-Debug 'Initializing GitHubConfig from defaults' - $context = Set-Context -Context $script:GitHub.DefaultConfig -Vault $script:GitHub.ContextVault -PassThru - $script:GitHub.Config = [GitHubConfig]$context + $config = Set-Context -Context $script:GitHub.DefaultConfig -Vault $script:GitHub.ContextVault -PassThru + $script:GitHub.Config = [GitHubConfig]$config } end { @@ -76,4 +97,3 @@ } } #Requires -Modules @{ ModuleName = 'Context'; RequiredVersion = '8.1.3' } - diff --git a/src/functions/public/Auth/Context/Get-GitHubContext.ps1 b/src/functions/public/Auth/Context/Get-GitHubContext.ps1 index 6ff8aecc1..03ff7be82 100644 --- a/src/functions/public/Auth/Context/Get-GitHubContext.ps1 +++ b/src/functions/public/Auth/Context/Get-GitHubContext.ps1 @@ -24,7 +24,8 @@ # The name of the context. [Parameter( Mandatory, - ParameterSetName = 'Get a named context' + ParameterSetName = 'Get a named context', + Position = 0 )] [Alias('Name')] [string] $Context, diff --git a/src/functions/public/Auth/Context/completers.ps1 b/src/functions/public/Auth/Context/completers.ps1 index e263e354b..9f4c2752d 100644 --- a/src/functions/public/Auth/Context/completers.ps1 +++ b/src/functions/public/Auth/Context/completers.ps1 @@ -1,7 +1,7 @@ Register-ArgumentCompleter -CommandName ($script:PSModuleInfo.FunctionsToExport) -ParameterName Context -ScriptBlock { param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters) $null = $commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters - + $pattern = switch (Get-GitHubConfig -Name CompletionMode) { 'Contains' { "*$wordToComplete*" } default { "$wordToComplete*" } } $contexts = @() $hasAnonymousParameter = $false $command = Get-Command -Name $commandName -ErrorAction SilentlyContinue @@ -14,7 +14,7 @@ $contexts += Get-GitHubContext -ListAvailable -Verbose:$false -Debug:$false $contexts = $contexts | Sort-Object -Property Name - $contexts | Where-Object { $_.Name -like "$wordToComplete*" } | ForEach-Object { + $contexts | Where-Object { $_.Name -like $pattern } | ForEach-Object { [System.Management.Automation.CompletionResult]::new($_.Name, $_.Name, 'ParameterValue', $_.Name) } } diff --git a/src/functions/public/Config/completers.ps1 b/src/functions/public/Config/completers.ps1 index 4e91daea9..1165d3170 100644 --- a/src/functions/public/Config/completers.ps1 +++ b/src/functions/public/Config/completers.ps1 @@ -1,7 +1,19 @@ Register-ArgumentCompleter -CommandName Set-GitHubConfig, Get-GitHubConfig, Remove-GitHubConfig -ParameterName Name -ScriptBlock { param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters) $null = $commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters - ([GitHubConfig]).GetProperties().Name | Where-Object { $_ -like "$wordToComplete*" } | ForEach-Object { + $pattern = switch (Get-GitHubConfig -Name CompletionMode) { 'Contains' { "*$wordToComplete*" } default { "$wordToComplete*" } } + ([GitHubConfig]).GetProperties().Name | Where-Object { $_ -like $pattern } | ForEach-Object { [System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_ ) } } + +Register-ArgumentCompleter -CommandName Set-GitHubConfig -ParameterName Value -ScriptBlock { + param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters) + $null = $commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters + if ($fakeBoundParameters.Name -eq 'CompletionMode') { + $pattern = switch (Get-GitHubConfig -Name CompletionMode) { 'Contains' { "*$wordToComplete*" } default { "$wordToComplete*" } } + @('StartsWith', 'Contains') | Where-Object { $_ -like $pattern } | ForEach-Object { + [System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_) + } + } +} diff --git a/src/functions/public/Environments/completers.ps1 b/src/functions/public/Environments/completers.ps1 index 6ae810de2..e2f9422f4 100644 --- a/src/functions/public/Environments/completers.ps1 +++ b/src/functions/public/Environments/completers.ps1 @@ -2,6 +2,7 @@ Where-Object { $_ -like '*GitHubEnvironment' }) -ParameterName Name -ScriptBlock { param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters) $null = $commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters + $pattern = switch (Get-GitHubConfig -Name CompletionMode) { 'Contains' { "*$wordToComplete*" } default { "$wordToComplete*" } } $params = @{ Owner = $fakeBoundParameters.Owner Repository = $fakeBoundParameters.Repository @@ -10,7 +11,7 @@ Debug = $false } $params | Remove-HashtableEntry -NullOrEmptyValues - Get-GitHubEnvironment @params | Where-Object { $_.Name -like "$wordToComplete*" } | ForEach-Object { + Get-GitHubEnvironment @params | Where-Object { $_.Name -like $pattern } | ForEach-Object { [System.Management.Automation.CompletionResult]::new($_.Name, $_.Name, 'ParameterValue', $_.Name) } } @@ -18,6 +19,7 @@ Register-ArgumentCompleter -CommandName ($script:PSModuleInfo.FunctionsToExport) -ParameterName Environment -ScriptBlock { param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters) $null = $commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters + $pattern = switch (Get-GitHubConfig -Name CompletionMode) { 'Contains' { "*$wordToComplete*" } default { "$wordToComplete*" } } $params = @{ Owner = $fakeBoundParameters.Owner Repository = $fakeBoundParameters.Repository @@ -26,7 +28,7 @@ Register-ArgumentCompleter -CommandName ($script:PSModuleInfo.FunctionsToExport) Debug = $false } $params | Remove-HashtableEntry -NullOrEmptyValues - Get-GitHubEnvironment @params | Where-Object { $_.Name -like "$wordToComplete*" } | ForEach-Object { + Get-GitHubEnvironment @params | Where-Object { $_.Name -like $pattern } | ForEach-Object { [System.Management.Automation.CompletionResult]::new($_.Name, $_.Name, 'ParameterValue', $_.Name) } } diff --git a/src/functions/public/Gitignore/completers.ps1 b/src/functions/public/Gitignore/completers.ps1 index 53a53dac1..86d7df84e 100644 --- a/src/functions/public/Gitignore/completers.ps1 +++ b/src/functions/public/Gitignore/completers.ps1 @@ -1,12 +1,13 @@ Register-ArgumentCompleter -CommandName Get-GitHubGitignore -ParameterName Name -ScriptBlock { param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters) $null = $commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters + $pattern = switch (Get-GitHubConfig -Name CompletionMode) { 'Contains' { "*$wordToComplete*" } default { "$wordToComplete*" } } $params = @{ Context = $fakeBoundParameters.Context Verbose = $false Debug = $false } - Get-GitHubGitignore @params | Where-Object { $_ -like "$wordToComplete*" } | ForEach-Object { + Get-GitHubGitignore @params | Where-Object { $_ -like $pattern } | ForEach-Object { [System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_) } } diff --git a/src/functions/public/License/completers.ps1 b/src/functions/public/License/completers.ps1 index 8349d3be3..a4c5a4f10 100644 --- a/src/functions/public/License/completers.ps1 +++ b/src/functions/public/License/completers.ps1 @@ -1,12 +1,13 @@ Register-ArgumentCompleter -CommandName Get-GitHubLicense -ParameterName Name -ScriptBlock { param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters) $null = $commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters + $pattern = switch (Get-GitHubConfig -Name CompletionMode) { 'Contains' { "*$wordToComplete*" } default { "$wordToComplete*" } } $params = @{ Context = $fakeBoundParameters.Context Verbose = $false Debug = $false } - Get-GitHubLicense @params | Where-Object { $_.Name -like "$wordToComplete*" } | ForEach-Object { + Get-GitHubLicense @params | Where-Object { $_.Name -like $pattern } | ForEach-Object { [System.Management.Automation.CompletionResult]::new($_.Name, $_.Name, 'ParameterValue', $_.Name) } } diff --git a/src/functions/public/Organization/completers.ps1 b/src/functions/public/Organization/completers.ps1 index cf44acaa8..2994f0240 100644 --- a/src/functions/public/Organization/completers.ps1 +++ b/src/functions/public/Organization/completers.ps1 @@ -2,12 +2,13 @@ Where-Object { $_ -like '*GitHubOrganization' }) -ParameterName Name -ScriptBlock { param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters) $null = $commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters + $pattern = switch (Get-GitHubConfig -Name CompletionMode) { 'Contains' { "*$wordToComplete*" } default { "$wordToComplete*" } } $params = @{ Context = $fakeBoundParameters.Context Verbose = $false Debug = $false } - Get-GitHubOrganization @params | Where-Object { $_.Name -like "$wordToComplete*" } | ForEach-Object { + Get-GitHubOrganization @params | Where-Object { $_.Name -like $pattern } | ForEach-Object { [System.Management.Automation.CompletionResult]::new($_.Name, $_.Name, 'ParameterValue', $_.Name) } } @@ -15,12 +16,13 @@ Register-ArgumentCompleter -CommandName ($script:PSModuleInfo.FunctionsToExport) -ParameterName Owner -ScriptBlock { param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters) $null = $commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters + $pattern = switch (Get-GitHubConfig -Name CompletionMode) { 'Contains' { "*$wordToComplete*" } default { "$wordToComplete*" } } $params = @{ Context = $fakeBoundParameters.Context Verbose = $false Debug = $false } - Get-GitHubOrganization @params | Where-Object { $_.Name -like "$wordToComplete*" } | ForEach-Object { + Get-GitHubOrganization @params | Where-Object { $_.Name -like $pattern } | ForEach-Object { [System.Management.Automation.CompletionResult]::new($_.Name, $_.Name, 'ParameterValue', $_.Name) } } @@ -28,12 +30,13 @@ Register-ArgumentCompleter -CommandName ($script:PSModuleInfo.FunctionsToExport) Register-ArgumentCompleter -CommandName ($script:PSModuleInfo.FunctionsToExport) -ParameterName Organization -ScriptBlock { param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters) $null = $commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters + $pattern = switch (Get-GitHubConfig -Name CompletionMode) { 'Contains' { "*$wordToComplete*" } default { "$wordToComplete*" } } $params = @{ Context = $fakeBoundParameters.Context Verbose = $false Debug = $false } - Get-GitHubOrganization @params | Where-Object { $_.Name -like "$wordToComplete*" } | ForEach-Object { + Get-GitHubOrganization @params | Where-Object { $_.Name -like $pattern } | ForEach-Object { [System.Management.Automation.CompletionResult]::new($_.Name, $_.Name, 'ParameterValue', $_.Name) } } diff --git a/src/functions/public/Permission/completers.ps1 b/src/functions/public/Permission/completers.ps1 index a8e8f50ea..4586354f0 100644 --- a/src/functions/public/Permission/completers.ps1 +++ b/src/functions/public/Permission/completers.ps1 @@ -1,7 +1,8 @@ Register-ArgumentCompleter -CommandName Get-GitHubPermissionDefinition -ParameterName Name -ScriptBlock { param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters) $null = $commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters - $script:GitHub.Permissions.Name | Sort-Object -Unique | Where-Object { $_ -like "$wordToComplete*" } | ForEach-Object { + $pattern = switch (Get-GitHubConfig -Name CompletionMode) { 'Contains' { "*$wordToComplete*" } default { "$wordToComplete*" } } + $script:GitHub.Permissions.Name | Sort-Object -Unique | Where-Object { $_ -like $pattern } | ForEach-Object { [System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_) } } @@ -9,7 +10,8 @@ Register-ArgumentCompleter -CommandName Get-GitHubPermissionDefinition -ParameterName DisplayName -ScriptBlock { param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters) $null = $commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters - $script:GitHub.Permissions.DisplayName | Sort-Object -Unique | Where-Object { $_ -like "$wordToComplete*" } | ForEach-Object { + $pattern = switch (Get-GitHubConfig -Name CompletionMode) { 'Contains' { "*$wordToComplete*" } default { "$wordToComplete*" } } + $script:GitHub.Permissions.DisplayName | Sort-Object -Unique | Where-Object { $_ -like $pattern } | ForEach-Object { [System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_) } } @@ -17,7 +19,8 @@ Register-ArgumentCompleter -CommandName Get-GitHubPermissionDefinition -Paramete Register-ArgumentCompleter -CommandName Get-GitHubPermissionDefinition -ParameterName Type -ScriptBlock { param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters) $null = $commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters - $script:GitHub.Permissions.Type | Sort-Object -Unique | Where-Object { $_ -like "$wordToComplete*" } | ForEach-Object { + $pattern = switch (Get-GitHubConfig -Name CompletionMode) { 'Contains' { "*$wordToComplete*" } default { "$wordToComplete*" } } + $script:GitHub.Permissions.Type | Sort-Object -Unique | Where-Object { $_ -like $pattern } | ForEach-Object { [System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_) } } @@ -25,7 +28,8 @@ Register-ArgumentCompleter -CommandName Get-GitHubPermissionDefinition -Paramete Register-ArgumentCompleter -CommandName Get-GitHubPermissionDefinition -ParameterName Scope -ScriptBlock { param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters) $null = $commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters - $script:GitHub.Permissions.Scope | Sort-Object -Unique | Where-Object { $_ -like "$wordToComplete*" } | ForEach-Object { + $pattern = switch (Get-GitHubConfig -Name CompletionMode) { 'Contains' { "*$wordToComplete*" } default { "$wordToComplete*" } } + $script:GitHub.Permissions.Scope | Sort-Object -Unique | Where-Object { $_ -like $pattern } | ForEach-Object { [System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_) } } diff --git a/src/functions/public/Repositories/Permissions/completers.ps1 b/src/functions/public/Repositories/Permissions/completers.ps1 index cd99774b6..cdb1e0c2e 100644 --- a/src/functions/public/Repositories/Permissions/completers.ps1 +++ b/src/functions/public/Repositories/Permissions/completers.ps1 @@ -1,8 +1,8 @@ Register-ArgumentCompleter -CommandName Set-GitHubRepositoryPermission -ParameterName Permission -ScriptBlock { param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters) $null = $commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters - $permissions = @('None', 'Pull', 'Triage', 'Push', 'Maintain', 'Admin', 'Read', 'Write') - $permissions | Where-Object { $_ -like "$wordToComplete*" } | ForEach-Object { + $pattern = switch (Get-GitHubConfig -Name CompletionMode) { 'Contains' { "*$wordToComplete*" } default { "$wordToComplete*" } } + @('None', 'Pull', 'Triage', 'Push', 'Maintain', 'Admin', 'Read', 'Write') | Where-Object { $_ -like $pattern } | ForEach-Object { [System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_) } } diff --git a/src/functions/public/Repositories/completers.ps1 b/src/functions/public/Repositories/completers.ps1 index 01d39da7b..43ac6a7c7 100644 --- a/src/functions/public/Repositories/completers.ps1 +++ b/src/functions/public/Repositories/completers.ps1 @@ -1,12 +1,13 @@ Register-ArgumentCompleter -CommandName New-GitHubRepository -ParameterName Gitignore -ScriptBlock { param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters) $null = $commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters + $pattern = switch (Get-GitHubConfig -Name CompletionMode) { 'Contains' { "*$wordToComplete*" } default { "$wordToComplete*" } } $params = @{ Context = $fakeBoundParameters.Context Verbose = $false Debug = $false } - Get-GitHubGitignore @params | Where-Object { $_ -like "$wordToComplete*" } | ForEach-Object { + Get-GitHubGitignore @params | Where-Object { $_ -like $pattern } | ForEach-Object { [System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_) } } @@ -14,12 +15,13 @@ Register-ArgumentCompleter -CommandName New-GitHubRepository -ParameterName License -ScriptBlock { param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters) $null = $commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters + $pattern = switch (Get-GitHubConfig -Name CompletionMode) { 'Contains' { "*$wordToComplete*" } default { "$wordToComplete*" } } $params = @{ Context = $fakeBoundParameters.Context Verbose = $false Debug = $false } - Get-GitHubLicense @params | Where-Object { $_.Name -like "$wordToComplete*" } | ForEach-Object { + Get-GitHubLicense @params | Where-Object { $_.Name -like $pattern } | ForEach-Object { [System.Management.Automation.CompletionResult]::new($_.Name, $_.Name, 'ParameterValue', $_.Name) } } @@ -27,7 +29,8 @@ Register-ArgumentCompleter -CommandName New-GitHubRepository -ParameterName Lice Register-ArgumentCompleter -CommandName Get-GitHubRepository -ParameterName AdditionalProperty -ScriptBlock { param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters) $null = $commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters - [GitHubRepository].GetProperties().Name | Where-Object { $_ -like "$wordToComplete*" } | ForEach-Object { + $pattern = switch (Get-GitHubConfig -Name CompletionMode) { 'Contains' { "*$wordToComplete*" } default { "$wordToComplete*" } } + [GitHubRepository].GetProperties().Name | Where-Object { $_ -like $pattern } | ForEach-Object { [System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_) } } @@ -35,7 +38,8 @@ Register-ArgumentCompleter -CommandName Get-GitHubRepository -ParameterName Addi Register-ArgumentCompleter -CommandName Get-GitHubRepository -ParameterName Property -ScriptBlock { param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters) $null = $commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters - [GitHubRepository].GetProperties().Name | Where-Object { $_ -like "$wordToComplete*" } | ForEach-Object { + $pattern = switch (Get-GitHubConfig -Name CompletionMode) { 'Contains' { "*$wordToComplete*" } default { "$wordToComplete*" } } + [GitHubRepository].GetProperties().Name | Where-Object { $_ -like $pattern } | ForEach-Object { [System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_) } } @@ -43,13 +47,14 @@ Register-ArgumentCompleter -CommandName Get-GitHubRepository -ParameterName Prop Register-ArgumentCompleter -CommandName ($script:PSModuleInfo.FunctionsToExport) -ParameterName Repository -ScriptBlock { param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters) $null = $commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters + $pattern = switch (Get-GitHubConfig -Name CompletionMode) { 'Contains' { "*$wordToComplete*" } default { "$wordToComplete*" } } $params = @{ Owner = $fakeBoundParameters.Owner ?? $fakeBoundParameters.Organization Context = $fakeBoundParameters.Context Verbose = $false Debug = $false } - Get-GitHubRepository @params | Where-Object { $_.Name -like "$wordToComplete*" } | ForEach-Object { + Get-GitHubRepository @params | Where-Object { $_.Name -like $pattern } | ForEach-Object { [System.Management.Automation.CompletionResult]::new($_.Name, $_.Name, 'ParameterValue', $_.Name) } } @@ -58,13 +63,14 @@ Register-ArgumentCompleter -CommandName ($script:PSModuleInfo.FunctionsToExport Where-Object { $_ -like '*GitHubRepository' }) -ParameterName Name -ScriptBlock { param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters) $null = $commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters + $pattern = switch (Get-GitHubConfig -Name CompletionMode) { 'Contains' { "*$wordToComplete*" } default { "$wordToComplete*" } } $params = @{ Owner = $fakeBoundParameters.Owner ?? $fakeBoundParameters.Organization Context = $fakeBoundParameters.Context Verbose = $false Debug = $false } - Get-GitHubRepository @params | Where-Object { $_.Name -like "$wordToComplete*" } | ForEach-Object { + Get-GitHubRepository @params | Where-Object { $_.Name -like $pattern } | ForEach-Object { [System.Management.Automation.CompletionResult]::new($_.Name, $_.Name, 'ParameterValue', $_.Name) } } diff --git a/src/functions/public/Secrets/completers.ps1 b/src/functions/public/Secrets/completers.ps1 index b15f6d0cd..411ed8ace 100644 --- a/src/functions/public/Secrets/completers.ps1 +++ b/src/functions/public/Secrets/completers.ps1 @@ -2,6 +2,7 @@ Where-Object { $_ -like '*GitHubSecret' }) -ParameterName Name -ScriptBlock { param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters) $null = $commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters + $pattern = switch (Get-GitHubConfig -Name CompletionMode) { 'Contains' { "*$wordToComplete*" } default { "$wordToComplete*" } } $params = @{ Owner = $fakeBoundParameters.Owner Repository = $fakeBoundParameters.Repository @@ -11,7 +12,7 @@ Debug = $false } $params | Remove-HashtableEntry -NullOrEmptyValues - Get-GitHubSecret @params | Where-Object { $_.Name -like "$wordToComplete*" } | ForEach-Object { + Get-GitHubSecret @params | Where-Object { $_.Name -like $pattern } | ForEach-Object { [System.Management.Automation.CompletionResult]::new($_.Name, $_.Name, 'ParameterValue', $_.Name) } } diff --git a/src/functions/public/Teams/completers.ps1 b/src/functions/public/Teams/completers.ps1 index a91ce2502..64d643909 100644 --- a/src/functions/public/Teams/completers.ps1 +++ b/src/functions/public/Teams/completers.ps1 @@ -2,13 +2,14 @@ Where-Object { $_ -like '*GitHubTeam' }) -ParameterName Slug -ScriptBlock { param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters) $null = $commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters + $pattern = switch (Get-GitHubConfig -Name CompletionMode) { 'Contains' { "*$wordToComplete*" } default { "$wordToComplete*" } } $params = @{ Organization = $fakeBoundParameters.Organization Context = $fakeBoundParameters.Context Verbose = $false Debug = $false } - Get-GitHubTeam @params | Where-Object { $_.Slug -like "$wordToComplete*" } | ForEach-Object { + Get-GitHubTeam @params | Where-Object { $_.Slug -like $pattern } | ForEach-Object { [System.Management.Automation.CompletionResult]::new($_.Slug, $_.Slug, 'ParameterValue', $_.Slug) } } @@ -16,13 +17,14 @@ Register-ArgumentCompleter -CommandName ($script:PSModuleInfo.FunctionsToExport) -ParameterName Team -ScriptBlock { param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters) $null = $commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters + $pattern = switch (Get-GitHubConfig -Name CompletionMode) { 'Contains' { "*$wordToComplete*" } default { "$wordToComplete*" } } $params = @{ Organization = $fakeBoundParameters.Organization ?? $fakeBoundParameters.Owner Context = $fakeBoundParameters.Context Verbose = $false Debug = $false } - Get-GitHubTeam @params | Where-Object { $_.Slug -like "$wordToComplete*" } | ForEach-Object { + Get-GitHubTeam @params | Where-Object { $_.Slug -like $pattern } | ForEach-Object { [System.Management.Automation.CompletionResult]::new($_.Slug, $_.Slug, 'ParameterValue', $_.Slug) } } diff --git a/src/functions/public/Variables/completers.ps1 b/src/functions/public/Variables/completers.ps1 index 1f6a39ae5..c897efa47 100644 --- a/src/functions/public/Variables/completers.ps1 +++ b/src/functions/public/Variables/completers.ps1 @@ -2,6 +2,7 @@ Where-Object { $_ -like '*GitHubVariable' }) -ParameterName Name -ScriptBlock { param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters) $null = $commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters + $pattern = switch (Get-GitHubConfig -Name CompletionMode) { 'Contains' { "*$wordToComplete*" } default { "$wordToComplete*" } } $params = @{ Owner = $fakeBoundParameters.Owner Repository = $fakeBoundParameters.Repository @@ -11,7 +12,7 @@ Debug = $false } $params | Remove-HashtableEntry -NullOrEmptyValues - Get-GitHubVariable @params | Where-Object { $_.Name -like "$wordToComplete*" } | ForEach-Object { + Get-GitHubVariable @params | Where-Object { $_.Name -like $pattern } | ForEach-Object { [System.Management.Automation.CompletionResult]::new($_.Name, $_.Name, 'ParameterValue', $_.Name) } } diff --git a/src/functions/public/Workflows/completers.ps1 b/src/functions/public/Workflows/completers.ps1 index cebb7ed67..29a8fb0e4 100644 --- a/src/functions/public/Workflows/completers.ps1 +++ b/src/functions/public/Workflows/completers.ps1 @@ -2,6 +2,7 @@ Where-Object { $_ -like '*GitHubWorkflow' }) -ParameterName Name -ScriptBlock { param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters) $null = $commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters + $pattern = switch (Get-GitHubConfig -Name CompletionMode) { 'Contains' { "*$wordToComplete*" } default { "$wordToComplete*" } } $params = @{ Owner = $fakeBoundParameters.Owner Repository = $fakeBoundParameters.Repository @@ -10,7 +11,7 @@ Debug = $false } $params | Remove-HashtableEntry -NullOrEmptyValues - Get-GitHubWorkflow @params | Where-Object { $_.Name -like "$wordToComplete*" } | ForEach-Object { + Get-GitHubWorkflow @params | Where-Object { $_.Name -like $pattern } | ForEach-Object { [System.Management.Automation.CompletionResult]::new($_.Name, $_.Name, 'ParameterValue', $_.Name) } } @@ -18,6 +19,7 @@ Register-ArgumentCompleter -CommandName ($script:PSModuleInfo.FunctionsToExport Where-Object { $_ -like '*GitHubWorkflow' }) -ParameterName ID -ScriptBlock { param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters) $null = $commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters + $pattern = switch (Get-GitHubConfig -Name CompletionMode) { 'Contains' { "*$wordToComplete*" } default { "$wordToComplete*" } } $params = @{ Owner = $fakeBoundParameters.Owner Repository = $fakeBoundParameters.Repository @@ -26,7 +28,7 @@ Register-ArgumentCompleter -CommandName ($script:PSModuleInfo.FunctionsToExport Debug = $false } $params | Remove-HashtableEntry -NullOrEmptyValues - Get-GitHubWorkflow @params | Where-Object { $_.ID -like "$wordToComplete*" } | ForEach-Object { + Get-GitHubWorkflow @params | Where-Object { $_.ID -like $pattern } | ForEach-Object { [System.Management.Automation.CompletionResult]::new($_.ID, "$($_.Name) ($($_.ID))", 'ParameterValue', "$($_.Name) ($($_.ID))" ) } } diff --git a/src/variables/private/GitHub.ps1 b/src/variables/private/GitHub.ps1 index 917d0be14..190de6d2d 100644 --- a/src/variables/private/GitHub.ps1 +++ b/src/variables/private/GitHub.ps1 @@ -19,6 +19,7 @@ $script:GitHub = [pscustomobject]@{ RetryCount = 0 RetryInterval = 1 EnvironmentType = Get-GitHubEnvironmentType + CompletionMode = 'StartsWith' } Config = $null Event = $null