--- name: JSON fileTypes: - json scopeName: source.json repository: number: name: constant.numeric.json match: |- (?x: # turn on extended mode -? # an optional minus (?: 0 # a zero | # ...or... [1-9] # a 1-9 character \d* # followed by zero or more digits ) (?: \. # a period \d+ # followed by one or more digits (?: [eE] # an e character [+-]? # followed by an option +/- \d+ # followed by one or more digits )? # make exponent optional )? # make decimal portion optional ) comment: handles integer and decimal numbers constant: name: constant.language.json match: \b(?:true|false|null)\b value: patterns: - include: "#constant" - include: "#number" - include: "#string" - include: "#array" - include: "#object" comment: the 'value' diagram at http://json.org array: name: meta.structure.array.json endCaptures: "0": name: punctuation.definition.array.end.json begin: \[ beginCaptures: "0": name: punctuation.definition.array.begin.json end: \] patterns: - include: "#value" - name: punctuation.separator.array.json match: "," - name: invalid.illegal.expected-array-separator.json match: "[^\\s\\]]" object: name: meta.structure.dictionary.json endCaptures: "0": name: punctuation.definition.dictionary.end.json begin: \{ beginCaptures: "0": name: punctuation.definition.dictionary.begin.json end: \} patterns: - include: "#string" comment: the JSON object key - name: meta.structure.dictionary.value.json endCaptures: "1": name: punctuation.separator.dictionary.pair.json begin: ":" beginCaptures: "0": name: punctuation.separator.dictionary.key-value.json end: (,)|(?=\}) patterns: - include: "#value" comment: the JSON object value - name: invalid.illegal.expected-dictionary-separator.json match: "[^\\s,]" - name: invalid.illegal.expected-dictionary-separator.json match: "[^\\s\\}]" comment: a JSON object string: name: string.quoted.double.json endCaptures: "0": name: punctuation.definition.string.end.json begin: "\"" beginCaptures: "0": name: punctuation.definition.string.begin.json end: "\"" patterns: - name: constant.character.escape.json match: |- (?x: # turn on extended mode \\ # a literal backslash (?: # ...followed by... ["\\/bfnrt] # one of these characters | # ...or... u # a u [0-9a-fA-F]{4} # and four hex digits ) ) - name: invalid.illegal.unrecognized-string-escape.json match: \\. uuid: 0C3868E4-F96B-4E55-B204-1DCB5A20748B foldingStartMarker: |- (?x: # turn on extended mode ^ # a line beginning with \s* # some optional space [{\[] # the start of an object or array (?! # but not followed by .* # whatever [}\]] # and the close of an object or array ,? # an optional comma \s* # some optional space $ # at the end of the line ) | # ...or... [{\[] # the start of an object or array \s* # some optional space $ # at the end of the line ) patterns: - include: "#value" foldingStopMarker: |- (?x: # turn on extended mode ^ # a line beginning with \s* # some optional space [}\]] # and the close of an object or array ) keyEquivalent: ^~J