Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
285 changes: 263 additions & 22 deletions components/prism-gdscript.js

Large diffs are not rendered by default.

124 changes: 59 additions & 65 deletions examples/prism-gdscript.html
Original file line number Diff line number Diff line change
@@ -1,66 +1,60 @@
<h2>Full example</h2>
<pre><code>extends BaseClass
class_name MyClass, "res://path/to/optional/icon.svg"

# Member Variables

var a = 5
var s = "Hello"
var arr = [1, 2, 3]
var dict = {"key": "value", 2:3}
var typed_var: int
var inferred_type := "String"

# Constants

const ANSWER = 42
const THE_NAME = "Charly"

# Enums

enum {UNIT_NEUTRAL, UNIT_ENEMY, UNIT_ALLY}
enum Named {THING_1, THING_2, ANOTHER_THING = -1}

# Built-in Vector Types

var v2 = Vector2(1, 2)
var v3 = Vector3(1, 2, 3)

# Function

func some_function(param1, param2):
var local_var = 5

if param1 &lt; local_var:
print(param1)
elif param2 > 5:
print(param2)
else:
print("Fail!")

for i in range(20):
print(i)

while param2 != 0:
param2 -= 1

var local_var2 = param1 + 3
return local_var2

# Functions override functions with the same name on the base/parent class.
# If you still want to call them, use '.' (like 'super' in other languages).

func something(p1, p2):
.something(p1, p2)

# Inner Class

class Something:
var a = 10

# Constructor

func _init():
print("Constructed!")
var lv = Something.new()
print(lv.a)</code></pre>
<pre><code>@icon("res://my_class_icon.png")
class_name MyClass
extends Node3D
## GDScript class example
##
## This class contains sample code for the GDScript language,
## showcasing most of the language's highligthing possibilities.

signal my_signal
signal another_signal(node: Node)

enum CustomAttribute {
ZERO,
ONE,
TWO,
FIVE = 5,
}

const DEFAULT_LENGTH := 10

@export var editor_variable := 0
@export_range(1, 5) var ranged_variable := 2

var attributes: Dictionary[String, CustomAttribute] = {}
var node_path := ^"my/node/path"
var string_name := &"string_name"

@onready var label: Label = $Path/To/Label
@onready var button: Button = %Button


func _ready() -> void:
var args := OS.get_cmdline_args()
if not args.is_empty():
return
elif "--headless" in args or editor_variable != 0:
push_error("Cannot initialize scene")
return
move_node(ranged_variable)
var inner_object := InnerClass.new(CustomAttribute.ZERO)
print("Initialized object with %s" % [inner_object.inner_var])


func move_node(value: int) -> void:
position = Vector3.ONE * value * randf()
# NOTE: Alternative syntax "(%.2f/%+-5.1f/%.2f)" % [position.x, position.y, position.z].
print("Moved to ({x}/{y}/{z} &lt;{v}>)".format({
"x": "%.2f" % [position.x],
"y": "%+-5.1f" % [position.y],
"z": "%.2f" % [position.z],
"v": value,
}))


class InnerClass extends RefCounted:
var inner_var: Variant = null

func _init(init_var: Variant) -> void:
inner_var = init_var</code></pre>
51 changes: 25 additions & 26 deletions tests/languages/gdscript/class-name_feature.test
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,16 @@ extends Bar

class InnerClass:

export(int) var baz
export(int, 0) var i

return foo as Node

const FOO: int = 9
var bar: bool = true

func add(reference: Item, amount: int) -> Item:

Array[MyClass]
Dictionary[FirstClass, SecondClass]

----------------------------------------------------

[
Expand All @@ -21,52 +21,51 @@ func add(reference: Item, amount: int) -> Item:

["keyword", "class"], ["class-name", "InnerClass"], ["punctuation", ":"],

["keyword", "export"],
["punctuation", "("],
["class-name", "int"],
["punctuation", ")"],
["keyword", "var"],
" baz\r\n",

["keyword", "export"],
["punctuation", "("],
["class-name", "int"],
["punctuation", ","],
["number", "0"],
["punctuation", ")"],
["keyword", "var"],
" i\r\n\r\n",

["keyword", "return"], " foo ", ["keyword", "as"], ["class-name", "Node"],
["control-flow", "return"], " foo ", ["operator-word", "as"], ["builtin-object", "Node"],

["keyword", "const"],
["constant", "FOO"],
["punctuation", ":"],
["class-name", "int"],
["builtin-type", "int"],
["operator", "="],
["number", "9"],

["keyword", "var"],
" bar",
["punctuation", ":"],
["class-name", "bool"],
["builtin-type", "bool"],
["operator", "="],
["boolean", "true"],
["builtin-pseudo", "true"],

["keyword", "func"],
["function", "add"],
["function-definition", "add"],
["punctuation", "("],
"reference",
["punctuation", ":"],
["class-name", "Item"],
["punctuation", ","],
" amount",
["punctuation", ":"],
["class-name", "int"],
["builtin-type", "int"],
["punctuation", ")"],
["operator", "->"],
["class-name", "Item"],
["punctuation", ":"]
["punctuation", ":"],

["typed-array", [
["builtin-type", "Array"],
["punctuation", "["],
["class-name", "MyClass"],
["punctuation", "]"]
]],
["typed-dict", [
["builtin-type", "Dictionary"],
["punctuation", "["],
["class-name", "FirstClass"],
["punctuation", ","],
["class-name", "SecondClass"],
["punctuation", "]"]
]]
]

