src/UI/40-Conflicts.ps1
|
# 40-Conflicts.ps1 — validation issues, duplicate names, command shadowing. # Rendered to text and paged (the alt screen has no scrollback). function script:Build-PSMMConflictLines { param([Parameter(Mandatory)] $Conflict) $lines = [System.Collections.Generic.List[string]]::new() $addTable = { param($Title, $Rows, $Columns) $lines.Add('') $lines.Add("== $Title ==") if (-not $Rows.Count) { $lines.Add(' none'); return } $T = [Spectre.Console.Table]::new() $T.Border = [Spectre.Console.TableBorder]::Rounded foreach ($c in $Columns) { [void][Spectre.Console.TableExtensions]::AddColumn($T, $c) } foreach ($r in $Rows) { [void][Spectre.Console.TableExtensions]::AddRow($T, [string[]]@($r | ForEach-Object { ConvertTo-PSMMSafe "$_" })) } foreach ($l in (ConvertTo-PSMMTextLines -Renderable $T)) { $lines.Add($l) } } & $addTable 'Validation issues' @( $Conflict.Validation | ForEach-Object { , @($_.Name, (Split-Path $_.Source -Leaf), $_.Issues, $(if ($_.Writable) { 'yes' } else { 'no' })) } ) @('Name', 'Source', 'Issues', 'RW') & $addTable 'Duplicate module names' @( $Conflict.Duplicates | ForEach-Object { , @($_.Name, $_.Count, $_.Sources) } ) @('Name', 'Count', 'Sources') & $addTable 'Command shadowing (loaded modules)' @( $Conflict.Shadowed | ForEach-Object { , @($_.Command, $_.Modules) } ) @('Command', 'Modules') $warnings = Get-PSMMWarning if ($warnings.Count) { $lines.Add('') $lines.Add('== Config warnings (this session) ==') foreach ($w in $warnings) { $lines.Add(" $w") } } $lines } function script:Show-PSMMConflicts { $c = Get-PSMMConflict -Entries (Get-PSMMAllEntries) $lines = Build-PSMMConflictLines -Conflict $c Show-PSMMPager -Lines $lines -TitleMarkup "[$script:PSMM_ColAccent]Conflicts & validation[/]" } |