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.
Files changed (73) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +3 -1
  3. data/.rubocop.yml +118 -0
  4. data/.travis.yml +1 -1
  5. data/CHANGELOG.md +5 -0
  6. data/Rakefile +29 -16
  7. data/VimFlavor +1 -0
  8. data/appveyor.yml +2 -0
  9. data/lib/neovim/api.rb +2 -1
  10. data/lib/neovim/buffer.rb +7 -15
  11. data/lib/neovim/client.rb +3 -3
  12. data/lib/neovim/connection.rb +6 -7
  13. data/lib/neovim/event_loop.rb +3 -3
  14. data/lib/neovim/executable.rb +1 -0
  15. data/lib/neovim/host.rb +12 -12
  16. data/lib/neovim/line_range.rb +16 -16
  17. data/lib/neovim/logging.rb +14 -14
  18. data/lib/neovim/message.rb +7 -7
  19. data/lib/neovim/plugin/dsl.rb +4 -4
  20. data/lib/neovim/plugin/handler.rb +3 -3
  21. data/lib/neovim/remote_object.rb +3 -3
  22. data/lib/neovim/ruby_provider.rb +11 -15
  23. data/lib/neovim/ruby_provider/buffer_ext.rb +1 -0
  24. data/lib/neovim/ruby_provider/vim.rb +14 -2
  25. data/lib/neovim/ruby_provider/window_ext.rb +1 -0
  26. data/lib/neovim/session.rb +7 -10
  27. data/lib/neovim/version.rb +1 -1
  28. data/lib/neovim/window.rb +3 -3
  29. data/neovim.gemspec +5 -4
  30. data/script/{dump_api → dump_api.rb} +0 -0
  31. data/script/{generate_docs → generate_docs.rb} +0 -0
  32. data/script/{j2mp → j2mp.rb} +0 -0
  33. data/script/{mp2j → mp2j.rb} +0 -0
  34. data/script/run_acceptance.rb +35 -0
  35. data/script/validate_docs.rb +29 -0
  36. data/spec/acceptance/rplugin_autocmd_spec.vim +20 -10
  37. data/spec/acceptance/rplugin_command_spec.vim +54 -56
  38. data/spec/acceptance/rplugin_function_spec.vim +28 -22
  39. data/spec/acceptance/ruby_spec.vim +40 -48
  40. data/spec/acceptance/rubydo_spec.vim +40 -52
  41. data/spec/acceptance/rubyfile/nested.rb +1 -1
  42. data/spec/acceptance/rubyfile_spec.vim +57 -63
  43. data/spec/acceptance/runtime/init.vim +4 -3
  44. data/spec/acceptance/runtime/rplugin/ruby/autocmds.rb +6 -2
  45. data/spec/acceptance/runtime/rplugin/ruby/commands.rb +17 -16
  46. data/spec/acceptance/runtime/rplugin/ruby/functions.rb +8 -8
  47. data/spec/helper.rb +2 -2
  48. data/spec/neovim/api_spec.rb +1 -1
  49. data/spec/neovim/client_spec.rb +10 -10
  50. data/spec/neovim/connection_spec.rb +5 -6
  51. data/spec/neovim/current_spec.rb +12 -12
  52. data/spec/neovim/executable_spec.rb +2 -2
  53. data/spec/neovim/host/loader_spec.rb +2 -2
  54. data/spec/neovim/host_spec.rb +7 -7
  55. data/spec/neovim/line_range_spec.rb +16 -16
  56. data/spec/neovim/logging_spec.rb +7 -7
  57. data/spec/neovim/plugin_spec.rb +6 -6
  58. data/spec/neovim/ruby_provider/buffer_ext_spec.rb +2 -2
  59. data/spec/neovim/ruby_provider/vim_spec.rb +4 -4
  60. data/spec/neovim/ruby_provider/window_ext_spec.rb +8 -8
  61. data/spec/neovim/session_spec.rb +8 -8
  62. data/spec/neovim/window_spec.rb +0 -1
  63. metadata +41 -27
  64. data/.gitmodules +0 -3
  65. data/.rspec +0 -1
  66. data/spec/acceptance/runtime/vader.vim/autoload/vader.vim +0 -348
  67. data/spec/acceptance/runtime/vader.vim/autoload/vader/assert.vim +0 -116
  68. data/spec/acceptance/runtime/vader.vim/autoload/vader/helper.vim +0 -43
  69. data/spec/acceptance/runtime/vader.vim/autoload/vader/parser.vim +0 -179
  70. data/spec/acceptance/runtime/vader.vim/autoload/vader/syntax.vim +0 -73
  71. data/spec/acceptance/runtime/vader.vim/autoload/vader/window.vim +0 -205
  72. data/spec/acceptance/runtime/vader.vim/plugin/vader.vim +0 -37
  73. data/spec/acceptance_spec.rb +0 -85
