diff --git a/extensions/json/build/update-grammars.js b/extensions/json/build/update-grammars.js index 3fb40c86623be..ff00951e126bd 100644 --- a/extensions/json/build/update-grammars.js +++ b/extensions/json/build/update-grammars.js @@ -6,8 +6,8 @@ var updateGrammar = require('vscode-grammar-updater'); -function adaptJSON(grammar, replacementScope) { - grammar.name = 'JSON with comments'; +function adaptJSON(grammar, name, replacementScope) { + grammar.name = name; grammar.scopeName = `source${replacementScope}`; var fixScopeNames = function (rule) { @@ -33,9 +33,5 @@ function adaptJSON(grammar, replacementScope) { var tsGrammarRepo = 'microsoft/vscode-JSON.tmLanguage'; updateGrammar.update(tsGrammarRepo, 'JSON.tmLanguage', './syntaxes/JSON.tmLanguage.json'); -updateGrammar.update(tsGrammarRepo, 'JSON.tmLanguage', './syntaxes/JSONC.tmLanguage.json', grammar => adaptJSON(grammar, '.json.comments')); - - - - - +updateGrammar.update(tsGrammarRepo, 'JSON.tmLanguage', './syntaxes/JSONC.tmLanguage.json', grammar => adaptJSON(grammar, 'JSON with Comments', '.json.comments')); +updateGrammar.update(tsGrammarRepo, 'JSON.tmLanguage', './syntaxes/JSONL.tmLanguage.json', grammar => adaptJSON(grammar, 'JSON Lines', '.json.lines')); diff --git a/extensions/json/package.json b/extensions/json/package.json index ba3b94b8c78b5..606e989c4d64d 100644 --- a/extensions/json/package.json +++ b/extensions/json/package.json @@ -31,7 +31,7 @@ ".jslintrc", ".jsonld", ".geojson", - ".ipynb" + ".ipynb" ], "filenames": [ "composer.lock", @@ -65,6 +65,17 @@ "typedoc.json" ], "configuration": "./language-configuration.json" + }, + { + "id": "jsonl", + "aliases": [ + "JSON Lines" + ], + "extensions": [ + ".jsonl" + ], + "filenames": [], + "configuration": "./language-configuration.json" } ], "grammars": [ @@ -77,6 +88,11 @@ "language": "jsonc", "scopeName": "source.json.comments", "path": "./syntaxes/JSONC.tmLanguage.json" + }, + { + "language": "jsonl", + "scopeName": "source.json.lines", + "path": "./syntaxes/JSONL.tmLanguage.json" } ] }, diff --git a/extensions/json/syntaxes/JSONC.tmLanguage.json b/extensions/json/syntaxes/JSONC.tmLanguage.json index 31828ba65bbd7..ae5430630f651 100644 --- a/extensions/json/syntaxes/JSONC.tmLanguage.json +++ b/extensions/json/syntaxes/JSONC.tmLanguage.json @@ -5,7 +5,7 @@ "Once accepted there, we are happy to receive an update request." ], "version": "https://github.com/microsoft/vscode-JSON.tmLanguage/commit/9bd83f1c252b375e957203f21793316203f61f70", - "name": "JSON with comments", + "name": "JSON with Comments", "scopeName": "source.json.comments", "patterns": [ { diff --git a/extensions/json/syntaxes/JSONL.tmLanguage.json b/extensions/json/syntaxes/JSONL.tmLanguage.json new file mode 100644 index 0000000000000..26de8d856f8b6 --- /dev/null +++ b/extensions/json/syntaxes/JSONL.tmLanguage.json @@ -0,0 +1,213 @@ +{ + "information_for_contributors": [ + "This file has been converted from https://github.com/microsoft/vscode-JSON.tmLanguage/blob/master/JSON.tmLanguage", + "If you want to provide a fix or improvement, please create a pull request against the original repository.", + "Once accepted there, we are happy to receive an update request." + ], + "version": "https://github.com/microsoft/vscode-JSON.tmLanguage/commit/9bd83f1c252b375e957203f21793316203f61f70", + "name": "JSON Lines", + "scopeName": "source.json.lines", + "patterns": [ + { + "include": "#value" + } + ], + "repository": { + "array": { + "begin": "\\[", + "beginCaptures": { + "0": { + "name": "punctuation.definition.array.begin.json.lines" + } + }, + "end": "\\]", + "endCaptures": { + "0": { + "name": "punctuation.definition.array.end.json.lines" + } + }, + "name": "meta.structure.array.json.lines", + "patterns": [ + { + "include": "#value" + }, + { + "match": ",", + "name": "punctuation.separator.array.json.lines" + }, + { + "match": "[^\\s\\]]", + "name": "invalid.illegal.expected-array-separator.json.lines" + } + ] + }, + "comments": { + "patterns": [ + { + "begin": "/\\*\\*(?!/)", + "captures": { + "0": { + "name": "punctuation.definition.comment.json.lines" + } + }, + "end": "\\*/", + "name": "comment.block.documentation.json.lines" + }, + { + "begin": "/\\*", + "captures": { + "0": { + "name": "punctuation.definition.comment.json.lines" + } + }, + "end": "\\*/", + "name": "comment.block.json.lines" + }, + { + "captures": { + "1": { + "name": "punctuation.definition.comment.json.lines" + } + }, + "match": "(//).*$\\n?", + "name": "comment.line.double-slash.js" + } + ] + }, + "constant": { + "match": "\\b(?:true|false|null)\\b", + "name": "constant.language.json.lines" + }, + "number": { + "match": "(?x) # turn on extended mode\n -? # an optional minus\n (?:\n 0 # a zero\n | # ...or...\n [1-9] # a 1-9 character\n \\d* # followed by zero or more digits\n )\n (?:\n (?:\n \\. # a period\n \\d+ # followed by one or more digits\n )?\n (?:\n [eE] # an e character\n [+-]? # followed by an option +/-\n \\d+ # followed by one or more digits\n )? # make exponent optional\n )? # make decimal portion optional", + "name": "constant.numeric.json.lines" + }, + "object": { + "begin": "\\{", + "beginCaptures": { + "0": { + "name": "punctuation.definition.dictionary.begin.json.lines" + } + }, + "end": "\\}", + "endCaptures": { + "0": { + "name": "punctuation.definition.dictionary.end.json.lines" + } + }, + "name": "meta.structure.dictionary.json.lines", + "patterns": [ + { + "comment": "the JSON object key", + "include": "#objectkey" + }, + { + "include": "#comments" + }, + { + "begin": ":", + "beginCaptures": { + "0": { + "name": "punctuation.separator.dictionary.key-value.json.lines" + } + }, + "end": "(,)|(?=\\})", + "endCaptures": { + "1": { + "name": "punctuation.separator.dictionary.pair.json.lines" + } + }, + "name": "meta.structure.dictionary.value.json.lines", + "patterns": [ + { + "comment": "the JSON object value", + "include": "#value" + }, + { + "match": "[^\\s,]", + "name": "invalid.illegal.expected-dictionary-separator.json.lines" + } + ] + }, + { + "match": "[^\\s\\}]", + "name": "invalid.illegal.expected-dictionary-separator.json.lines" + } + ] + }, + "string": { + "begin": "\"", + "beginCaptures": { + "0": { + "name": "punctuation.definition.string.begin.json.lines" + } + }, + "end": "\"", + "endCaptures": { + "0": { + "name": "punctuation.definition.string.end.json.lines" + } + }, + "name": "string.quoted.double.json.lines", + "patterns": [ + { + "include": "#stringcontent" + } + ] + }, + "objectkey": { + "begin": "\"", + "beginCaptures": { + "0": { + "name": "punctuation.support.type.property-name.begin.json.lines" + } + }, + "end": "\"", + "endCaptures": { + "0": { + "name": "punctuation.support.type.property-name.end.json.lines" + } + }, + "name": "string.json.lines support.type.property-name.json.lines", + "patterns": [ + { + "include": "#stringcontent" + } + ] + }, + "stringcontent": { + "patterns": [ + { + "match": "(?x) # turn on extended mode\n \\\\ # a literal backslash\n (?: # ...followed by...\n [\"\\\\/bfnrt] # one of these characters\n | # ...or...\n u # a u\n [0-9a-fA-F]{4}) # and four hex digits", + "name": "constant.character.escape.json.lines" + }, + { + "match": "\\\\.", + "name": "invalid.illegal.unrecognized-string-escape.json.lines" + } + ] + }, + "value": { + "patterns": [ + { + "include": "#constant" + }, + { + "include": "#number" + }, + { + "include": "#string" + }, + { + "include": "#array" + }, + { + "include": "#object" + }, + { + "include": "#comments" + } + ] + } + } +} \ No newline at end of file diff --git a/extensions/theme-seti/build/update-icon-theme.js b/extensions/theme-seti/build/update-icon-theme.js index ab2a1c81e8154..366e7f37dd673 100644 --- a/extensions/theme-seti/build/update-icon-theme.js +++ b/extensions/theme-seti/build/update-icon-theme.js @@ -44,6 +44,7 @@ const nonBuiltInLanguages = { // { fileNames, extensions } // list of languagesId that inherit the icon from another language const inheritIconFromLanguage = { "jsonc": 'json', + "jsonl": 'json', "postcss": 'css', "django-html": 'html', "blade": 'php' diff --git a/extensions/theme-seti/icons/vs-seti-icon-theme.json b/extensions/theme-seti/icons/vs-seti-icon-theme.json index f5b7829968011..184cded8cad2f 100644 --- a/extensions/theme-seti/icons/vs-seti-icon-theme.json +++ b/extensions/theme-seti/icons/vs-seti-icon-theme.json @@ -1943,6 +1943,7 @@ "todo": "_todo", "vala": "_vala", "vue": "_vue", + "jsonl": "_json", "postcss": "_css", "django-html": "_html_3", "blade": "_php" @@ -2257,6 +2258,7 @@ "terraform": "_terraform_light", "vala": "_vala_light", "vue": "_vue_light", + "jsonl": "_json_light", "postcss": "_css_light", "django-html": "_html_3_light", "blade": "_php_light"