/
source.ninja.js
152 lines (151 loc) · 4.4 KB
/
source.ninja.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
// This is a TextMate grammar distributed by `starry-night`.
// This grammar is licensed `mit`.
// See <https://github.com/wooorm/starry-night> for more info.
/** @type {import('../lib/index.js').Grammar} */
const grammar = {
extensions: ['.ninja'],
names: ['ninja'],
patterns: [
{
begin: '#',
beginCaptures: {0: {name: 'punctuation.definition.comment.ninja'}},
end: '$',
name: 'comment.line.number-sign.ninja'
},
{
begin: '^(rule|pool)\\s+(\\S+)',
beginCaptures: {
1: {name: 'storage.type.$1.ninja'},
2: {
name: 'entity.name.function.$1.ninja',
patterns: [{include: '#escapes'}]
}
},
end: '^(?=\\S)',
name: 'meta.$1.ninja',
patterns: [{include: '$self'}]
},
{
begin:
'(?x)\n^ (build) \\s+\n((?:[^\\s:|$]|\\$.)+)\n(?:\n (\\|{1,2})\n ((?:[^:$]|\\$.)*)\n (?=:)\n)?',
beginCaptures: {
1: {name: 'storage.type.build.ninja'},
2: {
name: 'entity.name.function.build.ninja',
patterns: [{include: '#escapes'}]
},
3: {name: 'keyword.operator.build.ninja'},
4: {
patterns: [
{include: '#escapes'},
{
captures: {0: {patterns: [{include: '#escapes'}]}},
match: '(?:[^\\s:|$]|\\$.)+',
name: 'variable.reference.ninja'
}
]
}
},
end: '(?<!\\$)$',
name: 'meta.build.ninja',
patterns: [
{match: '\\|{2}', name: 'keyword.operator.build.ninja'},
{match: '(?:[^\\s:|$]|\\$.)+', name: 'variable.reference.ninja'},
{include: '$self'}
]
},
{
captures: {1: {name: 'storage.modifier.phony.build.ninja'}},
match: '(?<=:)\\s*(phony)\\b'
},
{
captures: {1: {name: 'constant.numeric.ninja'}},
match: '(?<==)\\s*(\\.\\d+|\\d+(?:\\.\\d+)?)'
},
{
begin: '^(default)(?=\\s|$)',
beginCaptures: {1: {name: 'storage.type.build.default.ninja'}},
end: '(?<!\\$)$',
name: 'meta.default.ninja',
patterns: [
{match: '\\S+', name: 'entity.name.function.build.ninja'},
{include: '$self'}
]
},
{
begin: '^\\s*(command)\\s*(=)',
beginCaptures: {
1: {name: 'variable.language.rule.ninja'},
2: {name: 'keyword.operator.assignment.ninja'}
},
end: '(?<!\\$)$',
name: 'meta.command.ninja',
patterns: [
{include: '$self'},
{
captures: {
1: {
name: 'embedded.source.shell',
patterns: [{include: 'source.shell'}]
}
},
match: '(?:\\G|^)(.+)(?=$)'
}
]
},
{
captures: {
1: {name: 'support.variable.language.rule.ninja'},
2: {name: 'keyword.operator.assignment.ninja'}
},
match:
'(?x) ^ \\s* (depfile|deps|msvc_deps_prefix|description|generator|in |in_newline|out|restat|rspfile|rspfile_content) \\s* (=)',
name: 'meta.property.ninja'
},
{
begin: '^(subninja|include)\\s+',
beginCaptures: {1: {name: 'keyword.operator.$1.ninja'}},
contentName: 'string.unquoted.filename.ninja',
end: '(?<!\\$)$',
name: 'meta.$1.ninja',
patterns: [{include: '$self'}]
},
{match: ':', name: 'punctuation.separator.dictionary.key-value.ninja'},
{
captures: {
1: {name: 'variable.parameter.reference.ninja'},
2: {name: 'keyword.operator.assignment.ninja'}
},
match: '^\\s*(\\w+)\\s*(=)'
},
{
captures: {1: {name: 'punctuation.definition.variable.ninja'}},
match: '(\\$)\\w+',
name: 'variable.parameter.reference.ninja'
},
{match: '\\$$\\n?', name: 'constant.character.escape.newline.ninja'},
{
captures: {
1: {name: 'punctuation.definition.variable.begin.ninja'},
2: {name: 'punctuation.definition.variable.end.ninja'}
},
match: '(\\${)\\s*[^{}]+\\s*(})',
name: 'variable.other.bracket.ninja'
},
{include: '#escapes'}
],
repository: {
escapes: {
patterns: [
{match: '\\${2}', name: 'constant.character.escape.dollar-sign.ninja'},
{
match: '\\$[ \\t]',
name: 'constant.character.escape.whitespace.ninja'
},
{match: '\\$:', name: 'constant.character.escape.colon.ninja'}
]
}
},
scopeName: 'source.ninja'
}
export default grammar