/
source.httpspec.js
179 lines (178 loc) · 5.11 KB
/
source.httpspec.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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
// This is a TextMate grammar distributed by `starry-night`.
// This grammar is developed at
// <https://github.com/samsalisbury/Sublime-HTTP>
// and licensed `mit`.
// See <https://github.com/wooorm/starry-night> for more info.
/** @type {import('../lib/index.js').Grammar} */
const grammar = {
dependencies: ['source.json'],
extensions: ['.http'],
names: ['http'],
patterns: [
{
name: 'meta.request.httpspec',
patterns: [{include: '#request'}, {match: '^$'}, {include: '#response'}]
}
],
repository: {
ampersand: {
patterns: [
{
match: '(?<!\\&)\\&(?!\\&)',
name: 'support.function.ampersand.httpspec'
}
]
},
closingbracket: {
patterns: [{match: '\\]', name: 'keyword.other.multiplexend.httpspec'}]
},
comma: {
patterns: [{match: '\\,', name: 'keyword.other.comma.httpspec.test'}]
},
emptyline: {patterns: [{match: '^\\s*$'}]},
equals: {
patterns: [
{match: '\\=', name: 'support.function.keyvaluepairseparator.httpspec'}
]
},
header: {
patterns: [
{
captures: {1: {name: 'variable.parameter.headername.httpspec'}},
match: '^([^()<>@,;:\\\\"{} \\t\\x00-\\x1F\\x7F]+\\:)\\s(.*)$',
name: 'string.unquoted.uri.httpspec'
}
]
},
invalidcomma: {
patterns: [
{match: '^\\,|\\,(?=\\s)', name: 'invalid.illegal.comma.httpspec'}
]
},
jsonblock: {patterns: [{include: 'source.json'}]},
methodlist: {
patterns: [
{include: '#methodname'},
{include: '#invalidcomma'},
{include: '#comma'}
]
},
methodname: {
patterns: [
{
match:
'(?:\\b)(ACL|BASELINE-CONTROL|BIND|CHECKIN|CHECKOUT|CONNECT|COPY|DELETE|GET|HEAD|LABEL|LINK|LOCK|MERGE|MKACTIVITY|MKCALENDAR|MKCOL|MKREDIRECTREF|MKWORKSPACE|MOVE|OPTIONS|ORDERPATCH|PATCH|POST|PRI|PROPFIND|PROPPATCH|PUT|REBIND|REPORT|SEARCH|TRACE|UNBIND|UNCHECKOUT|UNLINK|UNLOCK|UPDATE|UPDATEREDIRECTREF|VERSION-CONTROL)',
name: 'keyword.other.method.httpspec'
}
]
},
multiplex: {
begin: '(\\[)',
beginCaptures: {0: {name: 'keyword.other'}},
end: '\\]',
endCaptures: {0: {name: 'keyword.other'}},
patterns: [{include: '#uripart'}, {include: '#comma'}]
},
namevaluepair: {
patterns: [
{include: '#uriqueryname'},
{include: '#equals'},
{include: '#uriqueryvalue'}
]
},
openingbracket: {
patterns: [{match: '\\[', name: 'keyword.other.multiplexstart.httpspec'}]
},
questionmark: {
patterns: [
{match: '\\?', name: 'support.function.queryseparator.httpspec'}
]
},
request: {
patterns: [
{
begin:
'^(?=ACL|BASELINE-CONTROL|BIND|CHECKIN|CHECKOUT|CONNECT|COPY|DELETE|GET|HEAD|LABEL|LINK|LOCK|MERGE|MKACTIVITY|MKCALENDAR|MKCOL|MKREDIRECTREF|MKWORKSPACE|MOVE|OPTIONS|ORDERPATCH|PATCH|POST|PRI|PROPFIND|PROPPATCH|PUT|REBIND|REPORT|SEARCH|TRACE|UNBIND|UNCHECKOUT|UNLINK|UNLOCK|UPDATE|UPDATEREDIRECTREF|VERSION-CONTROL\n)',
end: '^(?=\\d\\d\\d|HTTP)',
patterns: [
{include: '#requestline'},
{include: '#header'},
{include: '#jsonblock'}
]
}
]
},
requestline: {patterns: [{include: '#methodlist'}, {include: '#uri'}]},
response: {
patterns: [
{include: '#statusline'},
{include: '#header'},
{include: '#jsonblock'}
]
},
statusline: {
patterns: [
{
captures: {0: {name: 'constant.language.statustext.httpspec'}},
match: '^(\\d\\d\\d)\\s(.*)$'
},
{
captures: {0: {name: 'constant.language.statustext.httpspec'}},
match: '^HTTP/(1\\.1|2|3)\\s(\\d\\d\\d)\\s(.*)$'
}
]
},
uri: {
patterns: [
{include: '#uriabsolute'},
{include: '#uripath'},
{include: '#multiplex'},
{include: '#questionmark'},
{include: '#uriquery'}
]
},
uriabsolute: {
patterns: [
{
begin:
'(?:\\s)(https?):\\/\\/((?:(?:[A-Za-z0-9\\-]{1,63})\\.)*(?:[A-Za-z0-9\\-]{1,63}))',
end: '(?:$)',
name: 'support.function.httpspec',
patterns: [{include: '#uripart'}, {include: '#multiplex'}]
}
]
},
uripart: {patterns: [{match: '([a-bA-B0-9\\-_/]+)'}]},
uripath: {
patterns: [
{
begin: '(?:\\s)\\/',
end: '(?:$)',
name: 'support.function.httpspec',
patterns: [{include: '#uripart'}, {include: '#multiplex'}]
}
]
},
uriquery: {
patterns: [{include: '#namevaluepair'}, {include: '#ampersand'}]
},
uriqueryname: {
patterns: [
{
match: '(?<=[?&])([^=&])+',
name: 'support.function.uriqueryname.httpspec'
}
]
},
uriqueryvalue: {
patterns: [
{
match: '(?<=\\=)([^=&]+)',
name: 'support.function.uriqueryvalue.httpspec'
}
]
}
},
scopeName: 'source.httpspec'
}
export default grammar