neovim 0.3.1 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1a871663716cf365ee1902237772dc70a9d051ef
4
- data.tar.gz: 12633a50fa0be3804b7cdba4bae04172110ac6e9
3
+ metadata.gz: b4fecc46a144d9fa3d537f9b0f9ed7da0a89e0c3
4
+ data.tar.gz: e8d246f7011bc118ba28706306065b823d18fb12
5
5
  SHA512:
6
- metadata.gz: c262cb6913bb815a9a084d1e3684d77a5179a12ca358dad3b6b3d042e3226eebf6e92a6eeaefd5fbcc244e7de0118e692dce6dac21c84d86c15e815984f7c0ab
7
- data.tar.gz: d0dabaa8e50df29e425d102bd386ea9578de6c3ebe0f7f9e8ec93a40434fc68c29c1174ed495fa57dc530fc96f566dca1d7a328de41e59a8efd5e74f26b11ee7
6
+ metadata.gz: a1367f6f99b864818ddc7b98f6ffd04b8e3795cc3f797deed986ba8c86f3bc880c5be66d5b1bd7b17a6c7877a7b554ef944bbee473af3d30345055ce41925a06
7
+ data.tar.gz: 6b67c6c0163aea888f5131e4cad4bc5c7bc3c7765462569a5fc37251b4d5d6482a77b01b9a06878b22a9c7c0523fe17bc0b04ca18daf64f7f6ca7dd8702381fd
data/.travis.yml CHANGED
@@ -10,6 +10,7 @@ rvm:
10
10
  - 2.1.0
11
11
  - 2.2.0
12
12
  - 2.3.0
13
+ - 2.4.0
13
14
  - ruby-head
14
15
 
15
16
  before_install:
data/CHANGELOG.md CHANGED
@@ -1,3 +1,6 @@
1
+ # 0.3.2
2
+ - Fix directory tracking in legacy Ruby provider
3
+
1
4
  # 0.3.1
2
5
  - Remove window caching to fix incompatibilities with command-t
3
6
  - Add `Vim` module alias
data/Rakefile CHANGED
@@ -8,3 +8,8 @@ desc "Generate Neovim remote API docs"
8
8
  task :docs do
9
9
  sh File.expand_path("../script/generate_docs", __FILE__)
10
10
  end
11
+
12
+ desc "Dump nvim remote API"
13
+ task :api do
14
+ sh File.expand_path("../script/dump_api", __FILE__)
15
+ end
data/lib/neovim.rb CHANGED
@@ -56,7 +56,7 @@ module Neovim
56
56
  # Connect to a running +nvim+ instance over TCP.
57
57
  #
58
58
  # @param host [String] The hostname or IP address
59
- # @param port [Fixnum] The port
59
+ # @param port [Integer] The port
60
60
  # @return [Client]
61
61
  # @see Session.tcp
62
62
  def self.attach_tcp(host, port)
data/lib/neovim/buffer.rb CHANGED
@@ -47,28 +47,28 @@ module Neovim
47
47
 
48
48
  # Get the buffer index.
49
49
  #
50
- # @return [Fixnum]
50
+ # @return [Integer]
51
51
  def number
52
52
  get_number
53
53
  end
54
54
 
55
55
  # Get the number of lines.
56
56
  #
57
- # @return [Fixnum]
57
+ # @return [Integer]
58
58
  def count
59
59
  line_count
60
60
  end
61
61
 
62
62
  # Get the number of lines.
63
63
  #
64
- # @return [Fixnum]
64
+ # @return [Integer]
65
65
  def length
66
66
  count
67
67
  end
68
68
 
69
69
  # Get the given line (1-indexed).
70
70
  #
71
- # @param index [Fixnum]
71
+ # @param index [Integer]
72
72
  # @return [String]
73
73
  def [](index)
74
74
  lines[index-1]
@@ -76,7 +76,7 @@ module Neovim
76
76
 
77
77
  # Set the given line (1-indexed).
78
78
  #
79
- # @param index [Fixnum]
79
+ # @param index [Integer]
80
80
  # @param str [String]
81
81
  # @return [String]
82
82
  def []=(index, str)
@@ -85,7 +85,7 @@ module Neovim
85
85
 
86
86
  # Delete the given line (1-indexed).
87
87
  #
88
- # @param index [Fixnum]
88
+ # @param index [Integer]
89
89
  # @return [void]
90
90
  def delete(index)
91
91
  lines.delete(index-1)
@@ -96,7 +96,7 @@ module Neovim
96
96
  # To maintain backwards compatibility with +vim+, the cursor is forced back
97
97
  # to its previous position after inserting the line.
98
98
  #
99
- # @param index [Fixnum]
99
+ # @param index [Integer]
100
100
  # @param str [String]
101
101
  # @return [String]
102
102
  def append(index, str)
@@ -133,7 +133,7 @@ module Neovim
133
133
 
134
134
  # Get the current line number of an active buffer.
135
135
  #
