Settings file creation and validation#2176
Open
liamjpeters wants to merge 3 commits intoPowerShell:mainfrom
Open
Settings file creation and validation#2176liamjpeters wants to merge 3 commits intoPowerShell:mainfrom
liamjpeters wants to merge 3 commits intoPowerShell:mainfrom
Conversation
…onfigurable rules
- Implemented `New-ScriptAnalyzerSettingsFile` cmdlet to create a new PSScriptAnalyzer settings file, with options for presets and overwriting existing files. - Added `Test-ScriptAnalyzerSettingsFile` cmdlet to validate settings files, checking for parseability, rule existence, and valid options. - Created comprehensive tests for both cmdlets to ensure functionality and error handling. - Updated module manifest to export the new cmdlets. - Added documentation for both cmdlets, including usage examples and parameter descriptions. - Enhanced error messages in the strings resource file for better clarity during validation failures.
- Update Helper.cs to return null for empty output paths instead of an empty array. - Add new error message for invalid option types in Strings.resx. - Extend tests for New-ScriptAnalyzerSettingsFile to check for new keys: CustomRulePath, IncludeDefaultRules, and RecurseCustomRulePath. - Modify Test-ScriptAnalyzerSettingsFile tests to validate output and error handling for various scenarios, including type mismatches and invalid values. - Improve documentation for New-ScriptAnalyzerSettingsFile and Test-ScriptAnalyzerSettingsFile to clarify behavior and parameters, including handling of custom rules and output format.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
PR Summary
Extracted and built upon the settings discoverability of my PR #2134 (omitting all of the JSON file format bits and settings refactoring).
New-ScriptAnalyzerSettingsFile, which generates complete settings files with everything set to it's default value.Test-ScriptAnalyzerSettingsFile, which validates a settings file (All rule names are valid, all settings valid etc).Get-ScriptAnalyzerRuleto include anOptionsproprety for configurable rules, including default value.ProcessCustomRulePathsEngine Helper to ignore an empty array ofCustomRulePaths.Motivation
It's not easy or convenient to find out what all the rules and rule settings available are. Your options are really to look at this repo, copy a preset/existing settings file, or look through all of the rules pages on MSLearn. Many people do not even know about settings files.
As a module developer, I want a way to discover what the available rules are and what options they have. I want an effortless way to add a settings file to my project that I can configure to my liking.
New-ScriptAnalyzerSettingsFileBy default this creates a ScriptAnalyzer settings file populated with all rule names and rule configuration (set to default values). The file has some comment help for each field.
The file is always named
PSScriptAnalyzerSettings.psd1so that automatic settings discovery inInvoke-ScriptAnalyzerpicks it up without any-Settingsparameter needed.Any rule configuration that is an enum - we attempt to list the possible values as a comment after the default value.
Example output of running
New-ScriptAnalyzerSettingsFilein this gistYou can optionally base the rule file on a preset. It takes the settings defined in the preset and normalises it all with the comments and all settings fields.
Example output of running
New-ScriptAnalyzerSettingsFile -BaseOnPreset CmdletDesignin this gist.Test-ScriptAnalyzerSettingsFileThis validates a settings file and tells you exactly what's wrong and where. It checks for:
IncludeRules,ExcludeRules, andRulesRulesthat aren't configurablebool,int,string,arrays)Kind = 'banana'when the valid values arespaceandtab)Each problem comes back as a
DiagnosticRecord, unless-Quietmode used - then just a boolean$true`$false` indicating whether the file is valid or not is returned.I debated for a while whether this should have just been a rule and after some chicken-or-egg thinking, decided it should be a separate cmdlet.
Get-ScriptAnalyzerRuleAdded an
Optionsproperty to the RuleInfo. I have not updated the format file, so it's not shown by default. I didn't know the implications of updating the format file.Running
Get-ScriptAnalyzerRule -Name PSUseConsistentIndentation | select -expand Optionsgets you:Successful test run in my fork.
PR Checklist
.cs,.ps1and.psm1files have the correct copyright headerWIP:to the beginning of the title and remove the prefix when the PR is ready.