neovim 0.7.0 → 0.7.1
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 +3 -1
- data/.rubocop.yml +118 -0
- data/.travis.yml +1 -1
- data/CHANGELOG.md +5 -0
- data/Rakefile +29 -16
- data/VimFlavor +1 -0
- data/appveyor.yml +2 -0
- data/lib/neovim/api.rb +2 -1
- data/lib/neovim/buffer.rb +7 -15
- data/lib/neovim/client.rb +3 -3
- data/lib/neovim/connection.rb +6 -7
- data/lib/neovim/event_loop.rb +3 -3
- data/lib/neovim/executable.rb +1 -0
- data/lib/neovim/host.rb +12 -12
- data/lib/neovim/line_range.rb +16 -16
- data/lib/neovim/logging.rb +14 -14
- data/lib/neovim/message.rb +7 -7
- data/lib/neovim/plugin/dsl.rb +4 -4
- data/lib/neovim/plugin/handler.rb +3 -3
- data/lib/neovim/remote_object.rb +3 -3
- data/lib/neovim/ruby_provider.rb +11 -15
- data/lib/neovim/ruby_provider/buffer_ext.rb +1 -0
- data/lib/neovim/ruby_provider/vim.rb +14 -2
- data/lib/neovim/ruby_provider/window_ext.rb +1 -0
- data/lib/neovim/session.rb +7 -10
- data/lib/neovim/version.rb +1 -1
- data/lib/neovim/window.rb +3 -3
- data/neovim.gemspec +5 -4
- data/script/{dump_api → dump_api.rb} +0 -0
- data/script/{generate_docs → generate_docs.rb} +0 -0
- data/script/{j2mp → j2mp.rb} +0 -0
- data/script/{mp2j → mp2j.rb} +0 -0
- data/script/run_acceptance.rb +35 -0
- data/script/validate_docs.rb +29 -0
- data/spec/acceptance/rplugin_autocmd_spec.vim +20 -10
- data/spec/acceptance/rplugin_command_spec.vim +54 -56
- data/spec/acceptance/rplugin_function_spec.vim +28 -22
- data/spec/acceptance/ruby_spec.vim +40 -48
- data/spec/acceptance/rubydo_spec.vim +40 -52
- data/spec/acceptance/rubyfile/nested.rb +1 -1
- data/spec/acceptance/rubyfile_spec.vim +57 -63
- data/spec/acceptance/runtime/init.vim +4 -3
- data/spec/acceptance/runtime/rplugin/ruby/autocmds.rb +6 -2
- data/spec/acceptance/runtime/rplugin/ruby/commands.rb +17 -16
- data/spec/acceptance/runtime/rplugin/ruby/functions.rb +8 -8
- data/spec/helper.rb +2 -2
- data/spec/neovim/api_spec.rb +1 -1
- data/spec/neovim/client_spec.rb +10 -10
- data/spec/neovim/connection_spec.rb +5 -6
- data/spec/neovim/current_spec.rb +12 -12
- data/spec/neovim/executable_spec.rb +2 -2
- data/spec/neovim/host/loader_spec.rb +2 -2
- data/spec/neovim/host_spec.rb +7 -7
- data/spec/neovim/line_range_spec.rb +16 -16
- data/spec/neovim/logging_spec.rb +7 -7
- data/spec/neovim/plugin_spec.rb +6 -6
- data/spec/neovim/ruby_provider/buffer_ext_spec.rb +2 -2
- data/spec/neovim/ruby_provider/vim_spec.rb +4 -4
- data/spec/neovim/ruby_provider/window_ext_spec.rb +8 -8
- data/spec/neovim/session_spec.rb +8 -8
- data/spec/neovim/window_spec.rb +0 -1
- metadata +41 -27
- data/.gitmodules +0 -3
- data/.rspec +0 -1
- data/spec/acceptance/runtime/vader.vim/autoload/vader.vim +0 -348
- data/spec/acceptance/runtime/vader.vim/autoload/vader/assert.vim +0 -116
- data/spec/acceptance/runtime/vader.vim/autoload/vader/helper.vim +0 -43
- data/spec/acceptance/runtime/vader.vim/autoload/vader/parser.vim +0 -179
- data/spec/acceptance/runtime/vader.vim/autoload/vader/syntax.vim +0 -73
- data/spec/acceptance/runtime/vader.vim/autoload/vader/window.vim +0 -205
- data/spec/acceptance/runtime/vader.vim/plugin/vader.vim +0 -37
- data/spec/acceptance_spec.rb +0 -85
data/lib/neovim/line_range.rb
CHANGED
@@ -12,8 +12,8 @@ module Neovim
|
|
12
12
|
# @yieldparam line [String]
|
13
13
|
def each(&block)
|
14
14
|
(0...@buffer.count).each_slice(5000) do |linenos|
|
15
|
-
|
16
|
-
@buffer.get_lines(
|
15
|
+
start, stop = linenos[0], linenos[-1] + 1
|
16
|
+
@buffer.get_lines(start, stop, true).each(&block)
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
@@ -50,15 +50,15 @@ module Neovim
|
|
50
50
|
# @example Get the first two lines using an index and length
|
51
51
|
# line_range[0, 2] # => ["first", "second"]
|
52
52
|
def [](pos, len=nil)
|
53
|
-
if Range
|
53
|
+
if pos.is_a?(Range)
|
54
54
|
@buffer.get_lines(*range_indices(pos), true)
|
55
55
|
else
|
56
|
-
|
57
|
-
lines = @buffer.get_lines(
|
56
|
+
start, stop = length_indices(pos, len || 1)
|
57
|
+
lines = @buffer.get_lines(start, stop, true)
|
58
58
|
len ? lines : lines.first
|
59
59
|
end
|
60
60
|
end
|
61
|
-
|
61
|
+
alias slice []
|
62
62
|
|
63
63
|
# Set a line or line range.
|
64
64
|
#
|
@@ -85,11 +85,11 @@ module Neovim
|
|
85
85
|
*target, val = args
|
86
86
|
pos, len = target
|
87
87
|
|
88
|
-
if Range
|
88
|
+
if pos.is_a?(Range)
|
89
89
|
@buffer.set_lines(*range_indices(pos), true, Array(val))
|
90
90
|
else
|
91
|
-
|
92
|
-
@buffer.set_lines(
|
91
|
+
start, stop = length_indices(pos, len || 1)
|
92
|
+
@buffer.set_lines(start, stop, true, Array(val))
|
93
93
|
end
|
94
94
|
end
|
95
95
|
|
@@ -113,18 +113,18 @@ module Neovim
|
|
113
113
|
private
|
114
114
|
|
115
115
|
def range_indices(range)
|
116
|
-
|
117
|
-
|
118
|
-
|
116
|
+
start = adjust_index(range.begin)
|
117
|
+
stop = adjust_index(range.end)
|
118
|
+
stop += 1 unless range.exclude_end?
|
119
119
|
|
120
|
-
[
|
120
|
+
[start, stop]
|
121
121
|
end
|
122
122
|
|
123
123
|
def length_indices(index, len)
|
124
|
-
|
125
|
-
|
124
|
+
start = adjust_index(index)
|
125
|
+
stop = start < 0 ? [start + len, -1].min : start + len
|
126
126
|
|
127
|
-
[
|
127
|
+
[start, stop]
|
128
128
|
end
|
129
129
|
|
130
130
|
def adjust_index(i)
|
data/lib/neovim/logging.rb
CHANGED
@@ -13,13 +13,12 @@ module Neovim
|
|
13
13
|
def self.logger(env=ENV)
|
14
14
|
return @logger if instance_variable_defined?(:@logger)
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
else
|
19
|
-
@logger = Logger.new(STDERR)
|
20
|
-
end
|
16
|
+
env_file, env_level =
|
17
|
+
env.values_at("NVIM_RUBY_LOG_FILE", "NVIM_RUBY_LOG_LEVEL")
|
21
18
|
|
22
|
-
|
19
|
+
@logger = Logger.new(env_file || STDERR)
|
20
|
+
|
21
|
+
if env_level
|
23
22
|
begin
|
24
23
|
@logger.level = Integer(env_level)
|
25
24
|
rescue ArgumentError
|
@@ -43,7 +42,7 @@ module Neovim
|
|
43
42
|
end
|
44
43
|
|
45
44
|
def self.json_formatter
|
46
|
-
|
45
|
+
lambda do |level, time, _, fields|
|
47
46
|
require "multi_json"
|
48
47
|
|
49
48
|
MultiJson.encode(
|
@@ -52,20 +51,21 @@ module Neovim
|
|
52
51
|
_time: time.strftime(TIMESTAMP_FORMAT)
|
53
52
|
}.merge!(fields)
|
54
53
|
) << "\n"
|
55
|
-
|
54
|
+
end
|
56
55
|
end
|
57
56
|
private_class_method :json_formatter
|
58
57
|
|
58
|
+
# @api private
|
59
59
|
module Helpers
|
60
60
|
private
|
61
61
|
|
62
|
-
def log(level,
|
62
|
+
def log(level, method=nil, &block)
|
63
63
|
begin
|
64
64
|
Logging.logger.public_send(level) do
|
65
65
|
{
|
66
66
|
_class: self.class,
|
67
|
-
_method:
|
68
|
-
}.merge!(
|
67
|
+
_method: method || block.binding.eval("__method__")
|
68
|
+
}.merge!(yield)
|
69
69
|
end
|
70
70
|
rescue => ex
|
71
71
|
Logging.logger.error("failed to log: #{ex.inspect}")
|
@@ -74,12 +74,12 @@ module Neovim
|
|
74
74
|
# Inability to log shouldn't abort process
|
75
75
|
end
|
76
76
|
|
77
|
-
def log_exception(level, ex,
|
78
|
-
log(level,
|
77
|
+
def log_exception(level, ex, method)
|
78
|
+
log(level, method) do
|
79
79
|
{exception: ex.class, message: ex.message}
|
80
80
|
end
|
81
81
|
|
82
|
-
log(:debug,
|
82
|
+
log(:debug, method) do
|
83
83
|
{exception: ex.class, message: ex.message, backtrace: ex.backtrace}
|
84
84
|
end
|
85
85
|
end
|
data/lib/neovim/message.rb
CHANGED
@@ -29,13 +29,13 @@ module Neovim
|
|
29
29
|
Notification.new(method, args)
|
30
30
|
end
|
31
31
|
|
32
|
-
|
32
|
+
Request = Struct.new(:id, :method_name, :arguments) do
|
33
33
|
def to_a
|
34
34
|
[0, id, method_name, arguments]
|
35
35
|
end
|
36
36
|
|
37
|
-
def received(_
|
38
|
-
|
37
|
+
def received(_)
|
38
|
+
yield self
|
39
39
|
end
|
40
40
|
|
41
41
|
def sync?
|
@@ -43,7 +43,7 @@ module Neovim
|
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
46
|
-
|
46
|
+
Response = Struct.new(:request_id, :error, :value) do
|
47
47
|
def to_a
|
48
48
|
[1, request_id, error, value]
|
49
49
|
end
|
@@ -53,13 +53,13 @@ module Neovim
|
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
|
-
|
56
|
+
Notification = Struct.new(:method_name, :arguments) do
|
57
57
|
def to_a
|
58
58
|
[2, method_name, arguments]
|
59
59
|
end
|
60
60
|
|
61
|
-
def received(_
|
62
|
-
|
61
|
+
def received(_)
|
62
|
+
yield self
|
63
63
|
end
|
64
64
|
|
65
65
|
def sync?
|
data/lib/neovim/plugin/dsl.rb
CHANGED
@@ -85,14 +85,14 @@ module Neovim
|
|
85
85
|
@plugin.handlers.push(Handler.unqualified(name, block))
|
86
86
|
end
|
87
87
|
|
88
|
-
def register_handler(type, name,
|
88
|
+
def register_handler(type, name, options, block)
|
89
89
|
if type == :autocmd
|
90
|
-
options =
|
90
|
+
options = options.dup
|
91
91
|
else
|
92
|
-
options = standardize(
|
92
|
+
options = standardize(options.dup)
|
93
93
|
end
|
94
94
|
|
95
|
-
sync = options.delete(:sync)
|
95
|
+
sync = !!options.delete(:sync)
|
96
96
|
|
97
97
|
@plugin.handlers.push(
|
98
98
|
Handler.new(@plugin.source, type, name, sync, options, block)
|
@@ -12,7 +12,7 @@ module Neovim
|
|
12
12
|
@source = source
|
13
13
|
@type = type.to_sym if type.respond_to?(:to_sym)
|
14
14
|
@name = name.to_s
|
15
|
-
@sync =
|
15
|
+
@sync = sync
|
16
16
|
@options = options
|
17
17
|
@block = block || -> {}
|
18
18
|
@qualified =
|
@@ -20,7 +20,7 @@ module Neovim
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def sync?
|
23
|
-
|
23
|
+
!!@sync
|
24
24
|
end
|
25
25
|
|
26
26
|
def qualified?
|
@@ -43,7 +43,7 @@ module Neovim
|
|
43
43
|
type: @type,
|
44
44
|
name: @name,
|
45
45
|
sync: @sync,
|
46
|
-
opts: @options
|
46
|
+
opts: @options
|
47
47
|
}
|
48
48
|
end
|
49
49
|
|
data/lib/neovim/remote_object.rb
CHANGED
@@ -23,15 +23,15 @@ 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.function_for_object_method(self, method_name)
|
26
|
+
if (func = @api.function_for_object_method(self, method_name))
|
27
27
|
func.call(@session, @index, *args)
|
28
28
|
else
|
29
29
|
super
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
|
-
# Extend +
|
34
|
-
def
|
33
|
+
# Extend +respond_to_missing?+ to support RPC methods.
|
34
|
+
def respond_to_missing?(method_name, *)
|
35
35
|
super || rpc_methods.include?(method_name.to_sym)
|
36
36
|
end
|
37
37
|
|
data/lib/neovim/ruby_provider.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require "neovim/ruby_provider/vim"
|
2
2
|
require "neovim/ruby_provider/buffer_ext"
|
3
3
|
require "neovim/ruby_provider/window_ext"
|
4
|
+
require "stringio"
|
4
5
|
|
5
6
|
module Neovim
|
6
7
|
# This class is used to define a +Neovim::Plugin+ to act as a backend for the
|
@@ -21,10 +22,7 @@ module Neovim
|
|
21
22
|
end
|
22
23
|
end
|
23
24
|
|
24
|
-
#
|
25
|
-
#
|
26
|
-
# 1. Monkeypatch +$stdout+ and +$stderr+ to write to +nvim+.
|
27
|
-
# 2. Define the +DirChanged+ event to update the provider's pwd.
|
25
|
+
# Define the +DirChanged+ event to update the provider's pwd.
|
28
26
|
def self.__define_setup(plug)
|
29
27
|
plug.__send__(:setup) do |client|
|
30
28
|
begin
|
@@ -108,12 +106,10 @@ module Neovim
|
|
108
106
|
private_class_method :__wrap_client
|
109
107
|
|
110
108
|
def self.__with_exception_handling(client)
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
client.err_writeln(msg)
|
116
|
-
end
|
109
|
+
yield
|
110
|
+
rescue ScriptError, StandardError => e
|
111
|
+
msg = [e.class, e.message].join(": ")
|
112
|
+
client.err_writeln(msg)
|
117
113
|
end
|
118
114
|
private_class_method :__with_exception_handling
|
119
115
|
|
@@ -126,8 +122,8 @@ module Neovim
|
|
126
122
|
begin
|
127
123
|
yield
|
128
124
|
|
129
|
-
client.out_write($stdout.string + $/) if $stdout.
|
130
|
-
client.err_writeln($stderr.string) if $stderr.
|
125
|
+
client.out_write($stdout.string + $/) if $stdout.size > 0
|
126
|
+
client.err_writeln($stderr.string) if $stderr.size > 0
|
131
127
|
ensure
|
132
128
|
$stdout = old_stdout
|
133
129
|
$stderr = old_stderr
|
@@ -137,10 +133,10 @@ module Neovim
|
|
137
133
|
|
138
134
|
def self.__update_lines_in_chunks(buffer, start, stop, size)
|
139
135
|
(start..stop).each_slice(size) do |linenos|
|
140
|
-
|
141
|
-
lines = buffer.get_lines(
|
136
|
+
start, stop = linenos[0] - 1, linenos[-1]
|
137
|
+
lines = buffer.get_lines(start, stop, true)
|
142
138
|
|
143
|
-
buffer.set_lines(
|
139
|
+
buffer.set_lines(start, stop, true, yield(lines))
|
144
140
|
end
|
145
141
|
end
|
146
142
|
private_class_method :__update_lines_in_chunks
|
@@ -15,8 +15,20 @@ 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
|
-
@__client.
|
19
|
-
|
18
|
+
if @__client.respond_to?(method)
|
19
|
+
@__client.public_send(method, *args, &block).tap do
|
20
|
+
__refresh_globals(@__client)
|
21
|
+
end
|
22
|
+
else
|
23
|
+
super
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.respond_to_missing?(method, *args)
|
28
|
+
if @__client
|
29
|
+
@__client.send(:respond_to_missing?, method, *args)
|
30
|
+
else
|
31
|
+
super
|
20
32
|
end
|
21
33
|
end
|
22
34
|
|
data/lib/neovim/session.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require "neovim/logging"
|
2
2
|
require "fiber"
|
3
|
+
require "thread"
|
3
4
|
|
4
5
|
module Neovim
|
5
6
|
# Wraps an event loop in a synchronous API using +Fiber+s.
|
@@ -22,8 +23,8 @@ module Neovim
|
|
22
23
|
def run(&block)
|
23
24
|
@running = true
|
24
25
|
|
25
|
-
while
|
26
|
-
Fiber.new {
|
26
|
+
while (pending = @pending_messages.shift)
|
27
|
+
Fiber.new { pending.received(@response_handlers, &block) }.resume
|
27
28
|
end
|
28
29
|
|
29
30
|
return unless @running
|
@@ -86,10 +87,10 @@ module Neovim
|
|
86
87
|
def blocking_response
|
87
88
|
response = nil
|
88
89
|
|
89
|
-
@response_handlers[@request_id] =
|
90
|
+
@response_handlers[@request_id] = lambda do |res|
|
90
91
|
response = res
|
91
92
|
stop
|
92
|
-
|
93
|
+
end
|
93
94
|
|
94
95
|
run { |message| @pending_messages << message }
|
95
96
|
response
|
@@ -97,11 +98,7 @@ module Neovim
|
|
97
98
|
|
98
99
|
def yielding_response
|
99
100
|
fiber = Fiber.current
|
100
|
-
|
101
|
-
@response_handlers[@request_id] = -> (response) {
|
102
|
-
fiber.resume(response)
|
103
|
-
}
|
104
|
-
|
101
|
+
@response_handlers[@request_id] = ->(response) { fiber.resume(response) }
|
105
102
|
Fiber.yield
|
106
103
|
end
|
107
104
|
|
@@ -110,7 +107,7 @@ module Neovim
|
|
110
107
|
yield if block_given?
|
111
108
|
else
|
112
109
|
raise(
|
113
|
-
"A Ruby plugin attempted to call neovim outside of the main thread, "
|
110
|
+
"A Ruby plugin attempted to call neovim outside of the main thread, " \
|
114
111
|
"which is not yet supported by the neovim gem."
|
115
112
|
)
|
116
113
|
end
|
data/lib/neovim/version.rb
CHANGED
data/lib/neovim/window.rb
CHANGED
@@ -56,9 +56,9 @@ module Neovim
|
|
56
56
|
# @param coords [Array(Integer, Integer)]
|
57
57
|
# @return [Array(Integer, Integer)]
|
58
58
|
def cursor=(coords)
|
59
|
-
|
60
|
-
x = [
|
61
|
-
y = [
|
59
|
+
x, y = coords
|
60
|
+
x = [x, 1].max
|
61
|
+
y = [y, 0].max + 1
|
62
62
|
@session.request(:nvim_eval, "cursor(#{x}, #{y})")
|
63
63
|
end
|
64
64
|
|
data/neovim.gemspec
CHANGED
@@ -1,6 +1,5 @@
|
|
1
|
-
# coding: utf-8
|
2
1
|
lib = File.expand_path("../lib", __FILE__)
|
3
|
-
|
2
|
+
$:.unshift(lib) unless $:.include?(lib)
|
4
3
|
require "neovim/version"
|
5
4
|
|
6
5
|
Gem::Specification.new do |spec|
|
@@ -23,9 +22,11 @@ Gem::Specification.new do |spec|
|
|
23
22
|
spec.add_dependency "multi_json", "~> 1.0"
|
24
23
|
|
25
24
|
spec.add_development_dependency "bundler"
|
26
|
-
spec.add_development_dependency "
|
25
|
+
spec.add_development_dependency "coveralls"
|
27
26
|
spec.add_development_dependency "pry"
|
28
27
|
spec.add_development_dependency "pry-byebug"
|
29
|
-
spec.add_development_dependency "
|
28
|
+
spec.add_development_dependency "rake"
|
30
29
|
spec.add_development_dependency "rspec", "~> 3.0"
|
30
|
+
spec.add_development_dependency "rubocop", "0.52.1"
|
31
|
+
spec.add_development_dependency "vim-flavor", "2.2.2"
|
31
32
|
end
|
File without changes
|
File without changes
|