UNPKG

tm-grammars

Version:
1,127 lines (1,126 loc) 29.2 kB
{ "displayName": "GDScript", "fileTypes": [ "gd" ], "name": "gdscript", "patterns": [ { "include": "#statement" }, { "include": "#expression" } ], "repository": { "annotated_parameter": { "begin": "\\s*([A-Z_a-z]\\w*)\\s*(:)\\s*([A-Z_a-z]\\w*)?", "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": "#expression" }, { "match": "=(?!=)", "name": "keyword.operator.assignment.gdscript" } ] }, "annotations": { "captures": { "1": { "name": "entity.name.function.decorator.gdscript" }, "2": { "name": "entity.name.function.decorator.gdscript" } }, "match": "(@)(abstract|export|export_category|export_color_no_alpha|export_custom|export_dir|export_enum|export_exp_easing|export_file|export_file_path|export_flags|export_flags_2d_navigation|export_flags_2d_physics|export_flags_2d_render|export_flags_3d_navigation|export_flags_3d_physics|export_flags_3d_render|export_flags_avoidance|export_global_dir|export_global_file|export_group|export_multiline|export_node_path|export_placeholder|export_range|export_storage|export_subgroup|export_tool_button|icon|onready|rpc|static_unload|tool|warning_ignore|warning_ignore_restore|warning_ignore_start)\\b" }, "any_method": { "match": "\\b([A-Z_a-z]\\w*)\\b(?=\\s*\\()", "name": "entity.name.function.other.gdscript" }, "any_property": { "captures": { "1": { "name": "punctuation.accessor.gdscript" }, "2": { "name": "constant.language.gdscript" }, "3": { "name": "variable.other.property.gdscript" } }, "match": "\\b(\\.)\\s*(?<![#$%@])(?:([A-Z_][0-9A-Z_]*)|([A-Z_a-z]\\w*))\\b(?!\\()" }, "any_variable": { "match": "\\b(?<![#$%@])([A-Z_a-z]\\w*)\\b(?!\\()", "name": "variable.other.gdscript" }, "arithmetic_operator": { "match": "->|\\+=|-=|\\*\\*=|\\*=|\\^=|/=|%=|&=|~=|\\|=|\\*\\*|[-%*+/]", "name": "keyword.operator.arithmetic.gdscript" }, "assignment_operator": { "match": "=", "name": "keyword.operator.assignment.gdscript" }, "base_expression": { "patterns": [ { "include": "#builtin_get_node_shorthand" }, { "include": "#nodepath_object" }, { "include": "#nodepath_function" }, { "include": "#strings" }, { "include": "#builtin_classes" }, { "include": "#const_vars" }, { "include": "#keywords" }, { "include": "#operators" }, { "include": "#lambda_declaration" }, { "include": "#class_declaration" }, { "include": "#variable_declaration" }, { "include": "#signal_declaration_bare" }, { "include": "#signal_declaration" }, { "include": "#function_declaration" }, { "include": "#statement_keyword" }, { "include": "#assignment_operator" }, { "include": "#in_keyword" }, { "include": "#control_flow" }, { "include": "#match_keyword" }, { "include": "#curly_braces" }, { "include": "#square_braces" }, { "include": "#round_braces" }, { "include": "#function_call" }, { "include": "#region" }, { "include": "#comment" }, { "include": "#func" }, { "include": "#letter" }, { "include": "#numbers" }, { "include": "#pascal_case_class" }, { "include": "#line_continuation" } ] }, "bitwise_operator": { "match": "[\\&|]|<<=|>>=|<<|>>|[\\^~]", "name": "keyword.operator.bitwise.gdscript" }, "boolean_operator": { "match": "(&&|\\|\\|)", "name": "keyword.operator.boolean.gdscript" }, "builtin_classes": { "match": "(?<![^.]\\.|:)\\b(Vector2i??|Vector3i??|Vector4i??|Color|Rect2i??|Array|Basis|Dictionary|Plane|Quat|RID|Rect3|Transform|Transform2D|Transform3D|AABB|String|Color|NodePath|PoolByteArray|PoolIntArray|PoolRealArray|PoolStringArray|PoolVector2Array|PoolVector3Array|PoolColorArray|bool|int|float|Signal|Callable|StringName|Quaternion|Projection|PackedByteArray|PackedInt32Array|PackedInt64Array|PackedFloat32Array|PackedFloat64Array|PackedStringArray|PackedVector2Array|PackedVector2iArray|PackedVector3Array|PackedVector3iArray|PackedVector4Array|PackedColorArray|JSON|UPNP|OS|IP|JSONRPC|XRVRS|Variant|void)\\b", "name": "entity.name.type.class.builtin.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_bare": { "captures": { "1": { "name": "keyword.control.flow.gdscript" }, "2": { "name": "constant.character.escape.gdscript" }, "3": { "name": "constant.character.escape.gdscript" }, "4": { "name": "constant.character.escape.gdscript" } }, "match": "(?<!/\\s*)(\\$\\s*|%|\\$%\\s*)(/\\s*)?([A-Z_a-z]\\w*)\\b(?!\\s*/)", "name": "meta.literal.nodepath.bare.gdscript" }, "builtin_get_node_shorthand_bare_multi": { "begin": "(\\$\\s*|%|\\$%\\s*)(/\\s*)?([A-Z_a-z]\\w*)", "beginCaptures": { "1": { "name": "keyword.control.flow.gdscript" }, "2": { "name": "constant.character.escape.gdscript" }, "3": { "name": "constant.character.escape.gdscript" } }, "end": "(?!\\s*/\\s*%?\\s*[A-Z_a-z]\\w*)", "name": "meta.literal.nodepath.bare.gdscript", "patterns": [ { "captures": { "1": { "name": "constant.character.escape.gdscript" }, "2": { "name": "keyword.control.flow.gdscript" }, "3": { "name": "constant.character.escape.gdscript" } }, "match": "(/)\\s*(%)?\\s*([A-Z_a-z]\\w*)\\s*" } ] }, "builtin_get_node_shorthand_quoted": { "begin": "(?:([$%])|([\\&@^]))([\"'])", "beginCaptures": { "1": { "name": "keyword.control.flow.gdscript" }, "2": { "name": "variable.other.enummember.gdscript" } }, "end": "(\\3)", "name": "string.quoted.gdscript meta.literal.nodepath.gdscript constant.character.escape.gdscript", "patterns": [ { "match": "%", "name": "keyword.control.flow" } ] }, "class_declaration": { "captures": { "1": { "name": "entity.name.type.class.gdscript" }, "2": { "name": "class.other.gdscript" } }, "match": "(?<=^class)\\s+([A-Z_a-z]\\w*)\\s*(?=:)" }, "class_enum": { "captures": { "1": { "name": "entity.name.type.class.gdscript" }, "2": { "name": "variable.other.enummember.gdscript" } }, "match": "\\b([A-Z][0-9A-Z_a-z]*)\\.([0-9A-Z_]+)" }, "class_is": { "captures": { "1": { "name": "storage.type.is.gdscript" }, "2": { "name": "entity.name.type.class.gdscript" } }, "match": "\\s+(is)\\s+([A-Z_a-z]\\w*)" }, "class_name": { "captures": { "1": { "name": "entity.name.type.class.gdscript" }, "2": { "name": "class.other.gdscript" } }, "match": "(?<=class_name)\\s+([A-Z_a-z]\\w*(\\.([A-Z_a-z]\\w*))?)" }, "class_new": { "captures": { "1": { "name": "entity.name.type.class.gdscript" }, "2": { "name": "storage.type.new.gdscript" }, "3": { "name": "punctuation.parenthesis.begin.gdscript" } }, "match": "\\b([A-Z_a-z]\\w*).(new)\\(" }, "comment": { "captures": { "1": { "name": "punctuation.definition.comment.number-sign.gdscript" } }, "match": "(##?).*$\\n?", "name": "comment.line.number-sign.gdscript" }, "compare_operator": { "match": "<=|>=|==|[<>]|!=?", "name": "keyword.operator.comparison.gdscript" }, "const_vars": { "match": "\\b([A-Z_][0-9A-Z_]*)\\b", "name": "variable.other.constant.gdscript" }, "control_flow": { "match": "\\b(?:if|elif|else|while|break|continue|pass|return|when|yield|await)\\b", "name": "keyword.control.gdscript" }, "curly_braces": { "begin": "\\{", "beginCaptures": { "0": { "name": "punctuation.definition.dict.begin.gdscript" } }, "end": "}", "endCaptures": { "0": { "name": "punctuation.definition.dict.end.gdscript" } }, "patterns": [ { "include": "#base_expression" }, { "include": "#any_variable" } ] }, "expression": { "patterns": [ { "include": "#getter_setter_godot4" }, { "include": "#base_expression" }, { "include": "#assignment_operator" }, { "include": "#annotations" }, { "include": "#class_name" }, { "include": "#builtin_classes" }, { "include": "#class_new" }, { "include": "#class_is" }, { "include": "#class_enum" }, { "include": "#any_method" }, { "include": "#any_variable" }, { "include": "#any_property" } ] }, "extends_statement": { "captures": { "1": { "name": "keyword.language.gdscript" }, "2": { "name": "entity.other.inherited-class.gdscript" } }, "match": "(extends)\\s+([A-Z_a-z]\\w*\\.[A-Z_a-z]\\w*)?" }, "func": { "match": "\\bfunc\\b", "name": "keyword.language.gdscript storage.type.function.gdscript" }, "function_arguments": { "begin": "(\\()", "beginCaptures": { "1": { "name": "punctuation.definition.arguments.begin.gdscript" } }, "contentName": "meta.function.parameters.gdscript", "end": "(?=\\))(?!\\)\\s*\\()", "patterns": [ { "match": "(,)", "name": "punctuation.separator.arguments.gdscript" }, { "captures": { "1": { "name": "variable.parameter.function-call.gdscript" }, "2": { "name": "keyword.operator.assignment.gdscript" } }, "match": "\\b([A-Z_a-z]\\w*)\\s*(=)(?!=)" }, { "match": "=(?!=)", "name": "keyword.operator.assignment.gdscript" }, { "include": "#base_expression" }, { "captures": { "1": { "name": "punctuation.definition.arguments.end.gdscript" }, "2": { "name": "punctuation.definition.arguments.begin.gdscript" } }, "match": "\\s*(\\))\\s*(\\()" }, { "include": "#letter" }, { "include": "#any_variable" }, { "include": "#any_property" }, { "include": "#keywords" } ] }, "function_call": { "begin": "(?=\\b[A-Z_a-z]\\w*\\b\\()", "end": "(\\))", "endCaptures": { "1": { "name": "punctuation.definition.arguments.end.gdscript" } }, "name": "meta.function-call.gdscript", "patterns": [ { "include": "#function_name" }, { "include": "#function_arguments" } ] }, "function_declaration": { "begin": "\\s*(func)\\s+([A-Z_a-z]\\w*)\\s*(?=\\()", "beginCaptures": { "1": { "name": "keyword.language.gdscript storage.type.function.gdscript" }, "2": { "name": "entity.name.function.gdscript" } }, "end": "(:)", "endCaptures": { "1": { "name": "punctuation.section.function.begin.gdscript" } }, "name": "meta.function.gdscript", "patterns": [ { "include": "#parameters" }, { "include": "#line_continuation" }, { "include": "#base_expression" } ] }, "function_name": { "patterns": [ { "include": "#builtin_classes" }, { "match": "\\b(preload)\\b", "name": "keyword.language.gdscript" }, { "match": "\\b([A-Z_a-z]\\w*)\\b", "name": "entity.name.function.gdscript" } ] }, "getter_setter_godot4": { "patterns": [ { "captures": { "1": { "name": "entity.name.function.gdscript" }, "2": { "name": "punctuation.separator.annotation.gdscript" } }, "match": "(get)\\s*(:)", "name": "meta.variable.declaration.getter.gdscript" }, { "captures": { "1": { "name": "entity.name.function.gdscript" }, "2": { "name": "punctuation.definition.arguments.begin.gdscript" }, "3": { "name": "variable.other.gdscript" }, "4": { "name": "punctuation.definition.arguments.end.gdscript" }, "5": { "name": "punctuation.separator.annotation.gdscript" } }, "match": "(set)\\s*(\\()\\s*([A-Z_a-z]\\w*)\\s*(\\))\\s*(:)", "name": "meta.variable.declaration.setter.gdscript" } ] }, "in_keyword": { "patterns": [ { "begin": "\\b(for)\\b", "captures": { "1": { "name": "keyword.control.gdscript" } }, "end": ":", "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" } ] }, "keywords": { "match": "\\b(?:class|class_name|is|onready|tool|static|export|as|enum|assert|breakpoint|sync|remote|master|puppet|slave|remotesync|mastersync|puppetsync|trait|namespace|super|self)\\b", "name": "keyword.language.gdscript" }, "lambda_declaration": { "begin": "(func)\\s?(?=\\()", "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": "entity.name.type.class.builtin.gdscript" }, "3": { "name": "entity.name.type.class.gdscript markup.italic" } }, "name": "meta.function.gdscript", "patterns": [ { "include": "#parameters" }, { "include": "#line_continuation" }, { "include": "#base_expression" }, { "include": "#any_variable" }, { "include": "#any_property" } ] }, "letter": { "match": "\\b(?:true|false|null)\\b", "name": "constant.language.gdscript" }, "line_continuation": { "patterns": [ { "captures": { "1": { "name": "punctuation.separator.continuation.line.gdscript" }, "2": { "name": "invalid.illegal.line.continuation.gdscript" } }, "match": "(\\\\)\\s*(\\S.*$\\n?)" }, { "begin": "(\\\\)\\s*$\\n?", "beginCaptures": { "1": { "name": "punctuation.separator.continuation.line.gdscript" } }, "end": "(?=^\\s*$)|(?!(\\s*[Rr]?('''|\"\"\"|[\"']))|\\G()$)", "patterns": [ { "include": "#base_expression" } ] } ] }, "loose_default": { "begin": "(=)", "beginCaptures": { "1": { "name": "keyword.operator.gdscript" } }, "end": "(,)|(?=\\))", "endCaptures": { "1": { "name": "punctuation.separator.parameters.gdscript" } }, "patterns": [ { "include": "#expression" } ] }, "match_keyword": { "captures": { "1": { "name": "keyword.control.gdscript" } }, "match": "^\\n\\s*(match)" }, "nodepath_function": { "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" } }, "contentName": "meta.function.parameters.gdscript", "end": "(\\))", "endCaptures": { "1": { "name": "punctuation.definition.parameters.end.gdscript" } }, "name": "meta.function.gdscript", "patterns": [ { "begin": "([\"'])", "end": "\\1", "name": "string.quoted.gdscript meta.literal.nodepath.gdscript constant.character.escape.gdscript", "patterns": [ { "match": "%", "name": "keyword.control.flow.gdscript" } ] }, { "include": "#expression" } ] }, "nodepath_object": { "begin": "(NodePath)\\s*\\(", "beginCaptures": { "1": { "name": "support.class.library.gdscript" } }, "end": "\\)", "name": "meta.literal.nodepath.gdscript", "patterns": [ { "begin": "([\"'])", "end": "\\1", "name": "string.quoted.gdscript constant.character.escape.gdscript", "patterns": [ { "match": "%", "name": "keyword.control.flow.gdscript" } ] } ] }, "numbers": { "patterns": [ { "match": "0b[01_]+", "name": "constant.numeric.integer.binary.gdscript" }, { "match": "0x[_\\h]+", "name": "constant.numeric.integer.hexadecimal.gdscript" }, { "match": "\\.[0-9][0-9_]*([Ee][-+]?[0-9_]+)?", "name": "constant.numeric.float.gdscript" }, { "match": "([0-9][0-9_]*)\\.[0-9_]*([Ee][-+]?[0-9_]+)?", "name": "constant.numeric.float.gdscript" }, { "match": "([0-9][0-9_]*)?\\.[0-9_]*([Ee][-+]?[0-9_]+)", "name": "constant.numeric.float.gdscript" }, { "match": "[0-9][0-9_]*[Ee][-+]?[0-9_]+", "name": "constant.numeric.float.gdscript" }, { "match": "-?[0-9][0-9_]*", "name": "constant.numeric.integer.gdscript" } ] }, "operators": { "patterns": [ { "include": "#wordlike_operator" }, { "include": "#boolean_operator" }, { "include": "#arithmetic_operator" }, { "include": "#bitwise_operator" }, { "include": "#compare_operator" } ] }, "parameters": { "begin": "(\\()", "beginCaptures": { "1": { "name": "punctuation.definition.parameters.begin.gdscript" } }, "end": "(\\))", "endCaptures": { "1": { "name": "punctuation.definition.parameters.end.gdscript" } }, "name": "meta.function.parameters.gdscript", "patterns": [ { "include": "#annotated_parameter" }, { "captures": { "1": { "name": "variable.parameter.function.language.gdscript" }, "2": { "name": "punctuation.separator.parameters.gdscript" } }, "match": "([A-Z_a-z]\\w*)\\s*(?:(,)|(?=[\\n#)=]))" }, { "include": "#comment" }, { "include": "#loose_default" } ] }, "pascal_case_class": { "match": "\\b([A-Z]+[0-9_a-z]*([A-Z]?[0-9_a-z]+)*[A-Z]?)\\b", "name": "entity.name.type.class.gdscript" }, "region": { "match": "#(end)?region.*$\\n?", "name": "keyword.language.region.gdscript" }, "round_braces": { "begin": "\\(", "beginCaptures": { "0": { "name": "punctuation.parenthesis.begin.gdscript" } }, "end": "\\)", "endCaptures": { "0": { "name": "punctuation.parenthesis.end.gdscript" } }, "patterns": [ { "include": "#base_expression" }, { "include": "#any_variable" } ] }, "signal_declaration": { "begin": "\\s*(signal)\\s+([A-Z_a-z]\\w*)\\s*(?=\\()", "beginCaptures": { "1": { "name": "keyword.language.gdscript storage.type.function.gdscript" }, "2": { "name": "entity.name.function.gdscript" } }, "end": "((?=[\\n\"#']))", "name": "meta.signal.gdscript", "patterns": [ { "include": "#parameters" }, { "include": "#line_continuation" } ] }, "signal_declaration_bare": { "captures": { "1": { "name": "keyword.language.gdscript storage.type.function.gdscript" }, "2": { "name": "entity.name.function.gdscript" } }, "match": "\\s*(signal)\\s+([A-Z_a-z]\\w*)(?=[\\n\\s])", "name": "meta.signal.gdscript" }, "square_braces": { "begin": "\\[", "beginCaptures": { "0": { "name": "punctuation.definition.list.begin.gdscript" } }, "end": "]", "endCaptures": { "0": { "name": "punctuation.definition.list.end.gdscript" } }, "patterns": [ { "include": "#base_expression" }, { "include": "#any_variable" } ] }, "statement": { "patterns": [ { "include": "#extends_statement" } ] }, "statement_keyword": { "patterns": [ { "match": "\\b(?<!\\.)(continue|assert|break|elif|else|if|pass|return|while)\\b", "name": "keyword.control.flow.gdscript" }, { "match": "\\b(?<!\\.)(class)\\b", "name": "storage.type.class.gdscript" }, { "captures": { "1": { "name": "keyword.control.flow.gdscript" } }, "match": "^\\s*(case|match)(?=\\s*([-\"#'(+:\\[{\\w\\d]|$))\\b" } ] }, "string_bracket_placeholders": { "patterns": [ { "captures": { "1": { "name": "constant.character.format.placeholder.other.gdscript" }, "3": { "name": "storage.type.format.gdscript" }, "4": { "name": "storage.type.format.gdscript" } }, "match": "(\\{\\{|}}|\\{\\w*(\\.[_[:alpha:]]\\w*|\\[[^]\"']+])*(![ars])?(:\\w?[<=>^]?[- +]?#?\\d*,?(\\.\\d+)?[%EFGXb-gnosx]?)?})", "name": "meta.format.brace.gdscript" }, { "captures": { "1": { "name": "constant.character.format.placeholder.other.gdscript" }, "3": { "name": "storage.type.format.gdscript" }, "4": { "name": "storage.type.format.gdscript" } }, "match": "(\\{\\w*(\\.[_[:alpha:]]\\w*|\\[[^]\"']+])*(![ars])?(:)[^\\n\"'{}]*(?:\\{[^\\n\"'}]*?}[^\\n\"'{}]*)*})", "name": "meta.format.brace.gdscript" } ] }, "string_percent_placeholders": { "captures": { "1": { "name": "constant.character.format.placeholder.other.gdscript" } }, "match": "(%(\\([\\w\\s]*\\))?[- #+0]*(\\d+|\\*)?(\\.(\\d+|\\*))?([Lhl])?[%EFGXa-giorsux])", "name": "meta.format.percent.gdscript" }, "strings": { "begin": "(r)?(\"\"\"|'''|[\"'])", "beginCaptures": { "1": { "name": "constant.character.escape.gdscript" } }, "end": "\\2", "name": "string.quoted.gdscript", "patterns": [ { "match": "\\\\.", "name": "constant.character.escape.gdscript" }, { "include": "#string_percent_placeholders" }, { "include": "#string_bracket_placeholders" } ] }, "variable_declaration": { "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": "$|;", "name": "meta.variable.declaration.gdscript", "patterns": [ { "captures": { "1": { "name": "punctuation.separator.annotation.gdscript" }, "2": { "name": "entity.name.function.gdscript" }, "3": { "name": "entity.name.function.gdscript" } }, "match": "(:)?\\s*([gs]et)\\s+=\\s+([A-Z_a-z]\\w*)" }, { "match": ":=|=(?!=)", "name": "keyword.operator.assignment.gdscript" }, { "captures": { "1": { "name": "punctuation.separator.annotation.gdscript" }, "2": { "name": "entity.name.type.class.gdscript" } }, "match": "(:)\\s*([A-Z_a-z]\\w*)?" }, { "captures": { "1": { "name": "keyword.language.gdscript" }, "2": { "name": "entity.name.function.gdscript" }, "3": { "name": "entity.name.function.gdscript" } }, "match": "(setget)\\s+([A-Z_a-z]\\w*)(?:,\\s*([A-Z_a-z]\\w*))?" }, { "include": "#expression" }, { "include": "#letter" }, { "include": "#any_variable" }, { "include": "#any_property" }, { "include": "#keywords" } ] }, "wordlike_operator": { "match": "\\b(and|or|not)\\b", "name": "keyword.operator.wordlike.gdscript" } }, "scopeName": "source.gdscript" }