1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'gdscript') == -1
setlocal commentstring=#\ %s
if exists("g:gdscript3_loaded")
finish
endif
let g:gdscript3_loaded=1
if !has("python3") && !has("python")
finish
endif
if has("python3")
let s:pyfile_cmd = "py3file"
let s:py_cmd = "py3"
else
let s:pyfile_cmd = "pyfile"
let s:py_cmd = "py"
endif
execute s:pyfile_cmd . " " . expand('<sfile>:p:h') . "/../python/init.py"
fun! GDScriptComplete(findstart, base)
if a:findstart == 1
let line = getline('.')
let start = col('.') - 1
" Treat '-' as part of the word when completing in a string.
if synIDattr(synID(line('.'), col('.')-1, 1), 'name') ==# "gdString"
let pattern = '[-a-zA-Z0-9_]'
else
let pattern = '[a-zA-Z0-9_]'
endif
while start > 0 && line[start - 1] =~ pattern
let start -= 1
endwhile
return start
else
execute s:py_cmd . " gdscript_complete()"
if exists("gdscript_completions")
return gdscript_completions
else
return []
endif
endif
endfun
set omnifunc=GDScriptComplete
" Configure for common completion frameworks.
" Deoplete
if &rtp =~ 'deoplete.nvim'
call deoplete#custom#option('sources', {
\ 'gdscript3': ['omni'],
\ })
call deoplete#custom#var('omni', 'input_patterns', {
\ 'gdscript3': [
\ '\.|\w+',
\ '\bextends\s+',
\ '\bexport\(',
\ '\bfunc\s+',
\ '"res://[^"]*'
\ ]
\ })
endif
" SuperTab
let g:SuperTabDefaultCompletionType = "<c-x><c-o>"
" YouCompleteMe
if !exists('g:ycm_semantic_triggers')
let g:ycm_semantic_triggers = {}
endif
let g:ycm_semantic_triggers.gdscript3 = [
\'re!\w+',
\'.',
\'re!\bextends\s+',
\'re!\bexport\(',
\'re!\bfunc\s+',
\'re!"res://[^"]*'
\]
" Configure echodoc
if &rtp =~ 'echodoc'
let s:echodoc_dict = { "name": "gdscript3", "rank": 9 }
fun! s:echodoc_dict.search(text)
execute s:py_cmd . " echodoc_search()"
if exists("echodoc_search_result")
return echodoc_search_result
else
return []
endif
endfun
call echodoc#register('gdscript3', s:echodoc_dict)
" Reset echodoc cache when exiting insert mode.
" This fixes an issue where the function signature wouldn't re-appear
" after exiting and re-entering insert mode.
au InsertLeave * let b:prev_echodoc = []
endif
" Configure Syntastic checker
let g:syntastic_gdscript3_checkers = ['godot_server']
endif
|