Skip to content

Commit d1bec74

Browse files
authored
Allow -Setting parameter to resolve setting presets as well when object is still a PSObject in BeginProcessing (#928)
* fix issue 807 by also trying to resolve the settings preset if the object is not resolved to a string yet. Tidy up existing logic. TODO: add test (we do not have test coverage for setting presets) * add test * address PR comment about test syntax
1 parent a503078 commit d1bec74

File tree

2 files changed

+32
-23
lines changed

2 files changed

+32
-23
lines changed

Engine/Settings.cs

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -690,40 +690,42 @@ internal static SettingsMode FindSettingsMode(object settings, string path, out
690690
}
691691
else
692692
{
693-
var settingsFilePath = settingsFound as String;
694-
if (settingsFilePath != null)
695-
{
696-
if (IsBuiltinSettingPreset(settingsFilePath))
697-
{
698-
settingsMode = SettingsMode.Preset;
699-
settingsFound = GetSettingPresetFilePath(settingsFilePath);
700-
}
701-
else
702-
{
703-
settingsMode = SettingsMode.File;
704-
settingsFound = settingsFilePath;
705-
}
706-
}
707-
else
693+
if (!TryResolveSettingForStringType(settingsFound, ref settingsMode, ref settingsFound))
708694
{
709695
if (settingsFound is Hashtable)
710696
{
711697
settingsMode = SettingsMode.Hashtable;
712698
}
713-
else // if the provided argument is wrapped in an expressions then PowerShell resolves it but it will be of type PSObject and we have to operate then on the BaseObject
699+
// if the provided argument is wrapped in an expressions then PowerShell resolves it but it will be of type PSObject and we have to operate then on the BaseObject
700+
else if (settingsFound is PSObject settingsFoundPSObject)
714701
{
715-
if (settingsFound is PSObject settingsFoundPSObject)
716-
{
717-
if (settingsFoundPSObject.BaseObject is String)
718-
{
719-
settingsMode = SettingsMode.File;
720-
}
721-
}
702+
TryResolveSettingForStringType(settingsFoundPSObject.BaseObject, ref settingsMode, ref settingsFound);
722703
}
723704
}
724705
}
725706

726707
return settingsMode;
727708
}
709+
710+
// If the settings object is a string determine wheter it is one of the settings preset or a file path and resolve the setting in the former case.
711+
private static bool TryResolveSettingForStringType(object settingsObject, ref SettingsMode settingsMode, ref object resolvedSettingValue)
712+
{
713+
if (settingsObject is string settingsString)
714+
{
715+
if (IsBuiltinSettingPreset(settingsString))
716+
{
717+
settingsMode = SettingsMode.Preset;
718+
resolvedSettingValue = GetSettingPresetFilePath(settingsString);
719+
}
720+
else
721+
{
722+
settingsMode = SettingsMode.File;
723+
resolvedSettingValue = settingsString;
724+
}
725+
return true;
726+
}
727+
728+
return false;
729+
}
728730
}
729731
}

Tests/Engine/InvokeScriptAnalyzer.tests.ps1

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -406,6 +406,13 @@ Describe "Test CustomizedRulePath" {
406406
Pop-Location
407407
}
408408
}
409+
410+
It "resolves rule preset when passed in via pipeline" {
411+
$warnings = 'CodeFormattingStroustrup' | ForEach-Object {
412+
Invoke-ScriptAnalyzer -ScriptDefinition 'if ($true){}' -Settings $_}
413+
$warnings.Count | Should -Be 1
414+
$warnings.RuleName | Should -Be 'PSUseConsistentWhitespace'
415+
}
409416

410417
It "Should use the CustomRulePath parameter" {
411418
$settings = @{

0 commit comments

Comments
 (0)