I'm trying to match the following code in the D language grammar:
static if (true) {}
void foo () { static if (true) {} }
The first static-if is correctly recognized as "keyword.control.conditional.d". But the static-if inside "foo" is recognized as a method "meta.definition.method.d". I managed to get the top level static-if correctly recognized by moving the pattern for the static-if before the pattern for a method. But I don't understand why that doesn't work inside "foo".
The full scope of the static-if inside "foo" is:
source.d meta.block.d meta.definition.method.d entity.name.function.d
The language grammar is available here [1]. Are the patterns evaluated in the wrong order or something like that?
Another thing I noticed is the "static if" on the top level seems to be recognized as a single word. When I use the hot keys for moving the cursor a word it jumps from the start of "static" to the end of "if", instead of to the end of "static".
[1] https://github.com/jacob-carlborg/d.tmbundle/blob/d2/Syntaxes/D.tmLanguage#L...