The supported cases for smart completion (and, by extent, syntax highlighting) are described on the wiki.
Essentially, unless foo
in foo.bar
is a hinted local variable, object name, namespace, or a similar construct with a definitive meaning, there is no way to know which object’s foo
it is without parsing the file backwards mid-highlighting, which is expensive:
foo.bar();
with (obj_some) {
foo.bar(); // obj_some's foo may not be the same as our foo, or not exist at all
}
Parsing the file backwards on each identifier to figure out whether it is inside a struct literal is also expensive - at most I could go on assumption that any name:
that is not case name:
is in a struct literal, but this would misfire for a handful of cases.
For local variables I am able to cheat by making various reasonable assumptions (e.g. that unindented function name
in a script is a top-level function or that you are not going to sabotage the syntax highlighter by inserting decoy function declarations inside multi-line comments/strings), but neither of above can be handled this way.
I hope to eventually make auto-completion and argument help work for variously unusual cases (it’s not a very good time) as they only trigger on user input, but field syntax highlighting will likely remain similar to how it is now.