Skip to content

Commit 9dfd0f7

Browse files
committed
[#33] Add support for arg()
1 parent 7aa1b32 commit 9dfd0f7

2 files changed

Lines changed: 126 additions & 0 deletions

File tree

Syntax/Just.sublime-syntax

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,8 @@ variables:
164164
| script
165165
| working-directory
166166
)
167+
arg_attribute_kwargs: |-
168+
(?x: help | long | pattern | short | value )
167169
168170
###############################################################################
169171
# MAIN CONTEXT
@@ -538,6 +540,9 @@ contexts:
538540
- include: eol-pop
539541

540542
expect-recipe-attribute-name:
543+
- match: arg\b
544+
scope: variable.annotation.just
545+
set: arg-attribute
541546
- match: ({{recipe_attributes_arguments}})
542547
scope: variable.annotation.just
543548
set: recipe-attribute-argument
@@ -577,6 +582,47 @@ contexts:
577582
- include: quoted-strings
578583
- include: else-pop
579584

585+
arg-attribute:
586+
- match: \(
587+
scope: punctuation.definition.annotation.begin.just
588+
set: arg-attribute-paren-body
589+
- include: else-pop
590+
591+
arg-attribute-paren-body:
592+
- match: \)
593+
scope: punctuation.definition.annotation.end.just
594+
pop: 1
595+
- match: ','
596+
scope: punctuation.separator.parameters.just
597+
push: arg-attribute-kwarg
598+
- match: '`'
599+
scope: invalid.illegal.just
600+
pop: 1
601+
- match: f['"]
602+
scope: invalid.illegal.just
603+
pop: 1
604+
- include: quoted-strings
605+
606+
arg-attribute-kwarg:
607+
- match: '({{arg_attribute_kwargs}})\s*(=)'
608+
captures:
609+
1: variable.parameter.just
610+
2: keyword.operator.assignment.just
611+
set: arg-attribute-kwarg-value
612+
- match: '({{valid_name}})\s*(=)'
613+
captures:
614+
1: invalid.illegal.just
615+
2: keyword.operator.assignment.just
616+
set: arg-attribute-kwarg-value
617+
- include: else-pop
618+
619+
arg-attribute-kwarg-value:
620+
- match: '`'
621+
scope: invalid.illegal.just
622+
pop: 1
623+
- include: quoted-strings
624+
- include: else-pop
625+
580626
recipe-definition:
581627
- match: (?=^@?{{valid_name}}(?![^:]*:=)) # Matches '^recipeName' but not '^varName :='
582628
push:

Syntax/tests/syntax_test_just.recipe_attributes.just

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,3 +94,83 @@ tmp-dir-invalid:
9494
# ^ variable.annotation.just
9595
doit:
9696
@echo "done"
97+
98+
[default]
99+
#<- meta.sequence.list.just meta.annotation.just
100+
#^^^^^^^^ meta.sequence.list.just meta.annotation.just
101+
def:
102+
103+
[arg("name")]
104+
#^^^^^^^^^^^^ meta.sequence.list.just meta.annotation.just
105+
# ^ punctuation.definition.annotation.begin.just
106+
# ^ string.quoted.double.just punctuation.definition.string.begin.just
107+
# ^^^^ string.quoted.double.just
108+
# ^ string.quoted.double.just punctuation.definition.string.end.just
109+
# ^ punctuation.definition.annotation.end.just
110+
# ^ variable.annotation.just
111+
arg-positional-only:
112+
113+
[arg("name", help="Show this help")]
114+
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.sequence.list.just meta.annotation.just
115+
# ^ punctuation.separator.parameters.just
116+
# ^^^^ variable.parameter.just
117+
# ^ keyword.operator.assignment.just
118+
# ^^^^^^^^^^^^^^^^ string.quoted.double.just
119+
arg-with-help:
120+
121+
[arg("name", short="n", long="name")]
122+
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.sequence.list.just meta.annotation.just
123+
# ^^^^^ variable.parameter.just
124+
# ^ keyword.operator.assignment.just
125+
# ^^^ string.quoted.double.just
126+
# ^^^^ variable.parameter.just
127+
# ^^^^^^ string.quoted.double.just
128+
arg-with-short-and-long:
129+
130+
[arg("name", help="Desc", short="n", long="name", pattern=".*", value="VAL")]
131+
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.sequence.list.just meta.annotation.just
132+
# ^^^^^ variable.parameter.just
133+
# ^ keyword.operator.assignment.just
134+
# ^ string.quoted.double.just punctuation.definition.string.begin.just
135+
# ^^^ string.quoted.double.just
136+
# ^ string.quoted.double.just punctuation.definition.string.end.just
137+
# ^ punctuation.definition.annotation.end.just
138+
# ^ variable.annotation.just
139+
arg-all-kwargs:
140+
141+
[arg("name", help='''
142+
# ^^^ string.quoted.single.block.just punctuation.definition.string.begin.just
143+
multiline
144+
#^^^^^^^^ string.quoted.single.block.just
145+
''')]
146+
#<- string.quoted.single.block.just punctuation.definition.string.end.just
147+
#^^ string.quoted.single.block.just punctuation.definition.string.end.just
148+
# ^ punctuation.definition.annotation.end.just
149+
# ^ variable.annotation.just
150+
arg-multiline-help:
151+
152+
[arg("name", unknown="x")]
153+
# ^^^^^^^ invalid.illegal.just
154+
arg-invalid-kwarg:
155+
156+
[no-cd, arg("verbose", short="v"), linux]
157+
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.sequence.list.just meta.annotation.just
158+
# ^^^ variable.annotation.just
159+
# ^ punctuation.definition.annotation.begin.just
160+
# ^ string.quoted.double.just punctuation.definition.string.begin.just
161+
# ^^^^^^^^ string.quoted.double.just
162+
# ^ punctuation.separator.parameters.just
163+
# ^^^^^ variable.parameter.just
164+
# ^ keyword.operator.assignment.just
165+
# ^ string.quoted.double.just punctuation.definition.string.begin.just
166+
# ^ string.quoted.double.just
167+
# ^ string.quoted.double.just punctuation.definition.string.end.just
168+
# ^ punctuation.definition.annotation.end.just
169+
# ^ punctuation.separator.parameters.just
170+
# ^^^^^ variable.annotation.just
171+
arg-mixed-with-other-attrs:
172+
173+
[arg("name", long=f"nope")]
174+
# ^^ invalid.illegal.just
175+
# ^^^^^ - string.quoted.double.just
176+
arg-f-strings-invalid-arg:

0 commit comments

Comments
 (0)