PowerShell / EditorSyntax

PowerShell syntax highlighting for editors (VS Code, Atom, SublimeText, TextMate, etc.) and GitHub!
MIT License
133 stars 45 forks source link

Closing round bracket breaks syntax highlighting on ValidatePattern parameter attribute #74

Closed TylerLeonhardt closed 6 years ago

TylerLeonhardt commented 6 years ago

From @jlucktay on December 4, 2016 16:5

System Details

Name                           Value
----                           -----
PSVersion                      5.1.14393.206
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.14393.206
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

Issue Description

I am experiencing a problem with syntax highlighting inside a ValidatePattern attribute on a parameter.

The highlighting seems to break if I make use of a closing round bracket ) inside the validation pattern.

In that part of the pattern, I want the URL to optionally have videos/ in it.

Here is the code from the screenshots, to save from having to type it out when reproducing:

$ErrorActionPreference = "Stop"
Set-StrictMode -Version Latest

function Convert-UrlForApi {
    param(
        [Parameter(Mandatory=$true)]
        [ValidatePattern('^http:\/\/www.giantbomb.com\/(videos\/)?[a-z0-9\-]+\/[0-9]+-')]
        [ValidateScript({[Uri]::IsWellFormedUriString($($_), [UriKind]::Absolute)})]
        [String]$Url
    )

    if ($Url -match "\/3030\-[0-9]+\/$") {
        return "http://www.giantbomb.com/api/game$($Matches[0])"
    } elseif ($Url -match "\/2300\-[0-9]+\/$") {
        return "http://www.giantbomb.com/api/video$($Matches[0])"
    } else {
        return $null
    }
}

Please see the screenshots below.

The function itself executes fine and works absolutely as expected and desired with the round bracket in place, so it's just the syntax highlighter getting confused about the round bracket inside the pattern string.

Attached Logs

OK without the round bracket

image

Not OK with the round bracket

image

Copied from original issue: PowerShell/vscode-powershell#357

TylerLeonhardt commented 6 years ago

From @tonylea on February 21, 2017 13:26

I've also noticed this issue.

Using:

Validate pattern am using: [ValidatePattern("^([0-9a-fA-F]{2}[:-]{0,1}){5}[0-9a-fA-F]{2}$")]

TylerLeonhardt commented 6 years ago

From @cantrellj on February 22, 2018 17:56

Appears to happen in ValidateScript also

System Details Operating system name and version: Windows 10 Pro 10.0.10586.0 VS Code version: 1.19.3 PowerShell extension version: 1.6.0 Output from $PSVersionTable:

Name                           Value
----                           -----
PSVersion                      5.0.10586.1295
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.10586.1295
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

image

TylerLeonhardt commented 6 years ago

From @rkeithhill on February 23, 2018 3:34

Syntax highlighting is being managed out of the https://GitHub.com/powershell/editorsyntax project. @tylerl0706 Can you move this issue over to that repo?

TylerLeonhardt commented 6 years ago

From @gazm81 on April 6, 2018 0:6

This is still an issue in VS code 1.21.1 with PowerShell plugin 1.60. Doesn't appear on any other IDE we have tested.

omniomi commented 6 years ago

This is the same as issue #75, I found a fix and will submit a PR after more testing.

jlucktay commented 6 years ago

Nice one, thanks @omniomi !

TylerLeonhardt commented 6 years ago

@omniomi is the man 🎉 💪

omniomi commented 6 years ago

Fixed by #94