Suppose I have code like this:
If (x = 1) Msgbox, X is 1! Msgbox, You get this message regardless of what x is.
So the first line has
If and the condition. The second line has the outcome/body of the conditional; on the third line, the conditional is done, and normal code flow continues. What I’d like to do is put a meta scope on this outcome/body line.
So, after the second line, this meta scope should end, and we should return to
source. The problem is that the outcome scope begins and ends at the same regex:
^ (the beginning of a new line). That doesn’t work: either the scope begins and ends immediately, when
^ is the first line within the scope; or it is never triggered, because the other lines within the scope are always triggered first. This is my attempt, which doesn’t work:
if: - match: '(?i:^\s*(if)\b)' captures: 1: meta.conditional.ahk keyword.control.conditional.ahk push: - meta_content_scope: meta.conditional.condition.ahk - match: '=' scope: keyword.operator.comparison.ahk - match: '^' # We are on line 2: the condition has ended, so here the outcome must begin. set: outcome outcome: - meta_content_scope: meta.conditional.outcome.ahk - include: messagebox - match: '^' # When the outcome scope encounters a new line, it is finished. pop: true messagebox: # This is just an example of the various commands that could be in the outcome, or anywhere else in the main scope. - match: '(?i:\b(msgbox)\b),?(.*)$' captures: 1: support.type.builtin.command.ahk 2: string.ahk
When the line that includes
messagebox is above
match: '^', the outcome never ends; when they are reversed, the outcome scope ends immediately after it begins, covering nothing.
How can I make sure the
meta.outcome scope is applied only to line 2?