neovim 0.2.2 → 0.2.3

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.
@@ -9,6 +9,8 @@ module Neovim
9
9
  end
10
10
  end
11
11
 
12
+ after { nvim.shutdown }
13
+
12
14
  describe ".current" do
13
15
  it "returns the current buffer from the global VIM client" do
14
16
  expect(Buffer.current).to eq(nvim.get_current_buffer)
@@ -9,6 +9,8 @@ module Neovim
9
9
  end
10
10
  end
11
11
 
12
+ after { nvim.shutdown }
13
+
12
14
  describe ".current" do
13
15
  it "returns the current window from the global VIM client" do
14
16
  expect(Window.current).to eq(nvim.get_current_window)
@@ -99,7 +99,7 @@ module Neovim
99
99
  let!(:nvim_pid) do
100
100
  pid = Process.spawn(
101
101
  {"NVIM_LISTEN_ADDRESS" => "0.0.0.0:#{nvim_port}"},
102
- "nvim --embed -n -u NONE",
102
+ "nvim --headless -n -u NONE",
103
103
  [:out, :err] => "/dev/null"
104
104
  )
105
105
 
@@ -126,7 +126,7 @@ module Neovim
126
126
  let!(:nvim_pid) do
127
127
  pid = Process.spawn(
128
128
  {"NVIM_LISTEN_ADDRESS" => socket_path},
129
- "nvim --embed -n -u NONE",
129
+ "nvim --headless -n -u NONE",
130
130
  [:out, :err] => "/dev/null"
131
131
  )
132
132
 
@@ -151,6 +151,7 @@ module Neovim
151
151
  context "child" do
152
152
  let!(:session) { Session.child(["nvim", "-n", "-u", "NONE"]) }
153
153
  include_context "session behavior"
154
+ after { session.shutdown }
154
155
  end
155
156
  end
156
157
  end
@@ -4,6 +4,7 @@ module Neovim
4
4
  RSpec.describe Window do
5
5
  let(:client) { Neovim.attach_child(["nvim", "-n", "-u", "NONE"]) }
6
6
  let(:window) { client.current.window }
7
+ after { client.shutdown }
7
8
 
8
9
  describe "if_ruby compatibility" do
9
10
  describe "#buffer" do
@@ -51,12 +52,22 @@ module Neovim
51
52
  end
52
53
 
53
54
  describe "#cursor=" do
54
- it "sets the cursor coodinates" do
55
+ it "uses 1-index for line numbers" do
55
56
  window.buffer.lines = ["one", "two"]
57
+ client.command("normal G")
56
58
 
57
59
  expect {
58
- window.cursor = [2, 2]
59
- }.to change { window.cursor }.to([2, 2])
60
+ window.cursor = [1, 2]
61
+ }.to change { client.current.line }.from("two").to("one")
62
+ end
63
+
64
+ it "uses 0-index for column numbers" do
65
+ window.buffer.lines = ["one", "two"]
66
+ window.cursor = [1, 1]
67
+
68
+ expect {
69
+ client.command("normal ix")
70
+ }.to change { client.current.line }.to("oxne")
60
71
  end
61
72
  end
62
73
  end
@@ -1,7 +1,7 @@
1
1
  require "helper"
2
2
 
3
3
  RSpec.describe Neovim do
4
- let(:nvim_argv) { %w(nvim --embed -u NONE -i NONE -n) }
4
+ let(:nvim_argv) { %w(nvim --headless -u NONE -i NONE -n) }
5
5
 
6
6
  describe ".attach_tcp" do
7
7
  it "attaches to a TCP socket" do
@@ -47,23 +47,26 @@ RSpec.describe Neovim do
47
47
 
48
48
  describe ".attach_child" do
49
49
  it "spawns and attaches to a child process" do
50
- expect(Neovim.attach_child(nvim_argv).strwidth("hi")).to eq(2)
50
+ begin
51
+ client = Neovim.attach_child(nvim_argv)
52
+ expect(client.strwidth("hi")).to eq(2)
53
+ ensure
54
+ client.shutdown
55
+ end
51
56
  end
52
57
  end
53
58
 
54
- describe ".plugin" do
55
- it "registers the plugin to Neovim.__configured_plugin_manifest" do
56
- mock_manifest = double(:manifest)
57
- mock_plugin = double(:plugin)
58
- mock_path = "/source/path"
59
-
60
- allow(Neovim).to receive(:__configured_plugin_path).and_return(mock_path)
61
- allow(Neovim).to receive(:__configured_plugin_manifest).and_return(mock_manifest)
59
+ describe ".start_host" do
60
+ it "loads and runs a Host" do
61
+ paths = ["/foo", "/bar"]
62
+ host = double(:host)
62
63
 
63
- expect(Neovim::Plugin).to receive(:from_config_block).with(mock_path).and_return(mock_plugin)
64
- expect(mock_manifest).to receive(:register).with(mock_plugin)
64
+ expect(Neovim::Host).to receive(:load_from_files).
65
+ with(paths).
66
+ and_return(host)
65
67
 
