neovim 0.4.0 → 0.5.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 +4 -4
- data/.gitignore +1 -1
- data/.gitmodules +1 -1
- data/.rspec +1 -0
- data/.travis.yml +1 -1
- data/CHANGELOG.md +8 -0
- data/README.md +5 -3
- data/Rakefile +14 -8
- data/lib/neovim/buffer.rb +86 -114
- data/lib/neovim/client.rb +105 -103
- data/lib/neovim/current.rb +8 -18
- data/lib/neovim/executable.rb +2 -2
- data/lib/neovim/line_range.rb +48 -59
- data/lib/neovim/plugin/dsl.rb +11 -3
- data/lib/neovim/remote_object.rb +3 -13
- data/lib/neovim/ruby_provider.rb +3 -3
- data/lib/neovim/ruby_provider/buffer_ext.rb +3 -3
- data/lib/neovim/ruby_provider/vim.rb +2 -2
- data/lib/neovim/ruby_provider/window_ext.rb +3 -3
- data/lib/neovim/session.rb +4 -4
- data/lib/neovim/session/api.rb +50 -22
- data/lib/neovim/tabpage.rb +29 -19
- data/lib/neovim/version.rb +1 -1
- data/lib/neovim/window.rb +60 -40
- data/script/dump_api +1 -1
- data/script/generate_docs +35 -22
- data/spec/helper.rb +3 -1
- data/spec/integration/rplugin_autocmd_spec.vim +18 -0
- data/spec/integration/rplugin_command_spec.vim +97 -0
- data/spec/integration/rplugin_function_spec.vim +26 -0
- data/spec/integration/ruby_buffer_spec.rb +151 -0
- data/spec/{acceptance → integration}/ruby_spec.vim +2 -22
- data/spec/integration/ruby_vim_spec.rb +27 -0
- data/spec/integration/ruby_window_spec.rb +56 -0
- data/spec/{acceptance → integration}/rubydo_spec.vim +27 -18
- data/spec/{acceptance → integration}/rubyfile/call_foo.rb +0 -0
- data/spec/{acceptance → integration}/rubyfile/curbuf_ivar_get.rb +0 -0
- data/spec/{acceptance → integration}/rubyfile/curbuf_ivar_set.rb +0 -0
- data/spec/{acceptance → integration}/rubyfile/define_foo.rb +0 -0
- data/spec/{acceptance → integration}/rubyfile/raise_standard_error.rb +0 -0
- data/spec/{acceptance → integration}/rubyfile/raise_syntax_error.rb +0 -0
- data/spec/{acceptance → integration}/rubyfile/set_pwd_after.rb +0 -0
- data/spec/{acceptance → integration}/rubyfile/set_pwd_before.rb +0 -0
- data/spec/{acceptance → integration}/rubyfile_spec.vim +12 -30
- data/spec/integration/runtime/init.vim +9 -0
- data/spec/integration/runtime/rplugin/ruby/autocmds.rb +9 -0
- data/spec/integration/runtime/rplugin/ruby/commands.rb +59 -0
- data/spec/integration/runtime/rplugin/ruby/functions.rb +17 -0
- data/spec/integration_spec.rb +119 -0
- data/spec/neovim/buffer_spec.rb +0 -167
- data/spec/neovim/client_spec.rb +1 -44
- data/spec/neovim/current_spec.rb +0 -8
- data/spec/neovim/line_range_spec.rb +92 -97
- data/spec/neovim/plugin_spec.rb +14 -2
- data/spec/neovim/remote_object_spec.rb +4 -4
- data/spec/neovim/ruby_provider/buffer_ext_spec.rb +3 -3
- data/spec/neovim/ruby_provider/window_ext_spec.rb +1 -1
- data/spec/neovim/session/api_spec.rb +40 -35
- data/spec/neovim/session/event_loop_spec.rb +1 -1
- data/spec/neovim/session_spec.rb +15 -15
- metadata +49 -41
- data/script/acceptance_tests +0 -46
- data/spec/acceptance/rplugin_spec.vim +0 -19
- data/spec/acceptance/rubyfile/curbuf.rb +0 -1
- data/spec/acceptance/rubyfile/curwin.rb +0 -1
- data/spec/acceptance/rubyfile/vim_constants.rb +0 -2
- data/spec/acceptance/runtime/init.vim +0 -1
- data/spec/acceptance/runtime/rplugin/ruby/plugin.rb +0 -13
- data/spec/documentation_spec.rb +0 -24
- data/spec/neovim/window_spec.rb +0 -91
data/lib/neovim/current.rb
CHANGED
@@ -9,14 +9,13 @@ module Neovim
|
|
9
9
|
class Current
|
10
10
|
def initialize(session)
|
11
11
|
@session = session
|
12
|
-
@range = (0..-1)
|
13
12
|
end
|
14
13
|
|
15
14
|
# Get the line under the cursor.
|
16
15
|
#
|
17
16
|
# @return [String]
|
18
17
|
def line
|
19
|
-
@session.request(:
|
18
|
+
@session.request(:nvim_get_current_line)
|
20
19
|
end
|
21
20
|
|
22
21
|
# Set the line under the cursor.
|
@@ -24,16 +23,14 @@ module Neovim
|
|
24
23
|
# @param line [String] The target line contents.
|
25
24
|
# @return [String]
|
26
25
|
def line=(line)
|
27
|
-
@session.request(:
|
26
|
+
@session.request(:nvim_set_current_line, line)
|
28
27
|
end
|
29
28
|
|
30
29
|
# Get the active buffer.
|
31
30
|
#
|
32
31
|
# @return [Buffer]
|
33
32
|
def buffer
|
34
|
-
@session.request(:
|
35
|
-
buf.range = @range
|
36
|
-
end
|
33
|
+
@session.request(:nvim_get_current_buf)
|
37
34
|
end
|
38
35
|
|
39
36
|
# Set the active buffer.
|
@@ -41,14 +38,14 @@ module Neovim
|
|
41
38
|
# @param buffer [Buffer, Integer] The target buffer or index.
|
42
39
|
# @return [Buffer, Integer]
|
43
40
|
def buffer=(buffer)
|
44
|
-
@session.request(:
|
41
|
+
@session.request(:nvim_set_current_buf, buffer)
|
45
42
|
end
|
46
43
|
|
47
44
|
# Get the active window.
|
48
45
|
#
|
49
46
|
# @return [Window]
|
50
47
|
def window
|
51
|
-
@session.request(:
|
48
|
+
@session.request(:nvim_get_current_win)
|
52
49
|
end
|
53
50
|
|
54
51
|
# Set the active window.
|
@@ -56,14 +53,14 @@ module Neovim
|
|
56
53
|
# @param window [Window, Integer] The target window or index.
|
57
54
|
# @return [Window, Integer]
|
58
55
|
def window=(window)
|
59
|
-
@session.request(:
|
56
|
+
@session.request(:nvim_set_current_win, window)
|
60
57
|
end
|
61
58
|
|
62
59
|
# Get the active tabpage.
|
63
60
|
#
|
64
61
|
# @return [Tabpage]
|
65
62
|
def tabpage
|
66
|
-
@session.request(:
|
63
|
+
@session.request(:nvim_get_current_tabpage)
|
67
64
|
end
|
68
65
|
|
69
66
|
# Set the active tabpage.
|
@@ -71,14 +68,7 @@ module Neovim
|
|
71
68
|
# @param tabpage [Tabpage, Integer] The target tabpage or index.
|
72
69
|
# @return [Tabpage, Integer]
|
73
70
|
def tabpage=(tabpage)
|
74
|
-
@session.request(:
|
75
|
-
end
|
76
|
-
|
77
|
-
# Set the current line range of the current buffer.
|
78
|
-
#
|
79
|
-
# @param range [Range] The target range
|
80
|
-
def range=(range)
|
81
|
-
@range = range
|
71
|
+
@session.request(:nvim_set_current_tabpage, tabpage)
|
82
72
|
end
|
83
73
|
end
|
84
74
|
end
|
data/lib/neovim/executable.rb
CHANGED
@@ -23,11 +23,11 @@ module Neovim
|
|
23
23
|
#
|
24
24
|
# @return [String]
|
25
25
|
def version
|
26
|
-
@version ||= IO.popen([path, "--version"]) do |io|
|
26
|
+
@version ||= IO.popen([@path, "--version"]) do |io|
|
27
27
|
io.gets[VERSION_PATTERN, 1]
|
28
28
|
end
|
29
29
|
rescue => e
|
30
|
-
raise Error, "Couldn't load #{path}: #{e}"
|
30
|
+
raise Error, "Couldn't load #{@path}: #{e}"
|
31
31
|
end
|
32
32
|
end
|
33
33
|
end
|
data/lib/neovim/line_range.rb
CHANGED
@@ -3,28 +3,35 @@ module Neovim
|
|
3
3
|
class LineRange
|
4
4
|
include Enumerable
|
5
5
|
|
6
|
-
def initialize(buffer
|
6
|
+
def initialize(buffer)
|
7
7
|
@buffer = buffer
|
8
|
-
|
9
|
-
|
8
|
+
end
|
9
|
+
|
10
|
+
# Satisfy the +Enumerable+ interface by yielding each line.
|
11
|
+
#
|
12
|
+
# @yieldparam line [String]
|
13
|
+
def each(&block)
|
14
|
+
(0...@buffer.count).each_slice(5000) do |linenos|
|
15
|
+
_start, _stop = linenos[0], linenos[-1] + 1
|
16
|
+
@buffer.get_lines(_start, _stop, true).each(&block)
|
17
|
+
end
|
10
18
|
end
|
11
19
|
|
12
20
|
# Resolve to an array of lines as strings.
|
13
21
|
#
|
14
22
|
# @return [Array<String>]
|
15
23
|
def to_a
|
16
|
-
|
24
|
+
map { |line| line }
|
17
25
|
end
|
18
26
|
|
19
|
-
#
|
27
|
+
# Override +#==+ to compare contents of lines.
|
20
28
|
#
|
21
|
-
# @
|
22
|
-
|
23
|
-
|
24
|
-
to_a.each(&block)
|
29
|
+
# @return Boolean
|
30
|
+
def ==(other)
|
31
|
+
to_a == other.to_a
|
25
32
|
end
|
26
33
|
|
27
|
-
# Access
|
34
|
+
# Access a line or line range.
|
28
35
|
#
|
29
36
|
# @overload [](index)
|
30
37
|
# @param index [Integer]
|
@@ -43,28 +50,17 @@ module Neovim
|
|
43
50
|
# @example Get the first two lines using an index and length
|
44
51
|
# line_range[0, 2] # => ["first", "second"]
|
45
52
|
def [](pos, len=nil)
|
46
|
-
|
47
|
-
|
48
|
-
LineRange.new(
|
49
|
-
@buffer,
|
50
|
-
abs_line(pos.begin),
|
51
|
-
abs_line(pos.exclude_end? ? pos.end - 1 : pos.end)
|
52
|
-
)
|
53
|
+
if Range === pos
|
54
|
+
@buffer.get_lines(*range_indices(pos), true)
|
53
55
|
else
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
abs_line(pos),
|
58
|
-
abs_line(pos + len - 1)
|
59
|
-
)
|
60
|
-
else
|
61
|
-
@buffer.get_line(abs_line(pos))
|
62
|
-
end
|
56
|
+
_begin, _end = length_indices(pos, len || 1)
|
57
|
+
lines = @buffer.get_lines(_begin, _end, true)
|
58
|
+
len ? lines : lines.first
|
63
59
|
end
|
64
60
|
end
|
65
61
|
alias_method :slice, :[]
|
66
62
|
|
67
|
-
# Set
|
63
|
+
# Set a line or line range.
|
68
64
|
#
|
69
65
|
# @overload []=(index, string)
|
70
66
|
# @param index [Integer]
|
@@ -89,27 +85,11 @@ module Neovim
|
|
89
85
|
*target, val = args
|
90
86
|
pos, len = target
|
91
87
|
|
92
|
-
|
93
|
-
|
94
|
-
@buffer.set_line_slice(
|
95
|
-
abs_line(pos.begin),
|
96
|
-
abs_line(pos.end),
|
97
|
-
true,
|
98
|
-
!pos.exclude_end?,
|
99
|
-
val
|
100
|
-
)
|
88
|
+
if Range === pos
|
89
|
+
@buffer.set_lines(*range_indices(pos), true, Array(val))
|
101
90
|
else
|
102
|
-
|
103
|
-
|
104
|
-
abs_line(pos),
|
105
|
-
abs_line(pos + len),
|
106
|
-
true,
|
107
|
-
false,
|
108
|
-
val
|
109
|
-
)
|
110
|
-
else
|
111
|
-
@buffer.set_line(abs_line(pos), val)
|
112
|
-
end
|
91
|
+
_begin, _end = length_indices(pos, len || 1)
|
92
|
+
@buffer.set_lines(_begin, _end, true, Array(val))
|
113
93
|
end
|
114
94
|
end
|
115
95
|
|
@@ -117,29 +97,38 @@ module Neovim
|
|
117
97
|
#
|
118
98
|
# @param other [Array] The replacement lines
|
119
99
|
def replace(other)
|
120
|
-
self[0..-1] = other
|
100
|
+
self[0..-1] = other.to_ary
|
121
101
|
self
|
122
102
|
end
|
123
103
|
|
124
|
-
# Insert line(s) at the given index within the range.
|
125
|
-
#
|
126
|
-
# @param index [Integer]
|
127
|
-
# @param lines [String]
|
128
|
-
def insert(index, lines)
|
129
|
-
@buffer.insert(index, Array(lines))
|
130
|
-
end
|
131
|
-
|
132
104
|
# Delete the line at the given index within the range.
|
133
105
|
#
|
134
106
|
# @param index [Integer]
|
135
107
|
def delete(index)
|
136
|
-
|
108
|
+
i = Integer(index)
|
109
|
+
self[i].tap { self[i, 1] = [] }
|
110
|
+
rescue TypeError
|
137
111
|
end
|
138
112
|
|
139
113
|
private
|
140
114
|
|
141
|
-
def
|
142
|
-
|
115
|
+
def range_indices(range)
|
116
|
+
_begin = adjust_index(range.begin)
|
117
|
+
_end = adjust_index(range.end)
|
118
|
+
_end += 1 unless range.exclude_end?
|
119
|
+
|
120
|
+
[_begin, _end]
|
121
|
+
end
|
122
|
+
|
123
|
+
def length_indices(index, len)
|
124
|
+
_begin = adjust_index(index)
|
125
|
+
_end = _begin < 0 ? [_begin + len, -1].min : _begin + len
|
126
|
+
|
127
|
+
[_begin, _end]
|
128
|
+
end
|
129
|
+
|
130
|
+
def adjust_index(i)
|
131
|
+
i < 0 ? i - 1 : i
|
143
132
|
end
|
144
133
|
end
|
145
134
|
end
|
data/lib/neovim/plugin/dsl.rb
CHANGED
@@ -43,7 +43,7 @@ module Neovim
|
|
43
43
|
# @param &block [Proc, nil] The body of the function.
|
44
44
|
#
|
45
45
|
# @option options [String, Boolean] :range The range argument.
|
46
|
-
# See +:h
|
46
|
+
# See +:h func-range+.
|
47
47
|
# @option options [String] :eval An +nvim+ expression. Gets evaluated and
|
48
48
|
# passed as an argument to the block.
|
49
49
|
# @option options [Boolean] :sync (false) Whether +nvim+ should receive
|
@@ -89,7 +89,7 @@ module Neovim
|
|
89
89
|
if type == :autocmd
|
90
90
|
options = _options.dup
|
91
91
|
else
|
92
|
-
options =
|
92
|
+
options = standardize(_options.dup)
|
93
93
|
end
|
94
94
|
|
95
95
|
sync = options.delete(:sync)
|
@@ -99,12 +99,20 @@ module Neovim
|
|
99
99
|
)
|
100
100
|
end
|
101
101
|
|
102
|
-
def
|
102
|
+
def standardize(options)
|
103
103
|
if options.key?(:range)
|
104
104
|
options[:range] = "" if options[:range] == true
|
105
105
|
options[:range] = ::Kernel.String(options[:range])
|
106
106
|
end
|
107
107
|
|
108
|
+
[:bang, :register].each do |opt|
|
109
|
+
if options[opt]
|
110
|
+
options[opt] = ""
|
111
|
+
elsif options.key?(opt)
|
112
|
+
options.delete(opt)
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
108
116
|
options
|
109
117
|
end
|
110
118
|
end
|
data/lib/neovim/remote_object.rb
CHANGED
@@ -23,7 +23,7 @@ module Neovim
|
|
23
23
|
|
24
24
|
# Intercept method calls and delegate to appropriate RPC methods.
|
25
25
|
def method_missing(method_name, *args)
|
26
|
-
if func = @api.
|
26
|
+
if func = @api.function_for_object_method(self, method_name)
|
27
27
|
func.call(@session, @index, *args)
|
28
28
|
else
|
29
29
|
super
|
@@ -36,7 +36,7 @@ module Neovim
|
|
36
36
|
end
|
37
37
|
|
38
38
|
# Extend +methods+ to include RPC methods
|
39
|
-
def methods
|
39
|
+
def methods(*args)
|
40
40
|
super | rpc_methods
|
41
41
|
end
|
42
42
|
|
@@ -48,17 +48,7 @@ module Neovim
|
|
48
48
|
private
|
49
49
|
|
50
50
|
def rpc_methods
|
51
|
-
@api.
|
52
|
-
func.name.sub(/\A#{function_prefix}/, "").to_sym
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
def function_prefix
|
57
|
-
"#{self.class.to_s.split("::").last.downcase}_"
|
58
|
-
end
|
59
|
-
|
60
|
-
def qualify(method_name)
|
61
|
-
:"#{function_prefix}#{method_name}"
|
51
|
+
@api.functions_for_object(self).map(&:method_name)
|
62
52
|
end
|
63
53
|
end
|
64
54
|
end
|
data/lib/neovim/ruby_provider.rb
CHANGED
@@ -32,7 +32,7 @@ module Neovim
|
|
32
32
|
end
|
33
33
|
|
34
34
|
$stderr.define_singleton_method(:write) do |string|
|
35
|
-
client.
|
35
|
+
client.err_writeln(string)
|
36
36
|
end
|
37
37
|
|
38
38
|
begin
|
@@ -81,7 +81,7 @@ module Neovim
|
|
81
81
|
__plug.__send__(:rpc, :ruby_do_range) do |__nvim, *__args|
|
82
82
|
__wrap_client(__nvim) do
|
83
83
|
__start, __stop, __ruby = __args
|
84
|
-
__buffer = __nvim.
|
84
|
+
__buffer = __nvim.get_current_buf
|
85
85
|
|
86
86
|
__update_lines_in_chunks(__buffer, __start, __stop, 5000) do |__lines|
|
87
87
|
__lines.map do |__line|
|
@@ -118,7 +118,7 @@ module Neovim
|
|
118
118
|
yield
|
119
119
|
rescue SyntaxError, LoadError, StandardError => e
|
120
120
|
msg = [e.class, e.message].join(": ")
|
121
|
-
client.
|
121
|
+
client.err_writeln(msg.lines.first.strip)
|
122
122
|
end
|
123
123
|
end
|
124
124
|
|
@@ -3,15 +3,15 @@ require "neovim/ruby_provider/vim"
|
|
3
3
|
module Neovim
|
4
4
|
class Buffer
|
5
5
|
def self.current
|
6
|
-
::Vim.
|
6
|
+
::Vim.get_current_buf
|
7
7
|
end
|
8
8
|
|
9
9
|
def self.count
|
10
|
-
::Vim.
|
10
|
+
::Vim.list_bufs.size
|
11
11
|
end
|
12
12
|
|
13
13
|
def self.[](index)
|
14
|
-
::Vim.
|
14
|
+
::Vim.list_bufs[index]
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
@@ -24,10 +24,10 @@ module Vim
|
|
24
24
|
bufnr = client.evaluate("bufnr('%')")
|
25
25
|
|
26
26
|
$curbuf = @__buffer_cache.fetch(bufnr) do
|
27
|
-
@__buffer_cache[bufnr] = client.
|
27
|
+
@__buffer_cache[bufnr] = client.get_current_buf
|
28
28
|
end
|
29
29
|
|
30
|
-
$curwin = client.
|
30
|
+
$curwin = client.get_current_win
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
@@ -3,15 +3,15 @@ require "neovim/ruby_provider/vim"
|
|
3
3
|
module Neovim
|
4
4
|
class Window
|
5
5
|
def self.current
|
6
|
-
::Vim.
|
6
|
+
::Vim.get_current_win
|
7
7
|
end
|
8
8
|
|
9
9
|
def self.count
|
10
|
-
::Vim.get_current_tabpage.
|
10
|
+
::Vim.get_current_tabpage.list_wins.size
|
11
11
|
end
|
12
12
|
|
13
13
|
def self.[](index)
|
14
|
-
::Vim.get_current_tabpage.
|
14
|
+
::Vim.get_current_tabpage.list_wins[index]
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
data/lib/neovim/session.rb
CHANGED
@@ -48,16 +48,16 @@ module Neovim
|
|
48
48
|
@running = false
|
49
49
|
end
|
50
50
|
|
51
|
-
# Return the +nvim+ API as described in the +
|
51
|
+
# Return the +nvim+ API as described in the +nvim_get_api_info+ call.
|
52
52
|
# Defaults to empty API information.
|
53
53
|
def api
|
54
54
|
@api ||= API.null
|
55
55
|
end
|
56
56
|
|
57
|
-
# Discover the +nvim+ API as described in the +
|
57
|
+
# Discover the +nvim+ API as described in the +nvim_get_api_info+ call,
|
58
58
|
# propagating it down to lower layers of the stack.
|
59
59
|
def discover_api
|
60
|
-
@api = API.new(request(:
|
60
|
+
@api = API.new(request(:nvim_get_api_info)).tap do |api|
|
61
61
|
@rpc.serializer.register_types(api, self)
|
62
62
|
end
|
63
63
|
end
|
@@ -111,7 +111,7 @@ module Neovim
|
|
111
111
|
end
|
112
112
|
end
|
113
113
|
|
114
|
-
# Return the channel ID if registered via +
|
114
|
+
# Return the channel ID if registered via +nvim_get_api_info+.
|
115
115
|
def channel_id
|
116
116
|
api.channel_id
|
117
117
|
end
|
data/lib/neovim/session/api.rb
CHANGED
@@ -5,7 +5,7 @@ module Neovim
|
|
5
5
|
attr_reader :channel_id
|
6
6
|
|
7
7
|
# Represents an unknown API. Used as a stand-in when the API hasn't been
|
8
|
-
# discovered yet via the +
|
8
|
+
# discovered yet via the +nvim_get_api_info+ RPC call.
|
9
9
|
def self.null
|
10
10
|
new([nil, {"functions" => [], "types" => []}])
|
11
11
|
end
|
@@ -17,8 +17,8 @@ module Neovim
|
|
17
17
|
# Return all functions defined by the API.
|
18
18
|
def functions
|
19
19
|
@functions ||= @api_info.fetch("functions").inject({}) do |acc, func|
|
20
|
-
|
21
|
-
acc.merge(name =>
|
20
|
+
function = Function.new(func)
|
21
|
+
acc.merge(function.name => function)
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
@@ -28,38 +28,66 @@ module Neovim
|
|
28
28
|
@types ||= @api_info.fetch("types")
|
29
29
|
end
|
30
30
|
|
31
|
-
|
32
|
-
|
33
|
-
functions.inject([]) do |acc, (name, function)|
|
34
|
-
name =~ /\A#{prefix}/ ? acc.push(function) : acc
|
35
|
-
end
|
31
|
+
def function_for_object_method(obj, method_name)
|
32
|
+
functions[function_name(obj, method_name)]
|
36
33
|
end
|
37
34
|
|
38
|
-
|
39
|
-
|
40
|
-
functions
|
35
|
+
def functions_for_object(obj)
|
36
|
+
pattern = function_pattern(obj)
|
37
|
+
functions.values.select { |func| func.name =~ pattern }
|
41
38
|
end
|
42
39
|
|
43
40
|
# Truncate the output of inspect so console sessions are more pleasant.
|
44
41
|
def inspect
|
45
|
-
"#<#{self.class}:0x%x @types={...} @functions={...}>" % (object_id << 1)
|
42
|
+
"#<#{self.class}:0x%x @channel_id=#{@channel_id.inspect} @types={...} @functions={...}>" % (object_id << 1)
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def function_name(obj, method_name)
|
48
|
+
case obj
|
49
|
+
when Client
|
50
|
+
"nvim_#{method_name}"
|
51
|
+
when Buffer
|
52
|
+
"nvim_buf_#{method_name}"
|
53
|
+
when Window
|
54
|
+
"nvim_win_#{method_name}"
|
55
|
+
when Tabpage
|
56
|
+
"nvim_tabpage_#{method_name}"
|
57
|
+
else
|
58
|
+
raise "Unknown object #{obj.inspect}"
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def function_pattern(obj)
|
63
|
+
case obj
|
64
|
+
when Client
|
65
|
+
/^nvim_(?!(buf|win|tabpage)_)/
|
66
|
+
when Buffer
|
67
|
+
/^nvim_buf_/
|
68
|
+
when Window
|
69
|
+
/^nvim_win_/
|
70
|
+
when Tabpage
|
71
|
+
/^nvim_tabpage_/
|
72
|
+
else
|
73
|
+
raise "Unknown object #{obj.inspect}"
|
74
|
+
end
|
46
75
|
end
|
47
76
|
|
48
77
|
class Function
|
49
|
-
attr_reader :name
|
78
|
+
attr_reader :name
|
79
|
+
|
80
|
+
def initialize(attributes)
|
81
|
+
@name = attributes.fetch("name")
|
82
|
+
end
|
50
83
|
|
51
|
-
def
|
52
|
-
@name
|
84
|
+
def method_name
|
85
|
+
@name.sub(/^nvim_(win_|buf_|tabpage_)?/, "").to_sym
|
53
86
|
end
|
54
87
|
|
55
|
-
# Apply this function to a running RPC session.
|
56
|
-
# +async+ is +false+ or a notification if +async+ is +true+.
|
88
|
+
# Apply this function to a running RPC session.
|
57
89
|
def call(session, *args)
|
58
|
-
|
59
|
-
session.notify(name, *args)
|
60
|
-
else
|
61
|
-
session.request(name, *args)
|
62
|
-
end
|
90
|
+
session.request(name, *args)
|
63
91
|
end
|
64
92
|
end
|
65
93
|
end
|