PSScriptAnalyzer icon indicating copy to clipboard operation
PSScriptAnalyzer copied to clipboard

Rule Request: UseCompatibleStrings

Open daprahamian opened this issue 1 year ago • 4 comments

Summary of the new feature

The `e and `u{xxxx} special characters in double-quoted strings were added in Powershell 6. It would be nice to have a compatibility rule that detects these escape characters when writing for Powershell <6 and suggests a different syntax (ex. suggesting $([char]0x1b) for `e)

What is the latest version of PSScriptAnalyzer at the point of writing v1.22

daprahamian avatar Jul 22 '24 21:07 daprahamian

I would name it UseCompatibleEscapeSequences as it specifically concerns the use of compatible escape sequences

iRon7 avatar Jul 25 '24 09:07 iRon7

Thanks... would want to make sure this came with great test coverage 😄

SydneyhSmith avatar Jul 30 '24 22:07 SydneyhSmith

Specifically for the escape character (`e): $([char]0x1b) is a nice suggestion for the auto correction (-fix), yet my recommendation for a (documented) more idiomatic (and presumably more efficient) compatible correction would be to define a new (common) $Esc variable also knowing that in most cases this doesn't require any Subexpression operator $( ) as it is usually followed by a special character:

$Esc = $([char]0x1b)
"This is $Esc[7mInverse$Esc[27m text."

The same might apply to any specific unicode escape sequences (although less common):

$Smiley = $([char]0x263a)
"Please $Smiley, I am taking a picture"

iRon7 avatar Aug 02 '24 09:08 iRon7

@iRon7 I'm not sure I agree that we should be defining a new variable.

There's a minutia of complexities with doing so. Not least of all:

  • What do you call the variable so that it doesn't clash or shadow an existing one?

  • Where do you define the variable?

With PowerShell's dynamic scopes, lexical analysis would be insufficient to find a suitable name or place. Though perhaps I'm over-thinking it? 🤔

I've made a first stab at the MVP of this and learned a fair bit.

UseCompatibleEscapeSequences

As Sydney says, much testing is going to be needed; There are many edge cases.

liamjpeters avatar Aug 08 '24 17:08 liamjpeters