@@ -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
- _start, _stop = linenos[0], linenos[-1] + 1
16
- @buffer.get_lines(_start, _stop, true).each(&block)
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 === pos
53
+ if pos.is_a?(Range)
54
54
  @buffer.get_lines(*range_indices(pos), true)
55
55
  else
56
- _begin, _end = length_indices(pos, len || 1)
57
- lines = @buffer.get_lines(_begin, _end, true)
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
- alias_method :slice, :[]
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 === pos
88
+ if pos.is_a?(Range)
89
89
  @buffer.set_lines(*range_indices(pos), true, Array(val))
90
90
  else
91
- _begin, _end = length_indices(pos, len || 1)
92
- @buffer.set_lines(_begin, _end, true, Array(val))
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
- _begin = adjust_index(range.begin)
117
- _end = adjust_index(range.end)
118
- _end += 1 unless range.exclude_end?
116
+ start = adjust_index(range.begin)
117
+ stop = adjust_index(range.end)
118
+ stop += 1 unless range.exclude_end?
119
119
 
120
- [_begin, _end]
120
+ [start, stop]
121
121
  end
122
122
 
123
123
  def length_indices(index, len)
124
- _begin = adjust_index(index)
125
- _end = _begin < 0 ? [_begin + len, -1].min : _begin + len
124
+ start = adjust_index(index)
125
+ stop = start < 0 ? [start + len, -1].min : start + len
126
126
 
127
- [_begin, _end]
127
+ [start, stop]
128
128
  end
129
129
 
130
130
  def adjust_index(i)
@@ -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
- if env_file = env["NVIM_RUBY_LOG_FILE"]
17
- @logger = Logger.new(env_file)
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
- if env_level = env["NVIM_RUBY_LOG_LEVEL"]
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
- -> (level, time, _, fields) {
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, _method=nil, &block)
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: _method || block.binding.eval("__method__"),
68
- }.merge!(block.call)
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, _method)
78
- log(level, _method) do
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, _method) do
82
+ log(:debug, method) do
83
83
  {exception: ex.class, message: ex.message, backtrace: ex.backtrace}
84
84
  end
85
85
  end
@@ -29,13 +29,13 @@ module Neovim
29
29
  Notification.new(method, args)
30
30
  end
31
31
 
32
- class Request < Struct.new(:id, :method_name, :arguments)
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(_, &block)
38
- block.call(self)
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
- class Response < Struct.new(:request_id, :error, :value)
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
- class Notification < Struct.new(:method_name, :arguments)
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(_, &block)
62
- block.call(self)
61
+ def received(_)
62
+ yield self
63
63
  end
64
64
 
65
65
  def sync?
@@ -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, _options, block)
88
+ def register_handler(type, name, options, block)
89
89
  if type == :autocmd
90
- options = _options.dup
90
+ options = options.dup
91
91
  else
92
- options = standardize(_options.dup)
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 = !!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
- @sync
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
 
@@ -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 +respond_to?+ to support RPC methods.
34
- def respond_to?(method_name, *)
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
 
@@ -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
- # Bootstrap the provider client:
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
- begin
112
- yield
113
- rescue ScriptError, StandardError => e
114
- msg = [e.class, e.message].join(": ")
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.length > 0
130
- client.err_writeln($stderr.string) if $stderr.length > 0
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
- _start, _stop = linenos[0]-1, linenos[-1]
141
- lines = buffer.get_lines(_start, _stop, true)
136
+ start, stop = linenos[0] - 1, linenos[-1]
137
+ lines = buffer.get_lines(start, stop, true)
142
138
 
143
- buffer.set_lines(_start, _stop, true, yield(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
@@ -1,6 +1,7 @@
1
1
  require "neovim/ruby_provider/vim"
2
2
 
3
3
  module Neovim
4
+ # @api private
4
5
  class Buffer
5
6
  def self.current
6
7
  ::Vim.get_current_buf
@@ -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.public_send(method, *args, &block).tap do
19
- __refresh_globals(@__client)
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
 
@@ -1,6 +1,7 @@
1
1
  require "neovim/ruby_provider/vim"
2
2
 
3
3
  module Neovim
4
+ # @api private
4
5
  class Window
5
6
  def self.current
6
7
  ::Vim.get_current_win
@@ -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 message = @pending_messages.shift
26
- Fiber.new { message.received(@response_handlers, &block) }.resume
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] = -> (res) {
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
@@ -1,3 +1,3 @@
1
1
  module Neovim
2
- VERSION = Gem::Version.new("0.7.0")
2
+ VERSION = Gem::Version.new("0.7.1")
3
3
  end
@@ -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
- _x, _y = coords
60
- x = [_x, 1].max
61
- y = [_y, 0].max + 1
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
 
@@ -1,6 +1,5 @@
1
- # coding: utf-8
2
1
  lib = File.expand_path("../lib", __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
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 "rake"
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 "coveralls"
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