1+ {
2+ "$schema" : " https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json" ,
3+ "scopeName" : " source.just" ,
4+ "name" : " JustLang" ,
5+ "patterns" : [
6+ { "include" : " #interpolate" },
7+ { "include" : " #comments" },
8+ { "include" : " #scripts" },
9+ { "include" : " #strings" },
10+ { "include" : " #assignments" },
11+ { "include" : " #recipeDefinition" },
12+ { "include" : " #keywords" }
13+ ],
14+ "repository" : {
15+ "comments" : {
16+ "patterns" : [
17+ {
18+ "name" : " comment.line.just" ,
19+ "match" : " ^#[^!].*"
20+ }
21+ ]
22+ },
23+ "scripts" : {
24+ "patterns" : [
25+ { "include" : " #scripts_js" },
26+ { "include" : " #scripts_lua" },
27+ { "include" : " #scripts_perl" },
28+ { "include" : " #scripts_ruby" },
29+ { "include" : " #scripts_python" },
30+ { "include" : " #scripts_shell" }
31+ ]
32+ },
33+ "scripts_python" : {
34+ "patterns" : [
35+ {
36+ "name" : " markup.fenced_code.block.just" ,
37+ "begin" : " ^\\ s+(#!\\ s*(?:/usr)?/bin/(?:env\\ s+)?)(python(?:-?\\ d+(?:\\ .\\ d+)?)?)(?:\\ s|$)" ,
38+ "end" : " ^$" ,
39+ "beginCaptures" : {
40+ "1" : {
41+ "name" : " comment.line.shebang.just"
42+ },
43+ "2" : {
44+ "name" : " keyword.other"
45+ }
46+ },
47+ "contentName" : " meta.embedded.block.python" ,
48+ "patterns" : [
49+ { "include" : " source.python" }
50+ ]
51+ }
52+ ]
53+ },
54+ "scripts_js" : {
55+ "patterns" : [
56+ {
57+ "name" : " markup.fenced_code.block.just" ,
58+ "begin" : " ^\\ s+(#!\\ s*(?:/usr)?/bin/(?:env\\ s+)?)(node(?:js)?)(?:\\ s|$)" ,
59+ "end" : " ^$" ,
60+ "beginCaptures" : {
61+ "1" : {
62+ "name" : " comment.line.shebang.just"
63+ },
64+ "2" : {
65+ "name" : " keyword.other"
66+ }
67+ },
68+ "contentName" : " meta.embedded.block.javascript" ,
69+ "patterns" : [
70+ { "include" : " source.js" }
71+ ]
72+ }
73+ ]
74+ },
75+ "scripts_perl" : {
76+ "patterns" : [
77+ {
78+ "name" : " markup.fenced_code.block.just" ,
79+ "begin" : " ^\\ s+(#!\\ s*(?:/usr)?/bin/(?:env\\ s+)?)(perl)(?:\\ s|$)" ,
80+ "end" : " ^$" ,
81+ "beginCaptures" : {
82+ "1" : {
83+ "name" : " comment.line.shebang.just"
84+ },
85+ "2" : {
86+ "name" : " keyword.other"
87+ }
88+ },
89+ "contentName" : " meta.embedded.block.perl" ,
90+ "patterns" : [
91+ { "include" : " source.perl" }
92+ ]
93+ }
94+ ]
95+ },
96+ "scripts_ruby" : {
97+ "patterns" : [
98+ {
99+ "name" : " markup.fenced_code.block.just" ,
100+ "begin" : " ^\\ s+(#!\\ s*(?:/usr)?/bin/(?:env\\ s+)?)(ruby-?(?:-?\\ d+(?:\\ .\\ d+)?)?)(?:\\ s|$)" ,
101+ "end" : " ^$" ,
102+ "beginCaptures" : {
103+ "1" : {
104+ "name" : " comment.line.shebang.just"
105+ },
106+ "2" : {
107+ "name" : " keyword.other"
108+ }
109+ },
110+ "contentName" : " meta.embedded.block.ruby" ,
111+ "patterns" : [
112+ { "include" : " source.ruby" }
113+ ]
114+ }
115+ ]
116+ },
117+ "scripts_lua" : {
118+ "patterns" : [
119+ {
120+ "name" : " markup.fenced_code.block.just" ,
121+ "begin" : " ^\\ s+(#!\\ s*(?:/usr)?/bin/(?:env\\ s+)?)(lua(?:-?\\ d+(?:\\ .\\ d+)?)?)(?:\\ s|$)" ,
122+ "end" : " ^$" ,
123+ "beginCaptures" : {
124+ "1" : {
125+ "name" : " comment.line.shebang.just"
126+ },
127+ "2" : {
128+ "name" : " keyword.other"
129+ }
130+ },
131+ "contentName" : " meta.embedded.block.lua" ,
132+ "patterns" : [
133+ { "include" : " source.lua" }
134+ ]
135+ }
136+ ]
137+ },
138+ "scripts_shell" : {
139+ "patterns" : [
140+ {
141+ "name" : " markup.fenced_code.block.just" ,
142+ "begin" : " ^\\ s+(#!\\ s*(?:/usr)?/bin/(?:env\\ s+)?)((?>fi|ba|c|k|z)?sh)(?:\\ s|$)" ,
143+ "end" : " ^$" ,
144+ "beginCaptures" : {
145+ "1" : {
146+ "name" : " comment.line.shebang.just"
147+ },
148+ "2" : {
149+ "name" : " keyword.other"
150+ }
151+ },
152+ "contentName" : " meta.embedded.block.shellscript" ,
153+ "patterns" : [
154+ { "include" : " source.shell" }
155+ ]
156+ },
157+ {
158+ "name" : " markup.inline.raw.just" ,
159+ "begin" : " `" ,
160+ "end" : " `" ,
161+ "contentName" : " meta.embedded.line.shellscript" ,
162+ "patterns" : [
163+ { "include" : " source.shell" }
164+ ]
165+ }
166+ ]
167+ },
168+ "strings" : {
169+ "patterns" : [
170+ {
171+ "name" : " string.quoted.double.just" ,
172+ "begin" : " \" " ,
173+ "end" : " \" "
174+ },
175+ {
176+ "name" : " string.quoted.single.just" ,
177+ "begin" : " '" ,
178+ "end" : " '"
179+ }
180+ ]
181+ },
182+ "assignments" : {
183+ "patterns" : [
184+ {
185+ "match" : " ^((?:export|set)\\ s+)?([a-zA-Z_][a-zA-Z0-9_-]*)\\ s*:?=" ,
186+ "captures" : {
187+ "1" : {
188+ "name" : " storage.type.just"
189+ },
190+ "2" : {
191+ "name" : " variable.name.just"
192+ }
193+ }
194+ }
195+ ]
196+ },
197+ "recipeDefinition" : {
198+ "patterns" : [
199+ {
200+ "match" : " ^(@)?([a-zA-Z_][a-zA-Z0-9_-]*)([a-zA-Z0-9=\\ s_-`'\" ]*):([\\ sa-zA-Z0-9_-]*).*$" ,
201+ "captures" : {
202+ "1" : {
203+ "name" : " entity.name.function.just"
204+ },
205+ "2" : {
206+ "name" : " entity.name.function.just"
207+ },
208+ "3" : {
209+ "patterns" : [
210+ {
211+ "name" : " constant.character.escape.just" ,
212+ "match" : " [\\ s]*[a-zA-Z0-9-_]*(=?)(.*)" ,
213+ "captures" : {
214+ "0" : {
215+ "name" : " variable.name.just"
216+ },
217+ "1" : {
218+ "name" : " constant.other.just"
219+ },
220+ "2" : {
221+ "name" : " variable.parameter.just"
222+ }
223+ }
224+ }
225+ ]
226+ },
227+ "4" : {
228+ "name" : " support.type.property-name.just"
229+ }
230+ }
231+ }
232+ ]
233+ },
234+ "interpolate" : {
235+ "patterns" : [
236+ {
237+ "name" : " string.interpolated.just" ,
238+ "begin" : " \\ {\\ {" ,
239+ "end" : " \\ }\\ }"
240+ }
241+ ]
242+ },
243+ "keywords" : {
244+ "patterns" : [
245+ {
246+ "name" : " keyword.control.just" ,
247+ "match" : " \\ b(arch|os|os_family|env_var|env_var_or_default)\\ b"
248+ }
249+ ]
250+ }
251+ }
252+ }
0 commit comments