Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Decide on scope names for all language constructs

Abierto
#8 10 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
5/5
Tiempo estimado
Más de una semana
Aptitud para principiantes
25/100
Tipo de issue
Nueva funcionalidad
Claridad
Necesita aclaración
Estado de actividad
Estancado
Stack tecnológico
powershell
Área
tooling

Línea de trabajo

Review the scope-name table and the refactored language file mentioned in the issue, then compare the proposed names with the documented VS Code theme scopes. The work is done when the scope naming discussion reaches an agreed convention for the listed PowerShell constructs and the table reflects that decision.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

discussion

I'd like to have a discussion where we decide on the "correct" scope names for all PowerShell language constructs. This will mean much less work when doing updates to the tmLanguage file in the future, as the scopes (as well as the color(!) of each) are checked by a Travis CI build job on the vscode repo.

General
  • All scope names should end in .powershell

As we decide, we can fill out this table:

Language construct Scope Name Comments/Examples
Line comment comment.line.number-sign # comments
Block comment comment.block <# comments #>
Help directives comment.documentation.embedded Meta scope
Help directives - keywords keyword.operator.documentation .SYNOPSIS
Help directives - keyword value constant.string.documentation 'ParameterName' in .PARAMETER ParameterName
#Requires statement keywords.operator.documentation 'Requires' in #Requires -Version 3.0
#Requires statement - parameter constant.string.documentation '-Version 3.0' in #Requires -Version 3.0
String - double quoted string.quoted.double "string"
String - single quoted string.quoted.single 'string'
String - escape characters constant.character.escape 't' in "onettwo"
String - heredoc double quoted string.quoted.double.heredoc
String - heredoc single quoted string.quoted.single.heredoc
ScriptBlock meta.scriptblock { ... }
SubExpression meta.subexpression $( ... )
Hashtable meta.hashtable @{ ... }
Array meta.array @(1,2,3) & (1,2,3)
Property/Member entity.other.attribute-name 'property' in (Invoke-Something).property & 'property' in $var.property
Numeric Constant - real constant.numeric.real +.5
Numeric Constant - integer constant.numeric.integer 5
Numeric Constant - hexadecimal constant.numeric.hexadecimal 0x20
Type entity.name.type 'string' in [string]
Type - static method meta.method '::MinValue' in [int]::MinValue
Parameter decorator entity.name.type 'Parameter' in [Parameter(Position = 1)]
Parameter decorator - property entity.other.attribute-name 'Position' in [Parameter(Position = 1)]
Function meta.function Meta scope
Function - keyword storage.type 'function' in function script:Invoke-Something { ... }
Function - scope storage.modifier.scope 'script' in function script:Invoke-Something { ... }
Function - name entity.name.function 'Invoke-Something' in function script:Invoke-Something { ... }
Command meta.command Meta scope
Command - keyword support.function 'Invoke-Something' in Invoke-Something -p1 'v1'
Command - parameter variable.parameter '-p1' in Invoke-Something -p1 'v1'
Reserved words keyword.other configuration
Control words keyword.control break
Enum - keyword storage.type 'enum' in enum myEnum { ... }
Enum - name entity.name.function 'myEnum' in enum myEnum { ... }
Class meta.class Meta scope
Class - keyword storage.type 'class' in class myClass : inheritedClass { ... }
Class - name entity.name.function 'myClass' in class myClass : inheritedClass { ... }
Class - inheritance entity.other.inherited-class 'inheritedClass' in class myClass : inheritedClass { ... }
Class - reserved words keyword.other hidden & static
Class - control words keyword.control.class 'base' in : base( ... )
Operator - redirection keyword.operator.redirection 2>&1
Operator - comparison keyword.operator.comparison -gt
Operator - bitwise keyword.operator.bitwise -band
Operator - logical keyword.operator.logical -and
Operator - format keyword.operator.format -f
Operator - assignment keyword.operator.assignment +=
Operator - logical not keyword.operator.logical-not -not & !
Operator - multiplicative keyword.operator.multiplicative / & *
Operator - unary plus keyword.operator.unary-plus +
Operator - unary minus keyword.operator.unary-minus -
Operator - additive keyword.operator.additive + & -
Operator - range keyword.operator.range ..
Operator - command invocation keyword.operator.other &
Operator - stop parsing keyword.operator --%
Switch - keyword keyword.control 'switch' in switch -regex ($var) { ... }
Switch - parameter variable.parameter '-regex' in switch -regex ($var) { ... }
Switch - reserved word keyword.other default
Illegal invalid.illegal Space after backtick
Variable - $ keyword.other '$' in $variable
Variable - ${..} keyword.other '${' and '}' in ${variable}
Variable - automatic constant.language $_ & $error
Variable - scope storage.modifier.scope 'script' in $script:variable
Variable - name variable.other.readwrite 'variable' in $script:variable