136
- # @return [Fixnum, nil]
136
+ # @return [Integer, nil]
137
137
  def line_number
138
138
  if active?
139
139
  window = @session.request(:vim_get_current_window)
@@ -150,63 +150,39 @@ module Neovim
150
150
 
151
151
  # The following methods are dynamically generated.
152
152
  =begin
153
- @method line_count
154
- Send the +buffer_line_count+ RPC to +nvim+
155
- @return [Fixnum]
156
-
157
153
  @method get_line(index)
158
154
  Send the +buffer_get_line+ RPC to +nvim+
159
- @param [Fixnum] index
155
+ @param [Integer] index
160
156
  @return [String]
161
157
 
162
158
  @method set_line(index, line)
163
159
  Send the +buffer_set_line+ RPC to +nvim+
164
- @param [Fixnum] index
160
+ @param [Integer] index
165
161
  @param [String] line
166
162
  @return [void]
167
163
 
168
164
  @method del_line(index)
169
165
  Send the +buffer_del_line+ RPC to +nvim+
170
- @param [Fixnum] index
166
+ @param [Integer] index
171
167
  @return [void]
172
168
 
173
169
  @method get_line_slice(start, end, include_start, include_end)
174
170
  Send the +buffer_get_line_slice+ RPC to +nvim+
175
- @param [Fixnum] start
176
- @param [Fixnum] end
171
+ @param [Integer] start
172
+ @param [Integer] end
177
173
  @param [Boolean] include_start
178
174
  @param [Boolean] include_end
179
175
  @return [Array<String>]
180
176
 
181
- @method get_lines(start, end, strict_indexing)
182
- Send the +buffer_get_lines+ RPC to +nvim+
183
- @param [Fixnum] start
184
- @param [Fixnum] end
185
- @param [Boolean] strict_indexing
186
- @return [Array<String>]
187
-
188
177
  @method set_line_slice(start, end, include_start, include_end, replacement)
189
178
  Send the +buffer_set_line_slice+ RPC to +nvim+
190
- @param [Fixnum] start
191
- @param [Fixnum] end
179
+ @param [Integer] start
180
+ @param [Integer] end
192
181
  @param [Boolean] include_start
193
182
  @param [Boolean] include_end
194
183
  @param [Array<String>] replacement
195
184
  @return [void]
196
185
 
197
- @method set_lines(start, end, strict_indexing, replacement)
198
- Send the +buffer_set_lines+ RPC to +nvim+
199
- @param [Fixnum] start
200
- @param [Fixnum] end
201
- @param [Boolean] strict_indexing
202
- @param [Array<String>] replacement
203
- @return [void]
204
-
205
- @method get_var(name)
206
- Send the +buffer_get_var+ RPC to +nvim+
207
- @param [String] name
208
- @return [Object]
209
-
210
186
  @method set_var(name, value)
211
187
  Send the +buffer_set_var+ RPC to +nvim+
212
188
  @param [String] name
@@ -218,6 +194,36 @@ module Neovim
218
194
  @param [String] name
219
195
  @return [Object]
220
196
 
197
+ @method insert(lnum, lines)
198
+ Send the +buffer_insert+ RPC to +nvim+
199
+ @param [Integer] lnum
200
+ @param [Array<String>] lines
201
+ @return [void]
202
+
203
+ @method line_count
204
+ Send the +buffer_line_count+ RPC to +nvim+
205
+ @return [Integer]
206
+
207
+ @method get_lines(start, end, strict_indexing)
208
+ Send the +buffer_get_lines+ RPC to +nvim+
209
+ @param [Integer] start
210
+ @param [Integer] end
211
+ @param [Boolean] strict_indexing
212
+ @return [Array<String>]
213
+
214
+ @method set_lines(start, end, strict_indexing, replacement)
215
+ Send the +buffer_set_lines+ RPC to +nvim+
216
+ @param [Integer] start
217
+ @param [Integer] end
218
+ @param [Boolean] strict_indexing
219
+ @param [Array<String>] replacement
220
+ @return [void]
221
+
222
+ @method get_var(name)
223
+ Send the +buffer_get_var+ RPC to +nvim+
224
+ @param [String] name
225
+ @return [Object]
226
+
221
227
  @method get_option(name)
222
228
  Send the +buffer_get_option+ RPC to +nvim+
223
229
  @param [String] name
@@ -231,7 +237,7 @@ module Neovim
231
237
 
232
238
  @method get_number
233
239
  Send the +buffer_get_number+ RPC to +nvim+
234
- @return [Fixnum]
240
+ @return [Integer]
235
241
 
236
242
  @method get_name
237
243
  Send the +buffer_get_name+ RPC to +nvim+
@@ -246,31 +252,25 @@ module Neovim
246
252
  Send the +buffer_is_valid+ RPC to +nvim+
247
253
  @return [Boolean]
248
254
 
249
- @method insert(lnum, lines)
250
- Send the +buffer_insert+ RPC to +nvim+
251
- @param [Fixnum] lnum
252
- @param [Array<String>] lines
253
- @return [void]
254
-
255
255
  @method get_mark(name)
