Skip to content

Commit ce78d40

Browse files
committed
[#29] Add support for recipe attributes with arguments.
1 parent a0d6458 commit ce78d40

4 files changed

Lines changed: 114 additions & 61 deletions

File tree

Completions/Settings.sublime-completions

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
},
3131
{
3232
"trigger": "dotenv-required",
33-
"details": "Error if a .env file isn't found",
33+
"details": "Error if a .env file isnt found",
3434
"kind": ["keyword", "k", "setting"]
3535
},
3636
{

Syntax/Just.sublime-syntax

Lines changed: 52 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,30 @@ variables:
134134
)
135135
deprecated_settings: |-
136136
(?x: windows-powershell )
137-
recipe_attributes: |-
138-
(?x: linux | macos | no-cd | no-exit-message | private | unix | windows )
137+
recipe_attributes_bare: |-
138+
(?x:
139+
confirm
140+
| linux
141+
| macos
142+
| no-cd
143+
| no-exit-message
144+
| no-quiet
145+
| openbsd
146+
| positional-arguments
147+
| private
148+
| script
149+
| unix
150+
| windows
151+
)
152+
recipe_attributes_arguments: |-
153+
(?x:
154+
confirm
155+
| doc
156+
| extension
157+
| group
158+
| script
159+
| working-directory
160+
)
139161
140162
###############################################################################
141163
# MAIN CONTEXT
@@ -195,7 +217,7 @@ contexts:
195217
- include: operators
196218
- include: function-calls
197219
- include: if-statements
198-
- include: strings
220+
- include: all-strings
199221
- include: operands-variables
200222

201223

@@ -290,11 +312,17 @@ contexts:
290312

291313
###[ CHARACTERS ]##############################################################
292314

293-
strings:
315+
all-strings:
316+
- include: quoted-strings
317+
- include: backtick-strings
318+
319+
quoted-strings:
294320
- include: single-quote-block-strings
295321
- include: single-quote-strings
296322
- include: double-quote-block-strings
297323
- include: double-quote-strings
324+
325+
backtick-strings:
298326
- include: backtick-quote-block-strings
299327
- include: backtick-quote-strings
300328

@@ -419,14 +447,31 @@ contexts:
419447
- include: eol-pop
420448

421449
expect-recipe-attribute-name:
422-
- match: ({{recipe_attributes}})
450+
- match: ({{recipe_attributes_arguments}})
451+
scope: variable.annotation.just
452+
set: recipe-attribute-argument
453+
- match: ({{recipe_attributes_bare}})
423454
scope: variable.annotation.just
424455
pop: 1
425456
- match: \]
426457
scope: invalid.illegal.just
458+
comment: If properly handled, this frame will be popped before the \] is encountered
427459
pop: 2
428460
- include: else-pop
429461

462+
recipe-attribute-argument:
463+
- match: \(
464+
scope: punctuation.definition.annotation.begin.just
465+
set: recipe-attribute-argument-body
466+
- include: else-pop
467+
468+
recipe-attribute-argument-body:
469+
- meta_scope: meta.string.just
470+
- match: \)
471+
scope: punctuation.definition.annotation.end.just
472+
pop: 1
473+
- include: quoted-strings
474+
430475
recipe-definition:
431476
- match: (?=^@?{{valid_name}}(?![^:]*:=)) # Matches '^recipeName' but not '^varName :='
432477
push:
@@ -685,7 +730,7 @@ contexts:
685730
pop: 1
686731
- match: ','
687732
scope: punctuation.separator.parameters.just
688-
- include: strings
733+
- include: all-strings
689734
- include: eol-pop #??
690735

691736
settings-string-name:
@@ -696,7 +741,7 @@ contexts:
696741
- assignment-operator
697742

698743
settings-string-value:
699-
- include: strings
744+
- include: all-strings
700745
- include: eol-pop
701746

