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