256
256
  Send the +buffer_get_mark+ RPC to +nvim+
257
257
  @param [String] name
258
- @return [Array<Fixnum>]
258
+ @return [Array<Integer>]
259
259
 
260
260
  @method add_highlight(src_id, hl_group, line, col_start, col_end)
261
261
  Send the +buffer_add_highlight+ RPC to +nvim+
262
- @param [Fixnum] src_id
262
+ @param [Integer] src_id
263
263
  @param [String] hl_group
264
- @param [Fixnum] line
265
- @param [Fixnum] col_start
266
- @param [Fixnum] col_end
267
- @return [Fixnum]
264
+ @param [Integer] line
265
+ @param [Integer] col_start
266
+ @param [Integer] col_end
267
+ @return [Integer]
268
268
 
269
269
  @method clear_highlight(src_id, line_start, line_end)
270
270
  Send the +buffer_clear_highlight+ RPC to +nvim+
271
- @param [Fixnum] src_id
272
- @param [Fixnum] line_start
273
- @param [Fixnum] line_end
271
+ @param [Integer] src_id
272
+ @param [Integer] line_start
273
+ @param [Integer] line_end
274
274
  @return [void]
275
275
 
276
276
  =end
data/lib/neovim/client.rb CHANGED
@@ -10,13 +10,14 @@ module Neovim
10
10
  # @see Window
11
11
  # @see Tabpage
12
12
  class Client
13
- attr_reader :session
13
+ attr_reader :session, :channel_id
14
14
 
15
15
  def initialize(session)
16
16
  session.discover_api
17
17
 
18
18
  @session = session
19
19
  @api = session.api
20
+ @channel_id = session.channel_id
20
21
  end
21
22
 
22
23
  # Intercept method calls and delegate to appropriate RPC methods.
@@ -104,9 +105,20 @@ module Neovim
104
105
 
105
106
  # The following methods are dynamically generated.
106
107
  =begin
107
- @method command(str)
108
+ @method set_var(name, value)
109
+ Send the +vim_set_var+ RPC to +nvim+
110
+ @param [String] name
111
+ @param [Object] value
112
+ @return [Object]
113
+
114
+ @method del_var(name)
115
+ Send the +vim_del_var+ RPC to +nvim+
116
+ @param [String] name
117
+ @return [Object]
118
+
119
+ @method command(command)
108
120
  Send the +vim_command+ RPC to +nvim+
109
- @param [String] str
121
+ @param [String] command
110
122
  @return [void]
111
123
 
112
124
  @method feedkeys(keys, mode, escape_csi)
@@ -119,7 +131,7 @@ module Neovim
119
131
  @method input(keys)
120
132
  Send the +vim_input+ RPC to +nvim+
121
133
  @param [String] keys
122
- @return [Fixnum]
134
+ @return [Integer]
123
135
 
124
136
  @method replace_termcodes(str, from_part, do_lt, special)
125
137
  Send the +vim_replace_termcodes+ RPC to +nvim+
@@ -134,9 +146,9 @@ module Neovim
134
146
  @param [String] str
135
147
  @return [String]
136
148
 
137
- @method eval(str)
149
+ @method eval(expr)
138
150
  Send the +vim_eval+ RPC to +nvim+
139
- @param [String] str
151
+ @param [String] expr
140
152
  @return [Object]
141
153
 
142
154
  @method call_function(fname, args)
@@ -148,7 +160,7 @@ module Neovim
148
160
  @method strwidth(str)
149
161
  Send the +vim_strwidth+ RPC to +nvim+
150
162
  @param [String] str
151
- @return [Fixnum]
163
+ @return [Integer]
152
164
 
153
165
  @method list_runtime_paths
154
166
  Send the +vim_list_runtime_paths+ RPC to +nvim+
@@ -177,17 +189,6 @@ module Neovim
177
189
  @param [String] name
178
190
  @return [Object]
179
191
 
180
- @method set_var(name, value)
181
- Send the +vim_set_var+ RPC to +nvim+
182
- @param [String] name
183
- @param [Object] value
184
- @return [Object]
185
-
186
- @method del_var(name)
187
- Send the +vim_del_var+ RPC to +nvim+
188
- @param [String] name
189
- @return [Object]
190
-
191
192
  @method get_vvar(name)
192
193
  Send the +vim_get_vvar+ RPC to +nvim+
193
194
  @param [String] name
@@ -265,7 +266,7 @@ module Neovim
265
266
  @method name_to_color(name)
266
267
  Send the +vim_name_to_color+ RPC to +nvim+
267
268
  @param [String] name
268
- @return [Fixnum]
269
+ @return [Integer]
269
270
 
270
271
  @method get_color_map
271
272
  Send the +vim_get_color_map+ RPC to +nvim+
@@ -38,8 +38,8 @@ module Neovim
38
38
 
39
39
  # Set the active buffer.
40
40
  #
