Code change:
<ins> { "information_for_contributors": [ "This file has been converted from https://github.com/dart-lang/dart-syntax-highlight/blob/master/grammars/dart.json", "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/dart-lang/dart-syntax-highlight/commit/65f211722c85e9fdf0aa658d5663e6ccaf2ebe25", "name": "Dart", "scopeName": "source.dart", "patterns": [ { "name": "meta.preprocessor.script.dart", "match": "^(#!.*)$" }, { "name": "meta.declaration.dart", "begin": "^w*b(library|import|part of|part|export)b", "beginCaptures": { "0": { "name": "keyword.other.import.dart" } }, "end": ";", "endCaptures": { "0": { "name": "punctuation.terminator.dart" } }, "patterns": [ { "include": "#strings" }, { "include": "#comments" }, { "name": "keyword.other.import.dart", "match": "b(as|show|hide)b" } ] }, { "include": "#comments" }, { "include": "#punctuation" }, { "include": "#annotations" }, { "include": "#keywords" }, { "include": "#constants-and-special-vars" }, { "include": "#strings" } ], "repository": { "dartdoc": { "patterns": [ { "match": "([.*?])", "captures": { "0": { "name": "variable.name.source.dart" } } }, { "match": "^ {4,}(?![ *]).*", "captures": { "0": { "name": "variable.name.source.dart" } } }, { "contentName": "variable.other.source.dart", "begin": "```.*?$", "end": "```" }, { "match": "(`.*?`)", "captures": { "0": { "name": "variable.other.source.dart" } } }, { "match": "(`.*?`)", "captures": { "0": { "name": "variable.other.source.dart" } } }, { "match": "(* ((    ).*))$", "captures": { "2": { "name": "variable.other.source.dart" } } }, { "match": "(*    .*)$" } ] }, "comments": { "patterns": [ { "name": "comment.block.empty.dart", "match": "/**/", "captures": { "0": { "name": "punctuation.definition.comment.dart" } } }, { "include": "#comments-doc-oldschool" }, { "include": "#comments-doc" }, { "include": "#comments-inline" } ] }, "comments-doc-oldschool": { "patterns": [ { "name": "comment.block.documentation.dart", "begin": "/**", "end": "*/", "patterns": [ { "include": "#comments-doc-oldschool" }, { "include": "#comments-block" }, { "include": "#dartdoc" } ] } ] }, "comments-doc": { "patterns": [ { "name": "comment.block.documentation.dart", "begin": "///", "while": "^s*///", "patterns": [ { "include": "#dartdoc" } ] } ] }, "comments-inline": { "patterns": [ { "include": "#comments-block" }, { "match": "((//).*)$", "captures": { "1": { "name": "comment.line.double-slash.dart" } } } ] }, "comments-block": { "patterns": [ { "name": "comment.block.dart", "begin": "/*", "end": "*/", "patterns": [ { "include": "#comments-block" } ] } ] }, "annotations": { "patterns": [ { "name": "storage.type.annotation.dart", "match": "@[a-zA-Z]+" } ] }, "constants-and-special-vars": { "patterns": [ { "name": "constant.language.dart", "match": "(?<!$)b(true|false|null)b(?!$)" }, { "name": "variable.language.dart", "match": "(?<!$)b(this|super)b(?!$)" }, { "name": "constant.numeric.dart", "match": "(?<!$)b((0(x|X)[0-9a-fA-F]*)|(([0-9]+.?[0-9]*)|(.[0-9]+))((e|E)(+|-)?[0-9]+)?)b(?!$)" }, { "name": "support.class.dart", "match": "(?<![a-zA-Z0-9_$])([_$]*[A-Z][a-zA-Z0-9_$]*|boolb|numb|intb|doubleb|dynamicb)" }, { "match": "([_$]*[a-z][a-zA-Z0-9_$]*)(<|(|s+=>)", "captures": { "1": { "name": "entity.name.function.dart" } } } ] }, "keywords": { "patterns": [ { "name": "keyword.cast.dart", "match": "(?<!$)basb(?!$)" }, { "name": "keyword.control.catch-exception.dart", "match": "(?<!$)b(try|on|catch|finally|throw|rethrow)b(?!$)" }, { "name": "keyword.control.dart", "match": "(?<!$)b(break|case|continue|default|do|else|for|if|in|return|switch|while)b(?!$)" }, { "name": "keyword.control.dart", "match": "(?<!$)b(sync(*)?|async(*)?|await|yield(*)?)b(?!$)" }, { "name": "keyword.control.dart", "match": "(?<!$)bassertb(?!$)" }, { "name": "keyword.control.new.dart", "match": "(?<!$)b(new)b(?!$)" }, { "name": "keyword.declaration.dart", "match": "(?<!$)b(abstract|class|enum|extends|extension|external|factory|implements|get|mixin|native|operator|set|typedef|with|covariant)b(?!$)" }, { "name": "keyword.operator.dart", "match": "(?<!$)b(is!?)b(?!$)" }, { "name": "keyword.operator.ternary.dart", "match": "?|:" }, { "name": "keyword.operator.bitwise.dart", "match": "(<<|>>>?|~|^|||&)" }, { "name": "keyword.operator.assignment.bitwise.dart", "match": "((&|^|||<<|>>>?)=)" }, { "name": "keyword.operator.closure.dart", "match": "(=>)" }, { "name": "keyword.operator.comparison.dart", "match": "(==|!=|<=?|>=?)" }, { "name": "keyword.operator.assignment.arithmetic.dart", "match": "(([+*/%-]|~)=)" }, { "name": "keyword.operator.assignment.dart", "match": "(=)" }, { "name": "keyword.operator.increment-decrement.dart", "match": "(--|++)" }, { "name": "keyword.operator.arithmetic.dart", "match": "(-|+|*|/|~/|%)" }, { "name": "keyword.operator.logical.dart", "match": "(!|&&|||)" }, { "name": "storage.modifier.dart", "match": "(?<!$)b(static|final|const|required|late)b(?!$)" }, { "name": "storage.type.primitive.dart", "match": "(?<!$)b(?:void|var)b(?!$)" } ] }, "string-interp": { "patterns": [ { "match": "$(([a-zA-Z0-9_]+)|{([^{}]+)})", "captures": { "2": { "name": "variable.parameter.dart" }, "3": { "name": "variable.parameter.dart" } } }, { "name": "constant.character.escape.dart", "match": "." } ] }, "strings": { "patterns": [ { "name": "string.interpolated.triple.double.dart", "begin": "(?<!r)"""", "end": """"(?!")", "patterns": [ { "include": "#string-interp" } ] }, { "name": "string.interpolated.triple.single.dart", "begin": "(?<!r)'''", "end": "'''(?!')", "patterns": [ { "include": "#string-interp" } ] }, { "name": "string.quoted.triple.double.dart", "begin": "r"""", "end": """"(?!")" }, { "name": "string.quoted.triple.single.dart", "begin": "r'''", "end": "'''(?!')" }, { "name": "string.interpolated.double.dart", "begin": "(?<!|r)"", "end": """, "patterns": [ { "name": "invalid.string.newline", "match": "n" }, { "include": "#string-interp" } ] }, { "name": "string.quoted.double.dart", "begin": "r"", "end": """, "patterns": [ { "name": "invalid.string.newline", "match": "n" } ] }, { "name": "string.interpolated.single.dart", "begin": "(?<!|r)'", "end": "'", "patterns": [ { "name": "invalid.string.newline", "match": "n" }, { "include": "#string-interp" } ] }, { "name": "string.quoted.single.dart", "begin": "r'", "end": "'", "patterns": [ { "name": "invalid.string.newline", "match": "n" } ] } ] }, "punctuation": { "patterns": [ { "name": "punctuation.comma.dart", "match": "," }, { "name": "punctuation.terminator.dart", "match": ";" }, { "name": "punctuation.dot.dart", "match": "." } ] } } } </ins>  No newline at end of file

Related discussion:
text: Following on from comments at , it would be good to have basic Dart language configuration as a built-in extension in VS Code, allowing things like syntax highlighting to in the case where the Dart extension is not installed (for example a Live Share client that hasn't installed it) or is disabled (for example in an Untrusted workspace). From : There is a Dart Team-owned grammar here that can be used - it's the (except for a small bug fix that I'll file an upstream PR for shortly): Great! Though what's the advantage of depending on the built-in extension? I try to support a few-versions-old VS Code where possible (so wouldn't do that for a few versions) but also the extension is published to open- for use by other clients so the dependency may complicate things (if they don't have the same built-in). I'd probably do some investigation into this before removing anything from Dart-Code then (it sounds like there's no downside to having the grammar/config provided by both for a period anyway). (fyi
It also works without a dependency, but only because the extension is built-in. No problem if the Dart extension keeps the grammar and language configurations for a while until it is all settled. Do you want to look into a PR or should I?
If it's easier/quicker for you to do, feel free. Otherwise I'm happy to do it but may need some pointers for how built-in extensions are set up.
I pushed the PR We have a new built-in language :-)
Super, thanks! For future reference - for changes to the language config I can send a PR to , and for grammar changes I can run (after the changes are landed in the upstream dart-lang repo)?
I just noticed in the it has the path but this doesn't seem to match the location of the file ?
Good catch, thanks. Pushed the fix:
For grammar changes, I'll pull them in about once per month so you can just rely on that if you want. If there's a change that needs to be picked up sooner than that, then feel free to make an issue an @ mention me and I'll pull in the change earlier.
Perfect, thanks!
is this support in the Code May Update (1.57) that just went out?
Yes, in microsoft/vscode you can tell what release an issue is in by looking at the Milestone. !
Yep!