neovim 0.7.1 → 0.8.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 -0
- data/.rubocop.yml +8 -0
- data/.travis.yml +4 -3
- data/CHANGELOG.md +11 -0
- data/README.md +10 -13
- data/Rakefile +18 -3
- data/appveyor.yml +4 -1
- data/{bin → exe}/neovim-ruby-host +0 -0
- data/lib/neovim/buffer.rb +34 -36
- data/lib/neovim/client.rb +121 -36
- data/lib/neovim/connection.rb +7 -1
- data/lib/neovim/event_loop.rb +3 -2
- data/lib/neovim/message.rb +1 -1
- data/lib/neovim/remote_object.rb +5 -2
- data/lib/neovim/ruby_provider.rb +2 -2
- data/lib/neovim/ruby_provider/vim.rb +6 -5
- data/lib/neovim/session.rb +11 -1
- data/lib/neovim/tabpage.rb +8 -15
- data/lib/neovim/version.rb +1 -1
- data/lib/neovim/window.rb +17 -33
- data/neovim.gemspec +4 -4
- data/script/dump_api.rb +1 -1
- data/script/generate_docs.rb +6 -7
- data/script/run_acceptance.rb +1 -1
- data/script/validate_docs.rb +1 -1
- data/spec/acceptance/ruby_spec.vim +13 -11
- data/spec/acceptance/rubydo_spec.vim +9 -0
- data/spec/acceptance/rubyfile/curbuf_ivar_get.rb +1 -1
- data/spec/acceptance/rubyfile/curbuf_ivar_set.rb +1 -1
- data/spec/acceptance/rubyfile/define_foo.rb +1 -1
- data/spec/acceptance/rubyfile/nested_inner.rb +1 -1
- data/spec/acceptance/rubyfile/set_pwd_after.rb +1 -1
- data/spec/acceptance/rubyfile/set_pwd_before.rb +1 -1
- data/spec/acceptance/rubyfile_spec.vim +15 -13
- data/spec/acceptance/runtime/init.vim +2 -2
- data/spec/helper.rb +1 -6
- data/spec/neovim/buffer_spec.rb +6 -0
- data/spec/neovim/client_spec.rb +7 -0
- data/spec/neovim/connection_spec.rb +30 -4
- data/spec/neovim/event_loop_spec.rb +6 -0
- data/spec/neovim/session_spec.rb +6 -0
- data/spec/support.rb +1 -1
- metadata +8 -23
- data/.coveralls.yml +0 -1
data/lib/neovim/connection.rb
CHANGED
@@ -40,7 +40,8 @@ module Neovim
|
|
40
40
|
|
41
41
|
def write(object)
|
42
42
|
log(:debug) { {object: object} }
|
43
|
-
@packer.write(object)
|
43
|
+
@packer.write(object)
|
44
|
+
self
|
44
45
|
end
|
45
46
|
|
46
47
|
def read
|
@@ -49,6 +50,11 @@ module Neovim
|
|
49
50
|
end
|
50
51
|
end
|
51
52
|
|
53
|
+
def flush
|
54
|
+
@packer.flush
|
55
|
+
self
|
56
|
+
end
|
57
|
+
|
52
58
|
def register_type(id)
|
53
59
|
@unpacker.register_type(id) do |data|
|
54
60
|
index = MessagePack.unpack(data)
|
data/lib/neovim/event_loop.rb
CHANGED
@@ -34,8 +34,9 @@ module Neovim
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def shutdown
|
37
|
-
|
37
|
+
@running = false
|
38
38
|
@shutdown = true
|
39
|
+
run
|
39
40
|
end
|
40
41
|
|
41
42
|
def request(request_id, method, *args)
|
@@ -102,7 +103,7 @@ module Neovim
|
|
102
103
|
private
|
103
104
|
|
104
105
|
def read
|
105
|
-
array = @connection.read
|
106
|
+
array = @connection.flush.read
|
106
107
|
Message.from_array(array)
|
107
108
|
end
|
108
109
|
|
data/lib/neovim/message.rb
CHANGED
data/lib/neovim/remote_object.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require "set"
|
2
|
+
|
1
3
|
module Neovim
|
2
4
|
# @abstract Superclass for all +nvim+ remote objects.
|
3
5
|
#
|
@@ -37,7 +39,7 @@ module Neovim
|
|
37
39
|
|
38
40
|
# Extend +methods+ to include RPC methods
|
39
41
|
def methods(*args)
|
40
|
-
super | rpc_methods
|
42
|
+
super | rpc_methods.to_a
|
41
43
|
end
|
42
44
|
|
43
45
|
# Extend +==+ to only look at class and index.
|
@@ -48,7 +50,8 @@ module Neovim
|
|
48
50
|
private
|
49
51
|
|
50
52
|
def rpc_methods
|
51
|
-
@
|
53
|
+
@rpc_methods ||=
|
54
|
+
@api.functions_for_object(self).map(&:method_name).to_set
|
52
55
|
end
|
53
56
|
end
|
54
57
|
end
|
data/lib/neovim/ruby_provider.rb
CHANGED
@@ -134,9 +134,9 @@ module Neovim
|
|
134
134
|
def self.__update_lines_in_chunks(buffer, start, stop, size)
|
135
135
|
(start..stop).each_slice(size) do |linenos|
|
136
136
|
start, stop = linenos[0] - 1, linenos[-1]
|
137
|
-
lines = buffer.get_lines(start, stop,
|
137
|
+
lines = buffer.get_lines(start, stop, false)
|
138
138
|
|
139
|
-
buffer.set_lines(start, stop,
|
139
|
+
buffer.set_lines(start, stop, false, yield(lines))
|
140
140
|
end
|
141
141
|
end
|
142
142
|
private_class_method :__update_lines_in_chunks
|
@@ -15,7 +15,7 @@ module Vim
|
|
15
15
|
|
16
16
|
# Delegate all method calls to the underlying +Neovim::Client+ object.
|
17
17
|
def self.method_missing(method, *args, &block)
|
18
|
-
if @__client
|
18
|
+
if @__client
|
19
19
|
@__client.public_send(method, *args, &block).tap do
|
20
20
|
__refresh_globals(@__client)
|
21
21
|
end
|
@@ -33,13 +33,14 @@ module Vim
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def self.__refresh_globals(client)
|
36
|
-
|
36
|
+
bufid, winid = client.evaluate("[nvim_get_current_buf(), nvim_get_current_win()]")
|
37
|
+
session, api = client.session, client.api
|
37
38
|
|
38
|
-
$curbuf = @__buffer_cache.fetch(
|
39
|
-
@__buffer_cache[
|
39
|
+
$curbuf = @__buffer_cache.fetch(bufid) do
|
40
|
+
@__buffer_cache[bufid] = Buffer.new(bufid, session, api)
|
40
41
|
end
|
41
42
|
|
42
|
-
$curwin =
|
43
|
+
$curwin = Window.new(winid, session, api)
|
43
44
|
end
|
44
45
|
end
|
45
46
|
|
data/lib/neovim/session.rb
CHANGED
@@ -11,6 +11,13 @@ module Neovim
|
|
11
11
|
|
12
12
|
attr_writer :request_id
|
13
13
|
|
14
|
+
# @api private
|
15
|
+
class Exited < RuntimeError
|
16
|
+
def initialize
|
17
|
+
super("nvim process exited")
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
14
21
|
def initialize(event_loop)
|
15
22
|
@event_loop = event_loop
|
16
23
|
@main_thread = Thread.current
|
@@ -60,7 +67,10 @@ module Neovim
|
|
60
67
|
|
61
68
|
@event_loop.request(@request_id, method, *args)
|
62
69
|
response = blocking ? blocking_response : yielding_response
|
63
|
-
|
70
|
+
|
71
|
+
raise(Exited) if response.nil?
|
72
|
+
raise(response.error) if response.error
|
73
|
+
response.value
|
64
74
|
end
|
65
75
|
end
|
66
76
|
|
data/lib/neovim/tabpage.rb
CHANGED
@@ -3,47 +3,40 @@ 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.
|
6
|
+
# The methods documented here were generated using NVIM v0.3.1
|
7
7
|
class Tabpage < RemoteObject
|
8
8
|
# The following methods are dynamically generated.
|
9
9
|
=begin
|
10
|
-
@method list_wins
|
10
|
+
@method list_wins
|
11
11
|
See +:h nvim_tabpage_list_wins()+
|
12
|
-
@param [Tabpage] tabpage
|
13
12
|
@return [Array<Window>]
|
14
13
|
|
15
|
-
@method get_var(
|
14
|
+
@method get_var(name)
|
16
15
|
See +:h nvim_tabpage_get_var()+
|
17
|
-
@param [Tabpage] tabpage
|
18
16
|
@param [String] name
|
19
17
|
@return [Object]
|
20
18
|
|
21
|
-
@method set_var(
|
19
|
+
@method set_var(name, value)
|
22
20
|
See +:h nvim_tabpage_set_var()+
|
23
|
-
@param [Tabpage] tabpage
|
24
21
|
@param [String] name
|
25
22
|
@param [Object] value
|
26
23
|
@return [void]
|
27
24
|
|
28
|
-
@method del_var(
|
25
|
+
@method del_var(name)
|
29
26
|
See +:h nvim_tabpage_del_var()+
|
30
|
-
@param [Tabpage] tabpage
|
31
27
|
@param [String] name
|
32
28
|
@return [void]
|
33
29
|
|
34
|
-
@method get_win
|
30
|
+
@method get_win
|
35
31
|
See +:h nvim_tabpage_get_win()+
|
36
|
-
@param [Tabpage] tabpage
|
37
32
|
@return [Window]
|
38
33
|
|
39
|
-
@method get_number
|
34
|
+
@method get_number
|
40
35
|
See +:h nvim_tabpage_get_number()+
|
41
|
-
@param [Tabpage] tabpage
|
42
36
|
@return [Integer]
|
43
37
|
|
44
|
-
@method is_valid
|
38
|
+
@method is_valid
|
45
39
|
See +:h nvim_tabpage_is_valid()+
|
46
|
-
@param [Tabpage] tabpage
|
47
40
|
@return [Boolean]
|
48
41
|
|
49
42
|
=end
|
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.
|
6
|
+
# The methods documented here were generated using NVIM v0.3.1
|
7
7
|
class Window < RemoteObject
|
8
8
|
# Get the buffer displayed in the window
|
9
9
|
#
|
@@ -64,94 +64,78 @@ module Neovim
|
|
64
64
|
|
65
65
|
# The following methods are dynamically generated.
|
66
66
|
=begin
|
67
|
-
@method get_buf
|
67
|
+
@method get_buf
|
68
68
|
See +:h nvim_win_get_buf()+
|
69
|
-
@param [Window] window
|
70
69
|
@return [Buffer]
|
71
70
|
|
72
|
-
@method get_cursor
|
71
|
+
@method get_cursor
|
73
72
|
See +:h nvim_win_get_cursor()+
|
74
|
-
@param [Window] window
|
75
73
|
@return [Array<Integer>]
|
76
74
|
|
77
|
-
@method set_cursor(
|
75
|
+
@method set_cursor(pos)
|
78
76
|
See +:h nvim_win_set_cursor()+
|
79
|
-
@param [Window] window
|
80
77
|
@param [Array<Integer>] pos
|
81
78
|
@return [void]
|
82
79
|
|
83
|
-
@method get_height
|
80
|
+
@method get_height
|
84
81
|
See +:h nvim_win_get_height()+
|
85
|
-
@param [Window] window
|
86
82
|
@return [Integer]
|
87
83
|
|
88
|
-
@method set_height(
|
84
|
+
@method set_height(height)
|
89
85
|
See +:h nvim_win_set_height()+
|
90
|
-
@param [Window] window
|
91
86
|
@param [Integer] height
|
92
87
|
@return [void]
|
93
88
|
|
94
|
-
@method get_width
|
89
|
+
@method get_width
|
95
90
|
See +:h nvim_win_get_width()+
|
96
|
-
@param [Window] window
|
97
91
|
@return [Integer]
|
98
92
|
|
99
|
-
@method set_width(
|
93
|
+
@method set_width(width)
|
100
94
|
See +:h nvim_win_set_width()+
|
101
|
-
@param [Window] window
|
102
95
|
@param [Integer] width
|
103
96
|
@return [void]
|
104
97
|
|
105
|
-
@method get_var(
|
98
|
+
@method get_var(name)
|
106
99
|
See +:h nvim_win_get_var()+
|
107
|
-
@param [Window] window
|
108
100
|
@param [String] name
|
109
101
|
@return [Object]
|
110
102
|
|
111
|
-
@method set_var(
|
103
|
+
@method set_var(name, value)
|
112
104
|
See +:h nvim_win_set_var()+
|
113
|
-
@param [Window] window
|
114
105
|
@param [String] name
|
115
106
|
@param [Object] value
|
116
107
|
@return [void]
|
117
108
|
|
118
|
-
@method del_var(
|
109
|
+
@method del_var(name)
|
119
110
|
See +:h nvim_win_del_var()+
|
120
|
-
@param [Window] window
|
121
111
|
@param [String] name
|
122
112
|
@return [void]
|
123
113
|
|
124
|
-
@method get_option(
|
114
|
+
@method get_option(name)
|
125
115
|
See +:h nvim_win_get_option()+
|
126
|
-
@param [Window] window
|
127
116
|
@param [String] name
|
128
117
|
@return [Object]
|
129
118
|
|
130
|
-
@method set_option(
|
119
|
+
@method set_option(name, value)
|
131
120
|
See +:h nvim_win_set_option()+
|
132
|
-
@param [Window] window
|
133
121
|
@param [String] name
|
134
122
|
@param [Object] value
|
135
123
|
@return [void]
|
136
124
|
|
137
|
-
@method get_position
|
125
|
+
@method get_position
|
138
126
|
See +:h nvim_win_get_position()+
|
139
|
-
@param [Window] window
|
140
127
|
@return [Array<Integer>]
|
141
128
|
|
142
|
-
@method get_tabpage
|
129
|
+
@method get_tabpage
|
143
130
|
See +:h nvim_win_get_tabpage()+
|
144
|
-
@param [Window] window
|
145
131
|
@return [Tabpage]
|
146
132
|
|
147
|
-
@method get_number
|
133
|
+
@method get_number
|
148
134
|
See +:h nvim_win_get_number()+
|
149
|
-
@param [Window] window
|
150
135
|
@return [Integer]
|
151
136
|
|
152
|
-
@method is_valid
|
137
|
+
@method is_valid
|
153
138
|
See +:h nvim_win_is_valid()+
|
154
|
-
@param [Window] window
|
155
139
|
@return [Boolean]
|
156
140
|
|
157
141
|
=end
|
data/neovim.gemspec
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
lib = File.expand_path("
|
1
|
+
lib = File.expand_path("lib", __dir__)
|
2
2
|
$:.unshift(lib) unless $:.include?(lib)
|
3
3
|
require "neovim/version"
|
4
4
|
|
@@ -8,10 +8,11 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.authors = ["Alex Genco"]
|
9
9
|
spec.email = ["alexgenco@gmail.com"]
|
10
10
|
spec.summary = "A Ruby client for Neovim"
|
11
|
-
spec.homepage = "https://github.com/
|
11
|
+
spec.homepage = "https://github.com/neovim/neovim-ruby"
|
12
12
|
spec.license = "MIT"
|
13
13
|
|
14
14
|
spec.files = `git ls-files -z`.split("\x0")
|
15
|
+
spec.bindir = "exe"
|
15
16
|
spec.executables = ["neovim-ruby-host"]
|
16
17
|
spec.test_files = spec.files.grep(%r{^spec/})
|
17
18
|
spec.require_paths = ["lib"]
|
@@ -22,11 +23,10 @@ Gem::Specification.new do |spec|
|
|
22
23
|
spec.add_dependency "multi_json", "~> 1.0"
|
23
24
|
|
24
25
|
spec.add_development_dependency "bundler"
|
25
|
-
spec.add_development_dependency "coveralls"
|
26
26
|
spec.add_development_dependency "pry"
|
27
27
|
spec.add_development_dependency "pry-byebug"
|
28
28
|
spec.add_development_dependency "rake"
|
29
29
|
spec.add_development_dependency "rspec", "~> 3.0"
|
30
|
-
spec.add_development_dependency "rubocop", "0.
|
30
|
+
spec.add_development_dependency "rubocop", "0.56.0"
|
31
31
|
spec.add_development_dependency "vim-flavor", "2.2.2"
|
32
32
|
end
|
data/script/dump_api.rb
CHANGED
data/script/generate_docs.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
$:.unshift File.expand_path("
|
3
|
+
$:.unshift File.expand_path("../lib", __dir__)
|
4
4
|
|
5
5
|
require "neovim"
|
6
6
|
require "pathname"
|
@@ -19,10 +19,6 @@ buffer_defs = Neovim::Buffer.instance_methods(false)
|
|
19
19
|
tabpage_defs = Neovim::Tabpage.instance_methods(false)
|
20
20
|
window_defs = Neovim::Window.instance_methods(false)
|
21
21
|
|
22
|
-
def add_method(docs, defs, method_name)
|
23
|
-
return if defs.include?(method_name.to_s)
|
24
|
-
end
|
25
|
-
|
26
22
|
session.request(:nvim_get_api_info)[1]["functions"].each do |func|
|
27
23
|
func_name = func["name"]
|
28
24
|
params = func["parameters"]
|
@@ -30,16 +26,18 @@ session.request(:nvim_get_api_info)[1]["functions"].each do |func|
|
|
30
26
|
case func_name
|
31
27
|
when /^nvim_buf_(.+)/
|
32
28
|
method_name = $1
|
29
|
+
params.shift
|
33
30
|
next if buffer_defs.include?(method_name.to_sym)
|
34
31
|
when /^nvim_win_(.+)/
|
35
32
|
method_name = $1
|
33
|
+
params.shift
|
36
34
|
next if window_defs.include?(method_name.to_sym)
|
37
35
|
when /^nvim_tabpage_(.+)/
|
38
36
|
method_name = $1
|
37
|
+
params.shift
|
39
38
|
next if tabpage_defs.include?(method_name.to_sym)
|
40
39
|
when /^nvim_(.+)/
|
41
40
|
method_name = $1
|
42
|
-
params.shift
|
43
41
|
next if nvim_defs.include?(method_name.to_sym)
|
44
42
|
else
|
45
43
|
next
|
@@ -72,7 +70,8 @@ session.request(:nvim_get_api_info)[1]["functions"].each do |func|
|
|
72
70
|
end
|
73
71
|
end
|
74
72
|
|
75
|
-
lib_dir = Pathname.new(File.expand_path("
|
73
|
+
lib_dir = Pathname.new(File.expand_path("../lib/neovim", __dir__))
|
74
|
+
|
76
75
|
{
|
77
76
|
"client.rb" => nvim_docs,
|
78
77
|
"buffer.rb" => buffer_docs,
|
data/script/run_acceptance.rb
CHANGED
@@ -5,7 +5,7 @@ require "fileutils"
|
|
5
5
|
ENV.delete("VIM")
|
6
6
|
ENV.delete("VIMRUNTIME")
|
7
7
|
|
8
|
-
acceptance_root = File.expand_path("
|
8
|
+
acceptance_root = File.expand_path("../spec/acceptance", __dir__)
|
9
9
|
themis_rtp = File.join(acceptance_root, "runtime")
|
10
10
|
themis_home = File.join(themis_rtp, "flavors/thinca_vim-themis")
|
11
11
|
manifest = File.join(themis_rtp, "rplugin_manifest.vim")
|
data/script/validate_docs.rb
CHANGED
@@ -15,7 +15,7 @@ end
|
|
15
15
|
release_version = response["name"][/NVIM v?(.+)$/, 1]
|
16
16
|
|
17
17
|
client_file = File.read(
|
18
|
-
File.expand_path("
|
18
|
+
File.expand_path("../lib/neovim/client.rb", __dir__)
|
19
19
|
)
|
20
20
|
docs_version = client_file[
|
21
21
|
/The methods documented here were generated using NVIM v?(.+)$/,
|
@@ -4,6 +4,7 @@ let s:expect = themis#helper("expect")
|
|
4
4
|
function! s:suite.before_each() abort
|
5
5
|
1,$delete
|
6
6
|
call append(0, ["one", "two"])
|
7
|
+
unlet! s:var
|
7
8
|
endfunction
|
8
9
|
|
9
10
|
function! s:suite.has_nvim() abort
|
@@ -11,41 +12,42 @@ function! s:suite.has_nvim() abort
|
|
11
12
|
endfunction
|
12
13
|
|
13
14
|
function! s:suite.defines_a_ruby_method() abort
|
14
|
-
ruby def foo; Vim.command("let
|
15
|
+
ruby def foo; Vim.command("let s:var = 1"); end
|
15
16
|
ruby foo
|
16
17
|
|
17
|
-
call s:expect(
|
18
|
+
call s:expect(s:var).to_equal(1)
|
18
19
|
endfunction
|
19
20
|
|
20
21
|
function! s:suite.persists_curbuf_state() abort
|
21
22
|
ruby $curbuf.instance_variable_set(:@foo, 123)
|
22
|
-
ruby Vim.command("let
|
23
|
+
ruby Vim.command("let s:var = #{$curbuf.instance_variable_get(:@foo)}")
|
23
24
|
|
24
|
-
call s:expect(
|
25
|
+
call s:expect(s:var).to_equal(123)
|
25
26
|
endfunction
|
26
27
|
|
27
28
|
function! s:suite.updates_working_directory() abort
|
28
29
|
cd /
|
29
|
-
ruby Vim.command("let
|
30
|
+
ruby Vim.command("let s:var = '#{Dir.pwd.sub(/^C:/, "")}'")
|
30
31
|
cd -
|
31
32
|
|
32
|
-
call s:expect(
|
33
|
+
call s:expect(s:var).to_equal("/")
|
33
34
|
endfunction
|
34
35
|
|
35
36
|
function! s:suite.updates_working_directory_implicitly() abort
|
36
37
|
split | lcd /
|
37
|
-
ruby Vim.command("let
|
38
|
+
ruby Vim.command("let s:var = ['#{Dir.pwd}']")
|
38
39
|
wincmd p
|
39
|
-
ruby Vim.command("
|
40
|
+
ruby Vim.command("call add(s:var, '#{Dir.pwd}')")
|
40
41
|
wincmd p | lcd -
|
41
42
|
|
42
|
-
call s:expect(
|
43
|
+
call s:expect(len(s:var)).to_equal(2)
|
44
|
+
call s:expect(s:var[0]).not.to_equal(s:var[1])
|
43
45
|
endfunction
|
44
46
|
|
45
47
|
function! s:suite.supports_nesting() abort
|
46
|
-
ruby Vim.command("ruby Vim.command('let
|
48
|
+
ruby Vim.command("ruby Vim.command('let s:var = 123')")
|
47
49
|
|
48
|
-
call s:expect(
|
50
|
+
call s:expect(s:var).to_equal(123)
|
49
51
|
endfunction
|
50
52
|
|
51
53
|
function! s:suite.handles_standard_error() abort
|