41
- # @param buffer [Buffer, Fixnum] The target buffer or index.
42
- # @return [Buffer, Fixnum]
41
+ # @param buffer [Buffer, Integer] The target buffer or index.
42
+ # @return [Buffer, Integer]
43
43
  def buffer=(buffer)
44
44
  @session.request(:vim_set_current_buffer, buffer)
45
45
  end
@@ -53,8 +53,8 @@ module Neovim
53
53
 
54
54
  # Set the active window.
55
55
  #
56
- # @param window [Window, Fixnum] The target window or index.
57
- # @return [Window, Fixnum]
56
+ # @param window [Window, Integer] The target window or index.
57
+ # @return [Window, Integer]
58
58
  def window=(window)
59
59
  @session.request(:vim_set_current_window, window)
60
60
  end
@@ -68,8 +68,8 @@ module Neovim
68
68
 
69
69
  # Set the active tabpage.
70
70
  #
71
- # @param tabpage [Tabpage, Fixnum] The target tabpage or index.
72
- # @return [Tabpage, Fixnum]
71
+ # @param tabpage [Tabpage, Integer] The target tabpage or index.
72
+ # @return [Tabpage, Integer]
73
73
  def tabpage=(tabpage)
74
74
  @session.request(:vim_set_current_tabpage, tabpage)
75
75
  end
data/lib/neovim/host.rb CHANGED
@@ -33,6 +33,7 @@ module Neovim
33
33
  @handlers[handler.qualified_name] = wrap_plugin_handler(handler)
34
34
  end
35
35
 
36
+ plugin.setup(@client)
36
37
  @specs[plugin.source] = plugin.specs
37
38
  end
38
39
 
@@ -27,14 +27,14 @@ module Neovim
27
27
  # Access the line at the given index within the range.
28
28
  #
29
29
  # @overload [](index)
30
- # @param index [Fixnum]
30
+ # @param index [Integer]
31
31
  #
32
32
  # @overload [](range)
33
33
  # @param range [Range]
34
34
  #
35
35
  # @overload [](index, length)
36
- # @param index [Fixnum]
37
- # @param length [Fixnum]
36
+ # @param index [Integer]
37
+ # @param length [Integer]
38
38
  #
39
39
  # @example Get the first line using an index
40
40
  # line_range[0] # => "first"
@@ -67,12 +67,12 @@ module Neovim
67
67
  # Set the line at the given index within the range.
68
68
  #
69
69
  # @overload []=(index, string)
70
- # @param index [Fixnum]
70
+ # @param index [Integer]
71
71
  # @param string [String]
72
72
  #
73
73
  # @overload []=(index, length, strings)
74
- # @param index [Fixnum]
75
- # @param length [Fixnum]
74
+ # @param index [Integer]
75
+ # @param length [Integer]
76
76
  # @param strings [Array<String>]
77
77
  #
78
78
  # @overload []=(range, strings)
@@ -123,7 +123,7 @@ module Neovim
123
123
 
124
124
  # Insert line(s) at the given index within the range.
125
125
  #
126
- # @param index [Fixnum]
126
+ # @param index [Integer]
127
127
  # @param lines [String]
128
128
  def insert(index, lines)
129
129
  @buffer.insert(index, Array(lines))
@@ -131,7 +131,7 @@ module Neovim
131
131
 
132
132
  # Delete the line at the given index within the range.
133
133
  #
134
- # @param index [Fixnum]
134
+ # @param index [Integer]
135
135
  def delete(index)
136
136
  @buffer.del_line(abs_line(index))
137
137
  end
data/lib/neovim/plugin.rb CHANGED
@@ -3,7 +3,7 @@ require "neovim/plugin/dsl"
3
3
  module Neovim
4
4
  # @api private
5
5
  class Plugin
6
- attr_accessor :handlers
6
+ attr_accessor :handlers, :setup_blocks
7
7
  attr_reader :source
8
8
 
9
9
  # Entrypoint to the +Neovim.plugin+ DSL.
@@ -16,6 +16,7 @@ module Neovim
16
16
  def initialize(source)
17
17
  @handlers = []
18
18
  @source = source
19
+ @setup_blocks = []
19
20
  end
20
21
 
21
22
  # Return specs used by +nvim+ to register plugins.
@@ -24,5 +25,10 @@ module Neovim
24
25
  handler.qualified? ? acc + [handler.to_spec] : acc
25
26
  end
26
27
  end
28
+
29
+ # Run all registered setup blocks.
30
+ def setup(client)
31
+ @setup_blocks.each { |bl| bl.call(client) }
32
+ end
27
33
  end
28
34
  end
@@ -16,11 +16,11 @@ module Neovim
16
16
  # @param options [Hash] Command options.
17
17
  # @param &block [Proc, nil] The body of the command.
18
18
  #
19
- # @option options [Fixnum] :nargs The number of arguments to accept. See
19
+ # @option options [Integer] :nargs The number of arguments to accept. See
20
20
  # +:h command-nargs+.
21
21
  # @option options [String, Boolean] :range The range argument.
