neovim 0.7.0 → 0.7.1

Sign up to get free protection for your applications and to get access to all the features.
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