702747
# ###[ General Types ]##########################################################
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
# SYNTAX TEST "Packages/Just/Syntax/Just.sublime-syntax"
2+
3+
[no-cd]
4+
# <- meta.annotation.just variable.annotation.just
5+
#^^^^^^ meta.annotation.just variable.annotation.just
6+
[no-exit-message]
7+
#^^^^^^^^^^^^^^^^ meta.annotation.just variable.annotation.just
8+
[private]
9+
#^^^^^^^^ meta.annotation.just variable.annotation.just
10+
attr-test:
11+
12+
[linux]
13+
#^^^^^^ meta.annotation.just variable.annotation.just
14+
linux-attr:
15+
16+
[ macos ]
17+
#^^^^^^^^^^ meta.sequence.list.just meta.annotation.just
18+
macos-attr:
19+
20+
[unix ]
21+
#^^^^^^^^ meta.sequence.list.just meta.annotation.just
22+
unix-attr:
23+
24+
[ windows]
25+
#^^^^^^^^^ meta.sequence.list.just meta.annotation.just
26+
windows-attr:
27+
28+
[ windows, macos, linux]
29+
#^^^^^^^^^^^^^^^^^^^^^^^ meta.sequence.list.just meta.annotation.just
30+
# ^^^^^^^ variable.annotation.just
31+
# ^ punctuation.separator.parameters.just
32+
# ^^^^^ variable.annotation.just
33+
# ^ punctuation.separator.parameters.just
34+
# ^^^^^ variable.annotation.just
35+
attr-multi-valid:
36+
37+
[windows linux]
38+
#^^^^^^^^^^^^^^ meta.sequence.list.just meta.annotation.just
39+
#^^^^^^^ variable.annotation.just
40+
# ^^^^^ - variable.annotation.just
41+
attr-multi-invalid-1:
42+
43+
[macos, ]
44+
# ^ invalid.illegal.just
45+
attr-multi-invalid-2:
46+
47+
[nonexistant-attribute]
48+
#<- meta.sequence.list.just meta.annotation.just meta.annotation.just variable.annotation.just
49+
#^^^^^^^^^^^^^^^^^^^^^ meta.sequence.list.just meta.annotation.just - variable.annotation.just
50+
attr-invalid:
51+
52+
[confirm, group('DOC')]
53+
#<- meta.sequence.list.just meta.annotation.just meta.annotation.just variable.annotation.just
54+
#^^^^^^^^^^^^^^^^^^^^^^ meta.sequence.list.just meta.annotation.just
55+
# ^ punctuation.definition.annotation.begin.just
56+
# ^^^^^ string.quoted
57+
# ^ punctuation.definition.annotation.end.just
58+
confirm-group:
59+
60+
[confirm("You sure?"), no-cd]
61+
confirm-with-arg:

Syntax/tests/syntax_test_just.recipe_declaration.just

Lines changed: 0 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -187,59 +187,6 @@ r9 +$:
187187
# ^ invalid.illegal.just
188188

189189

190-
#
191-
# Recipe attributes
192-
#
193-
194-
[no-cd]
195-
# <- meta.annotation.just variable.annotation.just
196-
#^^^^^^ meta.annotation.just variable.annotation.just
197-
[no-exit-message]
198-
#^^^^^^^^^^^^^^^^ meta.annotation.just variable.annotation.just
199-
[private]
200-
#^^^^^^^^ meta.annotation.just variable.annotation.just
201-
attr-test:
202-
203-
[linux]
204-
#^^^^^^ meta.annotation.just variable.annotation.just
205-
linux-attr:
206-
207-
[ macos ]
208-
#^^^^^^^^^^ meta.sequence.list.just meta.annotation.just
209-
macos-attr:
210-
211-
[unix ]
212-
#^^^^^^^^ meta.sequence.list.just meta.annotation.just
213-
unix-attr:
214-
215-
[ windows]
216-
#^^^^^^^^^ meta.sequence.list.just meta.annotation.just
217-
windows-attr:
218-
219-
[ windows, macos, linux]
220-
#^^^^^^^^^^^^^^^^^^^^^^^ meta.sequence.list.just meta.annotation.just
221-
# ^^^^^^^ variable.annotation.just
222-
# ^ punctuation.separator.parameters.just
223-
# ^^^^^ variable.annotation.just
224-
# ^ punctuation.separator.parameters.just
225-
# ^^^^^ variable.annotation.just
226-
attr-multi-valid:
227-
228-
[windows linux]
229-
#^^^^^^^^^^^^^^ meta.sequence.list.just meta.annotation.just
230-
#^^^^^^^ variable.annotation.just
231-
# ^^^^^ - variable.annotation.just
232-
attr-multi-invalid-1:
233-
234-
[macos, ]
235-
# ^ invalid.illegal.just
236-
attr-multi-invalid-2:
237-
238-
[nonexistant-attribute]
239-
#<- meta.sequence.list.just meta.annotation.just meta.annotation.just variable.annotation.just
240-
#^^^^^^^^^^^^^^^^^^^^^ meta.sequence.list.just meta.annotation.just - variable.annotation.just
241-
attr-invalid:
242-
243190
test-image $PRODUCT $VERSION +IMAGES:
244191
# ^ meta.function.parameters.just keyword.operator.variadic.just
245192
# ^^^^^^ meta.function.parameters.just variable.parameter.just

0 commit comments

Comments
 (0)