22
22
  # See +:h command-range+.
23
- # @option options [Fixnum] :count The default count argument.
23
+ # @option options [Integer] :count The default count argument.
24
24
  # See +:h command-count+.
25
25
  # @option options [Boolean] :bang Whether the command can take a +!+
26
26
  # modifier. See +:h command-bang+.
@@ -68,9 +68,19 @@ module Neovim
68
68
 
69
69
  private
70
70
 
71
- # Directly define a synchronous RPC call without a namespace. This is
72
- # used for exposing legacy ruby provider calls, and not meant to be used
73
- # publicly in plugin definitions.
71
+ # Register a setup block to run once before the host starts. The block
72
+ # should expect to receive a single argument, a +Neovim::Client+.
73
+ #
74
+ # This is used for bootstrapping the legacy ruby provider, and not meant
75
+ # to be used publicly in plugin definitions.
76
+ def setup(&block)
77
+ @plugin.setup_blocks << block
78
+ end
79
+
80
+ # Directly define a synchronous RPC call without a namespace.
81
+ #
82
+ # This is used for exposing legacy ruby provider calls, and not meant to
83
+ # be used publicly in plugin definitions.
74
84
  def rpc(name, &block)
75
85
  @plugin.handlers.push(Handler.unqualified(name, block))
76
86
  end
@@ -18,6 +18,7 @@ module Neovim
18
18
  __define_ruby_execute(plug)
19
19
  __define_ruby_execute_file(plug)
20
20
  __define_ruby_do_range(plug)
21
+ __define_ruby_chdir(plug)
21
22
  end
22
23
  end
23
24
 
@@ -71,11 +72,27 @@ module Neovim
71
72
  end
72
73
  private_class_method :__define_ruby_do_range
73
74
 
75
+ def self.__define_ruby_chdir(plug)
76
+ plug.__send__(:setup) do |client|
77
+ cid = client.channel_id
78
+ client.command("au DirChanged * call rpcrequest(#{cid}, 'ruby_chdir', v:event)")
79
+ end
80
+
81
+ plug.__send__(:rpc, :ruby_chdir) do |nvim, event|
82
+ Dir.chdir(event.fetch("cwd"))
83
+ end
84
+ end
85
+ private_class_method :__define_ruby_chdir
86
+
74
87
  def self.__wrap_client(client)
75
88
  __with_globals(client) do
76
89
  __with_vim_constant(client) do
77
90
  __with_redirect_streams(client) do
78
- yield
91
+ begin
92
+ yield
93
+ rescue SyntaxError => e
94
+ client.err_write(e.message)
95
+ end
79
96
  end
80
97
  end
81
98
  end
@@ -11,13 +11,13 @@ module Neovim
11
11
 
12
12
  # Connect to a TCP socket.
13
13
  def self.tcp(host, port)
14
- socket = TCPSocket.new(host, port)
14
+ socket = Socket.tcp(host, port)
15
15
  new(socket)
16
16
  end
17
17
 
18
18
  # Connect to a UNIX domain socket.
19
19
  def self.unix(path)
20
- socket = UNIXSocket.new(path)
20
+ socket = Socket.unix(path)
21
21
  new(socket)
22
22
  end
23
23
 
@@ -5,15 +5,6 @@ module Neovim
5
5
 
6
6
  # The following methods are dynamically generated.
7
7
  =begin
8
- @method get_windows
9
- Send the +tabpage_get_windows+ RPC to +nvim+
10
- @return [Array<Window>]
11
-
12
- @method get_var(name)
13
- Send the +tabpage_get_var+ RPC to +nvim+
14
- @param [String] name
15
- @return [Object]
16
-
17
8
  @method set_var(name, value)
18
9
  Send the +tabpage_set_var+ RPC to +nvim+
19
10
  @param [String] name
@@ -25,6 +16,15 @@ module Neovim
25
16
  @param [String] name
26
17
  @return [Object]
27
18
 
19
+ @method get_windows
20
+ Send the +tabpage_get_windows+ RPC to +nvim+
21
+ @return [Array<Window>]
22
+
23
+ @method get_var(name)
24
+ Send the +tabpage_get_var+ RPC to +nvim+
25
+ @param [String] name
26
+ @return [Object]
27
+
28
28
  @method get_window
29
29
  Send the +tabpage_get_window+ RPC to +nvim+
30
30
  @return [Window]
@@ -1,3 +1,3 @@
1
1
  module Neovim
2
- VERSION = Gem::Version.new("0.3.1")
2
+ VERSION = Gem::Version.new("0.3.2")
3
3
  end
data/lib/neovim/window.rb CHANGED
@@ -11,15 +11,15 @@ module Neovim
11
11
 
12
12
  # Get the height of the window
13
13
  #
14
- # @return [Fixnum]
14
+ # @return [Integer]
15
15
  def height
16
16
  get_height
17
17
  end
18
18
 
19
19
  # Set the height of the window
20
20
  #
