blob: bf6d47c60dfe0af6100f0f25b4080027f18b3974 [file] [log] [blame]
Bram Moolenaar9b03d3e2022-08-30 20:26:34 +01001" Vim syntax file for Godot gdscript
2" Language: gdscript
3" Maintainer: Maxim Kim <habamax@gmail.com>
4" Filenames: *.gd
5
6if exists("b:current_syntax")
7 finish
8endif
9
10let s:keepcpo= &cpo
11set cpo&vim
12
13syntax sync maxlines=100
14
15syn keyword gdscriptConditional if else elif match
16syn keyword gdscriptRepeat for while break continue
17
18syn keyword gdscriptOperator is as not and or in
19
20syn match gdscriptClass "\v<\u\w+>"
21syn match gdscriptConstant "\<[_A-Z]\+[0-9_A-Z]*\>"
22syn match gdscriptBlockStart ":\s*$"
23
24syn keyword gdscriptKeyword null self owner parent tool
25syn keyword gdscriptBoolean false true
26
27syn keyword gdscriptStatement remote master puppet remotesync mastersync puppetsync sync
28syn keyword gdscriptStatement return pass
29syn keyword gdscriptStatement static const enum
30syn keyword gdscriptStatement breakpoint assert
31syn keyword gdscriptStatement onready
32syn keyword gdscriptStatement class_name extends
33
34syn keyword gdscriptType void bool int float String contained
35
36syn keyword gdscriptStatement var nextgroup=gdscriptTypeDecl skipwhite
37syn keyword gdscriptStatement const nextgroup=gdscriptTypeDecl skipwhite
38syn match gdscriptTypeDecl "\h\w*\s*:\s*\h\w*" contains=gdscriptOperator,gdscriptType,gdscriptClass contained skipwhite
39syn match gdscriptTypeDecl "->\s*\h\w*" contains=gdscriptOperator,gdscriptType,gdscriptClass skipwhite
40
41syn keyword gdscriptStatement export nextgroup=gdscriptExportTypeDecl skipwhite
42syn match gdscriptExportTypeDecl "(.\{-}[,)]" contains=gdscriptOperator,gdscriptType,gdscriptClass contained skipwhite
43
44syn keyword gdscriptStatement setget nextgroup=gdscriptSetGet,gdscriptSetGetSeparator skipwhite
45syn match gdscriptSetGet "\h\w*" nextgroup=gdscriptSetGetSeparator display contained skipwhite
46syn match gdscriptSetGetSeparator "," nextgroup=gdscriptSetGet display contained skipwhite
47
48syn keyword gdscriptStatement class func signal nextgroup=gdscriptFunctionName skipwhite
49syn match gdscriptFunctionName "\h\w*" nextgroup=gdscriptFunctionParams display contained skipwhite
50syn match gdscriptFunctionParams "(.*)" contains=gdscriptTypeDecl display contained skipwhite
51
52syn match gdscriptNode "\$\h\w*\%(/\h\w*\)*"
53
54syn match gdscriptComment "#.*$" contains=@Spell,gdscriptTodo
55
56syn region gdscriptString matchgroup=gdscriptQuotes
57 \ start=+[uU]\=\z(['"]\)+ end="\z1" skip="\\\\\|\\\z1"
58 \ contains=gdscriptEscape,@Spell
59
60syn region gdscriptString matchgroup=gdscriptTripleQuotes
61 \ start=+[uU]\=\z('''\|"""\)+ end="\z1" keepend
62 \ contains=gdscriptEscape,@Spell
63
64syn match gdscriptEscape +\\[abfnrtv'"\\]+ contained
65syn match gdscriptEscape "\\$"
66
67" Numbers
68syn match gdscriptNumber "\<0x\%(_\=\x\)\+\>"
69syn match gdscriptNumber "\<0b\%(_\=[01]\)\+\>"
70syn match gdscriptNumber "\<\d\%(_\=\d\)*\>"
71syn match gdscriptNumber "\<\d\%(_\=\d\)*\%(e[+-]\=\d\%(_\=\d\)*\)\=\>"
72syn match gdscriptNumber "\<\d\%(_\=\d\)*\.\%(e[+-]\=\d\%(_\=\d\)*\)\=\%(\W\|$\)\@="
73syn match gdscriptNumber "\%(^\|\W\)\@1<=\%(\d\%(_\=\d\)*\)\=\.\d\%(_\=\d\)*\%(e[+-]\=\d\%(_\=\d\)*\)\=\>"
74
75" XXX, TODO, etc
76syn keyword gdscriptTodo TODO XXX FIXME HACK NOTE BUG contained
77
78hi def link gdscriptStatement Statement
79hi def link gdscriptKeyword Keyword
80hi def link gdscriptConditional Conditional
81hi def link gdscriptBoolean Boolean
82hi def link gdscriptOperator Operator
83hi def link gdscriptRepeat Repeat
84hi def link gdscriptSetGet Function
85hi def link gdscriptFunctionName Function
86hi def link gdscriptClass Type
87hi def link gdscriptConstant Constant
88hi def link gdscriptBuiltinStruct Typedef
89hi def link gdscriptComment Comment
90hi def link gdscriptString String
91hi def link gdscriptQuotes String
92hi def link gdscriptTripleQuotes String
93hi def link gdscriptEscape Special
94hi def link gdscriptNode PreProc
95hi def link gdscriptType Type
96hi def link gdscriptNumber Number
97hi def link gdscriptBlockStart Special
98hi def link gdscriptTodo Todo
99
100
101let b:current_syntax = "gdscript"
102
103let &cpo = s:keepcpo
104unlet s:keepcpo