Where/Foreach-object breaks syntax hightlighting
oivindoh opened this issue · comments
$SomeComputer = 'localhost'
$RemoteServicePS = @{
'VMware' = @{
'Service' = $(get-service -verbose:$false -computername $SomeComputer -displayName 'VMware Tools');
'EndpointContracts' = @('ISimService','IServiceBroker');
'Identity' = '';
};
}
$ServicesToSkip = @()
$RemoteServiceCIM = @{}; $HasServicePrincipalNames = @{}
$RemoteServicePS.GetEnumerator() | % {
$thisServiceKey = $_.Key
if ($_.Value.Service -ne $null){
$thisCIMService = $(get-ciminstance win32_service -verbose:$false -computername $_.Value.Service.MachineName -filter "name='$($_.Value.Service.ServiceName)'")
$thisCIMServiceUser = $thisCIMService.StartName
write-host $thisCIMServiceUser
# etc.
}
}
After updating language-powershell to the most recent release the following from the code above breaks code highlighting for me:
$thisCIMService = $(get-ciminstance win32_service -verbose:$false -computername $_.Value.Service.MachineName -filter "name='$($_.Value.Service.ServiceName)'")
The same also appears to be the case for the following little snippet (code hightlighting continues as before if commented out):
$thisBitVersionMatches = $FilesPresent | where {$_.FullName -match "^(?=.*$thisVersion)((?=.*$thisBitness)|(?=.*$thisSupportBit))(?=.*redist).*$"}
I also see the issue in places such as this:
foreach ($Tool in $Tools){
$ToolFromWhere.Keys | % {
if (($_ -match $Tool) -and -not ($ToolsToDownload -contains $ToolFromWhere."$($_)")){
write-verbose ('Fetching {0} from {1}' -f $_, $ToolFromWhere."$($_)")
$ToolsToDownload += $ToolFromWhere."$($_)"
[URI]$thisURI = $ToolFromWhere."$($_)"
$thisFileName = $thisURI.Segments[-1]
$thisTempFile = join-path -path $env:TEMP -childpath $thisFileName
start-bitstransfer -source $thisURI -destination $thisTempFile
Where if I comment out lines [3-6] highlighting continues.
Another example where the Where line breaks highlighting:
Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' -recurse |
Get-ItemProperty -name Version,Release -EA 0 |
Where { $_.PSChildName -match '^(?!S)\p{L}'} |
Select PSChildName, Version, Release, @{
name="Product"
expression={
switch($_.Release) {
My gut feeling says it's related to PR50 since it's all directly after a foreach/where, but I'm not really sure. Is there anything I can do to provide a clearer report/exclude other potential sources of the issue?
Thanks for the report! This is also related to PR #52, this package is adopting the syntax grammar put out by the PowerShell team and i think this may be a regression due to that move.
i think i'll forward this one on to the PowerShell/EditorSyntax repository and we'll see what they say. Maybe it will be possible to apply changes similar to #50 in their language file?
This issue was moved to PowerShell/EditorSyntax#24
Hi! i've reverted back to the previous grammar file, so things should be back where they were. If they aren't, please let me know!
Thanks for your patience with me as i fix this, and i'm so sorry you hit up against problems. It wasn't a wise decision for me to rush into bumping the grammar versions 😨
Fixed by #65, thanks for your patience.