{ "fileTypes": [ "fan" ], "firstLineMatch": "^#!/.*\\b[fan|fansubstitute]\\b", "foldingStartMarker": "/\\*\\*|\\{\\s*$", "foldingStopMarker": "\\*\\*/|^\\s*\\}", "keyEquivalent": "^~F", "name": "Fan", "patterns": [ { "match": "\\b(this)\\b", "name": "support.class.fan" }, { "match": "\\b(assert)\\b", "name": "support.function.fan" }, { "match": "\\b(const|using|override|virtual|protected|abstract|internal|public|private|protected|new|static|final|super|is|isnot|for|foreach|in|break|continue|while|do|return|if|else|case|switch|try|catch|finally|throw|native|mixin|default|once|readonly|volatile)\\b", "name": "keyword.control.fan" }, { "match": "(\\b(Bool|Num|Str(Buf)?|Void|Int|Float|List|Map|This|Obj|Func|Date|Type|Method|Pod|Field|Slot|Uri(Scheme|Space)?|File|Duration|Actor(Pool)?|Enum|Decimal|Depend|Err|Future|Locale|Log(Level|Record)?|MimeType|Month|(In|Out)Stream|Param|Process|Range|Regex|RegexMatcher|Service|TimeZone|Test|Unit|Unsafe|Uuid|Version|Weekday|Zip)\\b\\??)", "name": "storage.type.fan" }, { "match": "\\b(null|true|false)\\b", "name": "constant.language.fan" }, { "match": "\\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\\.?[0-9]*)|(\\.[0-9]+))((e|E)(\\+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f)?\\b", "name": "constant.numeric.fan" }, { "begin": "\"", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.fan" } }, "end": "\"", "endCaptures": { "0": { "name": "punctuation.definition.string.end.fan" } }, "name": "string.quoted.double.fan", "patterns": [ { "match": "\\\\.", "name": "constant.character.escape.fan" }, { "match": "\\$[a-zA-Z_\\{][a-zA-Z_0-9\\}\\.\\(\\)]*", "name": "source.fan.embedded.source.empty" } ] }, { "begin": "'", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.fan" } }, "end": "'", "endCaptures": { "0": { "name": "punctuation.definition.string.end.fan" } }, "name": "string.quoted.single.fan", "patterns": [ { "match": "\\\\.", "name": "constant.character.escape.fan" } ] }, { "begin": "`", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.fan" } }, "end": "`", "endCaptures": { "0": { "name": "punctuation.definition.string.end.fan" } }, "name": "string.quoted.back-tick.fan", "patterns": [ { "match": "\\\\.", "name": "constant.character.escape.fan" } ] }, { "begin": "/\\*", "captures": { "0": { "name": "punctuation.definition.comment.fan" } }, "end": "\\*/", "name": "comment.block.fan" }, { "captures": { "1": { "name": "punctuation.definition.comment.fan" } }, "match": "(//).*$\\n?", "name": "comment.line.double-slash.fan" }, { "captures": { "1": { "name": "punctuation.definition.comment.fan" } }, "match": "(\\*\\*).*$\\n?", "name": "comment.line.double-star.fan" }, { "captures": { "1": { "name": "punctuation.definition.comment.fan" } }, "match": "(?\\[\\]])\\s* # or type modifier before name\n\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t((?: [A-Za-z_][A-Za-z0-9_]*+ | :: )*+) # actual name\n\t\t\t\t\\s*?(\\() (?= # match \"(\"\n\t\t\t\t(? [^()]++ | \\( \\g*+ \\) )*+ # function arguments\n\t\t\t\t\\) # match \")\"\n\t\t\t\t\\s*(\\{|\\n|//|/\\*)) # start bracket or end-of-line\n\t\t\t", "beginCaptures": { "1": { "name": "entity.name.function.fan" }, "2": { "name": "punctuation.definition.parameters.fan" } }, "comment": "adapted from meta.function.c in the c lang module", "end": "\\)", "endCaptures": { "0": { "name": "punctuation.definition.parameters.fan" } }, "name": "meta.method.fan", "patterns": [ { "include": "$base" } ] } ], "scopeName": "source.fan", "uuid": "4EC5A41E-2632-4D6D-A0A1-8CD0B0E0EECB" }