21
- # @param height [Fixnum]
22
- # @return [Fixnum]
21
+ # @param height [Integer]
22
+ # @return [Integer]
23
23
  def height=(height)
24
24
  set_height(height)
25
25
  height
@@ -27,15 +27,15 @@ module Neovim
27
27
 
28
28
  # Get the width of the window
29
29
  #
30
- # @return [Fixnum]
30
+ # @return [Integer]
31
31
  def width
32
32
  get_width
33
33
  end
34
34
 
35
35
  # Set the width of the window
36
36
  #
37
- # @param width [Fixnum]
38
- # @return [Fixnum]
37
+ # @param width [Integer]
38
+ # @return [Integer]
39
39
  def width=(width)
40
40
  set_width(width)
41
41
  width
@@ -43,15 +43,15 @@ module Neovim
43
43
 
44
44
  # Get the cursor coordinates
45
45
  #
46
- # @return [Array(Fixnum, Fixnum)]
46
+ # @return [Array(Integer, Integer)]
47
47
  def cursor
48
48
  get_cursor
49
49
  end
50
50
 
51
51
  # Set the cursor coodinates
52
52
  #
53
- # @param coords [Array(Fixnum, Fixnum)]
54
- # @return [Array(Fixnum, Fixnum)]
53
+ # @param coords [Array(Integer, Integer)]
54
+ # @return [Array(Integer, Integer)]
55
55
  def cursor=(coords)
56
56
  _x, _y = coords
57
57
  x = [_x, 1].max
@@ -61,35 +61,46 @@ module Neovim
61
61
 
62
62
  # The following methods are dynamically generated.
63
63
  =begin
64
+ @method set_var(name, value)
65
+ Send the +window_set_var+ RPC to +nvim+
66
+ @param [String] name
67
+ @param [Object] value
68
+ @return [Object]
69
+
70
+ @method del_var(name)
71
+ Send the +window_del_var+ RPC to +nvim+
72
+ @param [String] name
73
+ @return [Object]
74
+
64
75
  @method get_buffer
65
76
  Send the +window_get_buffer+ RPC to +nvim+
66
77
  @return [Buffer]
67
78
 
68
79
  @method get_cursor
69
80
  Send the +window_get_cursor+ RPC to +nvim+
70
- @return [Array<Fixnum>]
81
+ @return [Array<Integer>]
71
82
 
72
83
  @method set_cursor(pos)
73
84
  Send the +window_set_cursor+ RPC to +nvim+
74
- @param [Array<Fixnum>] pos
85
+ @param [Array<Integer>] pos
75
86
  @return [void]
76
87
 
77
88
  @method get_height
78
89
  Send the +window_get_height+ RPC to +nvim+
79
- @return [Fixnum]
90
+ @return [Integer]
80
91
 
81
92
  @method set_height(height)
82
93
  Send the +window_set_height+ RPC to +nvim+
83
- @param [Fixnum] height
94
+ @param [Integer] height
84
95
  @return [void]
85
96
 
86
97
  @method get_width
87
98
  Send the +window_get_width+ RPC to +nvim+
88
- @return [Fixnum]
99
+ @return [Integer]
89
100
 
90
101
  @method set_width(width)
91
102
  Send the +window_set_width+ RPC to +nvim+
92
- @param [Fixnum] width
103
+ @param [Integer] width
93
104
  @return [void]
94
105
 
95
106
  @method get_var(name)
@@ -97,17 +108,6 @@ module Neovim
97
108
  @param [String] name
98
109
  @return [Object]
99
110
 
100
- @method set_var(name, value)
101
- Send the +window_set_var+ RPC to +nvim+
102
- @param [String] name
103
- @param [Object] value
104
- @return [Object]
105
-
106
- @method del_var(name)
107
- Send the +window_del_var+ RPC to +nvim+
108
- @param [String] name
109
- @return [Object]
110
-
111
111
  @method get_option(name)
112
112
  Send the +window_get_option+ RPC to +nvim+
113
113
  @param [String] name
@@ -121,7 +121,7 @@ module Neovim
121
121
 
122
122
  @method get_position
123
123
  Send the +window_get_position+ RPC to +nvim+
124
- @return [Array<Fixnum>]
124
+ @return [Array<Integer>]
125
125
 
126
126
  @method get_tabpage
127
127
  Send the +window_get_tabpage+ RPC to +nvim+
data/script/dump_api ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift File.expand_path("../../lib", __FILE__)
4
+
5
+ require "neovim"
6
+ require "pp"
7
+
8
+ nvim_exe = ENV.fetch("NVIM_EXECUTABLE", "nvim")
9
+ session = Neovim::Session.child([nvim_exe, "-u", "NONE", "-n"])
10
+ pp session.request(:vim_get_api_info)
data/script/generate_docs CHANGED
@@ -9,7 +9,9 @@ vim_docs = []
9
9
  buffer_docs = []
10
10
  window_docs = []
11
11
  tabpage_docs = []
