// This is a TextMate grammar distributed by `starry-night`. // This grammar is developed at // // and licensed `mit`. // See 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