blob: 1e295ef9496fc136090fa7262e0d838e7dcf51c7 (
plain)
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
|
# gopls.kak: gopls bindings for kakoune
define-command -params 1 -docstring %{
gopls <command>: gopls command wrapper
All commands are forwarded to gopls utility
Available commands are:
format
imports
definition
references
} -shell-script-candidates %{
printf "format\nimports\ndefinition\nreferences\n"
} \
gopls %{
require-module gopls
evaluate-commands %sh{
case "$1" in
format|imports)
printf %s\\n "gopls-cmd $1"
;;
definition)
printf %s\\n "gopls-def"
;;
references)
printf %s\\n "gopls-ref"
;;
*)
printf "fail Unknown gopls command '%s'\n" "$1"
exit
;;
esac
}
}
provide-module gopls %§
evaluate-commands %sh{
if ! command -v gopls > /dev/null 2>&1; then
echo "fail Please install gopls or add to PATH!"
fi
}
# Temp dir preparation
declare-option -hidden str gopls_tmp_dir
define-command -hidden -params 0 gopls-prepare %{
evaluate-commands %sh{
dir=$(mktemp -d "${TMPDIR:-/tmp}"/kak-gopls.XXXXXXXX)
printf %s\\n "set-option buffer gopls_tmp_dir ${dir}"
}
}
# gopls format/imports
define-command -hidden -params 1 gopls-cmd %{
gopls-prepare
evaluate-commands %sh{
dir=${kak_opt_gopls_tmp_dir}
gopls "$1" -w "${kak_buffile}" 2> "${dir}/stderr"
if [ $? -ne 0 ]; then
# show error messages in *debug* buffer
printf %s\\n "echo -debug %file{${dir}/stderr}"
fi
}
edit!
nop %sh{ rm -rf "${kak_opt_gopls_tmp_dir}" }
}
# gopls definition
define-command -hidden -params 0 gopls-def %{
evaluate-commands %sh{
jump=$( gopls definition "${kak_buffile}:${kak_cursor_line}:${kak_cursor_column}" 2> /dev/null \
|sed -e 's/-[0-9]\+:.*//; s/:/ /g; q' )
if [ -n "${jump}" ]; then
printf %s\\n "evaluate-commands -try-client '${kak_opt_jumpclient}' %{
edit ${jump}
}"
fi
}
}
# gopls references
define-command -hidden -params 0 gopls-ref %{
gopls-prepare
evaluate-commands %sh{
dir=${kak_opt_gopls_tmp_dir}
mkfifo "${dir}/fifo"
( { trap - INT QUIT; gopls references "${kak_buffile}:${kak_cursor_line}:${kak_cursor_column}"
} > "${dir}/fifo" 2> /dev/null & ) > /dev/null 2>&1 < /dev/null
# using filetype=grep for nice hilight and <ret> mapping
printf %s\\n "evaluate-commands -try-client '${kak_opt_toolsclient}' %{
edit! -fifo '${dir}/fifo' *gopls-refs*
set-option buffer filetype grep
hook -always -once buffer BufCloseFifo .* %{ nop %sh{ rm -r '${dir}' } }
}"
}
}
§
|