// This is a TextMate grammar distributed by `starry-night`. // This grammar is developed at // // and licensed `mpl-2.0`. // See for more info. /** * @import {Grammar} from '@wooorm/starry-night' */ /** @type {Grammar} */ const grammar = { extensions: ['.overpassql'], names: ['overpassql'], patterns: [{include: '#TOP'}], repository: { TOP: { patterns: [ {include: '#whitespace'}, {include: '#comments'}, {include: '#start-statement-context'} ] }, 'assign-variable': { captures: { 1: {name: 'keyword.operator.assignment.overpassql'}, 2: {name: 'punctuation.definition.variable.overpassql'}, 3: {name: 'variable.other.overpassql'} }, match: '(->)\\s*+(\\.)\\s*+([_a-zA-Z][_a-zA-Z0-9]*+)(?=\\s*+(?:;|$))', name: 'meta.overpassql.output-set' }, bareword: { match: '[a-zA-Z][a-zA-Z0-9]*+', name: 'meta.overpassql.bareword' }, 'block-comment': { begin: '\\/\\*', beginCaptures: { 0: {name: 'punctuation.definition.comment.begin.overpassql'} }, end: '\\*\\/', endCaptures: {0: {name: 'punctuation.definition.comment.end.overpassql'}}, name: 'comment.block.overpassql' }, 'block-construct': { begin: 'if|else|foreach|for|complete|retro|compare', beginCaptures: {0: {name: 'keyword.control.overpassql'}}, end: '(?<=[;)}])', name: 'meta.overpassql.statement.block', patterns: [ {include: '#whitespace'}, {include: '#comment'}, {include: '#parens-evaluator'}, {include: '#block-group'} ] }, 'block-group': { begin: '\\{', beginCaptures: { 0: { name: 'punctuation.section.block.begin.overpassql punctuation.section.braces.begin' } }, end: '\\}', endCaptures: { 0: { name: 'punctuation.section.block.end.overpassql punctuation.section.end.begin' } }, name: 'meta.block.overpassql', patterns: [ {include: '#whitespace'}, {include: '#comment'}, {include: '#start-statement-context'} ] }, 'builtin-evaluator-function-name': { captures: { 1: {name: 'punctuation.accessor.overpassql'}, 2: {name: 'support.function.overpassql'} }, match: '(\\.)?+(id|type|is_tag|keys|version|timestamp|changeset|uid|user|count_tags|count_members|count_distinct_members|count_by_role|count_distinct_by_role|per_member|per_vertex|pos|mtype|ref|role|angle|is_closed|geom|length|lat|lon|lstr|poly|u|set|min|max|sum|count|gcat|number|is_number|suffix|abs|date|is_date|center|tracehull|lrs_in|lrs_isect|lrs_union|lrs_min|lrs_max)(?=\\()', name: 'meta.overpassql.evaluator.function-name' }, comments: { patterns: [{include: '#block-comment'}, {include: '#line-comment'}] }, evaluator: { patterns: [ {include: '#whitespace'}, {include: '#comments'}, {include: '#extended-overpass-turbo-queries'}, {include: '#evaluator-operator'}, {include: '#string-literal'}, {include: '#number-literal'}, {include: '#evaluator-variable'}, {include: '#evaluator-tag-value'}, {include: '#evaluator-field-access'}, {include: '#builtin-evaluator-function-name'}, {include: '#evaluator-function-name'}, {include: '#evaluator-function-params'} ] }, 'evaluator-field-access': { captures: { 1: {name: 'punctuation.accessor.overpassql'}, 2: {name: 'variable.other.member.overpassql'} }, match: '(\\.)([a-zA-Z][a-zA-Z0-9]*+)(?!\\()', name: 'meta.overpassql.evaluator.field-access' }, 'evaluator-function-name': { captures: { 1: {name: 'punctuation.accessor.overpassql'}, 2: {name: 'variable.function.overpassql'} }, match: '(\\.)?+([a-zA-Z][a-zA-Z0-9]*+)(?=\\()', name: 'meta.overpassql.evaluator.function-name' }, 'evaluator-function-params': { begin: '\\(', beginCaptures: { 0: { name: 'punctuation.section.group.begin.overpassql punctuation.section.parens.begin.overpassql' } }, end: '\\)', endCaptures: { 0: { name: 'punctuation.section.group.end.overpassql punctuation.section.parens.end.overpassql' } }, name: 'meta.group.overpassql meta.parens.overpassql meta.overpassql.function.params', patterns: [ {include: '#whitespace'}, {include: '#comments'}, {include: '#parameter-separator'}, {include: '#evaluator'} ] }, 'evaluator-operator': { captures: { 1: {name: 'keyword.other.overpassql'}, 2: {name: 'keyword.operator.logical.overpassql'}, 3: {name: 'keyword.operator.arithmetic.overpassql'}, 4: {name: 'keyword.operator.other.overpassql'} }, match: '(::)|(!|\\|\\||&&|==|!=|<=|>=|<|>)|(\\+|-|\\*|/)|(\\?|:)' }, 'evaluator-tag-value': { begin: '\\[', beginCaptures: { 0: {name: 'punctuation.section.brackets.begin.overpassql'} }, end: '\\]', endCaptures: {0: {name: 'punctuation.section.brackets.end.overpassql'}}, name: 'meta.overpassql.evaluator.tag-value', patterns: [ {include: '#whitespace'}, {include: '#comments'}, {include: '#string-literal'}, {include: '#bareword'}, {include: '#evaluator'} ] }, 'evaluator-variable': { match: '([a-zA-Z][a-zA-Z0-9]*+)(?=\\.)', name: 'variable.other.overpassql' }, expression: { patterns: [ {include: '#extended-overpass-turbo-queries'}, {include: '#pair-expression'}, {include: '#number-literal'}, {include: '#string-literal'}, {include: '#setting-special-fields'}, {include: '#tag-expression'}, {include: '#query-type'}, {include: '#parens-expression'} ] }, 'extended-overpass-turbo-queries': { begin: '{{', beginCaptures: {0: {name: 'keyword.other.overpassql.turbo.begin'}}, end: '}}', endCaptures: {0: {name: 'keyword.other.overpassql.turbo.end'}}, name: 'meta.overpassql.turbo.query', patterns: [ {include: '#whitespace'}, {include: '#comments'}, {include: '#number-literal'}, {include: '#string-literal'}, {include: '#overpass-turbo-query-name'}, {include: '#overpass-turbo-query-separator'}, {include: '#overpass-turbo-query-definition'}, {include: '#overpass-turbo-custom-query-name'} ] }, fallback: { begin: '(?=.)', end: '(?<=[;\\{|\\}])', name: 'meta.overpassql.unknown', patterns: [ {include: '#whitespace'}, {include: '#comments'}, {include: '#number-literal'}, {include: '#string-literal'}, {include: '#query-type'}, {include: '#assign-variable'}, {include: '#input-set'} ] }, 'function-call': { begin: '(is_in|timeline)(\\()', beginCaptures: { 1: {name: 'support.function.overpassql'}, 2: { name: 'punctuation.section.group.begin.overpassql punctuation.section.parens.begin.overpassql' } }, end: '\\)', endCaptures: { 0: { name: 'punctuation.section.group.end.overpassql punctuation.section.parens.end.overpassql' } }, name: 'meta.function-call.overpassql', patterns: [ {include: '#whitespace'}, {include: '#comments'}, {include: '#expression'}, {include: '#parameter-separator'} ] }, 'function-call-names': { match: 'is_in|timeline', name: 'support.function.overpassql' }, 'function-call-statement-function-name': { begin: '(?=(?:\\.\\s*+(?:/\\*(?:[^*]|\\*[^/])*+\\*/\\s*+)*+[a-zA-Z][a-zA-Z0-9]*+\\s*+(?:/\\*(?:[^*]|\\*[^/])*+\\*/\\s*+)*+)?+(?:is_in|timeline))', end: ';', endCaptures: {0: {name: 'punctuation.terminator.statement.overpassql'}}, name: 'meta.overpassql.statement.function-call', patterns: [ {include: '#whitespace'}, {include: '#comments'}, {include: '#input-set'}, {include: '#function-call'}, {include: '#assign-variable'} ] }, 'function-word-statement-word-function-name': { begin: '(?=(?:\\.\\s*+(?:/\\*(?:[^*]|\\*[^/])*+\\*/\\s*+)*+[a-zA-Z][a-zA-Z0-9]*+\\s*+(?:/\\*(?:[^*]|\\*[^/])*+\\*/\\s*+)*+)?+(?:local|convert|make))', end: ';', endCaptures: {0: {name: 'punctuation.terminator.statement.overpassql'}}, name: 'meta.overpassql.statement.word-function', patterns: [ {include: '#whitespace'}, {include: '#comments'}, {include: '#input-set'}, {include: '#word-function-names'}, {include: '#word-function-param'}, {include: '#assign-variable'} ] }, 'generic-function-call': { begin: '(\\w++)(\\()', beginCaptures: { 1: {name: 'variable.function.overpassql'}, 2: { name: 'punctuation.section.group.begin.overpassql punctuation.section.parens.begin.overpassql' } }, end: '\\)', endCaptures: { 0: { name: 'punctuation.section.group.end.overpassql punctuation.section.parens.end.overpassql' } }, name: 'meta.function-call.overpassql.generic', patterns: [ {include: '#whitespace'}, {include: '#comments'}, {include: '#expression'}, {include: '#parameter-separator'} ] }, 'generic-function-statement-generic-name': { begin: '(?=(?:\\.\\s*+(?:/\\*(?:[^*]|\\*[^/])*+\\*/\\s*+)*+[a-zA-Z][a-zA-Z0-9]*+\\s*+(?:/\\*(?:[^*]|\\*[^/])*+\\*/\\s*+)*+)?+\\w)', end: ';', endCaptures: {0: {name: 'punctuation.terminator.statement.overpassql'}}, name: 'meta.overpassql.statement.generic-function', patterns: [ {include: '#whitespace'}, {include: '#comments'}, {include: '#input-set'}, {include: '#generic-function-call'}, {include: '#assign-variable'} ] }, 'input-set': { captures: { 1: {name: 'punctuation.definition.variable.overpassql'}, 2: {name: 'variable.other.overpassql'} }, match: '(\\.)\\s*+([_a-zA-Z][_a-zA-Z0-9]*+)' }, 'item-statement-dot-semicolon': { begin: '(?=\\.\\s*+(?:/\\*(?:[^*]|\\*[^/])*+\\*/\\s*+)*+[a-zA-Z][a-zA-Z0-9]*+(?:/\\*(?:[^*]|\\*[^/])*+\\*/\\s*+)*+;)', end: ';', endCaptures: {0: {name: 'punctuation.terminator.statement.overpassql'}}, name: 'meta.overpassql.statement.item', patterns: [ {include: '#whitespace'}, {include: '#comments'}, {include: '#input-set'} ] }, 'line-comment': { captures: {1: {name: 'punctuation.definition.comment.begin.overpassql'}}, match: '(//).*+$', name: 'comment.double-slash.overpassql' }, 'number-literal': { captures: { 1: {name: 'keyword.operator.arithmetic.overpassql'}, 2: {name: 'constant.numeric.overpassql'} }, match: '(?>|<|>', name: 'keyword.operator.other.overpassql' }, 'operator-statement-operator-symbol': { begin: '(?=(?:\\.\\s*+(?:/\\*(?:[^*]|\\*[^/])*+\\*/\\s*+)*+[a-zA-Z][a-zA-Z0-9]*+\\s*+(?:/\\*(?:[^*]|\\*[^/])*+\\*/\\s*+)*+)?+(?:<<|>>|<|>))', end: ';', endCaptures: {0: {name: 'punctuation.terminator.statement.overpassql'}}, name: 'meta.overpassql.statement.operator', patterns: [ {include: '#whitespace'}, {include: '#comments'}, {include: '#input-set'}, {include: '#operator-names'}, {include: '#assign-variable'} ] }, 'out-keyword': {match: 'out\\b', name: 'keyword.other.overpassql'}, 'out-parameter': { patterns: [ {include: '#out-parameter-keyword'}, {include: '#positive-integer'}, {include: '#parens-expression'} ] }, 'out-parameter-keyword': { captures: {0: {name: 'support.constant.overpassql.out'}}, match: 'count|ids|skel|body|tags|meta|noids|geom|center|bb|asc|qt' }, 'out-statement-keyword': { begin: '(?=(?:\\.\\s*+(?:/\\*(?:[^*]|\\*[^/])*+\\*/\\s*+)*+[a-zA-Z][a-zA-Z0-9]*+\\s*+(?:/\\*(?:[^*]|\\*[^/])*+\\*/\\s*+)*+)?+out)', end: ';', endCaptures: {0: {name: 'punctuation.terminator.statement.overpassql'}}, name: 'meta.overpassql.statement.out', patterns: [ {include: '#whitespace'}, {include: '#comments'}, {include: '#input-set'}, {include: '#out-keyword'}, {include: '#out-parameter'} ] }, 'overpass-turbo-custom-query-name': { match: '\\b[a-zA-Z][a-zA-Z0-9]*+(?=\\w*[:}=])', name: 'variable.other.overpassql.turbo' }, 'overpass-turbo-query-definition': { match: '=', name: 'keyword.operator.assignment.overpassql.turbo' }, 'overpass-turbo-query-name': { match: '\\b(bbox|center|date|geocodeId|geocodeArea|geocodeBbox|geocodeCoords|style|data)\\b', name: 'support.constant.overpassql.turbo' }, 'overpass-turbo-query-separator': { match: ':', name: 'punctuation.separator.delimiter.colon.overpassql.turbo' }, 'pair-expression': { begin: '([a-zA-Z][a-zA-Z0-9]*+)(\\()', beginCaptures: { 1: {name: 'entity.other.overpassql'}, 2: { name: 'punctuation.section.group.begin.overpassql punctuation.section.parens.begin.overpassql' } }, end: '\\)', endCaptures: { 0: { name: 'punctuation.section.group.end.overpassql punctuation.section.parens.end.overpassql' } }, name: 'meta.overpassql.pair', patterns: [ {include: '#whitespace'}, {include: '#comments'}, {include: '#parameter-separator'}, {include: '#expression'}, {include: '#skip-term'} ] }, 'parameter-separator': { match: ',', name: 'punctuation.separator.delimiter.comma.overpassql' }, 'parens-evaluator': { begin: '\\(', beginCaptures: { 0: { name: 'punctuation.section.group.begin.overpassql punctuation.section.parens.begin.overpassql' } }, end: '\\)', endCaptures: { 0: { name: 'punctuation.section.group.end.overpassql punctuation.section.parens.end.overpassql' } }, name: 'meta.overpassql.evaluator-group', patterns: [ {include: '#whitespace'}, {include: '#comment'}, {include: '#evaluator'} ] }, 'parens-expression': { begin: '\\(', beginCaptures: { 0: { name: 'punctuation.section.group.begin.overpassql punctuation.section.parens.begin.overpassql' } }, end: '\\)', endCaptures: { 0: { name: 'punctuation.section.group.end.overpassql punctuation.section.parens.end.overpassql' } }, patterns: [ {include: '#whitespace'}, {include: '#comments'}, {include: '#expression'}, {include: '#parameter-separator'} ] }, 'positive-integer': { captures: {0: {name: 'constant.numeric.overpassql'}}, match: '(?