12
- session = Neovim::Session.child(%w(nvim -u NONE -n))
12
+ nvim_exe = ENV.fetch("NVIM_EXECUTABLE", "nvim")
13
+
14
+ session = Neovim::Session.child([nvim_exe, "-u", "NONE", "-n"])
13
15
  vim_defs = Neovim::Client.instance_methods(false)
14
16
  buffer_defs = Neovim::Buffer.instance_methods(false)
15
17
  tabpage_defs = Neovim::Tabpage.instance_methods(false)
@@ -42,7 +44,6 @@ session.request(:vim_get_api_info)[1]["functions"].each do |func|
42
44
  return_doc = " @return [#{return_type}]\n"
43
45
  method_doc = [method_decl, method_desc, *param_docs, return_doc].join("\n")
44
46
  method_doc.gsub!(/ArrayOf\((\w+)[^)]*\)/, 'Array<\1>')
45
- method_doc.gsub!(/Integer/, "Fixnum")
46
47
 
47
48
  case prefix
48
49
  when "vim"
@@ -55,6 +55,32 @@ RSpec.describe "ruby_provider" do
55
55
 
56
56
  expect(nvim.get_var("foo")).to be(123)
57
57
  end
58
+
59
+ it "handles explicit directory changes" do
60
+ expect {
61
+ nvim.command("cd /")
62
+ }.to change {
63
+ nvim.command_output("call rpcrequest(host, 'ruby_execute', 'puts Dir.pwd')").strip
64
+ }.from(Dir.pwd).to("/")
65
+ end
66
+
67
+ it "handles implicit directory changes" do
68
+ expect {
69
+ nvim.command("split | lcd / | wincmd p")
70
+ }.not_to change {
71
+ nvim.command_output("call rpcrequest(host, 'ruby_execute', 'puts Dir.pwd')").strip
72
+ }.from(Dir.pwd)
73
+ end
74
+
75
+ it "handles malformed ruby" do
76
+ expect {
77
+ nvim.eval("rpcrequest(host, 'ruby_execute', 'puts[')")
78
+ }.to raise_error(ArgumentError)
79
+
80
+ expect {
81
+ nvim.eval("rpcrequest(host, 'ruby_execute', 'puts \"12\"')")
82
+ }.not_to raise_error
83
+ end
58
84
  end
59
85
 
60
86
  describe "ruby_execute_file" do
@@ -124,6 +150,40 @@ RSpec.describe "ruby_provider" do
124
150
  nvim.eval("rpcrequest(host, 'ruby_execute_file', '#{script_path}')")
125
151
  expect(nvim.get_var("foo")).to be(2)
126
152
  end
153
+
154
+ it "handles explicit directory changes" do
155
+ File.write(script_path, "puts Dir.pwd")
156
+
157
+ expect {
158
+ nvim.command("cd /")
159
+ }.to change {
160
+ nvim.command_output("call rpcrequest(host, 'ruby_execute_file', '#{script_path}')").strip
161
+ }.from(Dir.pwd).to("/")
162
+ end
163
+
164
+ it "handles implicit directory changes" do
165
+ File.write(script_path, "puts Dir.pwd")
166
+
167
+ expect {
168
+ nvim.command("split | lcd / | wincmd p")
169
+ }.not_to change {
170
+ nvim.command_output("call rpcrequest(host, 'ruby_execute_file', '#{script_path}')").strip
171
+ }.from(Dir.pwd)
172
+ end
173
+
174
+ it "handles malformed ruby" do
175
+ File.write(script_path, "puts[")
176
+
177
+ expect {
178
+ nvim.eval("rpcrequest(host, 'ruby_execute_file', '#{script_path}')")
179
+ }.to raise_error(ArgumentError)
180
+
181
+ File.write(script_path, "12")
182
+
183
+ expect {
184
+ nvim.eval("rpcrequest(host, 'ruby_execute_file', '#{script_path}')")
185
+ }.not_to raise_error
186
+ end
127
187
  end
128
188
 
129
189
  describe "ruby_do_range" do
@@ -144,5 +204,17 @@ RSpec.describe "ruby_provider" do
144
204
  nvim.eval("rpcrequest(host, 'ruby_do_range', 1, 6000, '$_.succ!')")
145
205
  }.to change { nvim.current.buffer.lines.to_a }.to(ys)
146
206
  end
207
+
208
+ it "handles malformed ruby" do
209
+ nvim.current.buffer.lines = ["a", "b"]
210
+
211
+ expect {
212
+ nvim.eval("rpcrequest(host, 'ruby_do_range', 1, 1, 'puts[')")
213
+ }.to raise_error(ArgumentError)
214
+
215
+ expect {
216
+ nvim.eval("rpcrequest(host, 'ruby_do_range', 1, 1, 'puts')")
217
+ }.not_to raise_error
218
+ end
147
219
  end
148
220
  end
data/spec/helper.rb CHANGED
@@ -8,6 +8,7 @@ end
8
8
  require "fileutils"
9
9
  require "neovim"
10
10
  require "pry"
11
+ require "shellwords"
11
12
  require "stringio"
