Open
Description
There are multiple issues with variables as they stand now in the grammar some of which have been reported and some of which haven't:
- Punctuation in variables with properties and methods isn't scoped correctly: The "scope" named "variable.other.member" includes the dot separator #131
- The sigil for a sub-expression is not handled the same way as the sigil on a variable: subexpression marker ($ in '$(') is in scope 'punctuation.definition.variable' #132
- Some language variables like
$_
,$$
,$?
are treated differently depending on context and are currently scoped incorrectly: $_ scoped differently between inside and outside string.quoted.double #133 - Properties and method highlighting breaks when the variable has an array position specified: sub members (properties/methods) of variables appear different behind an array reference #127
- Multiple legal characters break variable highlighting (
$Var?Iable
), and special automatic variables like$<drive letter>:folder
don't highlight correctly: Handle special characters in variable names. #49
There are also questions about the correct scope of properties and methods (mentioned #131) and questions about to what extent the grammar should be concerned with user expectation/"most themes" vs either correctness (subjective) or consistency (with which languages?) (#130 and #129).
Background
The following cases need to be covered with as little repetition / complexity as possible:
- Regular variables with and without scopes, properties, array position, methods, etc.
- Variables contained within strings.
- Variables contained within sub-expressions with and without scopes, properties, array position, methods, etc.
- Variables in and out of strings and sub-expressions when using the
${Variable}
format again with and without scopes, properties, array position, methods, etc.
The following gotchas need to be taken in to account:
- Which special characters are legal within
${Variable}
syntax vs$Variable
syntax. - International characters (
\p{L}
vs [A-z]`). - Access of variables through splatting where the sigil is
@
. - Separate scoping for constants, automatic variables, language variables, etc.
$$
where"$$Hello"
needs to show$$
as the variable andHello
as part of the double quoted string and other similar oddities.- Lots of others...
Planned Format/Rules
??? tbd
Re: Scope selection -> See #138