Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rule Request: UseCompatibleStrings #2015

Open
daprahamian opened this issue Jul 22, 2024 · 4 comments
Open

Rule Request: UseCompatibleStrings #2015

daprahamian opened this issue Jul 22, 2024 · 4 comments

Comments

@daprahamian
Copy link

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

@iRon7
Copy link

iRon7 commented Jul 25, 2024

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

@SydneyhSmith
Copy link
Collaborator

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

@iRon7
Copy link

iRon7 commented Aug 2, 2024

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"

@liamjpeters
Copy link
Contributor

@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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants