Skip to content

Commit e0fc8b5

Browse files
committed
WIP - Generate all api functions from metadata
1 parent ec3bb1d commit e0fc8b5

File tree

18 files changed

+892
-213
lines changed

18 files changed

+892
-213
lines changed

README.md

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,17 @@
22

33
A Neovim client library for creating plugins written in Clojure.
44

5+
## Supported API Versions
6+
7+
;; TODO table, showing version of neovim-client version, neovim version (used
8+
;; to generate metadata, and api levels supported
9+
510
## Dependencies
611

712
### Neovim
813

9-
I've been building from [master](https://github.com/neovim/neovim). Currently,
10-
I'm using `NVIM v0.1.2-220-g3b94756`.
14+
;; TODO finish this section
15+
[Neovim](https://github.com/neovim/neovim)
1116

1217
### Java
1318

@@ -27,9 +32,9 @@ From repository:
2732

2833
```
2934
$> lein repl
30-
neovim-client.nvim=> (connect! "localhost" 7777)
31-
...
32-
neovim-client.nvim=> (run-command! ":echo 'Hello Neovim!'")
35+
neovim-client.nvim=> (def c (new "localhost" 7777))
36+
neovim-client.nvim=> (require '[neovim-client.1.api :as api])
37+
neovim-client.nvim=> (api/command ":echo 'Hello Neovim!'")
3338
...
3439
```
3540

TODO

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,36 @@ Versioning
1919
Following the philosophy described above, we need
2020
[X] Make the user specify required API level on `connect`
2121

22-
[_] Change the api to one function `exec`, pass the op as the first
22+
[X] Change the api to one function `exec`, pass the op as the first
2323
arg, and then use varargs, or a collection of args.
2424
Implementing `exec` and `exec-async` should include
2525
version-supported? check, maybe assume nvim_command will always
2626
be supported.
2727

28-
[_] On `connect`, intern dynamically created functions similar to the
29-
macros we use now.
28+
Switching strategies to just generating everything statically.
29+
[X] namespace will be neovim-client/api/<api-level>/...
30+
[X] store the api doc in resources
31+
[X] look at the api doc, find the minimum supported version,
32+
start there, make a pass for each version up to the max version
33+
[X] Change intern to defn
34+
[X] Spit each namespace to a file (for each version)
35+
[X] Fix 0/api/api.clj
36+
[X] Add namespace w/ require to codegen
37+
[X] redo tests
38+
39+
[X] Remove existing code in nvim.clj
40+
[X] custom.clj -> 1/api_ext.clj, 1/api/buffer_ext.clj, etc
41+
[_] unit test each one, will give us some sort of test coverage
42+
[_] buffer-ext
43+
[_] api-ext
44+
of a "useful" or at least "used" set of functionality
3045

3146
[_] Change the existing samples to use this, maybe only support one
3247
sample.
3348

49+
[_] In the README, document which api_levels are supported, and
50+
which version of nvim was used to generate the code from
51+
3452
[_] Make a `doc` function that basically does `ns-publics`
3553

3654
[_] Update the docs, including video?
@@ -41,11 +59,4 @@ Versioning
4159
[_] Tag the existing version, bump the version (project & github),
4260
and release.
4361

44-
Why aren't we doing anything statically?
45-
Although I'd prefer actual functions in source code, I don't like
46-
That I'd have to change code when they version the API
47-
But, more importantly, since the api_level supports a range of
48-
levels, I'd either
49-
have to support side-by-side versions
50-
but that would be easy with codegen & ns2, ns3, etc.
51-
make patches to all versions, if version by api-level
62+
[_] Upgrade clojure socket repl to use it?

project.clj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,6 @@
1414
[clj-logging-config "1.9.12"]
1515
[clojure-msgpack "1.2.0"]
1616
[uk.co.caprica/juds "0.94.1"]]
17+
:src-paths ["src" "test"]
1718
:repl-options {:init-ns neovim-client.nvim}
1819
:target-path "target/%s")

resources/api-info.mp

16.4 KB
Binary file not shown.

src/neovim_client/0/api.clj

Lines changed: 205 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,205 @@
1+
(ns neovim-client.0.api (:require [neovim-client.nvim]))
2+
3+
(defn buffer-get-line [component buffer index] (neovim-client.nvim/exec component "buffer_get_line" buffer index))
4+
5+
(defn buffer-get-line-async [component buffer index f] (neovim-client.nvim/exec-async component "buffer_get_line" buffer index f))
6+
7+
(defn buffer-set-line [component buffer index line] (neovim-client.nvim/exec component "buffer_set_line" buffer index line))
8+
9+
(defn buffer-set-line-async [component buffer index line f] (neovim-client.nvim/exec-async component "buffer_set_line" buffer index line f))
10+
11+
(defn buffer-del-line [component buffer index] (neovim-client.nvim/exec component "buffer_del_line" buffer index))
12+
13+
(defn buffer-del-line-async [component buffer index f] (neovim-client.nvim/exec-async component "buffer_del_line" buffer index f))
14+
15+
(defn buffer-get-line-slice [component buffer start end include_start include_end] (neovim-client.nvim/exec component "buffer_get_line_slice" buffer start end include_start include_end))
16+
17+
(defn buffer-get-line-slice-async [component buffer start end include_start include_end f] (neovim-client.nvim/exec-async component "buffer_get_line_slice" buffer start end include_start include_end f))
18+
19+
(defn buffer-set-line-slice [component buffer start end include_start include_end replacement] (neovim-client.nvim/exec component "buffer_set_line_slice" buffer start end include_start include_end replacement))
20+
21+
(defn buffer-set-line-slice-async [component buffer start end include_start include_end replacement f] (neovim-client.nvim/exec-async component "buffer_set_line_slice" buffer start end include_start include_end replacement f))
22+
23+
(defn buffer-set-var [component buffer name value] (neovim-client.nvim/exec component "buffer_set_var" buffer name value))
24+
25+
(defn buffer-set-var-async [component buffer name value f] (neovim-client.nvim/exec-async component "buffer_set_var" buffer name value f))
26+
27+
(defn buffer-del-var [component buffer name] (neovim-client.nvim/exec component "buffer_del_var" buffer name))
28+
29+
(defn buffer-del-var-async [component buffer name f] (neovim-client.nvim/exec-async component "buffer_del_var" buffer name f))
30+
31+
(defn buffer-insert [component buffer lnum lines] (neovim-client.nvim/exec component "buffer_insert" buffer lnum lines))
32+
33+
(defn buffer-insert-async [component buffer lnum lines f] (neovim-client.nvim/exec-async component "buffer_insert" buffer lnum lines f))
34+
35+
(defn tabpage-set-var [component tabpage name value] (neovim-client.nvim/exec component "tabpage_set_var" tabpage name value))
36+
37+
(defn tabpage-set-var-async [component tabpage name value f] (neovim-client.nvim/exec-async component "tabpage_set_var" tabpage name value f))
38+
39+
(defn tabpage-del-var [component tabpage name] (neovim-client.nvim/exec component "tabpage_del_var" tabpage name))
40+
41+
(defn tabpage-del-var-async [component tabpage name f] (neovim-client.nvim/exec-async component "tabpage_del_var" tabpage name f))
42+
43+
(defn ui-attach [component width height enable_rgb] (neovim-client.nvim/exec component "ui_attach" width height enable_rgb))
44+
45+
(defn ui-attach-async [component width height enable_rgb f] (neovim-client.nvim/exec-async component "ui_attach" width height enable_rgb f))
46+
47+
(defn set-var [component name value] (neovim-client.nvim/exec component "vim_set_var" name value))
48+
49+
(defn set-var-async [component name value f] (neovim-client.nvim/exec-async component "vim_set_var" name value f))
50+
51+
(defn del-var [component name] (neovim-client.nvim/exec component "vim_del_var" name))
52+
53+
(defn del-var-async [component name f] (neovim-client.nvim/exec-async component "vim_del_var" name f))
54+
55+
(defn window-set-var [component window name value] (neovim-client.nvim/exec component "window_set_var" window name value))
56+
57+
(defn window-set-var-async [component window name value f] (neovim-client.nvim/exec-async component "window_set_var" window name value f))
58+
59+
(defn window-del-var [component window name] (neovim-client.nvim/exec component "window_del_var" window name))
60+
61+
(defn window-del-var-async [component window name f] (neovim-client.nvim/exec-async component "window_del_var" window name f))
62+
63+
(defn ui-detach [component] (neovim-client.nvim/exec component "ui_detach"))
64+
65+
(defn ui-detach-async [component f] (neovim-client.nvim/exec-async component "ui_detach" f))
66+
67+
(defn ui-try-resize [component width height] (neovim-client.nvim/exec component "ui_try_resize" width height))
68+
69+
(defn ui-try-resize-async [component width height f] (neovim-client.nvim/exec-async component "ui_try_resize" width height f))
70+
71+
(defn command [component command] (neovim-client.nvim/exec component "vim_command" command))
72+
73+
(defn command-async [component command f] (neovim-client.nvim/exec-async component "vim_command" command f))
74+
75+
(defn feedkeys [component keys mode escape_csi] (neovim-client.nvim/exec component "vim_feedkeys" keys mode escape_csi))
76+
77+
(defn feedkeys-async [component keys mode escape_csi f] (neovim-client.nvim/exec-async component "vim_feedkeys" keys mode escape_csi f))
78+
79+
(defn input [component keys] (neovim-client.nvim/exec component "vim_input" keys))
80+
81+
(defn input-async [component keys f] (neovim-client.nvim/exec-async component "vim_input" keys f))
82+
83+
(defn replace-termcodes [component str from_part do_lt special] (neovim-client.nvim/exec component "vim_replace_termcodes" str from_part do_lt special))
84+
85+
(defn replace-termcodes-async [component str from_part do_lt special f] (neovim-client.nvim/exec-async component "vim_replace_termcodes" str from_part do_lt special f))
86+
87+
(defn command-output [component str] (neovim-client.nvim/exec component "vim_command_output" str))
88+
89+
(defn command-output-async [component str f] (neovim-client.nvim/exec-async component "vim_command_output" str f))
90+
91+
(defn eval [component expr] (neovim-client.nvim/exec component "vim_eval" expr))
92+
93+
(defn eval-async [component expr f] (neovim-client.nvim/exec-async component "vim_eval" expr f))
94+
95+
(defn call-function [component fname args] (neovim-client.nvim/exec component "vim_call_function" fname args))
96+
97+
(defn call-function-async [component fname args f] (neovim-client.nvim/exec-async component "vim_call_function" fname args f))
98+
99+
(defn strwidth [component str] (neovim-client.nvim/exec component "vim_strwidth" str))
100+
101+
(defn strwidth-async [component str f] (neovim-client.nvim/exec-async component "vim_strwidth" str f))
102+
103+
(defn list-runtime-paths [component] (neovim-client.nvim/exec component "vim_list_runtime_paths"))
104+
105+
(defn list-runtime-paths-async [component f] (neovim-client.nvim/exec-async component "vim_list_runtime_paths" f))
106+
107+
(defn change-directory [component dir] (neovim-client.nvim/exec component "vim_change_directory" dir))
108+
109+
(defn change-directory-async [component dir f] (neovim-client.nvim/exec-async component "vim_change_directory" dir f))
110+
111+
(defn get-current-line [component] (neovim-client.nvim/exec component "vim_get_current_line"))
112+
113+
(defn get-current-line-async [component f] (neovim-client.nvim/exec-async component "vim_get_current_line" f))
114+
115+
(defn set-current-line [component line] (neovim-client.nvim/exec component "vim_set_current_line" line))
116+
117+
(defn set-current-line-async [component line f] (neovim-client.nvim/exec-async component "vim_set_current_line" line f))
118+
119+
(defn del-current-line [component] (neovim-client.nvim/exec component "vim_del_current_line"))
120+
121+
(defn del-current-line-async [component f] (neovim-client.nvim/exec-async component "vim_del_current_line" f))
122+
123+
(defn get-var [component name] (neovim-client.nvim/exec component "vim_get_var" name))
124+
125+
(defn get-var-async [component name f] (neovim-client.nvim/exec-async component "vim_get_var" name f))
126+
127+
(defn get-vvar [component name] (neovim-client.nvim/exec component "vim_get_vvar" name))
128+
129+
(defn get-vvar-async [component name f] (neovim-client.nvim/exec-async component "vim_get_vvar" name f))
130+
131+
(defn get-option [component name] (neovim-client.nvim/exec component "vim_get_option" name))
132+
133+
(defn get-option-async [component name f] (neovim-client.nvim/exec-async component "vim_get_option" name f))
134+
135+
(defn set-option [component name value] (neovim-client.nvim/exec component "vim_set_option" name value))
136+
137+
(defn set-option-async [component name value f] (neovim-client.nvim/exec-async component "vim_set_option" name value f))
138+
139+
(defn out-write [component str] (neovim-client.nvim/exec component "vim_out_write" str))
140+
141+
(defn out-write-async [component str f] (neovim-client.nvim/exec-async component "vim_out_write" str f))
142+
143+
(defn err-write [component str] (neovim-client.nvim/exec component "vim_err_write" str))
144+
145+
(defn err-write-async [component str f] (neovim-client.nvim/exec-async component "vim_err_write" str f))
146+
147+
(defn report-error [component str] (neovim-client.nvim/exec component "vim_report_error" str))
148+
149+
(defn report-error-async [component str f] (neovim-client.nvim/exec-async component "vim_report_error" str f))
150+
151+
(defn get-buffers [component] (neovim-client.nvim/exec component "vim_get_buffers"))
152+
153+
(defn get-buffers-async [component f] (neovim-client.nvim/exec-async component "vim_get_buffers" f))
154+
155+
(defn get-current-buffer [component] (neovim-client.nvim/exec component "vim_get_current_buffer"))
156+
157+
(defn get-current-buffer-async [component f] (neovim-client.nvim/exec-async component "vim_get_current_buffer" f))
158+
159+
(defn set-current-buffer [component buffer] (neovim-client.nvim/exec component "vim_set_current_buffer" buffer))
160+
161+
(defn set-current-buffer-async [component buffer f] (neovim-client.nvim/exec-async component "vim_set_current_buffer" buffer f))
162+
163+
(defn get-windows [component] (neovim-client.nvim/exec component "vim_get_windows"))
164+
165+
(defn get-windows-async [component f] (neovim-client.nvim/exec-async component "vim_get_windows" f))
166+
167+
(defn get-current-window [component] (neovim-client.nvim/exec component "vim_get_current_window"))
168+
169+
(defn get-current-window-async [component f] (neovim-client.nvim/exec-async component "vim_get_current_window" f))
170+
171+
(defn set-current-window [component window] (neovim-client.nvim/exec component "vim_set_current_window" window))
172+
173+
(defn set-current-window-async [component window f] (neovim-client.nvim/exec-async component "vim_set_current_window" window f))
174+
175+
(defn get-tabpages [component] (neovim-client.nvim/exec component "vim_get_tabpages"))
176+
177+
(defn get-tabpages-async [component f] (neovim-client.nvim/exec-async component "vim_get_tabpages" f))
178+
179+
(defn get-current-tabpage [component] (neovim-client.nvim/exec component "vim_get_current_tabpage"))
180+
181+
(defn get-current-tabpage-async [component f] (neovim-client.nvim/exec-async component "vim_get_current_tabpage" f))
182+
183+
(defn set-current-tabpage [component tabpage] (neovim-client.nvim/exec component "vim_set_current_tabpage" tabpage))
184+
185+
(defn set-current-tabpage-async [component tabpage f] (neovim-client.nvim/exec-async component "vim_set_current_tabpage" tabpage f))
186+
187+
(defn subscribe [component event] (neovim-client.nvim/exec component "vim_subscribe" event))
188+
189+
(defn subscribe-async [component event f] (neovim-client.nvim/exec-async component "vim_subscribe" event f))
190+
191+
(defn unsubscribe [component event] (neovim-client.nvim/exec component "vim_unsubscribe" event))
192+
193+
(defn unsubscribe-async [component event f] (neovim-client.nvim/exec-async component "vim_unsubscribe" event f))
194+
195+
(defn name-to-color [component name] (neovim-client.nvim/exec component "vim_name_to_color" name))
196+
197+
(defn name-to-color-async [component name f] (neovim-client.nvim/exec-async component "vim_name_to_color" name f))
198+
199+
(defn get-color-map [component] (neovim-client.nvim/exec component "vim_get_color_map"))
200+
201+
(defn get-color-map-async [component f] (neovim-client.nvim/exec-async component "vim_get_color_map" f))
202+
203+
(defn get-api-info [component] (neovim-client.nvim/exec component "vim_get_api_info"))
204+
205+
(defn get-api-info-async [component f] (neovim-client.nvim/exec-async component "vim_get_api_info" f))

src/neovim_client/0/api/buffer.clj

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
(ns neovim-client.0.api.buffer (:require [neovim-client.nvim]))
2+
3+
(defn line-count [component buffer] (neovim-client.nvim/exec component "buffer_line_count" buffer))
4+
5+
(defn line-count-async [component buffer f] (neovim-client.nvim/exec-async component "buffer_line_count" buffer f))
6+
7+
(defn get-lines [component buffer start end strict_indexing] (neovim-client.nvim/exec component "buffer_get_lines" buffer start end strict_indexing))
8+
9+
(defn get-lines-async [component buffer start end strict_indexing f] (neovim-client.nvim/exec-async component "buffer_get_lines" buffer start end strict_indexing f))
10+
11+
(defn set-lines [component buffer start end strict_indexing replacement] (neovim-client.nvim/exec component "buffer_set_lines" buffer start end strict_indexing replacement))
12+
13+
(defn set-lines-async [component buffer start end strict_indexing replacement f] (neovim-client.nvim/exec-async component "buffer_set_lines" buffer start end strict_indexing replacement f))
14+
15+
(defn get-var [component buffer name] (neovim-client.nvim/exec component "buffer_get_var" buffer name))
16+
17+
(defn get-var-async [component buffer name f] (neovim-client.nvim/exec-async component "buffer_get_var" buffer name f))
18+
19+
(defn get-option [component buffer name] (neovim-client.nvim/exec component "buffer_get_option" buffer name))
20+
21+
(defn get-option-async [component buffer name f] (neovim-client.nvim/exec-async component "buffer_get_option" buffer name f))
22+
23+
(defn set-option [component buffer name value] (neovim-client.nvim/exec component "buffer_set_option" buffer name value))
24+
25+
(defn set-option-async [component buffer name value f] (neovim-client.nvim/exec-async component "buffer_set_option" buffer name value f))
26+
27+
(defn get-number [component buffer] (neovim-client.nvim/exec component "buffer_get_number" buffer))
28+
29+
(defn get-number-async [component buffer f] (neovim-client.nvim/exec-async component "buffer_get_number" buffer f))
30+
31+
(defn get-name [component buffer] (neovim-client.nvim/exec component "buffer_get_name" buffer))
32+
33+
(defn get-name-async [component buffer f] (neovim-client.nvim/exec-async component "buffer_get_name" buffer f))
34+
35+
(defn set-name [component buffer name] (neovim-client.nvim/exec component "buffer_set_name" buffer name))
36+
37+
(defn set-name-async [component buffer name f] (neovim-client.nvim/exec-async component "buffer_set_name" buffer name f))
38+
39+
(defn is-valid [component buffer] (neovim-client.nvim/exec component "buffer_is_valid" buffer))
40+
41+
(defn is-valid-async [component buffer f] (neovim-client.nvim/exec-async component "buffer_is_valid" buffer f))
42+
43+
(defn get-mark [component buffer name] (neovim-client.nvim/exec component "buffer_get_mark" buffer name))
44+
45+
(defn get-mark-async [component buffer name f] (neovim-client.nvim/exec-async component "buffer_get_mark" buffer name f))
46+
47+
(defn add-highlight [component buffer src_id hl_group line col_start col_end] (neovim-client.nvim/exec component "buffer_add_highlight" buffer src_id hl_group line col_start col_end))
48+
49+
(defn add-highlight-async [component buffer src_id hl_group line col_start col_end f] (neovim-client.nvim/exec-async component "buffer_add_highlight" buffer src_id hl_group line col_start col_end f))
50+
51+
(defn clear-highlight [component buffer src_id line_start line_end] (neovim-client.nvim/exec component "buffer_clear_highlight" buffer src_id line_start line_end))
52+
53+
(defn clear-highlight-async [component buffer src_id line_start line_end f] (neovim-client.nvim/exec-async component "buffer_clear_highlight" buffer src_id line_start line_end f))

src/neovim_client/0/api/tab.clj

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
(ns neovim-client.0.api.tab (:require [neovim-client.nvim]))
2+
3+
(defn get-windows [component tabpage] (neovim-client.nvim/exec component "tabpage_get_windows" tabpage))
4+
5+
(defn get-windows-async [component tabpage f] (neovim-client.nvim/exec-async component "tabpage_get_windows" tabpage f))
6+
7+
(defn get-var [component tabpage name] (neovim-client.nvim/exec component "tabpage_get_var" tabpage name))
8+
9+
(defn get-var-async [component tabpage name f] (neovim-client.nvim/exec-async component "tabpage_get_var" tabpage name f))
10+
11+
(defn get-window [component tabpage] (neovim-client.nvim/exec component "tabpage_get_window" tabpage))
12+
13+
(defn get-window-async [component tabpage f] (neovim-client.nvim/exec-async component "tabpage_get_window" tabpage f))
14+
15+
(defn is-valid [component tabpage] (neovim-client.nvim/exec component "tabpage_is_valid" tabpage))
16+
17+
(defn is-valid-async [component tabpage f] (neovim-client.nvim/exec-async component "tabpage_is_valid" tabpage f))

0 commit comments

Comments
 (0)