I have started by filling out the scope names as I have used them in my refactored language file.

About scopes and highlighting

If, in the theme, there are colorization rules only for the scope constant.operator, both constant.operator and constant.operator.range will be colorized the same.

If there isn't any colorization rules for a scope, it will be colorized with the "root" color of the current scope. Meaning if the word 'test' only belong to the source scope (or have a scope name that is not defined in the current theme), it will be colorized with the default background color. If the word 'test' is found inside another scope, for instance a string, it will be colorized with the color for the string scope.

Colorization rules may differ between editors. For instance the background parameter. This is supported on Sublime Text, but not in VSCode.

A matched set of characters can be (and more often than not are) assigned multiple scopes. So for example the word variable in function MyFunction {"this is $("a $variable")"} have the following scopes: source, string.quoted.double, meta.subexpression, string.quoted.double and lastly variable.other.readwrite. Only the last one is used for colorization.

About the default themes in VSCode

There are five themes that are defined as default themes in Visual Studio Code:

  • dark_plus "Dark+"
  • dark_vs "Dark Visual Studio"
  • hc_black "Dark Visual Studio"
  • light_plus "Light+"
  • light_vs "Light Visual Studio"

The themes supports nesting, and:

  • Light+ includes light_vs (Light Visual Studio)
  • Dark+ includes dark_vs (Dark Visual Studio)

The following scopes are defined in the plus-themes:

  • meta.type.name, meta.return.type, meta.return-type, meta.cast, meta.type.annotation, support.type, entity.name.class, entity.name.type, storage.type.cs, storage.type.java
  • entity.name.function, entity.name.method
  • keyword.control
  • meta.parameter.type.variable, variable.parameter, variable, variable.name

The following scopes are defined in the "old" default themes:

  • emphasis
  • strong
  • header
  • comment
  • constant.language
  • constant.numeric
  • constant.regexp
  • constant.rgb-value
  • entity.name.tag
  • entity.name.selector
  • entity.other.attribute-name
  • entity.other.attribute-name.css
  • invalid
  • markup.underline
  • markup.bold
  • markup.heading
  • markup.italic
  • markup.inserted
  • markup.deleted
  • markup.changed
  • meta.selector
  • meta.tag
  • meta.preprocessor
  • meta.preprocessor.string
  • meta.preprocessor.numeric
  • meta.structure.dictionary.key.python
  • storage
  • storage.type
  • storage.modifier
  • string
  • string.xml, string.jade, string.yaml, string.html
  • string.regexp
  • support.property-value
  • support.type.property-name.css, support.type.property-name.less, support.type.property-name.sass
  • support.type.property-name
  • keyword
  • keyword.control
  • keyword.operator
  • keyword.operator.new
  • keyword.other.unit
  • keyword.control.less
  • metatag.php
  • support.function.git-rebase
  • constant.sha.git-rebase
  • storage.modifier.import.java, storage.modifier.package.java

Scope names on the same line, means they are defined in the same colorization rule.

Lenguaje dominante
PowerShell
Estrellas
151
Forks
55
Métricas de merge de PR
Sin PR fusionados en 30 d

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de PowerShell/EditorSyntax

Todos los issues de PowerShell/EditorSyntax

Issues similares

Más issues de DevTools

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.