----------------------------------------------------
Expand Down
74 changes: 34 additions & 40 deletions tests/languages/gdscript/keyword_feature.test
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
and
as
assert
await
break
breakpoint
class
Expand All @@ -10,82 +11,75 @@ continue
elif
else
enum
export
extends
for
func
get
if
in
is
master
mastersync
match
namespace
not
null
onready
or
pass
preload
puppet
puppetsync
remote
remotesync
return
self
setget
set
signal
static
tool
super
trait
var
when
while
yield

----------------------------------------------------

[
["keyword", "and"],
["keyword", "as"],
["keyword", "assert"],
["keyword", "break"],
["operator-word", "and"],
["operator-word", "as"],
["builtin", "assert"],
["keyword", "await"],
["control-flow", "break"],
["keyword", "breakpoint"],
["keyword", "class"],
["keyword", "class_name"],
["keyword", "const"],
["keyword", "continue"],
["keyword", "elif"],
["keyword", "else"],
["control-flow", "continue"],
["control-flow", "elif"],
["control-flow", "else"],
["keyword", "enum"],
["keyword", "export"],
["keyword", "extends"],
["keyword", "for"],
["control-flow", "for"],
["keyword", "func"],
["keyword", "if"],
["keyword", "in"],
["keyword", "is"],
["keyword", "master"],
["keyword", "mastersync"],
["keyword", "match"],
["keyword", "not"],
["keyword", "null"],
["keyword", "onready"],
["keyword", "or"],
["keyword", "pass"],
["keyword", "preload"],
["keyword", "puppet"],
["keyword", "puppetsync"],
["keyword", "remote"],
["keyword", "remotesync"],
["keyword", "return"],
["setget", "get"],
["control-flow", "if"],
["operator-word", "in"],
["operator-word", "is"],
["control-flow", "match"],
["keyword", "namespace"],
["operator-word", "not"],
["builtin-pseudo", "null"],
["operator-word", "or"],
["control-flow", "pass"],
["builtin", "preload"],
["control-flow", "return"],
["keyword", "self"],
["keyword", "setget"],
["setget", "set"],
["keyword", "signal"],
["keyword", "static"],
["keyword", "tool"],
["keyword", "super"],
["keyword", "trait"],
["keyword", "var"],
["keyword", "while"],
["control-flow", "when"],
["control-flow", "while"],
["keyword", "yield"]
]

----------------------------------------------------

Checks for keywords.
Checks for keywords and control-flow keywords.
14 changes: 7 additions & 7 deletions tests/languages/gdscript/number_feature.test
Original file line number Diff line number Diff line change
Expand Up @@ -9,27 +9,27 @@

1_000_000_000_000
0xBAD_FACE
0b_0010_0010_0100_0100
0b0010_0010_0100_0100

INF NAN PI TAU

----------------------------------------------------

[
["number", "123"],
["operator", "-"], ["number", "123"],
["number", "-123"],
["number", "123.456"],
["number", ".5"],
["number", "1.2e-34"],

["number", "0xBadFace"],
["number", "0b01010101"],
["number-hex", "0xBadFace"],
["number-bin", "0b01010101"],

["number", "1_000_000_000_000"],
["number", "0xBAD_FACE"],
["number", "0b_0010_0010_0100_0100"],
["number-hex", "0xBAD_FACE"],
["number-bin", "0b0010_0010_0100_0100"],

["number", "INF"], ["number", "NAN"], ["number", "PI"], ["number", "TAU"]
["builtin-number", "INF"], ["builtin-number", "NAN"], ["builtin-number", "PI"], ["builtin-number", "TAU"]
]

----------------------------------------------------
Expand Down
Loading