12
13
  require "timeout"
13
14
 
@@ -21,7 +22,7 @@ module Support
21
22
  end
22
23
 
23
24
  def self.tcp_port
24
- server = TCPServer.new("0.0.0.0", 0)
25
+ server = TCPServer.new("127.0.0.1", 0)
25
26
 
26
27
  begin
27
28
  server.addr[1]
@@ -43,12 +44,13 @@ module Support
43
44
  end
44
45
 
45
46
  def self.child_argv
46
- ["nvim", "--headless", "-i", "NONE", "-u", "NONE", "-n"]
47
+ nvim_exe = ENV.fetch("NVIM_EXECUTABLE", "nvim")
48
+ [nvim_exe, "--headless", "-i", "NONE", "-u", "NONE", "-n"]
47
49
  end
48
50
  end
49
51
 
50
- unless system("#{Support.child_argv.join(" ")} +q")
51
- warn("Can't find `nvim` executable. See installation instructions:")
52
+ unless system("#{Support.child_argv.shelljoin} --version | grep -q NVIM")
53
+ warn("Failed to load nvim. See installation instructions:")
52
54
  warn("https://github.com/neovim/neovim/wiki/Installing-Neovim")
53
55
  exit(1)
54
56
  end
@@ -74,10 +76,14 @@ RSpec.configure do |config|
74
76
 
75
77
  config.around(:example, :silence_logging) do |spec|
76
78
  old_logger = Neovim.logger
79
+ log_target = StringIO.new
80
+ Neovim.logger = Logger.new(log_target)
77
81
 
78
82
  begin
79
- Neovim.logger = Logger.new(StringIO.new)
80
83
  spec.run
84
+
85
+ expect(log_target.string).not_to be_empty,
86
+ ":silence_logging used but nothing logged"
81
87
  ensure
82
88
  Neovim.logger = old_logger
83
89
  end
@@ -69,12 +69,12 @@ module Neovim
69
69
 
70
70
  describe "#window=" do
71
71
  it "sets the current window from an integer" do
72
+ start_index = current.window.index
72
73
  client.command("vsp")
73
- expect(current.window.index).not_to eq(1)
74
74
 
75
75
  expect {
76
- current.window = 1
77
- }.to change { current.window.index }.to(1)
76
+ current.window = start_index
77
+ }.to change { current.window.index }.to(start_index)
78
78
  end
79
79
 
80
80
  it "sets the current window from a Window" do
@@ -75,6 +75,24 @@ module Neovim
75
75
  }.from(nil).to(kind_of(Proc))
76
76
  end
77
77
 
78
+ it "yields a client to the plugin setup blocks" do
79
+ yielded = []
80
+
81
+ plugin = Plugin.from_config_block("source") do |plug|
82
+ plug.__send__(:setup) do |client|
83
+ yielded << client
84
+ end
85
+
86
+ plug.__send__(:setup) do |_|
87
+ yielded << :other
88
+ end
89
+ end
90
+
91
+ expect {
92
+ host.register(plugin)
93
+ }.to change { yielded }.from([]).to([client, :other])
94
+ end
95
+
78
96
  it "doesn't add top-level RPCs to specs" do
79
97
  plugin = Plugin.from_config_block("source") do |plug|
80
98
  plug.__send__(:rpc, :Foo)
@@ -70,6 +70,24 @@ module Neovim
70
70
  )
71
71
  end
72
72
 
73
+ it "registers setup callbacks" do
74
+ yielded = []
75
+
76
+ plugin = Plugin.from_config_block("source") do |plug|
77
+ plug.__send__(:setup) do |client|
78
+ yielded << client
79
+ end
80
+
81
+ plug.__send__(:setup) do |_|
82
+ yielded << :other
83
+ end
84
+ end
85
+
86
+ expect {
87
+ plugin.setup(:client)
88
+ }.to change { yielded }.from([]).to([:client, :other])
89
+ end
90
+
73
91
  it "registers a top level RPC" do
74
92
  cmd_block = Proc.new {}
75
93
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: neovim
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Genco
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-10-04 00:00:00.000000000 Z
11
+ date: 2017-03-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: msgpack
@@ -124,6 +124,7 @@ files:
124
124
  - lib/neovim/version.rb
125
125
  - lib/neovim/window.rb
126
126
  - neovim.gemspec
127
+ - script/dump_api
127
128
  - script/generate_docs
128
129
  - script/j2mp
129
130
  - script/mp2j
@@ -171,7 +172,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
171
172
  version: '0'
172
173
  requirements: []
173
174
  rubyforge_project:
174
- rubygems_version: 2.4.5
175
+ rubygems_version: 2.6.8
175
176
  signing_key:
176
177
  specification_version: 4
177
178
  summary: A Ruby client for Neovim
@@ -200,4 +201,3 @@ test_files:
200
201
  - spec/neovim/session_spec.rb
201
202
  - spec/neovim/window_spec.rb
202
203
  - spec/neovim_spec.rb
203
- has_rdoc: