{ "fileTypes": [ "fan" ], "name": "Fantom", "patterns": [ { "include": "#main" } ], "repository": { "comments": { "patterns": [ { "include": "#line-comment" }, { "include": "#fandoc-comment" }, { "include": "#multiline-comment" } ] }, "double-quoted-string": { "patterns": [ { "begin": "(\")", "end": "(\")", "name": "string.quoted.double.fan", "patterns": [ { "include": "#escaped-unicode" }, { "include": "#escaped-char" }, { "include": "#interpolation" } ] } ] }, "escaped-char": { "patterns": [ { "match": "(\\\\[bfnrt\"'`$\\\\])", "name": "constant.character.escape.char.fan" }, { "match": "(\\\\.)", "name": "invalid.illegal.escape.char.fan" } ] }, "escaped-unicode": { "patterns": [ { "match": "(\\\\u[0-9A-Fa-f]{4})", "name": "constant.character.escape.unicode.fan" }, { "match": "(\\\\u[0-9A-Fa-f]{0,3})", "name": "invalid.illegal.escape.unicode.fan" } ] }, "fandoc-comment": { "patterns": [ { "match": "(^\\s*\\*\\*.*$)", "name": "comment.line.fandoc.fan" } ] }, "interpolation": { "patterns": [ { "match": "(\\$\\{.+?\\})", "name": "variable.other.interpolated-expr.fan" }, { "match": "(\\$([A-Za-z_][A-Za-z0-9_]*(\\.[A-Za-z_][A-Za-z0-9_]*)*))", "name": "variable.other.interpolated-dotcall.fan" }, { "match": "(\\$\\{\\w*)", "name": "invalid.illegal.interpolation.fan" } ] }, "keywords": { "patterns": [ { "match": "(\\b(true|false|null)\\b)", "name": "constant.language.fan" }, { "match": "(\\b(abstract|const|enum|facet|final|internal|native|once|override|private|protected|public|readonly|static|virtual|volatile)\\b)", "name": "storage.modifier.fan" }, { "match": "(\\b(return|break|continue)\\b)", "name": "keyword.control.block.fan" }, { "match": "(\\b(try|catch|finally|throw|assert)\\b)", "name": "keyword.control.exceptions.fan" }, { "match": "(\\b(for|while|do|foreach)\\b)", "name": "keyword.control.loop.fan" }, { "match": "(\\b(if|else|switch|case|default)\\b)", "name": "keyword.control.flow.fan" }, { "match": "(\\b(new|void)\\b)", "name": "keyword.other.fan" }, { "match": "(\\b(using)\\b)", "name": "storage.modifier.global.fan" }, { "match": "(\\b(this|super|it)\\b)", "name": "variable.language.self.fan" }, { "match": "(\\b(Void|Bool|Int|Float|Decimal|Duration|Str|Uri|Type|Slot|Range|List|Map|This)\\b)", "name": "support.type.sys.fan" } ] }, "line-comment": { "patterns": [ { "match": "((//).*$)", "name": "comment.line.double-slash.fan" } ] }, "main": { "patterns": [ { "include": "#comments" }, { "include": "#strings" }, { "include": "#uris" }, { "include": "#numbers" }, { "include": "#keywords" }, { "include": "#operators" }, { "include": "#typedef" } ] }, "multiline-comment": { "patterns": [ { "begin": "(/\\*)", "end": "(\\*/)", "name": "comment.block" } ] }, "numbers": { "patterns": [ { "match": "(\\b0x[0-9A-Fa-f][_0-9A-Fa-f]*)", "name": "constant.numeric.hex.fan" }, { "match": "(0x)", "name": "invalid.illegal.hex.fan" }, { "match": "(\\\\u[0-9A-Fa-f]{4})", "name": "constant.numeric.escape.unicode.fan" }, { "match": "(\\\\(u[0-9A-Fa-f]{0,3})?)", "name": "invalid.illegal.escape.unicode.fan" }, { "match": "(\\'\\\\[bfnrt\"'$\\\\]\\')", "name": "constant.numeric.escape.char.fan" }, { "match": "(\\'[^\\\\]\\')", "name": "constant.numeric.char.fan" }, { "match": "((\\B\\.[0-9][0-9_]*|\\b[0-9][0-9_]*(\\.[0-9][0-9_]*)?)([eE][-+]?[0-9][0-9_]*)?(ns|ms|sec|min|hr|day))", "name": "constant.other.duration.fan" }, { "match": "((\\B\\.[0-9][0-9_]*|\\b[0-9][0-9_]*(\\.[0-9][0-9_]*)?)([eE][-+]?[0-9][0-9_]*)?[fdFD]?)", "name": "constant.numeric.number.fan" } ] }, "operators": { "patterns": [ { "match": "(===?|!==?)", "name": "keyword.operator.equality.fan" }, { "match": "(<(=|=>)?|>=?)", "name": "keyword.operator.relational.symbol.fan" }, { "match": "(:?=)", "name": "keyword.operator.assign.fan" }, { "match": "([+*/%-]=?)", "name": "keyword.operator.math.fan" }, { "match": "(!|&&|(\\?\\:)|(\\|\\|))", "name": "keyword.operator.logical.fan" }, { "match": "(\\b(is|isnot|as)\\b)", "name": "keyword.operator.relational.named.fan" }, { "match": "(\\->|\\?\\->|\\?\\.)", "name": "keyword.operator.call.fan" }, { "match": "(\\+\\+|\\-\\-)", "name": "keyword.operator.inc-dec.fan" }, { "match": "(\\.\\.<?)", "name": "keyword.operator.range.fan" }, { "match": "(\\?|:)", "name": "keyword.operator.tertiary.fan" }, { "match": "(;)", "name": "punctuation.terminator.fan" } ] }, "string-dsl": { "patterns": [ { "begin": "((Str)<\\|)", "captures": { "1": { "name": "support.type.sys.fan" } }, "end": "(\\|>)", "name": "string.quoted.other.fan" } ] }, "strings": { "patterns": [ { "include": "#triple-quoted-string" }, { "include": "#double-quoted-string" }, { "include": "#string-dsl" } ] }, "triple-quoted-string": { "patterns": [ { "begin": "\"\"\"", "end": "\"\"\"", "name": "string.quoted.triple.fan", "patterns": [ { "match": "\\\\\"", "name": "invalid.illegal.escape.char.fan" }, { "include": "#escaped-unicode" }, { "include": "#escaped-char" }, { "include": "#interpolation" } ] } ] }, "typedef": { "patterns": [ { "match": "(class|mixin)(?=\\s+([A-Za-z_][A-Za-z0-9_]*))", "name": "storage.modifier.fan" } ] }, "uris": { "patterns": [ { "begin": "(`)", "end": "(`)", "name": "string.quoted.other.uri.fan", "patterns": [ { "include": "#escaped-unicode" }, { "include": "#escaped-char" }, { "include": "#interpolation" } ] } ] } }, "scopeName": "source.fan", "uuid": "de0743d9-c48e-44a0-a28b-6003d88f09d0" }