neovim 0.6.2 → 0.7.0
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 +5 -5
- data/.gitignore +1 -1
- data/.travis.yml +2 -3
- data/CHANGELOG.md +29 -0
- data/Gemfile +0 -11
- data/README.md +3 -3
- data/Rakefile +1 -1
- data/appveyor.yml +9 -1
- data/lib/neovim.rb +3 -3
- data/lib/neovim/client.rb +2 -3
- data/lib/neovim/connection.rb +69 -0
- data/lib/neovim/event_loop.rb +34 -34
- data/lib/neovim/host.rb +47 -51
- data/lib/neovim/host/loader.rb +1 -4
- data/lib/neovim/logging.rb +8 -8
- data/lib/neovim/message.rb +70 -0
- data/lib/neovim/plugin.rb +0 -3
- data/lib/neovim/plugin/handler.rb +6 -6
- data/lib/neovim/remote_object.rb +1 -1
- data/lib/neovim/ruby_provider.rb +25 -14
- data/lib/neovim/session.rb +36 -43
- data/lib/neovim/version.rb +1 -1
- data/neovim.gemspec +4 -0
- data/spec/acceptance/runtime/rplugin/ruby/autocmds.rb +3 -3
- data/spec/acceptance/runtime/rplugin/ruby/commands.rb +15 -15
- data/spec/acceptance/runtime/rplugin/ruby/functions.rb +5 -5
- data/spec/acceptance_spec.rb +19 -16
- data/spec/helper.rb +15 -0
- data/spec/neovim/connection_spec.rb +79 -0
- data/spec/neovim/event_loop_spec.rb +36 -50
- data/spec/neovim/host/loader_spec.rb +16 -9
- data/spec/neovim/host_spec.rb +82 -92
- data/spec/neovim/logging_spec.rb +6 -6
- data/spec/neovim/message_spec.rb +119 -0
- data/spec/neovim/plugin_spec.rb +31 -31
- data/spec/neovim/session_spec.rb +1 -1
- metadata +38 -15
- data/lib/neovim/event_loop/connection.rb +0 -78
- data/lib/neovim/event_loop/message_builder.rb +0 -127
- data/lib/neovim/event_loop/serializer.rb +0 -37
- data/spec/acceptance/runtime/rplugin.vim +0 -37
- data/spec/neovim/event_loop/connection_spec.rb +0 -89
- data/spec/neovim/event_loop/message_builder_spec.rb +0 -105
- data/spec/neovim/event_loop/serializer_spec.rb +0 -63
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 3699ba73810bb643b4a8412a6469d6c0ec95fb138248e4f9a391b7637681cb06
|
4
|
+
data.tar.gz: 9d4e6c4513864df909a791eb23420918fe0426aeeb8d2f2929e6d52cb2b2f48e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bf087be0814ddb1a5d765e84e462991bccef0ba8135691da379a22393d3743dcbef9cd65307f54cdbb16a8a87e5ccca72c7dbc845714b3035818f2f2108f121c
|
7
|
+
data.tar.gz: e5b78dde7090c6ade20a1869ffacee5f3e1cefdd764be149a6db81fe2f3564c26f570f99b9f048ed3eb1fe9b8f5119febfa11fc01d42bad93a21f9a52caffda0
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -6,16 +6,15 @@ branches:
|
|
6
6
|
only: master
|
7
7
|
|
8
8
|
rvm:
|
9
|
-
- 1.9
|
10
|
-
- 2.0
|
11
|
-
- 2.1
|
12
9
|
- 2.2
|
13
10
|
- 2.3
|
14
11
|
- 2.4
|
12
|
+
- 2.5
|
15
13
|
- ruby-head
|
16
14
|
|
17
15
|
before_install:
|
18
16
|
- eval "$(curl -Ss https://raw.githubusercontent.com/neovim/bot-ci/master/scripts/travis-setup.sh) nightly-x64"
|
17
|
+
- gem update --system
|
19
18
|
- gem update bundler
|
20
19
|
- bundle --version
|
21
20
|
|
data/CHANGELOG.md
CHANGED
@@ -1,22 +1,36 @@
|
|
1
|
+
# 0.7.0
|
2
|
+
|
3
|
+
- Drop support for Ruby < 2.2.0, update syntax accordingly
|
4
|
+
- Use msgpack gem for all reading/writing
|
5
|
+
- Make provider std stream capturing more robust
|
6
|
+
- Lazily instantiate Host client on 'poll' request
|
7
|
+
- Fix windows by setting all IOs to binmode
|
8
|
+
- Refactor/simplify session and event loop logic
|
9
|
+
|
1
10
|
# 0.6.2
|
11
|
+
|
2
12
|
- Put IOs into binary mode (fixes windows bugs)
|
3
13
|
- Various build fixes for appveyor
|
4
14
|
- Update generated docs to v0.2.2
|
5
15
|
|
6
16
|
# 0.6.1
|
17
|
+
|
7
18
|
- Add `multi_json` dependency to fix load error in certain envs
|
8
19
|
|
9
20
|
# 0.6.0
|
21
|
+
|
10
22
|
- Refactor: consolidate "run" logic into EventLoop class to simplify middleware
|
11
23
|
layers
|
12
24
|
- Add JSON structured logging
|
13
25
|
- Regenerated docs for nvim 0.2.1
|
14
26
|
|
15
27
|
# 0.5.1
|
28
|
+
|
16
29
|
- Convert vader.vim from submodule to subtree so it is included in gem
|
17
30
|
installations
|
18
31
|
|
19
32
|
# 0.5.0
|
33
|
+
|
20
34
|
- Breaking API changes:
|
21
35
|
- Update generated methods to map to `nvim_` RPC functions, rather than the
|
22
36
|
deprecated `vim_` ones
|
@@ -25,18 +39,22 @@
|
|
25
39
|
- Fix support for `:bang` and `:register` plugin DSL options
|
26
40
|
|
27
41
|
# 0.4.0
|
42
|
+
|
28
43
|
- Add `Neovim.executable` for accessing `nvim` info
|
29
44
|
- Fix bug where `$curwin` and `$curbuf` got out of sync after `Vim.command`
|
30
45
|
invocations
|
31
46
|
- Use vader.vim for running vimscript acceptance tests
|
32
47
|
|
33
48
|
# 0.3.3
|
49
|
+
|
34
50
|
- Hotfix older nvim clients' inability to hook into DirChanged
|
35
51
|
|
36
52
|
# 0.3.2
|
53
|
+
|
37
54
|
- Fix directory tracking in Ruby provider
|
38
55
|
|
39
56
|
# 0.3.1
|
57
|
+
|
40
58
|
- Remove window caching to fix incompatibilities with command-t
|
41
59
|
- Add `Vim` module alias
|
42
60
|
- Fix `Window.count` and `Window.[]` to work with tabpages
|
@@ -45,6 +63,7 @@
|
|
45
63
|
- Make `Neovim.attach_child` have default argv of `["nvim"]`
|
46
64
|
|
47
65
|
# 0.3.0
|
66
|
+
|
48
67
|
- Mark `Plugin::DSL#rpc` private
|
49
68
|
- Rename Session constants:
|
50
69
|
- `Neovim::EventLoop` -> `Neovim::Session::EventLoop`
|
@@ -55,28 +74,34 @@
|
|
55
74
|
- `Neovim::Notification` -> `Neovim::Session::Notification`
|
56
75
|
|
57
76
|
# 0.2.5
|
77
|
+
|
58
78
|
- Optimize remote function lookup
|
59
79
|
- Fix bug where $curbuf and $curwin weren't persisting instance state between
|
60
80
|
requests
|
61
81
|
|
62
82
|
# 0.2.4
|
83
|
+
|
63
84
|
- Maintain cursor position on Buffer#append for compatibility with vim
|
64
85
|
- Fix excessive fetching of API metadata
|
65
86
|
|
66
87
|
# 0.2.3
|
88
|
+
|
67
89
|
- Detach child processes in `Neovim::EventLoop.child`
|
68
90
|
- Improve performance/compatibility of `Buffer#append`
|
69
91
|
- Various improvements around `Host` loading
|
70
92
|
|
71
93
|
# 0.2.2
|
94
|
+
|
72
95
|
- Make `VIM` constant a module instead of a class
|
73
96
|
- Make `Client#set_option` accept a single string argument
|
74
97
|
|
75
98
|
# 0.2.1
|
99
|
+
|
76
100
|
- Fix race condition in Fiber handling
|
77
101
|
- General improvements to ruby\_provider.rb
|
78
102
|
|
79
103
|
# 0.2.0
|
104
|
+
|
80
105
|
- Backwards incompatible, but we're pre-1.0.0 so going with minor bump instead
|
81
106
|
- Make vim ruby functions 1-indexed
|
82
107
|
- Add Client#evaluate and Client#message
|
@@ -86,6 +111,7 @@
|
|
86
111
|
- Remove race condition in Session fiber handling
|
87
112
|
|
88
113
|
# 0.1.0
|
114
|
+
|
89
115
|
- Add --version, -V to neovim-ruby-host executable
|
90
116
|
- Update object interfaces to be compatible with Vim :ruby API
|
91
117
|
- `NVIM_RUBY_LOG_LEVEL` now takes strings, e.g. `DEBUG`
|
@@ -95,17 +121,20 @@
|
|
95
121
|
- Remove vendored `neovim`
|
96
122
|
|
97
123
|
# 0.0.6
|
124
|
+
|
98
125
|
- Update Session with improved Fiber coordination
|
99
126
|
- Documentation
|
100
127
|
- Rename APIInfo -> API
|
101
128
|
- Rename Object -> RemoteObject
|
102
129
|
|
103
130
|
# 0.0.5
|
131
|
+
|
104
132
|
- Various fixes for Ruby remote plugins
|
105
133
|
- Move Current#range and #range= methods to Buffer
|
106
134
|
- Add better logging
|
107
135
|
|
108
136
|
# 0.0.4
|
137
|
+
|
109
138
|
- Add support for loading Ruby remote plugins from nvim
|
110
139
|
- Add Current#range to return a LineRange enumerable object
|
111
140
|
- Support sending large messages
|
data/Gemfile
CHANGED
@@ -1,13 +1,2 @@
|
|
1
1
|
source "https://rubygems.org"
|
2
2
|
gemspec
|
3
|
-
|
4
|
-
group :development do
|
5
|
-
if Gem::Version.new(RUBY_VERSION.dup) >= Gem::Version.new("2.0.0")
|
6
|
-
gem "coveralls"
|
7
|
-
gem "pry-byebug"
|
8
|
-
else
|
9
|
-
gem "term-ansicolor", "1.3.2"
|
10
|
-
gem "coveralls", "0.8.13"
|
11
|
-
gem "pry-debugger"
|
12
|
-
end
|
13
|
-
end
|
data/README.md
CHANGED
@@ -54,18 +54,18 @@ Neovim.plugin do |plug|
|
|
54
54
|
# Define a command called "SetLine" which sets the contents of the current
|
55
55
|
# line. This command is executed asynchronously, so the return value is
|
56
56
|
# ignored.
|
57
|
-
plug.command(:SetLine, :
|
57
|
+
plug.command(:SetLine, nargs: 1) do |nvim, str|
|
58
58
|
nvim.current.line = str
|
59
59
|
end
|
60
60
|
|
61
61
|
# Define a function called "Sum" which adds two numbers. This function is
|
62
62
|
# executed synchronously, so the result of the block will be returned to nvim.
|
63
|
-
plug.function(:Sum, :
|
63
|
+
plug.function(:Sum, nargs: 2, sync: true) do |nvim, x, y|
|
64
64
|
x + y
|
65
65
|
end
|
66
66
|
|
67
67
|
# Define an autocmd for the BufEnter event on Ruby files.
|
68
|
-
plug.autocmd(:BufEnter, :
|
68
|
+
plug.autocmd(:BufEnter, pattern: "*.rb") do |nvim|
|
69
69
|
nvim.command("echom 'Ruby file, eh?'")
|
70
70
|
end
|
71
71
|
end
|
data/Rakefile
CHANGED
data/appveyor.yml
CHANGED
@@ -1,5 +1,13 @@
|
|
1
|
+
version: '{build}'
|
2
|
+
|
3
|
+
environment:
|
4
|
+
matrix:
|
5
|
+
- RUBY_VERSION: 24
|
6
|
+
- RUBY_VERSION: 23
|
7
|
+
- RUBY_VERSION: 22
|
8
|
+
|
1
9
|
install:
|
2
|
-
- set PATH=C:\
|
10
|
+
- set PATH=C:\Ruby%RUBY_VERSION%\bin;C:\tools\neovim\Neovim\bin;%PATH%
|
3
11
|
- set NVIM_RUBY_LOG_LEVEL=DEBUG
|
4
12
|
- set NVIM_RUBY_LOG_FILE=%cd%\ci.log
|
5
13
|
- choco install neovim --pre -fy --ignore-dependencies
|
data/lib/neovim.rb
CHANGED
@@ -35,19 +35,19 @@ require "neovim/version"
|
|
35
35
|
# # Define a command called "SetLine" which sets the contents of the
|
36
36
|
# # current line. This command is executed asynchronously, so the return
|
37
37
|
# # value is ignored.
|
38
|
-
# plug.command(:SetLine, :
|
38
|
+
# plug.command(:SetLine, nargs: 1) do |nvim, str|
|
39
39
|
# nvim.current.line = str
|
40
40
|
# end
|
41
41
|
#
|
42
42
|
# # Define a function called "Sum" which adds two numbers. This function is
|
43
43
|
# # executed synchronously, so the result of the block will be returned to
|
44
44
|
# # nvim.
|
45
|
-
# plug.function(:Sum, :
|
45
|
+
# plug.function(:Sum, nargs: 2, sync: true) do |nvim, x, y|
|
46
46
|
# x + y
|
47
47
|
# end
|
48
48
|
#
|
49
49
|
# # Define an autocmd for the BufEnter event on Ruby files.
|
50
|
-
# plug.autocmd(:BufEnter, :
|
50
|
+
# plug.autocmd(:BufEnter, pattern: "*.rb") do |nvim|
|
51
51
|
# nvim.command("echom 'Ruby file, eh?'")
|
52
52
|
# end
|
53
53
|
# end
|
data/lib/neovim/client.rb
CHANGED
@@ -16,8 +16,7 @@ module Neovim
|
|
16
16
|
class Client
|
17
17
|
attr_reader :session, :api
|
18
18
|
|
19
|
-
def self.from_event_loop(event_loop)
|
20
|
-
session = Session.new(event_loop)
|
19
|
+
def self.from_event_loop(event_loop, session=Session.new(event_loop))
|
21
20
|
api = API.new(session.request(:nvim_get_api_info))
|
22
21
|
event_loop.register_types(api, session)
|
23
22
|
|
@@ -39,7 +38,7 @@ module Neovim
|
|
39
38
|
end
|
40
39
|
|
41
40
|
# Extend +respond_to?+ to support RPC methods.
|
42
|
-
def respond_to?(method_name)
|
41
|
+
def respond_to?(method_name, *)
|
43
42
|
super || rpc_methods.include?(method_name.to_sym)
|
44
43
|
end
|
45
44
|
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require "neovim/logging"
|
2
|
+
require "socket"
|
3
|
+
require "msgpack"
|
4
|
+
|
5
|
+
module Neovim
|
6
|
+
# @api private
|
7
|
+
class Connection
|
8
|
+
include Logging
|
9
|
+
|
10
|
+
def self.tcp(host, port)
|
11
|
+
socket = Socket.tcp(host, port)
|
12
|
+
new(socket, socket)
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.unix(path)
|
16
|
+
socket = Socket.unix(path)
|
17
|
+
new(socket, socket)
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.child(_argv)
|
21
|
+
argv = _argv.include?("--embed") ? _argv : _argv + ["--embed"]
|
22
|
+
|
23
|
+
io = ::IO.popen(argv, "rb+").tap do |_io|
|
24
|
+
Process.detach(_io.pid)
|
25
|
+
end
|
26
|
+
|
27
|
+
new(io, io)
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.stdio
|
31
|
+
new(STDIN, STDOUT)
|
32
|
+
end
|
33
|
+
|
34
|
+
def initialize(rd, wr)
|
35
|
+
@rd, @wr = [rd, wr].each { |io| io.binmode.sync = true }
|
36
|
+
|
37
|
+
@unpacker = MessagePack::Unpacker.new(@rd)
|
38
|
+
@packer = MessagePack::Packer.new(@wr)
|
39
|
+
@running = false
|
40
|
+
end
|
41
|
+
|
42
|
+
def write(object)
|
43
|
+
log(:debug) { {object: object} }
|
44
|
+
@packer.write(object).flush
|
45
|
+
end
|
46
|
+
|
47
|
+
def read
|
48
|
+
@unpacker.read.tap do |object|
|
49
|
+
log(:debug) { {object: object} }
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def register_type(id, &block)
|
54
|
+
@unpacker.register_type(id) do |data|
|
55
|
+
index = MessagePack.unpack(data)
|
56
|
+
block.call(index)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def close
|
61
|
+
[@rd, @wr].each do |io|
|
62
|
+
begin
|
63
|
+
io.close
|
64
|
+
rescue ::IOError
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
data/lib/neovim/event_loop.rb
CHANGED
@@ -1,29 +1,24 @@
|
|
1
1
|
require "neovim/logging"
|
2
|
-
require "neovim/
|
3
|
-
require "neovim/
|
4
|
-
require "neovim/event_loop/serializer"
|
2
|
+
require "neovim/connection"
|
3
|
+
require "neovim/message"
|
5
4
|
|
6
5
|
module Neovim
|
6
|
+
# @api private
|
7
7
|
class EventLoop
|
8
8
|
include Logging
|
9
9
|
|
10
|
-
# Connect to a TCP socket.
|
11
10
|
def self.tcp(host, port)
|
12
11
|
new Connection.tcp(host, port)
|
13
12
|
end
|
14
13
|
|
15
|
-
# Connect to a UNIX domain socket.
|
16
14
|
def self.unix(path)
|
17
15
|
new Connection.unix(path)
|
18
16
|
end
|
19
17
|
|
20
|
-
# Spawn and connect to a child +nvim+ process.
|
21
18
|
def self.child(argv)
|
22
19
|
new Connection.child(argv)
|
23
20
|
end
|
24
21
|
|
25
|
-
# Connect to the current process's standard streams. This is used to
|
26
|
-
# promote the current process to a Ruby plugin host.
|
27
22
|
def self.stdio
|
28
23
|
new Connection.stdio
|
29
24
|
end
|
@@ -32,8 +27,6 @@ module Neovim
|
|
32
27
|
@running = false
|
33
28
|
@shutdown = false
|
34
29
|
@connection = connection
|
35
|
-
@serializer = Serializer.new
|
36
|
-
@message_builder = MessageBuilder.new
|
37
30
|
end
|
38
31
|
|
39
32
|
def stop
|
@@ -45,25 +38,32 @@ module Neovim
|
|
45
38
|
@shutdown = true
|
46
39
|
end
|
47
40
|
|
48
|
-
def request(method, *args
|
49
|
-
log(:debug)
|
50
|
-
|
41
|
+
def request(request_id, method, *args)
|
42
|
+
log(:debug) do
|
43
|
+
{
|
44
|
+
request_id: request_id,
|
45
|
+
method: method,
|
46
|
+
arguments: args
|
47
|
+
}
|
48
|
+
end
|
49
|
+
|
50
|
+
write(:request, request_id, method, args)
|
51
51
|
end
|
52
52
|
|
53
53
|
def respond(request_id, return_value, error)
|
54
54
|
log(:debug) do
|
55
55
|
{
|
56
|
-
:
|
57
|
-
:
|
58
|
-
:
|
56
|
+
request_id: request_id,
|
57
|
+
return_value: return_value,
|
58
|
+
error: error
|
59
59
|
}
|
60
60
|
end
|
61
61
|
|
62
|
-
write(:response, request_id,
|
62
|
+
write(:response, request_id, error, return_value)
|
63
63
|
end
|
64
64
|
|
65
65
|
def notify(method, *args)
|
66
|
-
log(:debug) { {:
|
66
|
+
log(:debug) { {name: method, arguments: args} }
|
67
67
|
write(:notification, method, args)
|
68
68
|
end
|
69
69
|
|
@@ -74,28 +74,26 @@ module Neovim
|
|
74
74
|
break if !@running
|
75
75
|
break if @shutdown
|
76
76
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
77
|
+
begin
|
78
|
+
callback.call(read)
|
79
|
+
rescue EOFError => e
|
80
|
+
log_exception(:debug, e, __method__)
|
81
|
+
shutdown
|
82
|
+
rescue => e
|
83
|
+
log_exception(:error, e, __method__)
|
81
84
|
end
|
82
85
|
end
|
83
|
-
rescue EOFError => ex
|
84
|
-
log_exception(:debug, ex, __method__)
|
85
|
-
rescue => ex
|
86
|
-
log_exception(:fatal, ex, __method__)
|
87
86
|
ensure
|
88
87
|
@connection.close if @shutdown
|
89
88
|
end
|
90
89
|
|
91
|
-
# Register msgpack ext types using the provided API and session
|
92
90
|
def register_types(api, session)
|
93
91
|
api.types.each do |type, info|
|
94
92
|
id = info.fetch("id")
|
95
93
|
klass = Neovim.const_get(type)
|
96
|
-
log(:debug) { {:
|
94
|
+
log(:debug) { {type: type, id: id} }
|
97
95
|
|
98
|
-
@
|
96
|
+
@connection.register_type(id) do |index|
|
99
97
|
klass.new(index, session, api)
|
100
98
|
end
|
101
99
|
end
|
@@ -103,12 +101,14 @@ module Neovim
|
|
103
101
|
|
104
102
|
private
|
105
103
|
|
104
|
+
def read
|
105
|
+
array = @connection.read
|
106
|
+
Message.from_array(array)
|
107
|
+
end
|
108
|
+
|
106
109
|
def write(type, *args)
|
107
|
-
|
108
|
-
|
109
|
-
@connection.write(bytes)
|
110
|
-
end
|
111
|
-
end
|
110
|
+
message = Message.public_send(type, *args)
|
111
|
+
@connection.write(message.to_a)
|
112
112
|
end
|
113
113
|
end
|
114
114
|
end
|