66
- Neovim.plugin
68
+ expect(host).to receive(:run)
69
+ Neovim.start_host(paths)
67
70
  end
68
71
  end
69
72
  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.2
4
+ version: 0.2.3
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-12 00:00:00.000000000 Z
11
+ date: 2016-07-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: msgpack
@@ -107,9 +107,9 @@ files:
107
107
  - lib/neovim/current.rb
108
108
  - lib/neovim/event_loop.rb
109
109
  - lib/neovim/host.rb
110
+ - lib/neovim/host/loader.rb
110
111
  - lib/neovim/line_range.rb
111
112
  - lib/neovim/logging.rb
112
- - lib/neovim/manifest.rb
113
113
  - lib/neovim/msgpack_stream.rb
114
114
  - lib/neovim/notification.rb
115
115
  - lib/neovim/plugin.rb
@@ -135,9 +135,9 @@ files:
135
135
  - spec/neovim/client_spec.rb
136
136
  - spec/neovim/current_spec.rb
137
137
  - spec/neovim/event_loop_spec.rb
138
+ - spec/neovim/host/loader_spec.rb
138
139
  - spec/neovim/host_spec.rb
139
140
  - spec/neovim/line_range_spec.rb
140
- - spec/neovim/manifest_spec.rb
141
141
  - spec/neovim/msgpack_stream_spec.rb
142
142
  - spec/neovim/plugin_spec.rb
143
143
  - spec/neovim/remote_object_spec.rb
@@ -181,9 +181,9 @@ test_files:
181
181
  - spec/neovim/client_spec.rb
182
182
  - spec/neovim/current_spec.rb
183
183
  - spec/neovim/event_loop_spec.rb
184
+ - spec/neovim/host/loader_spec.rb
184
185
  - spec/neovim/host_spec.rb
185
186
  - spec/neovim/line_range_spec.rb
186
- - spec/neovim/manifest_spec.rb
187
187
  - spec/neovim/msgpack_stream_spec.rb
188
188
  - spec/neovim/plugin_spec.rb
189
189
  - spec/neovim/remote_object_spec.rb
@@ -193,3 +193,4 @@ test_files:
193
193
  - spec/neovim/window_spec.rb
194
194
  - spec/neovim_spec.rb
195
195
  - spec/support.rb
196
+ has_rdoc:
@@ -1,89 +0,0 @@
1
- require "neovim/logging"
2
-
3
- module Neovim
4
- class Manifest
5
- include Logging
6
-
7
- attr_reader :handlers, :specs
8
-
9
- def initialize
10
- @handlers = {"poll" => poll_handler, "specs" => specs_handler}
11
- @specs = {}
12
- end
13
-
14
- # Register a +Plugin+ to receive +Host+ messages.
15
- #
16
- # @param plugin [Plugin]
17
- def register(plugin)
18
- plugin.handlers.each do |handler|
19
- wrapped_handler = handler.sync? ? wrap_sync(handler) : wrap_async(handler)
20
- @handlers[handler.qualified_name] = wrapped_handler
21
- end
22
-
23
- @specs[plugin.source] = plugin.specs
24
- end
25
-
26
- # Handle messages received from the host. Sends a +Neovim::Client+ along
27
- # with the message to be used in plugin callbacks.
28
- #
29
- # @param message [Neovim::Request, Neovim::Notification]
30
- # @param client [Neovim::Client]
31
- def handle(message, client)
32
- default_handler = message.sync? ? default_sync_handler : default_async_handler
33
- @handlers.fetch(message.method_name, default_handler).call(client, message)
34
- rescue => e
35
- fatal("got unexpected error #{e}")
36
- debug(e.backtrace.join("\n"))
37
- end
38
-
39
- private
40
-
41
- def poll_handler
42
- @poll_handler ||= Proc.new do |_, req|
43
- debug("received 'poll' request #{req.inspect}")
44
- req.respond("ok")
45
- end
46
- end
47
-
48
- def specs_handler
49
- @specs_handler ||= Proc.new do |_, req|
50
- debug("received 'specs' request #{req.inspect}")
51
- source = req.arguments.fetch(0)
52
-
53
- if @specs.key?(source)
54
- req.respond(@specs.fetch(source))
55
- else
56
- req.error("Unknown plugin #{source}")
57
- end
58
- end
59
- end
60
-
61
- def default_sync_handler
62
- @default_sync_handler ||= Proc.new { |_, req| req.error("Unknown request #{req.method_name}") }
63
- end
64
-
65
- def default_async_handler
66
- @default_async_handler ||= Proc.new {}
67
- end
68
-
69
- def wrap_sync(handler)
70
- Proc.new do |client, request|
71
- begin
72
- debug("received #{request.inspect}")
73
- args = request.arguments.flatten(1)
74
- request.respond(handler.call(client, *args))
75
- rescue => e
76
- request.error(e.message)
77
- end
78
- end
79
- end
80
-
81
- def wrap_async(handler)
82
- Proc.new do |client, notification|
83
- debug("received #{notification.inspect}")
84
- args = notification.arguments.flatten(1)
85
- handler.call(client, *args)
86
- end
87
- end
88
- end
89
- end
@@ -1,137 +0,0 @@
1
- require "helper"
2
-
3
- module Neovim
4
- RSpec.describe Manifest do
5
- it "has a default poll handler" do
6
- manifest = Manifest.new
7
- expect(manifest.handlers["poll"]).to respond_to(:call)
8
- end
9
-
10
- it "has default specs" do
11
- manifest = Manifest.new
12
- expect(manifest.specs).to eq({})
13
- end
14
-
15
- describe "#register" do
16
- it "adds specs" do
17
- manifest = Manifest.new
18
-
19
- plugin = Plugin.from_config_block("source") do |plug|
20
- plug.command(:Foo)
21
- end
22
-
23
- expect {
24
- manifest.register(plugin)
25
- }.to change { manifest.specs }.from({}).to("source" => plugin.specs)
26
- end
27
-
28
- it "adds plugin handlers" do
29
- manifest = Manifest.new
30
-
31
- plugin = Plugin.from_config_block("source") do |plug|
32
- plug.command(:Foo)
33
- end
34
-
35
- expect {
36
- manifest.register(plugin)
37
- }.to change {
38
- manifest.handlers["source:command:Foo"]
39
- }.from(nil).to(kind_of(Proc))
40
- end
41
-
42
- it "doesn't add top-level RPCs to specs" do
43
- manifest = Manifest.new
44
-
45
- plugin = Plugin.from_config_block("source") do |plug|
46
- plug.rpc(:Foo)
47
- end
48
-
49
- expect {
50
- manifest.register(plugin)
51
- }.to change { manifest.specs }.from({}).to("source" => [])
52
- end
53
- end
54
-
55
- describe "#handle" do
56
- it "calls the poll handler" do
57
- manifest = Manifest.new
58
- message = double(:message, :method_name => "poll", :sync? => true)
59
- client = double(:client)
60
-
61
- expect(message).to receive(:respond).with("ok")
62
- manifest.handle(message, client)
63
- end
64
-
65
- it "calls the specs handler" do
66
- manifest = Manifest.new
67
- plugin = Plugin.from_config_block("source") do |plug|
68
- plug.command(:Foo)
69
- end
70
- manifest.register(plugin)
71
-
72
- message = double(:message, :method_name => "specs", :sync? => true, :arguments => ["source"])
73
-
74
- expect(message).to receive(:respond).with(plugin.specs)
75
- manifest.handle(message, double(:client))
76
- end
77
-
78
- it "calls a plugin sync handler" do
79
- manifest = Manifest.new
80
- plugin = Plugin.from_config_block("source") do |plug|
81
- plug.command(:Foo, :sync => true) { |client, arg| [client, arg] }
82
- end
83
- manifest.register(plugin)
84
-
85
- message = double(:message, :method_name => "source:command:Foo", :sync? => true, :arguments => [:arg])
86
- client = double(:client)
87
-
88
- expect(message).to receive(:respond).with([client, :arg])
89
- manifest.handle(message, client)
90
- end
91
-
92
- it "rescues plugin sync handler exceptions" do
93
- manifest = Manifest.new
94
- plugin = Plugin.from_config_block("source") do |plug|
95
- plug.command(:Foo, :sync => true) { raise "BOOM" }
96
- end
97
- manifest.register(plugin)
98
-
99
- message = double(:message, :method_name => "source:command:Foo", :sync? => true, :arguments => [])
100
- client = double(:client)
101
-
102
- expect(message).to receive(:error).with("BOOM")
103
- manifest.handle(message, client)
104
- end
105
-
106
- it "calls a plugin async handler" do
107
- manifest = Manifest.new
108
- async_proc = Proc.new {}
109
- plugin = Plugin.from_config_block("source") do |plug|
110
- plug.command(:Foo, &async_proc)
111
- end
112
- manifest.register(plugin)
113
-
114
- message = double(:message, :method_name => "source:command:Foo", :sync? => false, :arguments => [:arg])
115
- client = double(:client)
116
-
117
- expect(async_proc).to receive(:call).with(client, :arg)
118
- manifest.handle(message, client)
119
- end
120
-
121
- it "calls a default sync handler" do
122
- manifest = Manifest.new
123
- message = double(:message, :method_name => "foobar", :sync? => true)
124
-
125
- expect(message).to receive(:error).with("Unknown request foobar")
126
- manifest.handle(message, double(:client))
127
- end
128
-
129
- it "calls a default async handler" do
130
- manifest = Manifest.new
131
- message = double(:message, :method_name => "foobar", :sync? => false)
132
-
133
- manifest.handle(message, double(:client))
134
- end
135
- end
136
- end
137
- end