All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
Measure-GremlinCharacter: New rule to detect invisible or visually deceptive Unicode characters (gremlins) such as zero-width spaces, bidirectional overrides, and curly quotes. 19 characters flagged with per-character severity (Error,Warning, orInformation). Inspired by vscode-gremlins.- Tests for
Measure-GremlinCharacterwith per-character-ForEachcases, a negative clean-code case, a fixture-based detection test, and a suppression test usingSuppressMessageAttribute. CLAUDE.mdwith project guidance for Claude Code.
Measure-TODOComment: UpdatedTokenparameter type toToken[]to match how PSScriptAnalyzer invokes token-based rules; renamed$matchesto$regexMatchesto avoid collision with the automatic$Matchesvariable; normalized keyword casing to lowercase.tests/PSScriptAnalyzerRules.psm1: Proxy module now loads explicitly from theOutput\GoodEnoughRulesbuild directory.
Measure-BasicWebRequestProperty: AST search modified to fix duplicate errors due to recursive search.Measure-InvokeWebRequestWithoutBasic: AST search modified to fix duplicate errors due to recursive search.
Measure-BasicWebRequestProperty: Detects whenInvoke-WebRequestusesUseBasicParsingwith incompatible properties likeForms,ParsedHtml,Scripts, orAllElements. Works with both direct property access and variable assignments.Measure-InvokeWebRequestWithoutBasic: FlagsInvoke-WebRequest(and its aliasesiwr,curl) when used without theUseBasicParsingparameter.Get-CommandParameter: New private helper function to parse command parameters from AST, including support for positional parameters.- Documentation for new rules in
docs/en-US/directory. - Comprehensive test coverage for new rules.
- Updated
about_GoodEnoughRules.help.mdwith complete module documentation including examples, rule descriptions, and troubleshooting guidance. Measure-SecureStringWithKey: Standardized parameter block formatting and updated to useGet-CommandParameterhelper function.- Test files: Added BeforeAll checks to ensure module builds before testing.
- Improved code consistency across all rule files (param block formatting, using consistent helper function names).
Measure-SecureStringWithKeynow check ifConvertFrom-SecureStringis used without a-Keyparameter. If you don't use a key then it's use the DPAPI which means the secret is user and machine bound.
- Perf improvements to
Measure-TODOComment(#3).
Measure-TODOCommentnow uses[System.Management.Automation.Language.Token]to find comments. This makes it so it only highlights the comment!
Measure-TODOCommentis a PSScriptAnalyzer rule to detect if a TODO style comment exists in your code.