neovim 0.8.0 → 0.8.1
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 +4 -4
- data/.gitignore +1 -0
- data/.rubocop.yml +6 -0
- data/.travis.yml +3 -1
- data/CHANGELOG.md +5 -0
- data/README.md +1 -1
- data/appveyor.yml +3 -2
- data/lib/neovim.rb +12 -3
- data/lib/neovim/buffer.rb +29 -5
- data/lib/neovim/client.rb +14 -1
- data/lib/neovim/client_info.rb +46 -0
- data/lib/neovim/host.rb +3 -0
- data/lib/neovim/plugin.rb +7 -2
- data/lib/neovim/plugin/dsl.rb +6 -0
- data/lib/neovim/ruby_provider.rb +2 -0
- data/lib/neovim/tabpage.rb +1 -1
- data/lib/neovim/version.rb +1 -1
- data/lib/neovim/window.rb +6 -1
- data/spec/acceptance/client_info_spec.vim +42 -0
- data/spec/neovim/client_info_spec.rb +77 -0
- data/spec/neovim/connection_spec.rb +5 -3
- data/spec/neovim/host_spec.rb +14 -7
- data/spec/neovim_spec.rb +63 -33
- data/spec/support.rb +1 -0
- metadata +8 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fedda91f1ab06609df060e17b598655776a94fb60a7037fbdbeec1eebc24585d
|
4
|
+
data.tar.gz: 2e5a7ae9846c9b1375912cf129153f89ecadf2617b618267f6a44aed2c768843
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9c1238b3fb5ccb9595e81f872f1080114c63a01505f8f12a3d230cc3c3f039e8d89f3a69fb38df237e8420f732bb1627554c8b87b26a4e0eb98f59e1c3b17c5c
|
7
|
+
data.tar.gz: 7cf59362e19aa0ffbf44a1dd91fe62b7e822bf5c3dee5039adce141499139024fe7dbf0d6adaddb60cbe45144584662f1f23626d32bf16e9326d889ea402c39d
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
@@ -10,6 +10,9 @@ AllCops:
|
|
10
10
|
Layout/EndOfLine:
|
11
11
|
EnforcedStyle: lf
|
12
12
|
|
13
|
+
Layout/MultilineMethodCallIndentation:
|
14
|
+
EnforcedStyle: indented
|
15
|
+
|
13
16
|
Layout/SpaceAroundEqualsInParameterDefault:
|
14
17
|
EnforcedStyle: no_space
|
15
18
|
|
@@ -100,6 +103,9 @@ Style/GlobalVars:
|
|
100
103
|
- lib/neovim/ruby_provider/vim.rb
|
101
104
|
- spec/neovim/ruby_provider/vim_spec.rb
|
102
105
|
|
106
|
+
Style/MultilineTernaryOperator:
|
107
|
+
Enabled: false
|
108
|
+
|
103
109
|
Style/ParallelAssignment:
|
104
110
|
Enabled: false
|
105
111
|
|
data/.travis.yml
CHANGED
@@ -11,12 +11,14 @@ rvm:
|
|
11
11
|
- 2.3
|
12
12
|
- 2.4
|
13
13
|
- 2.5
|
14
|
+
- 2.6
|
14
15
|
- ruby-head
|
15
16
|
|
16
17
|
before_install:
|
17
18
|
- eval "$(curl --connect-timeout 30 --retry 3 -Ss https://raw.githubusercontent.com/neovim/bot-ci/master/scripts/travis-setup.sh) nightly-x64"
|
18
19
|
- gem update --system --conservative || (gem install "rubygems-update:~>2.7" --no-document && update_rubygems)
|
19
|
-
- gem install --remote bundler
|
20
|
+
- gem install --remote bundler || gem install --remote bundler -v "1.17.3"
|
21
|
+
- gem install --user-install executable-hooks
|
20
22
|
- bundle --version
|
21
23
|
|
22
24
|
env: NVIM_RUBY_LOG_LEVEL=DEBUG NVIM_RUBY_LOG_FILE=ci.log
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# Neovim Ruby
|
2
2
|
|
3
3
|
[](https://travis-ci.org/neovim/neovim-ruby)
|
4
|
-
[](https://ci.appveyor.com/project/alexgenco/neovim-ruby)
|
5
5
|
[](https://badge.fury.io/rb/neovim)
|
6
6
|
[](http://inch-ci.org/github/neovim/neovim-ruby)
|
7
7
|
|
data/appveyor.yml
CHANGED
@@ -2,6 +2,7 @@ version: '{build}'
|
|
2
2
|
|
3
3
|
environment:
|
4
4
|
matrix:
|
5
|
+
- RUBY_VERSION: 26
|
5
6
|
- RUBY_VERSION: 25
|
6
7
|
- RUBY_VERSION: 24
|
7
8
|
- RUBY_VERSION: 23
|
@@ -15,7 +16,7 @@ install:
|
|
15
16
|
- set PATH=C:\Ruby%RUBY_VERSION%\bin;C:\tools\neovim\Neovim\bin;%PATH%
|
16
17
|
- set NVIM_RUBY_LOG_LEVEL=DEBUG
|
17
18
|
- set NVIM_RUBY_LOG_FILE=%cd%\ci.log
|
18
|
-
- choco install neovim --pre -fy --ignore-dependencies
|
19
|
+
- choco install neovim --pre -fy --ignore-dependencies --ignore-checksums
|
19
20
|
- bundle install --path vendor/bundle
|
20
21
|
|
21
22
|
build: off
|
@@ -31,4 +32,4 @@ before_test:
|
|
31
32
|
- nvim -v
|
32
33
|
|
33
34
|
test_script:
|
34
|
-
- bundle exec rake
|
35
|
+
- bundle exec rake spec:functional spec:acceptance
|
data/lib/neovim.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require "neovim/client"
|
2
|
+
require "neovim/client_info"
|
2
3
|
require "neovim/session"
|
3
4
|
require "neovim/event_loop"
|
4
5
|
require "neovim/executable"
|
@@ -62,7 +63,7 @@ module Neovim
|
|
62
63
|
# @return [Client]
|
63
64
|
# @see EventLoop.tcp
|
64
65
|
def self.attach_tcp(host, port)
|
65
|
-
|
66
|
+
attach(EventLoop.tcp(host, port))
|
66
67
|
end
|
67
68
|
|
68
69
|
# Connect to a running +nvim+ instance over a UNIX domain socket.
|
@@ -71,7 +72,7 @@ module Neovim
|
|
71
72
|
# @return [Client]
|
72
73
|
# @see EventLoop.unix
|
73
74
|
def self.attach_unix(socket_path)
|
74
|
-
|
75
|
+
attach(EventLoop.unix(socket_path))
|
75
76
|
end
|
76
77
|
|
77
78
|
# Spawn and connect to a child +nvim+ process.
|
@@ -80,7 +81,7 @@ module Neovim
|
|
80
81
|
# @return [Client]
|
81
82
|
# @see EventLoop.child
|
82
83
|
def self.attach_child(argv=[executable.path])
|
83
|
-
|
84
|
+
attach(EventLoop.child(argv))
|
84
85
|
end
|
85
86
|
|
86
87
|
# Placeholder method for exposing the remote plugin DSL. This gets
|
@@ -116,4 +117,12 @@ module Neovim
|
|
116
117
|
def self.logger
|
117
118
|
Logging.logger
|
118
119
|
end
|
120
|
+
|
121
|
+
# @api private
|
122
|
+
def self.attach(event_loop)
|
123
|
+
Client.from_event_loop(event_loop).tap do |client|
|
124
|
+
client.session.notify(:nvim_set_client_info, *ClientInfo.for_client.to_args)
|
125
|
+
end
|
126
|
+
end
|
127
|
+
private_class_method :attach
|
119
128
|
end
|
data/lib/neovim/buffer.rb
CHANGED
@@ -4,7 +4,7 @@ require "neovim/line_range"
|
|
4
4
|
module Neovim
|
5
5
|
# Class representing an +nvim+ buffer.
|
6
6
|
#
|
7
|
-
# The methods documented here were generated using NVIM v0.3.
|
7
|
+
# The methods documented here were generated using NVIM v0.3.7
|
8
8
|
class Buffer < RemoteObject
|
9
9
|
attr_reader :lines
|
10
10
|
|
@@ -164,6 +164,11 @@ module Neovim
|
|
164
164
|
@param [Array<String>] replacement
|
165
165
|
@return [void]
|
166
166
|
|
167
|
+
@method get_offset(index)
|
168
|
+
See +:h nvim_buf_get_offset()+
|
169
|
+
@param [Integer] index
|
170
|
+
@return [Integer]
|
171
|
+
|
167
172
|
@method get_var(name)
|
168
173
|
See +:h nvim_buf_get_var()+
|
169
174
|
@param [String] name
|
@@ -218,6 +223,10 @@ module Neovim
|
|
218
223
|
@param [String] name
|
219
224
|
@return [void]
|
220
225
|
|
226
|
+
@method is_loaded
|
227
|
+
See +:h nvim_buf_is_loaded()+
|
228
|
+
@return [Boolean]
|
229
|
+
|
221
230
|
@method is_valid
|
222
231
|
See +:h nvim_buf_is_valid()+
|
223
232
|
@return [Boolean]
|
@@ -227,22 +236,37 @@ module Neovim
|
|
227
236
|
@param [String] name
|
228
237
|
@return [Array<Integer>]
|
229
238
|
|
230
|
-
@method add_highlight(
|
239
|
+
@method add_highlight(ns_id, hl_group, line, col_start, col_end)
|
231
240
|
See +:h nvim_buf_add_highlight()+
|
232
|
-
@param [Integer]
|
241
|
+
@param [Integer] ns_id
|
233
242
|
@param [String] hl_group
|
234
243
|
@param [Integer] line
|
235
244
|
@param [Integer] col_start
|
236
245
|
@param [Integer] col_end
|
237
246
|
@return [Integer]
|
238
247
|
|
239
|
-
@method
|
248
|
+
@method clear_namespace(ns_id, line_start, line_end)
|
249
|
+
See +:h nvim_buf_clear_namespace()+
|
250
|
+
@param [Integer] ns_id
|
251
|
+
@param [Integer] line_start
|
252
|
+
@param [Integer] line_end
|
253
|
+
@return [void]
|
254
|
+
|
255
|
+
@method clear_highlight(ns_id, line_start, line_end)
|
240
256
|
See +:h nvim_buf_clear_highlight()+
|
241
|
-
@param [Integer]
|
257
|
+
@param [Integer] ns_id
|
242
258
|
@param [Integer] line_start
|
243
259
|
@param [Integer] line_end
|
244
260
|
@return [void]
|
245
261
|
|
262
|
+
@method set_virtual_text(ns_id, line, chunks, opts)
|
263
|
+
See +:h nvim_buf_set_virtual_text()+
|
264
|
+
@param [Integer] ns_id
|
265
|
+
@param [Integer] line
|
266
|
+
@param [Array] chunks
|
267
|
+
@param [Hash] opts
|
268
|
+
@return [Integer]
|
269
|
+
|
246
270
|
=end
|
247
271
|
end
|
248
272
|
end
|
data/lib/neovim/client.rb
CHANGED
@@ -9,7 +9,7 @@ module Neovim
|
|
9
9
|
# +RemoteObject+ subclasses (i.e. +Buffer+, +Window+, or +Tabpage+),
|
10
10
|
# which similarly have dynamically generated interfaces.
|
11
11
|
#
|
12
|
-
# The methods documented here were generated using NVIM v0.3.
|
12
|
+
# The methods documented here were generated using NVIM v0.3.7
|
13
13
|
#
|
14
14
|
# @see Buffer
|
15
15
|
# @see Window
|
@@ -29,6 +29,10 @@ module Neovim
|
|
29
29
|
@api = api
|
30
30
|
end
|
31
31
|
|
32
|
+
def channel_id
|
33
|
+
@api.channel_id
|
34
|
+
end
|
35
|
+
|
32
36
|
# Intercept method calls and delegate to appropriate RPC methods.
|
33
37
|
def method_missing(method_name, *args)
|
34
38
|
if (func = @api.function_for_object_method(self, method_name))
|
@@ -309,6 +313,15 @@ module Neovim
|
|
309
313
|
@param [Tabpage] tabpage
|
310
314
|
@return [void]
|
311
315
|
|
316
|
+
@method create_namespace(name)
|
317
|
+
See +:h nvim_create_namespace()+
|
318
|
+
@param [String] name
|
319
|
+
@return [Integer]
|
320
|
+
|
321
|
+
@method get_namespaces
|
322
|
+
See +:h nvim_get_namespaces()+
|
323
|
+
@return [Hash]
|
324
|
+
|
312
325
|
@method subscribe(event)
|
313
326
|
See +:h nvim_subscribe()+
|
314
327
|
@param [String] event
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require "neovim/version"
|
2
|
+
|
3
|
+
module Neovim
|
4
|
+
# @api private
|
5
|
+
class ClientInfo
|
6
|
+
HOST_METHOD_SPEC = {poll: {}, specs: {nargs: 1}}.freeze
|
7
|
+
|
8
|
+
ATTRIBUTES = {
|
9
|
+
website: "https://github.com/neovim/neovim-ruby",
|
10
|
+
license: "MIT"
|
11
|
+
}.freeze
|
12
|
+
|
13
|
+
def self.for_host(host)
|
14
|
+
name = host.plugins.map(&:script_host?) == [true] ?
|
15
|
+
"ruby-script-host" :
|
16
|
+
"ruby-rplugin-host"
|
17
|
+
|
18
|
+
new(name, :host, HOST_METHOD_SPEC, ATTRIBUTES)
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.for_client
|
22
|
+
new("ruby-client", :remote, {}, ATTRIBUTES)
|
23
|
+
end
|
24
|
+
|
25
|
+
def initialize(name, type, method_spec, attributes)
|
26
|
+
@name = name
|
27
|
+
@type = type
|
28
|
+
@method_spec = method_spec
|
29
|
+
@attributes = attributes
|
30
|
+
|
31
|
+
@version = ["major", "minor", "patch"]
|
32
|
+
.zip(Neovim::VERSION.segments)
|
33
|
+
.to_h
|
34
|
+
end
|
35
|
+
|
36
|
+
def to_args
|
37
|
+
[
|
38
|
+
@name,
|
39
|
+
@version,
|
40
|
+
@type,
|
41
|
+
@method_spec,
|
42
|
+
@attributes
|
43
|
+
]
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/lib/neovim/host.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require "neovim"
|
2
2
|
require "neovim/client"
|
3
|
+
require "neovim/client_info"
|
3
4
|
require "neovim/event_loop"
|
4
5
|
require "neovim/host/loader"
|
5
6
|
|
@@ -78,6 +79,8 @@ module Neovim
|
|
78
79
|
|
79
80
|
def initialize_client(request_id)
|
80
81
|
@session.request_id = request_id
|
82
|
+
@session.notify(:nvim_set_client_info, *ClientInfo.for_host(self).to_args)
|
83
|
+
|
81
84
|
@client = Client.from_event_loop(@event_loop, @session)
|
82
85
|
end
|
83
86
|
|
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, :setup_blocks
|
6
|
+
attr_accessor :handlers, :setup_blocks, :script_host
|
7
7
|
attr_reader :source
|
8
8
|
|
9
9
|
def self.from_config_block(source)
|
@@ -13,9 +13,10 @@ module Neovim
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def initialize(source)
|
16
|
-
@handlers = []
|
17
16
|
@source = source
|
17
|
+
@handlers = []
|
18
18
|
@setup_blocks = []
|
19
|
+
@script_host = false
|
19
20
|
end
|
20
21
|
|
21
22
|
def specs
|
@@ -27,5 +28,9 @@ module Neovim
|
|
27
28
|
def setup(client)
|
28
29
|
@setup_blocks.each { |bl| bl.call(client) }
|
29
30
|
end
|
31
|
+
|
32
|
+
def script_host?
|
33
|
+
!!@script_host
|
34
|
+
end
|
30
35
|
end
|
31
36
|
end
|
data/lib/neovim/plugin/dsl.rb
CHANGED
@@ -68,6 +68,12 @@ module Neovim
|
|
68
68
|
|
69
69
|
private
|
70
70
|
|
71
|
+
# Mark this plugin as the Ruby script host started by nvim. Should only
|
72
|
+
# be used in +Neovim::RubyProvider+.
|
73
|
+
def script_host!
|
74
|
+
@plugin.script_host = true
|
75
|
+
end
|
76
|
+
|
71
77
|
# Register a setup block to run once before the host starts. The block
|
72
78
|
# should expect to receive a single argument, a +Neovim::Client+.
|
73
79
|
#
|
data/lib/neovim/ruby_provider.rb
CHANGED
data/lib/neovim/tabpage.rb
CHANGED
@@ -3,7 +3,7 @@ require "neovim/remote_object"
|
|
3
3
|
module Neovim
|
4
4
|
# Class representing an +nvim+ tabpage.
|
5
5
|
#
|
6
|
-
# The methods documented here were generated using NVIM v0.3.
|
6
|
+
# The methods documented here were generated using NVIM v0.3.7
|
7
7
|
class Tabpage < RemoteObject
|
8
8
|
# The following methods are dynamically generated.
|
9
9
|
=begin
|
data/lib/neovim/version.rb
CHANGED
data/lib/neovim/window.rb
CHANGED
@@ -3,7 +3,7 @@ require "neovim/remote_object"
|
|
3
3
|
module Neovim
|
4
4
|
# Class representing an +nvim+ window.
|
5
5
|
#
|
6
|
-
# The methods documented here were generated using NVIM v0.3.
|
6
|
+
# The methods documented here were generated using NVIM v0.3.7
|
7
7
|
class Window < RemoteObject
|
8
8
|
# Get the buffer displayed in the window
|
9
9
|
#
|
@@ -68,6 +68,11 @@ module Neovim
|
|
68
68
|
See +:h nvim_win_get_buf()+
|
69
69
|
@return [Buffer]
|
70
70
|
|
71
|
+
@method set_buf(buffer)
|
72
|
+
See +:h nvim_win_set_buf()+
|
73
|
+
@param [Buffer] buffer
|
74
|
+
@return [void]
|
75
|
+
|
71
76
|
@method get_cursor
|
72
77
|
See +:h nvim_win_get_cursor()+
|
73
78
|
@return [Array<Integer>]
|
@@ -0,0 +1,42 @@
|
|
1
|
+
let s:suite = themis#suite("Client info")
|
2
|
+
let s:expect = themis#helper("expect")
|
3
|
+
|
4
|
+
function! s:suite.before_each() abort
|
5
|
+
call RPluginFunctionArgs(1, 2)
|
6
|
+
|
7
|
+
let s:client_chans = map(
|
8
|
+
\ filter(nvim_list_chans(), "has_key(v:val, 'client')"),
|
9
|
+
\ "v:val.client")
|
10
|
+
endfunction
|
11
|
+
|
12
|
+
function! s:suite.get_script_host_client_info() abort
|
13
|
+
let client_info = s:client_chans[1]
|
14
|
+
|
15
|
+
call s:expect(sort(keys(client_info))).to_equal(
|
16
|
+
\ ["attributes", "methods", "name", "type", "version"])
|
17
|
+
|
18
|
+
call s:expect(client_info.attributes).to_be_dict()
|
19
|
+
call s:expect(client_info.methods).to_equal({"specs": {"nargs": 1}, "poll": {}})
|
20
|
+
call s:expect(client_info.name).to_equal("ruby-script-host")
|
21
|
+
call s:expect(client_info.type).to_equal("host")
|
22
|
+
|
23
|
+
call s:expect(client_info.version.major).to_be_number()
|
24
|
+
call s:expect(client_info.version.minor).to_be_number()
|
25
|
+
call s:expect(client_info.version.patch).to_be_number()
|
26
|
+
endfunction
|
27
|
+
|
28
|
+
function! s:suite.get_rplugin_client_info() abort
|
29
|
+
let client_info = s:client_chans[0]
|
30
|
+
|
31
|
+
call s:expect(sort(keys(client_info))).to_equal(
|
32
|
+
\ ["attributes", "methods", "name", "type", "version"])
|
33
|
+
|
34
|
+
call s:expect(client_info.attributes).to_be_dict()
|
35
|
+
call s:expect(client_info.methods).to_equal({"specs": {"nargs": 1}, "poll": {}})
|
36
|
+
call s:expect(client_info.name).to_equal("ruby-rplugin-host")
|
37
|
+
call s:expect(client_info.type).to_equal("host")
|
38
|
+
|
39
|
+
call s:expect(client_info.version.major).to_be_number()
|
40
|
+
call s:expect(client_info.version.minor).to_be_number()
|
41
|
+
call s:expect(client_info.version.patch).to_be_number()
|
42
|
+
endfunction
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require "neovim/client_info"
|
2
|
+
require "neovim/host"
|
3
|
+
require "neovim/plugin"
|
4
|
+
|
5
|
+
module Neovim
|
6
|
+
RSpec.describe ClientInfo do
|
7
|
+
describe "#to_args" do
|
8
|
+
context ".for_host" do
|
9
|
+
it "returns script-host info" do
|
10
|
+
plugin = double(Plugin, script_host?: true)
|
11
|
+
host = double(Host, plugins: [plugin])
|
12
|
+
info = ClientInfo.for_host(host)
|
13
|
+
|
14
|
+
expect(info.to_args).to match(
|
15
|
+
[
|
16
|
+
"ruby-script-host",
|
17
|
+
{
|
18
|
+
"major" => duck_type(:to_int),
|
19
|
+
"minor" => duck_type(:to_int),
|
20
|
+
"patch" => duck_type(:to_int)
|
21
|
+
},
|
22
|
+
:host,
|
23
|
+
{
|
24
|
+
poll: {},
|
25
|
+
specs: {nargs: 1}
|
26
|
+
},
|
27
|
+
duck_type(:to_hash)
|
28
|
+
]
|
29
|
+
)
|
30
|
+
end
|
31
|
+
|
32
|
+
it "returns rplugin info" do
|
33
|
+
plugin = double(Plugin, script_host?: false)
|
34
|
+
host = double(Host, plugins: [plugin])
|
35
|
+
info = ClientInfo.for_host(host)
|
36
|
+
|
37
|
+
expect(info.to_args).to match(
|
38
|
+
[
|
39
|
+
"ruby-rplugin-host",
|
40
|
+
{
|
41
|
+
"major" => duck_type(:to_int),
|
42
|
+
"minor" => duck_type(:to_int),
|
43
|
+
"patch" => duck_type(:to_int)
|
44
|
+
},
|
45
|
+
:host,
|
46
|
+
{
|
47
|
+
poll: {},
|
48
|
+
specs: {nargs: 1}
|
49
|
+
},
|
50
|
+
duck_type(:to_hash)
|
51
|
+
]
|
52
|
+
)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
context ".for_client" do
|
57
|
+
it "returns remote client info" do
|
58
|
+
info = ClientInfo.for_client
|
59
|
+
|
60
|
+
expect(info.to_args).to match(
|
61
|
+
[
|
62
|
+
"ruby-client",
|
63
|
+
{
|
64
|
+
"major" => duck_type(:to_int),
|
65
|
+
"minor" => duck_type(:to_int),
|
66
|
+
"patch" => duck_type(:to_int)
|
67
|
+
},
|
68
|
+
:remote,
|
69
|
+
{},
|
70
|
+
duck_type(:to_hash)
|
71
|
+
]
|
72
|
+
)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -19,9 +19,11 @@ module Neovim
|
|
19
19
|
rd, wr = IO.pipe
|
20
20
|
connection = Connection.new(nil_io, wr).write("some data")
|
21
21
|
|
22
|
-
expect {
|
23
|
-
|
24
|
-
|
22
|
+
expect { rd.read_nonblock(16) }.to raise_error(IO::WaitReadable)
|
23
|
+
|
24
|
+
connection.flush
|
25
|
+
|
26
|
+
expect(rd.read_nonblock(16)).to eq(MessagePack.pack("some data"))
|
25
27
|
end
|
26
28
|
|
27
29
|
it "throws an exception when the file is closed" do
|
data/spec/neovim/host_spec.rb
CHANGED
@@ -47,16 +47,17 @@ module Neovim
|
|
47
47
|
end
|
48
48
|
|
49
49
|
context "poll" do
|
50
|
-
it "initializes a client and responds 'ok'" do
|
50
|
+
it "initializes a client, sets client info, and responds 'ok'" do
|
51
51
|
nvim_wr.write([0, 1, :poll, []]).flush
|
52
|
-
type, reqid, method = nvim_rd.read
|
53
52
|
|
54
|
-
expect(
|
55
|
-
|
56
|
-
|
53
|
+
expect(nvim_rd.read).to match([2, "nvim_set_client_info", duck_type(:to_ary)])
|
54
|
+
|
55
|
+
type, reqid, method = nvim_rd.read
|
56
|
+
expect([type, reqid, method]).to match([0, duck_type(:to_int), "nvim_get_api_info"])
|
57
57
|
|
58
58
|
api_info = [0, {"types" => {}, "functions" => {}}]
|
59
59
|
nvim_wr.write([1, reqid, nil, api_info]).flush
|
60
|
+
|
60
61
|
expect(nvim_rd.read).to eq([1, 1, nil, "ok"])
|
61
62
|
end
|
62
63
|
end
|
@@ -64,14 +65,20 @@ module Neovim
|
|
64
65
|
context "after poll" do
|
65
66
|
before do
|
66
67
|
nvim_wr.write([0, 1, :poll, []]).flush
|
67
|
-
|
68
|
+
|
69
|
+
expect(nvim_rd.read[1]).to eq("nvim_set_client_info")
|
70
|
+
|
71
|
+
_, reqid, method = nvim_rd.read
|
72
|
+
|
73
|
+
expect(method).to eq("nvim_get_api_info")
|
68
74
|
|
69
75
|
session = Session.new(EventLoop.child(Support.child_argv))
|
70
76
|
api_info = session.request(:nvim_get_api_info)
|
71
77
|
session.shutdown
|
72
78
|
|
73
79
|
nvim_wr.write([1, reqid, nil, api_info]).flush
|
74
|
-
|
80
|
+
|
81
|
+
expect(nvim_rd.read[3]).to eq("ok")
|
75
82
|
end
|
76
83
|
|
77
84
|
it "responds with specs to the 'specs' request" do
|
data/spec/neovim_spec.rb
CHANGED
@@ -1,24 +1,52 @@
|
|
1
1
|
require "helper"
|
2
2
|
|
3
3
|
RSpec.describe Neovim do
|
4
|
+
shared_context "attached client" do
|
5
|
+
it "establishes an RPC connection" do
|
6
|
+
expect(client.strwidth("hi")).to eq(2)
|
7
|
+
end
|
8
|
+
|
9
|
+
it "sets appropriate client info" do
|
10
|
+
chan_info = client.evaluate("nvim_get_chan_info(#{client.channel_id})")
|
11
|
+
|
12
|
+
expect(chan_info).to match(
|
13
|
+
"client" => {
|
14
|
+
"name" => "ruby-client",
|
15
|
+
"version" => {
|
16
|
+
"major" => duck_type(:to_int),
|
17
|
+
"minor" => duck_type(:to_int),
|
18
|
+
"patch" => duck_type(:to_int)
|
19
|
+
},
|
20
|
+
"type" => "remote",
|
21
|
+
"methods" => {},
|
22
|
+
"attributes" => duck_type(:to_hash)
|
23
|
+
},
|
24
|
+
"id" => duck_type(:to_int),
|
25
|
+
"mode" => "rpc",
|
26
|
+
"stream" => stream
|
27
|
+
)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
4
31
|
describe ".attach_tcp" do
|
5
|
-
|
6
|
-
port
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
rescue Errno::ECONNREFUSED
|
13
|
-
retry
|
32
|
+
include_context "attached client" do
|
33
|
+
let(:port) { Support.tcp_port }
|
34
|
+
let(:stream) { "socket" }
|
35
|
+
|
36
|
+
let!(:nvim_pid) do
|
37
|
+
env = {"NVIM_LISTEN_ADDRESS" => "127.0.0.1:#{port}"}
|
38
|
+
Process.spawn(env, *Support.child_argv, [:out, :err] => File::NULL)
|
14
39
|
end
|
15
40
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
41
|
+
let(:client) do
|
42
|
+
begin
|
43
|
+
Neovim.attach_tcp("127.0.0.1", port)
|
44
|
+
rescue Errno::ECONNREFUSED
|
45
|
+
retry
|
46
|
+
end
|
21
47
|
end
|
48
|
+
|
49
|
+
after { Support.kill(nvim_pid) }
|
22
50
|
end
|
23
51
|
end
|
24
52
|
|
@@ -27,35 +55,37 @@ RSpec.describe Neovim do
|
|
27
55
|
skip("Not supported on this platform") if Support.windows?
|
28
56
|
end
|
29
57
|
|
30
|
-
|
31
|
-
socket_path
|
32
|
-
|
33
|
-
pid = Process.spawn(env, *Support.child_argv, [:out, :err] => File::NULL)
|
58
|
+
include_context "attached client" do
|
59
|
+
let(:socket_path) { Support.socket_path }
|
60
|
+
let(:stream) { "socket" }
|
34
61
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
retry
|
62
|
+
let!(:nvim_pid) do
|
63
|
+
env = {"NVIM_LISTEN_ADDRESS" => socket_path}
|
64
|
+
Process.spawn(env, *Support.child_argv, [:out, :err] => File::NULL)
|
39
65
|
end
|
40
66
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
67
|
+
let(:client) do
|
68
|
+
begin
|
69
|
+
Neovim.attach_unix(socket_path)
|
70
|
+
rescue Errno::ENOENT, Errno::ECONNREFUSED
|
71
|
+
retry
|
72
|
+
end
|
46
73
|
end
|
74
|
+
|
75
|
+
after { Support.kill(nvim_pid) }
|
47
76
|
end
|
48
77
|
end
|
49
78
|
|
50
79
|
describe ".attach_child" do
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
client.shutdown
|
80
|
+
include_context "attached client" do
|
81
|
+
let(:stream) { "stdio" }
|
82
|
+
|
83
|
+
let(:client) do
|
84
|
+
Neovim.attach_child(Support.child_argv)
|
57
85
|
end
|
58
86
|
end
|
87
|
+
|
88
|
+
after { client.shutdown }
|
59
89
|
end
|
60
90
|
|
61
91
|
describe ".executable" do
|
data/spec/support.rb
CHANGED
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.8.
|
4
|
+
version: 0.8.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex Genco
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-06-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: msgpack
|
@@ -160,6 +160,7 @@ files:
|
|
160
160
|
- lib/neovim/api.rb
|
161
161
|
- lib/neovim/buffer.rb
|
162
162
|
- lib/neovim/client.rb
|
163
|
+
- lib/neovim/client_info.rb
|
163
164
|
- lib/neovim/connection.rb
|
164
165
|
- lib/neovim/current.rb
|
165
166
|
- lib/neovim/event_loop.rb
|
@@ -188,6 +189,7 @@ files:
|
|
188
189
|
- script/mp2j.rb
|
189
190
|
- script/run_acceptance.rb
|
190
191
|
- script/validate_docs.rb
|
192
|
+
- spec/acceptance/client_info_spec.vim
|
191
193
|
- spec/acceptance/rplugin_autocmd_spec.vim
|
192
194
|
- spec/acceptance/rplugin_command_spec.vim
|
193
195
|
- spec/acceptance/rplugin_function_spec.vim
|
@@ -212,6 +214,7 @@ files:
|
|
212
214
|
- spec/helper.rb
|
213
215
|
- spec/neovim/api_spec.rb
|
214
216
|
- spec/neovim/buffer_spec.rb
|
217
|
+
- spec/neovim/client_info_spec.rb
|
215
218
|
- spec/neovim/client_spec.rb
|
216
219
|
- spec/neovim/connection_spec.rb
|
217
220
|
- spec/neovim/current_spec.rb
|
@@ -250,12 +253,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
250
253
|
- !ruby/object:Gem::Version
|
251
254
|
version: '0'
|
252
255
|
requirements: []
|
253
|
-
|
254
|
-
rubygems_version: 2.7.8
|
256
|
+
rubygems_version: 3.0.3
|
255
257
|
signing_key:
|
256
258
|
specification_version: 4
|
257
259
|
summary: A Ruby client for Neovim
|
258
260
|
test_files:
|
261
|
+
- spec/acceptance/client_info_spec.vim
|
259
262
|
- spec/acceptance/rplugin_autocmd_spec.vim
|
260
263
|
- spec/acceptance/rplugin_command_spec.vim
|
261
264
|
- spec/acceptance/rplugin_function_spec.vim
|
@@ -280,6 +283,7 @@ test_files:
|
|
280
283
|
- spec/helper.rb
|
281
284
|
- spec/neovim/api_spec.rb
|
282
285
|
- spec/neovim/buffer_spec.rb
|
286
|
+
- spec/neovim/client_info_spec.rb
|
283
287
|
- spec/neovim/client_spec.rb
|
284
288
|
- spec/neovim/connection_spec.rb
|
285
289
|
- spec/neovim/current_spec.rb
|