Private/Get-TokenColor.ps1
|
. (Join-Path (Join-Path $PSScriptRoot '..\Public') 'HighlightTheme.ps1') function Get-TokenColor( [System.Management.Automation.Language.TokenKind]$tokenKind, [System.Management.Automation.Language.TokenFlags]$tokenFlags) { Write-Debug "<# tk: $tokenKind, Tf: $tokenFlags #>"; # We need to test either, or both of these: # - [Enum]::GetValues([System.Management.Automation.Language.TokenKind]) # See: https://learn.microsoft.com/en-us/dotnet/api/system.management.automation.language.tokenkind # - [Enum]::GetValues([System.Management.Automation.Language.TokenFlags]) # See: https://learn.microsoft.com/en-us/dotnet/api/system.management.automation.language.tokenflags # First, we check the token kind... if ($tokenKind -eq [System.Management.Automation.Language.TokenKind]::Number) { return $h_NumberColor; } if ($tokenKind -eq [System.Management.Automation.Language.TokenKind]::Variable) { return $h_VariableColor; } if ($tokenKind -eq [System.Management.Automation.Language.TokenKind]::Parameter) { return $h_ParameterColor; } if ($tokenKind -eq [System.Management.Automation.Language.TokenKind]::SplattedVariable) { return $h_VariableColor; } ## A redirection operator such as '2>&1' or '>>'. if ($tokenKind -eq [System.Management.Automation.Language.TokenKind]::Redirection) { return $h_RedirectionOperatorColor; } if ($tokenKind -eq [System.Management.Automation.Language.TokenKind]::NewLine) { return $h_GenericColor; # Not really used, a new line is emmitted. } if ($tokenKind -eq [System.Management.Automation.Language.TokenKind]::Comment) { return $h_CommentColor; } # The 'param' keyword itself (VS Code incorrectly colors this, in this very code snippet!) if ($tokenKind -eq [System.Management.Automation.Language.TokenKind]::Param) { return $h_KeyWordColor; } # the `Function` keyword itself if ($tokenKind -eq [System.Management.Automation.Language.TokenKind]::Function) { return $h_KeyWordColor; } if ($tokenKind -eq [System.Management.Automation.Language.TokenKind]::StringExpandable -or $tokenKind -eq [System.Management.Automation.Language.TokenKind]::StringLiteral -or $tokenKind -eq [System.Management.Automation.Language.TokenKind]::HereStringExpandable ) { return $h_StringColor; } if ($tokenKind -eq [System.Management.Automation.Language.TokenKind]::LBracket -or $tokenKind -eq [System.Management.Automation.Language.TokenKind]::RBracket) { return $h_OperatorColor; } # Now we switch to checking tokenFlags... # The token is one of the assignment operators: '=', '+=', '-=', '*=', '/=', '%=' or '??=' if ($tokenFlags.HasFlag([System.Management.Automation.Language.TokenFlags]::AssignmentOperator)) { return $h_OperatorColor; } # UnaryOperator ++, -- if ($tokenFlags.HasFlag([System.Management.Automation.Language.TokenFlags]::UnaryOperator)) { return $h_OperatorColor; } if ($tokenFlags.HasFlag([System.Management.Automation.Language.TokenFlags]::CommandName)) { return $h_CommandColor; } if ($tokenFlags.HasFlag([System.Management.Automation.Language.TokenFlags]::TypeName)) { return $h_TypeNameColor; } if ($tokenFlags.HasFlag([System.Management.Automation.Language.TokenFlags]::MemberName)) { return $h_MemberColor; } if ($tokenFlags.HasFlag([System.Management.Automation.Language.TokenFlags]::SpecialOperator)) { return $h_OperatorColor; } if ($tokenFlags.HasFlag([System.Management.Automation.Language.TokenFlags]::BinaryOperator)) { return $h_OperatorColor; } if ($tokenFlags.HasFlag([System.Management.Automation.Language.TokenFlags]::Keyword)) { return $h_KeyWordColor; } if ($tokenFlags.HasFlag([System.Management.Automation.Language.TokenFlags]::ParseModeInvariant)) { return $h_OperatorColor; # consider: this was gray instead of darkgray before } # A simple identifier, always begins with a letter or '', and is followed by letters, numbers, or ''. # example: "-ErrorAction SilentlyContinue" -- the "SilentlyContinue" is such an identifier. if ($tokenKind -eq [System.Management.Automation.Language.TokenKind]::Identifier) { return $h_IdentifierColor; } # Last chance... if ($tokenKind -eq [System.Management.Automation.Language.TokenKind]::Generic) { return $h_GenericColor; } # Unrecognised token... Was not colored.... Write-Debug "`n****`n****`nUNRECOGNISED TOKEN`n<# TokenKind: $tokenKind, TokenFlags: $tokenFlags #>`n****"; return $h_UnrecognizedColor; } <# [Enum]::GetValues( [System.Management.Automation.Language.TokenKind] ) | % { return ('if ($tokenKind -eq [System.Management.Automation.Language.TokenKind]::' + "$_) {`n # $_`n return `$$($_)_color;`n}") } [Enum]::GetValues( [System.Management.Automation.Language.TokenFlags] ) | % { return ('if ($tokenFlags.HasFlag([System.Management.Automation.Language.TokenFlags]::' + "$_)) {`n # $_`n return `$$($_)_color;`n}") } #> |