{ "fileTypes": [ "gd" ], "scopeName": "source.gdscript", "name": "GDScript", "patterns": [ { "include": "#statement" }, { "include": "#expression" } ], "repository": { "statement": { "patterns": [ { "include": "#extends_statement" } ] }, "statement_keyword": { "patterns": [ { "name": "keyword.control.flow.gdscript", "match": "(?x)\n \\b(?=^]? [-+ ]? \\#?\n \\d* ,? (\\.\\d+)? [bcdeEfFgGnosxX%]? )?\n })\n )\n", "captures": { "1": { "name": "constant.character.format.placeholder.other.gdscript" }, "3": { "name": "storage.type.format.gdscript" }, "4": { "name": "storage.type.format.gdscript" } } }, { "name": "meta.format.brace.gdscript", "match": "(?x)\n (\n {\n \\w* (\\.[[:alpha:]_]\\w* | \\[[^\\]'\"]+\\])*\n (![rsa])?\n (:)\n [^'\"{}\\n]* (?:\n \\{ [^'\"}\\n]*? \\} [^'\"{}\\n]*\n )*\n }\n )\n", "captures": { "1": { "name": "constant.character.format.placeholder.other.gdscript" }, "3": { "name": "storage.type.format.gdscript" }, "4": { "name": "storage.type.format.gdscript" } } } ] }, "nodepath_object": { "name": "meta.literal.nodepath.gdscript", "begin": "(NodePath)\\s*(?:\\()", "beginCaptures": { "1": { "name": "support.class.library.gdscript" } }, "end": "(?:\\))", "patterns": [ { "begin": "(\"|')", "end": "\\1", "name": "string.quoted.gdscript constant.character.escape.gdscript", "patterns": [ { "match": "%", "name": "keyword.control.flow.gdscript" } ] } ] }, "nodepath_function": { "name": "meta.function.gdscript", "contentName": "meta.function.parameters.gdscript", "begin": "(get_node_or_null|has_node|has_node_and_resource|find_node|get_node)\\s*(\\()", "beginCaptures": { "1": { "name": "entity.name.function.gdscript" }, "2": { "name": "punctuation.definition.parameters.begin.gdscript" } }, "end": "(\\))", "endCaptures": { "1": { "name": "punctuation.definition.parameters.end.gdscript" } }, "patterns": [ { "begin": "(\"|')", "end": "\\1", "name": "string.quoted.gdscript meta.literal.nodepath.gdscript constant.character.escape", "patterns": [ { "match": "%", "name": "keyword.control.flow" } ] }, { "include": "#base_expression" } ] }, "self": { "match": "\\bself\\b", "name": "variable.language.gdscript" }, "func": { "match": "\\bfunc\\b", "name": "keyword.language.gdscript" }, "in_keyword": { "patterns": [ { "begin": "\\b(for)\\b", "end": ":", "captures": { "1": { "name": "keyword.control.gdscript" } }, "patterns": [ { "match": "\\bin\\b", "name": "keyword.control.gdscript" }, { "include": "#base_expression" }, { "include": "#any_variable" }, { "include": "#any_property" } ] }, { "match": "\\bin\\b", "name": "keyword.operator.wordlike.gdscript" } ] }, "operators": { "patterns": [ { "include": "#wordlike_operator" }, { "include": "#boolean_operator" }, { "include": "#arithmetic_operator" }, { "include": "#bitwise_operator" }, { "include": "#compare_operator" } ] }, "wordlike_operator": { "match": "\\b(and|or|not)\\b", "name": "keyword.operator.wordlike.gdscript" }, "boolean_operator": { "match": "(&&|\\|\\|)", "name": "keyword.operator.boolean.gdscript" }, "bitwise_operator": { "match": "&|\\||<<=|>>=|<<|>>|\\^|~", "name": "keyword.operator.bitwise.gdscript" }, "compare_operator": { "match": "<=|>=|==|<|>|!=|!", "name": "keyword.operator.comparison.gdscript" }, "arithmetic_operator": { "match": "->|\\+=|-=|\\*=|\\^=|/=|%=|&=|~=|\\|=|\\*\\*|\\*|/|%|\\+|-", "name": "keyword.operator.arithmetic.gdscript" }, "assignment_operator": { "match": "=", "name": "keyword.operator.assignment.gdscript" }, "control_flow": { "match": "\\b(?:if|elif|else|while|break|continue|pass|return|when|yield|await)\\b", "name": "keyword.control.gdscript" }, "match_keyword": { "match": "^\n\\s*(match)", "captures": { "1": { "name": "keyword.control.gdscript" } } }, "keywords": { "match": "\\b(?:class|class_name|is|onready|tool|static|export|as|void|enum|assert|breakpoint|sync|remote|master|puppet|slave|remotesync|mastersync|puppetsync|trait|namespace)\\b", "name": "keyword.language.gdscript" }, "letter": { "match": "\\b(?:true|false|null)\\b", "name": "constant.language.gdscript" }, "numbers": { "patterns": [ { "match": "0b[01_]+", "name": "constant.numeric.integer.binary.gdscript" }, { "match": "0x[0-9A-Fa-f_]+", "name": "constant.numeric.integer.hexadecimal.gdscript" }, { "match": "[-]?([0-9][0-9_]+\\.[0-9_]*(e[\\-\\+]?[0-9_]+)?)", "name": "constant.numeric.float.gdscript" }, { "match": "[-]?(\\.[0-9][0-9_]*(e[\\-\\+]?[0-9_]+)?)", "name": "constant.numeric.float.gdscript" }, { "match": "[-]?([0-9][0-9_]*e[\\-\\+]?\\[0-9_])", "name": "constant.numeric.float.gdscript" }, { "match": "[-]?[0-9][0-9_]*", "name": "constant.numeric.integer.gdscript" } ] }, "variable_declaration": { "name": "meta.variable.declaration.gdscript", "begin": "\\b(?:(var)|(const))\\b", "beginCaptures": { "1": { "name": "keyword.language.gdscript storage.type.var.gdscript" }, "2": { "name": "keyword.language.gdscript storage.type.const.gdscript" } }, "end": "$|;", "patterns": [ { "match": "(:)?\\s*(set|get)\\s+=\\s+([a-zA-Z_]\\w*)", "captures": { "1": { "name": "punctuation.separator.annotation.gdscript" }, "2": { "name": "keyword.language.gdscript storage.type.const.gdscript" }, "3": { "name": "entity.name.function.gdscript" } } }, { "match": ":=|=(?!=)", "name": "keyword.operator.assignment.gdscript" }, { "match": "(:)\\s*([a-zA-Z_]\\w*)?", "captures": { "1": { "name": "punctuation.separator.annotation.gdscript" }, "2": { "name": "entity.name.type.class.gdscript" } } }, { "match": "(setget)\\s+([a-zA-Z_]\\w*)(?:[,]\\s*([a-zA-Z_]\\w*))?", "captures": { "1": { "name": "keyword.language.gdscript storage.type.const.gdscript" }, "2": { "name": "entity.name.function.gdscript" }, "3": { "name": "entity.name.function.gdscript" } } }, { "include": "#expression" }, { "include": "#letter" }, { "include": "#any_variable" }, { "include": "#any_property" }, { "include": "#keywords" } ] }, "getter_setter_godot4": { "patterns": [ { "match": "\\b(get):", "captures": { "1": { "name": "entity.name.function.gdscript" } } }, { "name": "meta.function.gdscript", "begin": "(?x) \\s+\n (set) \\s*\n (?=\\()", "end": "(:|(?=[#'\"\\n]))", "beginCaptures": { "1": { "name": "entity.name.function.gdscript" } }, "patterns": [ { "include": "#parameters" }, { "include": "#line_continuation" } ] } ] }, "class_declaration": { "match": "(?<=^class)\\s+([a-zA-Z_]\\w*)\\s*(?=:)", "captures": { "1": { "name": "entity.name.type.class.gdscript" }, "2": { "name": "class.other.gdscript" } } }, "class_new": { "match": "\\b([a-zA-Z_]\\w*).(new)\\(", "captures": { "1": { "name": "entity.name.type.class.gdscript" }, "2": { "name": "storage.type.new.gdscript" }, "3": { "name": "punctuation.parenthesis.begin.gdscript" } } }, "class_is": { "match": "\\s+(is)\\s+([a-zA-Z_]\\w*)", "captures": { "1": { "name": "storage.type.is.gdscript" }, "2": { "name": "entity.name.type.class.gdscript" } } }, "class_enum": { "match": "\\b([A-Z][a-zA-Z_0-9]*)\\.([A-Z_0-9]+)", "captures": { "1": { "name": "entity.name.type.class.gdscript" }, "2": { "name": "constant.language.gdscript" } } }, "class_name": { "match": "(?<=class_name)\\s+([a-zA-Z_]\\w*(\\.([a-zA-Z_]\\w*))?)", "captures": { "1": { "name": "entity.name.type.class.gdscript" }, "2": { "name": "class.other.gdscript" } } }, "builtin_get_node_shorthand": { "patterns": [ { "include": "#builtin_get_node_shorthand_quoted" }, { "include": "#builtin_get_node_shorthand_bare" }, { "include": "#builtin_get_node_shorthand_bare_multi" } ] }, "builtin_get_node_shorthand_quoted": { "name": "string.quoted.gdscript meta.literal.nodepath.gdscript constant.character.escape.gdscript", "begin": "(?:(\\$)|(&|\\^|@))(\"|')", "beginCaptures": { "1": { "name": "keyword.control.flow.gdscript" }, "2": { "name": "variable.other.enummember.gdscript" } }, "end": "(\\3)", "patterns": [ { "match": "%", "name": "keyword.control.flow" } ] }, "builtin_get_node_shorthand_bare": { "name": "meta.literal.nodepath.bare.gdscript", "match": "(?)\\s*(void\\w*)|([a-zA-Z_]\\w*)\\s*\\:)", "endCaptures2": { "1": { "name": "punctuation.separator.annotation.result.gdscript" }, "2": { "name": "keyword.language.void.gdscript" }, "3": { "name": "entity.name.type.class.gdscript markup.italic" } }, "patterns": [ { "include": "#parameters" }, { "include": "#line_continuation" }, { "include": "#base_expression" }, { "include": "#any_variable" }, { "include": "#any_property" } ] }, "function_declaration": { "name": "meta.function.gdscript", "begin": "(?x) \\s*\n (func) \\s+\n ([a-zA-Z_]\\w*) \\s*\n (?=\\()", "beginCaptures": { "1": { "name": "keyword.language.gdscript storage.type.function.gdscript" }, "2": { "name": "entity.name.function.gdscript" } }, "end": "(:|(?=[#'\"\\n]))", "end2": "(\\s*(\\-\\>)\\s*(void\\w*)|([a-zA-Z_]\\w*)\\s*\\:)", "endCaptures2": { "1": { "name": "punctuation.separator.annotation.result.gdscript" }, "2": { "name": "keyword.language.void.gdscript" }, "3": { "name": "entity.name.type.class.gdscript markup.italic" } }, "patterns": [ { "include": "#parameters" }, { "include": "#line_continuation" }, { "include": "#base_expression" } ] }, "parameters": { "name": "meta.function.parameters.gdscript", "begin": "(\\()", "end": "(\\))", "beginCaptures": { "1": { "name": "punctuation.definition.parameters.begin.gdscript" } }, "endCaptures": { "1": { "name": "punctuation.definition.parameters.end.gdscript" } }, "patterns": [ { "include": "#annotated_parameter" }, { "match": "(?x)\n ([a-zA-Z_]\\w*)\n \\s* (?: (,) | (?=[)#\\n=]))\n", "captures": { "1": { "name": "variable.parameter.function.language.gdscript" }, "2": { "name": "punctuation.separator.parameters.gdscript" } } }, { "include": "#comment" }, { "include": "#loose_default" } ] }, "loose_default": { "begin": "(=)", "end": "(,)|(?=\\))", "beginCaptures": { "1": { "name": "keyword.operator.gdscript" } }, "endCaptures": { "1": { "name": "punctuation.separator.parameters.gdscript" } }, "patterns": [ { "include": "#base_expression" } ] }, "annotated_parameter": { "begin": "(?x)\n \\s* ([a-zA-Z_]\\w*) \\s* (:)\\s* ([a-zA-Z_]\\w*)? \n", "beginCaptures": { "1": { "name": "variable.parameter.function.language.gdscript" }, "2": { "name": "punctuation.separator.annotation.gdscript" }, "3": { "name": "entity.name.type.class.gdscript" } }, "end": "(,)|(?=\\))", "endCaptures": { "1": { "name": "punctuation.separator.parameters.gdscript" } }, "patterns": [ { "include": "#base_expression" }, { "name": "keyword.operator.assignment.gdscript", "match": "=(?!=)" } ] }, "curly_braces": { "begin": "\\{", "end": "\\}", "beginCaptures": { "0": { "name": "punctuation.definition.dict.begin.gdscript" } }, "endCaptures": { "0": { "name": "punctuation.definition.dict.end.gdscript" } }, "patterns": [ { "include": "#base_expression" }, { "include": "#any_variable" } ] }, "square_braces": { "begin": "\\[", "end": "\\]", "beginCaptures": { "0": { "name": "punctuation.definition.list.begin.gdscript" } }, "endCaptures": { "0": { "name": "punctuation.definition.list.end.gdscript" } }, "patterns": [ { "include": "#base_expression" }, { "include": "#any_variable" } ] }, "round_braces": { "begin": "\\(", "end": "\\)", "beginCaptures": { "0": { "name": "punctuation.parenthesis.begin.gdscript" } }, "endCaptures": { "0": { "name": "punctuation.parenthesis.end.gdscript" } }, "patterns": [ { "include": "#base_expression" }, { "include": "#any_variable" } ] }, "line_continuation": { "patterns": [ { "match": "(\\\\)\\s*(\\S.*$\\n?)", "captures": { "1": { "name": "punctuation.separator.continuation.line.gdscript" }, "2": { "name": "invalid.illegal.line.continuation.gdscript" } } }, { "begin": "(\\\\)\\s*$\\n?", "end": "(?x)\n (?=^\\s*$)\n |\n (?! (\\s* [rR]? (\\'\\'\\'|\\\"\\\"\\\"|\\'|\\\"))\n |\n (\\G $) (?# '\\G' is necessary for ST)\n )\n", "beginCaptures": { "1": { "name": "punctuation.separator.continuation.line.gdscript" } }, "patterns": [ { "include": "#base_expression" } ] } ] }, "any_method": { "match": "\\b([A-Za-z_]\\w*)\\b(?=\\s*(?:[(]))", "name": "entity.name.function.other.gdscript" }, "any_variable": { "match": "\\b(?