neovim 0.3.1 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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: