From c38026f645f10a2af1aee219ea0f8699b6903bbf Mon Sep 17 00:00:00 2001 From: Mark Schofield Date: Sun, 5 Oct 2025 20:57:10 -0700 Subject: [PATCH] Add PSScriptAnalyzer settings, add Build\RunScriptAnalyzer.ps1 --- .vscode/PSScriptAnalyzerSettings.psd1 | 13 +++++++++++++ .vscode/settings.json | 8 +++++--- Build/RunScriptAnalyzer.ps1 | 18 ++++++++++++++++++ PSCMake/Common/CMake.ps1 | 6 +++--- Tests/Build-CMakeBuild.Tests.ps1 | 1 + 5 files changed, 40 insertions(+), 6 deletions(-) create mode 100644 .vscode/PSScriptAnalyzerSettings.psd1 create mode 100644 Build/RunScriptAnalyzer.ps1 diff --git a/.vscode/PSScriptAnalyzerSettings.psd1 b/.vscode/PSScriptAnalyzerSettings.psd1 new file mode 100644 index 0000000..355e88a --- /dev/null +++ b/.vscode/PSScriptAnalyzerSettings.psd1 @@ -0,0 +1,13 @@ +@{ + Rules = @{ + PSReviewUnusedParameter = @{ + CommandsToTraverse = @( + 'SearchAncestors' + 'Using-Location' + ) + } + } + IncludeRules = @('*') + ExcludeRules = @('PSUseApprovedVerbs') +} + diff --git a/.vscode/settings.json b/.vscode/settings.json index 9f7a7f3..27a865f 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,5 +1,7 @@ { - "powershell.codeFormatting.pipelineIndentationStyle": "IncreaseIndentationForFirstPipeline", - "powershell.codeFormatting.newLineAfterCloseBrace": false, - "editor.renderWhitespace": "all" + "editor.renderWhitespace": "all", + "powershell.codeFormatting.newLineAfterCloseBrace": false, + "powershell.codeFormatting.pipelineIndentationStyle": "IncreaseIndentationForFirstPipeline", + "powershell.scriptAnalysis.enable": true, + "powershell.scriptAnalysis.settingsPath": ".vscode/PSScriptAnalyzerSettings.psd1" } diff --git a/Build/RunScriptAnalyzer.ps1 b/Build/RunScriptAnalyzer.ps1 new file mode 100644 index 0000000..f0bff31 --- /dev/null +++ b/Build/RunScriptAnalyzer.ps1 @@ -0,0 +1,18 @@ +#Requires -PSEdition Core + +[CmdletBinding()] +param( +) + +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' + +$WorkingDirectory = $PSScriptRoot +$RepositoryRoot = Resolve-Path -Path (& git -C $WorkingDirectory rev-parse '--show-toplevel') +$SettingsFile = Join-Path -Path $RepositoryRoot -ChildPath '.vscode\PSScriptAnalyzerSettings.psd1' +& git -C $RepositoryRoot ls-files *.ps1 *.psm1 *.psd1 | + ForEach-Object { Get-Item -Path (Join-Path -Path $RepositoryRoot -ChildPath $_) } | + ForEach-Object { Invoke-ScriptAnalyzer -Path $_ -Settings $SettingsFile } | + ForEach-Object { + "$($_.ScriptPath):$($_.Line):$($_.Column) [$($_.RuleName)] $($_.Message)" + } diff --git a/PSCMake/Common/CMake.ps1 b/PSCMake/Common/CMake.ps1 index 08e259a..3f3c5f9 100644 --- a/PSCMake/Common/CMake.ps1 +++ b/PSCMake/Common/CMake.ps1 @@ -217,7 +217,7 @@ function ResolvePresetProperty { $Presets, $PropertyName ) - SearchAncestors $Preset $Presets { + SearchAncestors -Preset $Preset -Presets $Presets { param($CurrentPreset) Get-MemberValue -InputObject $CurrentPreset -Name $PropertyName } @@ -228,7 +228,7 @@ function EvaluatePresetCondition { $Preset, $Presets ) - $Result = SearchAncestors $Preset $Presets { + $Result = SearchAncestors -Preset $Preset -Presets $Presets { param($CurrentPreset) $PresetConditionJson = Get-MemberValue $CurrentPreset 'condition' if (($PresetConditionJson) -and @@ -306,7 +306,7 @@ function GetBinaryDirectory { $CMakePresetsJson, $ConfigurePreset ) - $BinaryDirectory = ResolvePresetProperty $ConfigurePreset $CMakePresetsJson.configurePresets 'binaryDir' + $BinaryDirectory = ResolvePresetProperty -Preset $ConfigurePreset -Presets $CMakePresetsJson.configurePresets -PropertyName 'binaryDir' # Perform macro-replacement $Result = MacroReplacement $BinaryDirectory $ConfigurePreset diff --git a/Tests/Build-CMakeBuild.Tests.ps1 b/Tests/Build-CMakeBuild.Tests.ps1 index 57b8e49..8dcb341 100644 --- a/Tests/Build-CMakeBuild.Tests.ps1 +++ b/Tests/Build-CMakeBuild.Tests.ps1 @@ -21,6 +21,7 @@ BeforeAll { [string] $CMakePath, [string[]] $Arguments ) + $null = $CMakePath $script:CMakeCalls += , $Arguments } }