summaryrefslogtreecommitdiffstats
path: root/ftplugin/gdscript3.vim
blob: 3e5451f1cdbed4ef08a95c723a9b2821cd4abfca (plain) (blame)
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