@wooorm/starry-night
Version:
Syntax highlighting, like GitHub
171 lines (168 loc) • 4.81 kB
JavaScript
// This is a TextMate grammar distributed by `starry-night`.
// This grammar is developed at
// <https://github.com/nikeee/language-hurl>
// and licensed `mit`.
// See <https://github.com/wooorm/starry-night> for more info.
/**
* @import {Grammar} from '@wooorm/starry-night'
*/
/** @type {Grammar} */
const grammar = {
extensions: ['.hurl'],
names: ['hurl'],
patterns: [
{include: '#comments'},
{include: '#sections'},
{include: '#http'},
{include: '#strings'},
{include: '#body'},
{include: '#request'}
],
repository: {
body: {
patterns: [
{
begin: '```graphql(,\\w+)*$',
beginCaptures: {1: {name: 'support.type'}},
end: '```$',
name: 'meta.embedded.block.graphql.hurl',
patterns: [{include: 'source.graphql'}]
},
{
begin: '```xml(,\\w+)*$',
beginCaptures: {1: {name: 'support.type'}},
end: '```$',
name: 'meta.embedded.block.xml.hurl',
patterns: [{include: 'text.xml'}]
},
{
begin: '```json(,\\w+)*$',
beginCaptures: {1: {name: 'support.type'}},
end: '```$',
name: 'meta.embedded.block.json.hurl',
patterns: []
},
{
begin: '```csv(,\\w+)*$',
beginCaptures: {1: {name: 'support.type'}},
end: '```$',
name: 'meta.embedded.block.csv.hurl',
patterns: []
},
{
begin: '```hex(,\\w+)*$',
beginCaptures: {1: {name: 'support.type'}},
contentName: 'text.plain',
end: '```$',
name: 'string.quoted.multiline.hurl'
},
{
begin: '```base64(,\\w+)*$',
beginCaptures: {1: {name: 'support.type'}},
contentName: 'text.plain',
end: '```$',
name: 'string.quoted.multiline.hurl'
},
{
begin: '```([^,]*)(,\\w+)*$',
beginCaptures: {1: {name: 'support.type'}, 2: {name: 'support.type'}},
end: '```$',
name: 'string.quoted.multiline.hurl'
},
{
match: '`(\\\\.|[^`\\\\])*`',
name: 'string.quoted.backtick.hurl',
patterns: [{include: '#escapes'}]
},
{
begin: '\\b(base64|hex),',
beginCaptures: {1: {name: 'support.function.name'}},
contentName: 'text.plain',
end: ';',
endCaptures: {0: {name: 'support.function'}},
name: 'support.function',
patterns: [{include: '#placeholders'}]
}
]
},
comments: {
patterns: [{match: '#.*$', name: 'comment.line.number-sign.hurl'}]
},
escapes: {
patterns: [
{match: '\\\\[\\\\"`#btnru]', name: 'constant.character.escape.hurl'}
]
},
http: {
patterns: [
{
captures: {
1: {name: 'constant.language.version.hurl'},
3: {name: 'constant.numeric.status.hurl'}
},
match: '\\b(HTTP(\\/1\\.0|\\/1\\.1|\\/2)?)([ \\t]+([0-9]{3}))?\\b'
}
]
},
placeholders: {
patterns: [
{
begin: '(\\{\\{)\\s*',
beginCaptures: {1: {name: 'string.interpolated.hurl'}},
contentName: 'variable.other.hurl',
end: '\\s*(\\}\\})',
endCaptures: {1: {name: 'string.interpolated.hurl'}}
}
]
},
request: {
patterns: [
{
match: '\\b(GET|POST|PUT|DELETE|PATCH|HEAD|OPTIONS|TRACE|CONNECT)\\b',
name: 'keyword.control.method.hurl'
},
{
captures: {
1: {
name: 'string.unquoted.url.hurl',
patterns: [{include: '#placeholders'}]
}
},
match: '(https?:\\/\\/[^\\t\\n]+)\\s*$',
name: 'string.unquoted.url.hurl'
},
{
begin: '^([A-Za-z0-9-]+)(:)\\s*',
beginCaptures: {
1: {name: 'entity.name.tag.header.hurl'},
2: {name: 'punctuation.separator.key-value.hurl'}
},
contentName: 'string.unquoted.hurl',
end: '$',
name: 'entity.name.tag.header.hurl',
patterns: [{include: '#placeholders'}]
}
]
},
sections: {
patterns: [
{
match:
'^\\s*\\[(QueryStringParams|Query|FormParams|Form|MultipartFormData|Multipart|Cookies|Captures|Asserts|BasicAuth|Options)\\]',
name: 'entity.name.section.hurl'
}
]
},
strings: {
patterns: [
{
match: '"(\\\\.|[^"\\\\])*"',
name: 'string.quoted.double.hurl',
patterns: [{include: '#escapes'}]
}
]
}
},
scopeName: 'source.hurl'
}
export default grammar