neovim 0.2.3 → 0.2.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/lib/neovim/async_session.rb +4 -2
- data/lib/neovim/buffer.rb +8 -1
- data/lib/neovim/line_range.rb +1 -1
- data/lib/neovim/msgpack_stream.rb +9 -9
- data/lib/neovim/session.rb +7 -4
- data/lib/neovim/version.rb +1 -1
- data/lib/neovim/window.rb +0 -8
- data/spec/acceptance/neovim-ruby-host_spec.rb +39 -18
- data/spec/acceptance/ruby_provider_spec.rb +1 -1
- data/spec/helper.rb +12 -1
- data/spec/neovim/buffer_spec.rb +6 -0
- data/spec/neovim/client_spec.rb +6 -0
- data/spec/neovim/host_spec.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 65ebef25a57b7d4e244b65fbceb840bd8b1102f3
|
4
|
+
data.tar.gz: 152c9fbe48f7a50594be2abe6551e41a576808a1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8da3e2b81089bf418c16900e0db39144b7f0bb39a9cbebd2bed4d6a5f4272940ccc02d65b8b55a629a38c121522caa46dda963145311fc052cf2d6be01dc2514
|
7
|
+
data.tar.gz: af51998f0fbe47a2f7e97e576d7e22fb9721ad81cf84c73d8bb6052487c1e1cbb795d62a0d88058924f28b60270c2a1429ed2551b8c0c1c591570e2b28a0d663
|
data/CHANGELOG.md
CHANGED
data/lib/neovim/async_session.rb
CHANGED
@@ -11,6 +11,8 @@ module Neovim
|
|
11
11
|
class AsyncSession
|
12
12
|
include Logging
|
13
13
|
|
14
|
+
attr_reader :msgpack_stream
|
15
|
+
|
14
16
|
def initialize(msgpack_stream)
|
15
17
|
@msgpack_stream = msgpack_stream
|
16
18
|
@request_id = 0
|
@@ -59,8 +61,8 @@ module Neovim
|
|
59
61
|
# @return [void]
|
60
62
|
# @see MsgpackStream#run
|
61
63
|
# @see EventLoop#run
|
62
|
-
def run(
|
63
|
-
@msgpack_stream.run
|
64
|
+
def run(&callback)
|
65
|
+
@msgpack_stream.run do |msg|
|
64
66
|
debug("received #{msg.inspect}")
|
65
67
|
kind, *payload = msg
|
66
68
|
|
data/lib/neovim/buffer.rb
CHANGED
@@ -93,14 +93,21 @@ module Neovim
|
|
93
93
|
|
94
94
|
# Append a line after the given line (1-indexed).
|
95
95
|
#
|
96
|
+
# To maintain backwards compatibility with +vim+, the cursor is forced back
|
97
|
+
# to its previous position after inserting the line.
|
98
|
+
#
|
96
99
|
# @param index [Fixnum]
|
97
100
|
# @param str [String]
|
98
101
|
# @return [String]
|
99
102
|
def append(index, str)
|
103
|
+
window = @session.request(:vim_get_current_window)
|
104
|
+
cursor = window.cursor
|
105
|
+
|
100
106
|
if index < 0
|
101
107
|
raise ArgumentError, "Index out of bounds"
|
102
108
|
else
|
103
|
-
|
109
|
+
set_lines(index, index, true, [str])
|
110
|
+
window.set_cursor(cursor)
|
104
111
|
end
|
105
112
|
str
|
106
113
|
end
|
data/lib/neovim/line_range.rb
CHANGED
@@ -32,9 +32,7 @@ module Neovim
|
|
32
32
|
# described by the +vim_get_api_info+ call
|
33
33
|
# @return [void]
|
34
34
|
# @see EventLoop#run
|
35
|
-
def run
|
36
|
-
register_types(session)
|
37
|
-
|
35
|
+
def run
|
38
36
|
@event_loop.run do |data|
|
39
37
|
@unpacker.feed_each(data) do |msg|
|
40
38
|
debug("received #{msg.inspect}")
|
@@ -62,12 +60,14 @@ module Neovim
|
|
62
60
|
@event_loop.shutdown
|
63
61
|
end
|
64
62
|
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
63
|
+
# Register msgpack ext types using the provided API and session
|
64
|
+
#
|
65
|
+
# @param api [API]
|
66
|
+
# @param session [Session]
|
67
|
+
# @see Session#discover_api
|
68
|
+
def register_types(api, session)
|
69
|
+
info("registering msgpack ext types")
|
70
|
+
api.types.each do |type, info|
|
71
71
|
klass = Neovim.const_get(type)
|
72
72
|
id = info.fetch("id")
|
73
73
|
|
data/lib/neovim/session.rb
CHANGED
@@ -73,12 +73,15 @@ module Neovim
|
|
73
73
|
@api ||= API.null
|
74
74
|
end
|
75
75
|
|
76
|
-
# Discover the +nvim+ API as described in the +vim_get_api_info+ call
|
76
|
+
# Discover the +nvim+ API as described in the +vim_get_api_info+ call,
|
77
|
+
# propagating it down to lower layers of the stack.
|
77
78
|
#
|
78
79
|
# @return [API]
|
79
80
|
# @see API
|
80
81
|
def discover_api
|
81
|
-
@api = API.new(request(:vim_get_api_info))
|
82
|
+
@api = API.new(request(:vim_get_api_info)).tap do |api|
|
83
|
+
@async_session.msgpack_stream.register_types(api, self)
|
84
|
+
end
|
82
85
|
end
|
83
86
|
|
84
87
|
# Run the event loop, handling messages in a +Fiber+.
|
@@ -97,7 +100,7 @@ module Neovim
|
|
97
100
|
|
98
101
|
return unless @running
|
99
102
|
|
100
|
-
@async_session.run
|
103
|
+
@async_session.run do |message|
|
101
104
|
Fiber.new { yield message if block_given? }.resume
|
102
105
|
end
|
103
106
|
ensure
|
@@ -186,7 +189,7 @@ module Neovim
|
|
186
189
|
@async_session.request(method, *args) do |err, res|
|
187
190
|
error, result = err, res
|
188
191
|
stop
|
189
|
-
end.run
|
192
|
+
end.run do |message|
|
190
193
|
@pending_messages << message
|
191
194
|
end
|
192
195
|
|
data/lib/neovim/version.rb
CHANGED
data/lib/neovim/window.rb
CHANGED
@@ -2,14 +2,6 @@ require "neovim/remote_object"
|
|
2
2
|
|
3
3
|
module Neovim
|
4
4
|
class Window < RemoteObject
|
5
|
-
# Interface for interacting with the cursor position.
|
6
|
-
#
|
7
|
-
# @return [Cursor]
|
8
|
-
# @see Cursor
|
9
|
-
def cursor
|
10
|
-
@cursor ||= Cursor.new(self)
|
11
|
-
end
|
12
|
-
|
13
5
|
# Get the buffer displayed in the window
|
14
6
|
#
|
15
7
|
# @return [Buffer]
|
@@ -1,10 +1,41 @@
|
|
1
1
|
require "helper"
|
2
|
+
require "pty"
|
2
3
|
|
3
4
|
RSpec.describe "neovim-ruby-host" do
|
5
|
+
let(:host_exe) do
|
6
|
+
File.expand_path("../../../bin/neovim-ruby-host", __FILE__)
|
7
|
+
end
|
8
|
+
|
9
|
+
it "prints the gem version" do
|
10
|
+
["--version", "-V"].each do |opt|
|
11
|
+
expect {
|
12
|
+
system(host_exe, opt)
|
13
|
+
}.to output("#{Neovim::VERSION}\n").to_stdout_from_any_process
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
it "fails when attached to a TTY" do
|
18
|
+
yielded = false
|
19
|
+
|
20
|
+
PTY.spawn(host_exe) do |rd, wr, pid|
|
21
|
+
yielded = true
|
22
|
+
expect(rd.gets).to match(/can't run.+interactively/i)
|
23
|
+
|
24
|
+
_, status = Process.waitpid2(pid)
|
25
|
+
expect(status.exitstatus).to be(1)
|
26
|
+
end
|
27
|
+
|
28
|
+
expect(yielded).to be(true)
|
29
|
+
end
|
30
|
+
|
4
31
|
it "loads and runs plugins from Ruby source files" do
|
5
|
-
|
6
|
-
File.write(
|
32
|
+
plugin_path = Support.file_path("plugin1.rb")
|
33
|
+
File.write(plugin_path, <<-RUBY)
|
7
34
|
Neovim.plugin do |plug|
|
35
|
+
plug.command(:AsyncSetLine, :args => 1) do |nvim, str|
|
36
|
+
nvim.current.line = str
|
37
|
+
end
|
38
|
+
|
8
39
|
plug.function(:SyncAdd, :args => 2, :sync => true) do |nvim, x, y|
|
9
40
|
x + y
|
10
41
|
end
|
@@ -12,15 +43,6 @@ RSpec.describe "neovim-ruby-host" do
|
|
12
43
|
plug.autocmd(:BufEnter, :pattern => "*.rb") do |nvim|
|
13
44
|
nvim.current.line = "Ruby file, eh?"
|
14
45
|
end
|
15
|
-
end
|
16
|
-
RUBY
|
17
|
-
|
18
|
-
plugin2_path = Support.file_path("plugin2.rb")
|
19
|
-
File.write(plugin2_path, <<-RUBY)
|
20
|
-
Neovim.plugin do |plug|
|
21
|
-
plug.command(:AsyncSetLine, :args => 1) do |nvim, str|
|
22
|
-
nvim.current.line = str
|
23
|
-
end
|
24
46
|
|
25
47
|
plug.rpc(:TopLevelAdd, :nargs => 2, :sync => true) do |nvim, x, y|
|
26
48
|
x + y
|
@@ -30,21 +52,20 @@ RSpec.describe "neovim-ruby-host" do
|
|
30
52
|
|
31
53
|
nvim = Neovim.attach_child(["nvim", "-u", "NONE", "-n"])
|
32
54
|
|
33
|
-
|
34
|
-
nvim.command("let host = rpcstart('#{host_exe}', ['#{plugin1_path}', '#{plugin2_path}'])")
|
55
|
+
nvim.command("let host = rpcstart('#{host_exe}', ['#{plugin_path}'])")
|
35
56
|
|
36
57
|
expect(nvim.eval("rpcrequest(host, 'poll')")).to eq("ok")
|
37
|
-
expect(nvim.eval("rpcrequest(host, '#{
|
58
|
+
expect(nvim.eval("rpcrequest(host, '#{plugin_path}:function:SyncAdd', [1, 2])")).to eq(3)
|
38
59
|
expect(nvim.eval("rpcrequest(host, 'TopLevelAdd', 1, 2)")).to eq(3)
|
39
60
|
|
40
61
|
expect {
|
41
|
-
nvim.command("call rpcnotify(host, '#{
|
42
|
-
sleep 0.
|
62
|
+
nvim.command("call rpcnotify(host, '#{plugin_path}:autocmd:BufEnter:*.rb')")
|
63
|
+
sleep 0.01
|
43
64
|
}.to change { nvim.current.buffer.lines.to_a }.from([""]).to(["Ruby file, eh?"])
|
44
65
|
|
45
66
|
expect {
|
46
|
-
nvim.command("call rpcnotify(host, '#{
|
47
|
-
sleep 0.
|
67
|
+
nvim.command("call rpcnotify(host, '#{plugin_path}:command:AsyncSetLine', ['foo'])")
|
68
|
+
sleep 0.01
|
48
69
|
}.to change { nvim.current.buffer.lines.to_a }.from(["Ruby file, eh?"]).to(["foo"])
|
49
70
|
|
50
71
|
expect {
|
data/spec/helper.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require "bundler/setup"
|
2
2
|
require "neovim"
|
3
3
|
require "pry"
|
4
|
+
require "stringio"
|
4
5
|
require "timeout"
|
5
6
|
|
6
7
|
require File.expand_path("../support.rb", __FILE__)
|
@@ -35,8 +36,18 @@ RSpec.configure do |config|
|
|
35
36
|
end
|
36
37
|
end
|
37
38
|
|
39
|
+
config.around(:example, :silence_logging) do |spec|
|
40
|
+
old_logger = Neovim.logger
|
41
|
+
|
42
|
+
begin
|
43
|
+
Neovim.logger = Logger.new(StringIO.new)
|
44
|
+
spec.run
|
45
|
+
ensure
|
46
|
+
Neovim.logger = old_logger
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
38
50
|
Kernel.srand config.seed
|
39
51
|
end
|
40
52
|
|
41
|
-
Neovim.logger.level = Logger::FATAL
|
42
53
|
Thread.abort_on_exception = true
|
data/spec/neovim/buffer_spec.rb
CHANGED
@@ -118,6 +118,12 @@ module Neovim
|
|
118
118
|
}.to change { buffer.lines.to_a }.to(["one", "two", ""])
|
119
119
|
end
|
120
120
|
|
121
|
+
it "leaves the cursor unchanged" do
|
122
|
+
expect {
|
123
|
+
buffer.append(0, "one")
|
124
|
+
}.not_to change { client.current.window.cursor }
|
125
|
+
end
|
126
|
+
|
121
127
|
it "raises for out of bounds indexes" do
|
122
128
|
expect {
|
123
129
|
buffer.append(-1, "err")
|
data/spec/neovim/client_spec.rb
CHANGED
@@ -5,6 +5,12 @@ module Neovim
|
|
5
5
|
let(:client) { Neovim.attach_child(["nvim", "-n", "-u", "NONE"]) }
|
6
6
|
after { client.shutdown }
|
7
7
|
|
8
|
+
specify do
|
9
|
+
client.strwidth("foo")
|
10
|
+
client.strwidth("bar")
|
11
|
+
client.command("echom 'hi'")
|
12
|
+
end
|
13
|
+
|
8
14
|
describe "#respond_to?" do
|
9
15
|
it "returns true for vim functions" do
|
10
16
|
expect(client).to respond_to(:strwidth)
|
data/spec/neovim/host_spec.rb
CHANGED
@@ -98,7 +98,7 @@ module Neovim
|
|
98
98
|
host.handle(message)
|
99
99
|
end
|
100
100
|
|
101
|
-
it "rescues plugin sync handler exceptions" do
|
101
|
+
it "rescues plugin sync handler exceptions", :silence_logging do
|
102
102
|
plugin = Plugin.from_config_block("source") do |plug|
|
103
103
|
plug.command(:Foo, :sync => true) { raise "BOOM" }
|
104
104
|
end
|
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.2.
|
4
|
+
version: 0.2.4
|
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-07
|
11
|
+
date: 2016-08-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: msgpack
|