neovim 0.3.3 → 0.4.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 -0
- data/.gitmodules +3 -0
- data/.travis.yml +1 -1
- data/CHANGELOG.md +6 -0
- data/Rakefile +14 -3
- data/lib/neovim.rb +10 -1
- data/lib/neovim/buffer.rb +2 -0
- data/lib/neovim/client.rb +2 -0
- data/lib/neovim/executable.rb +33 -0
- data/lib/neovim/ruby_provider.rb +32 -58
- data/lib/neovim/ruby_provider/vim.rb +15 -1
- data/lib/neovim/tabpage.rb +3 -0
- data/lib/neovim/version.rb +1 -1
- data/lib/neovim/window.rb +3 -0
- data/script/acceptance_tests +46 -0
- data/script/generate_docs +8 -1
- data/spec/acceptance/rplugin_spec.vim +19 -0
- data/spec/acceptance/ruby_spec.vim +94 -0
- data/spec/acceptance/rubydo_spec.vim +66 -0
- data/spec/acceptance/rubyfile/call_foo.rb +1 -0
- data/spec/acceptance/rubyfile/curbuf.rb +1 -0
- data/spec/acceptance/rubyfile/curbuf_ivar_get.rb +1 -0
- data/spec/acceptance/rubyfile/curbuf_ivar_set.rb +1 -0
- data/spec/acceptance/rubyfile/curwin.rb +1 -0
- data/spec/acceptance/rubyfile/define_foo.rb +3 -0
- data/spec/acceptance/rubyfile/raise_standard_error.rb +1 -0
- data/spec/acceptance/rubyfile/raise_syntax_error.rb +1 -0
- data/spec/acceptance/rubyfile/set_pwd_after.rb +1 -0
- data/spec/acceptance/rubyfile/set_pwd_before.rb +1 -0
- data/spec/acceptance/rubyfile/vim_constants.rb +2 -0
- data/spec/acceptance/rubyfile_spec.vim +111 -0
- data/spec/acceptance/runtime/init.vim +1 -0
- data/spec/acceptance/runtime/rplugin/ruby/plugin.rb +13 -0
- data/spec/documentation_spec.rb +24 -0
- data/spec/helper.rb +20 -45
- data/spec/neovim/executable_spec.rb +32 -0
- data/spec/neovim/host_spec.rb +2 -2
- data/spec/neovim/ruby_provider/vim_spec.rb +38 -0
- data/spec/neovim_spec.rb +6 -0
- data/spec/support.rb +45 -0
- metadata +46 -7
- data/spec/acceptance/neovim-ruby-host_spec.rb +0 -69
- data/spec/acceptance/ruby_provider_spec.rb +0 -256
@@ -0,0 +1,66 @@
|
|
1
|
+
Given:
|
2
|
+
a
|
3
|
+
b
|
4
|
+
c
|
5
|
+
d
|
6
|
+
|
7
|
+
Execute (Update one line using `$_`):
|
8
|
+
2rubydo $_.upcase!
|
9
|
+
|
10
|
+
Expect:
|
11
|
+
a
|
12
|
+
B
|
13
|
+
c
|
14
|
+
d
|
15
|
+
|
16
|
+
Execute (Update a range of lines using `$_`):
|
17
|
+
2,3rubydo $_.upcase!
|
18
|
+
|
19
|
+
Expect:
|
20
|
+
a
|
21
|
+
B
|
22
|
+
C
|
23
|
+
d
|
24
|
+
|
25
|
+
Execute (Update all lines using `$_`):
|
26
|
+
%rubydo $_.upcase!
|
27
|
+
|
28
|
+
Execute (Raise a Ruby standard error):
|
29
|
+
try
|
30
|
+
1rubydo raise "BOOM"
|
31
|
+
catch /BOOM/
|
32
|
+
endtry
|
33
|
+
|
34
|
+
1rubydo $_.replace("still works")
|
35
|
+
|
36
|
+
Expect:
|
37
|
+
still works
|
38
|
+
b
|
39
|
+
c
|
40
|
+
d
|
41
|
+
|
42
|
+
Execute (Raise a Ruby syntax error):
|
43
|
+
try
|
44
|
+
1rubydo puts[
|
45
|
+
catch /SyntaxError/
|
46
|
+
endtry
|
47
|
+
|
48
|
+
1rubydo $_.replace("still works")
|
49
|
+
|
50
|
+
Expect:
|
51
|
+
still works
|
52
|
+
b
|
53
|
+
c
|
54
|
+
d
|
55
|
+
|
56
|
+
Given:
|
57
|
+
x
|
58
|
+
|
59
|
+
Execute (Add a large number of lines):
|
60
|
+
1yank
|
61
|
+
silent normal 6000p
|
62
|
+
%rubydo $_.succ!
|
63
|
+
|
64
|
+
AssertEqual "y", getline(1)
|
65
|
+
AssertEqual "y", getline(6001)
|
66
|
+
AssertEqual "", getline(6002)
|
@@ -0,0 +1 @@
|
|
1
|
+
foo
|
@@ -0,0 +1 @@
|
|
1
|
+
$curbuf[1] = "first"
|
@@ -0,0 +1 @@
|
|
1
|
+
Vim.command("let g:foo = #{$curbuf.instance_variable_get(:@foo)}")
|
@@ -0,0 +1 @@
|
|
1
|
+
$curbuf.instance_variable_set(:@foo, 123)
|
@@ -0,0 +1 @@
|
|
1
|
+
$curwin.buffer[1] = "first"
|
@@ -0,0 +1 @@
|
|
1
|
+
raise "BOOM"
|
@@ -0,0 +1 @@
|
|
1
|
+
puts [
|
@@ -0,0 +1 @@
|
|
1
|
+
Vim.command("let g:pwd_after = '#{Dir.pwd}'")
|
@@ -0,0 +1 @@
|
|
1
|
+
Vim.command("let g:pwd_before = '#{Dir.pwd}'")
|
@@ -0,0 +1,111 @@
|
|
1
|
+
Execute (Set nvim_version):
|
2
|
+
if has('nvim')
|
3
|
+
let g:nvim_version = api_info()['version']
|
4
|
+
else
|
5
|
+
let g:nvim_version = {'major': 99, 'minor': 99, 'patch': 99}
|
6
|
+
endif
|
7
|
+
|
8
|
+
Given:
|
9
|
+
one
|
10
|
+
two
|
11
|
+
|
12
|
+
Execute (Access `Vim` and `VIM` constants):
|
13
|
+
rubyfile ./spec/acceptance/rubyfile/vim_constants.rb
|
14
|
+
|
15
|
+
Expect:
|
16
|
+
first
|
17
|
+
second
|
18
|
+
|
19
|
+
Execute (Access `$curbuf` global variable):
|
20
|
+
rubyfile ./spec/acceptance/rubyfile/curbuf.rb
|
21
|
+
|
22
|
+
Expect:
|
23
|
+
first
|
24
|
+
two
|
25
|
+
|
26
|
+
Execute (Access `$curwin` global variable):
|
27
|
+
rubyfile ./spec/acceptance/rubyfile/curwin.rb
|
28
|
+
|
29
|
+
Expect:
|
30
|
+
first
|
31
|
+
two
|
32
|
+
|
33
|
+
Execute (Define a Ruby method):
|
34
|
+
rubyfile ./spec/acceptance/rubyfile/define_foo.rb
|
35
|
+
|
36
|
+
Execute (Call a Ruby method):
|
37
|
+
rubyfile ./spec/acceptance/rubyfile/call_foo.rb
|
38
|
+
|
39
|
+
Then:
|
40
|
+
AssertEqual 1, g:called
|
41
|
+
|
42
|
+
Execute (Update instance state on $curbuf):
|
43
|
+
rubyfile ./spec/acceptance/rubyfile/curbuf_ivar_set.rb
|
44
|
+
|
45
|
+
Execute (Access instance state on $curbuf):
|
46
|
+
rubyfile ./spec/acceptance/rubyfile/curbuf_ivar_get.rb
|
47
|
+
|
48
|
+
Then:
|
49
|
+
AssertEqual 123, g:foo
|
50
|
+
|
51
|
+
Execute (Change the working directory explicitly):
|
52
|
+
let g:rubyfile = getcwd() . "/spec/acceptance/rubyfile/set_pwd_before.rb"
|
53
|
+
cd /
|
54
|
+
exec "rubyfile " . g:rubyfile
|
55
|
+
cd -
|
56
|
+
|
57
|
+
Then:
|
58
|
+
if g:nvim_version['major'] > 0 || g:nvim_version['minor'] >= 2
|
59
|
+
AssertEqual "/", g:pwd_before
|
60
|
+
endif
|
61
|
+
|
62
|
+
Execute (Change the working directory implicitly):
|
63
|
+
let g:before_file = getcwd() . "/spec/acceptance/rubyfile/set_pwd_before.rb"
|
64
|
+
let g:after_file = getcwd() . "/spec/acceptance/rubyfile/set_pwd_after.rb"
|
65
|
+
|
66
|
+
split | lcd /
|
67
|
+
exec "rubyfile " . g:before_file
|
68
|
+
wincmd p
|
69
|
+
exec "rubyfile " . g:after_file
|
70
|
+
wincmd p | lcd -
|
71
|
+
|
72
|
+
Then:
|
73
|
+
if g:nvim_version['major'] > 0 || g:nvim_version['minor'] >= 2
|
74
|
+
AssertNotEqual g:pwd_before, g:pwd_after
|
75
|
+
endif
|
76
|
+
|
77
|
+
Execute (Raise a Ruby load error):
|
78
|
+
try
|
79
|
+
rubyfile /foo/bar/baz
|
80
|
+
catch /LoadError/
|
81
|
+
endtry
|
82
|
+
|
83
|
+
ruby $curbuf[1] = "still works"
|
84
|
+
|
85
|
+
Expect:
|
86
|
+
still works
|
87
|
+
two
|
88
|
+
|
89
|
+
Execute (Raise a Ruby standard error):
|
90
|
+
try
|
91
|
+
rubyfile ./spec/acceptance/rubyfile/raise_standard_error.rb
|
92
|
+
catch /BOOM/
|
93
|
+
endtry
|
94
|
+
|
95
|
+
ruby $curbuf[1] = "still works"
|
96
|
+
|
97
|
+
Expect:
|
98
|
+
still works
|
99
|
+
two
|
100
|
+
|
101
|
+
Execute (Raise a Ruby syntax error):
|
102
|
+
try
|
103
|
+
rubyfile ./spec/acceptance/rubyfile/raise_syntax_error.rb
|
104
|
+
catch /SyntaxError/
|
105
|
+
endtry
|
106
|
+
|
107
|
+
ruby $curbuf[1] = "still works"
|
108
|
+
|
109
|
+
Expect:
|
110
|
+
still works
|
111
|
+
two
|
@@ -0,0 +1 @@
|
|
1
|
+
set rtp=vendor/vader.vim,spec/acceptance/runtime,$VIMRUNTIME
|
@@ -0,0 +1,13 @@
|
|
1
|
+
Neovim.plugin do |plug|
|
2
|
+
plug.command(:PlugSetFoo, :nargs => 1) do |nvim, str|
|
3
|
+
nvim.command("let g:PlugFoo = '#{str}'")
|
4
|
+
end
|
5
|
+
|
6
|
+
plug.function(:PlugAdd, :args => 2, :sync => true) do |nvim, x, y|
|
7
|
+
x + y
|
8
|
+
end
|
9
|
+
|
10
|
+
plug.autocmd(:BufEnter, :pattern => "*.rb") do |nvim|
|
11
|
+
nvim.command("let g:PlugInRuby = 1")
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require "json"
|
2
|
+
require "net/http"
|
3
|
+
require "open-uri"
|
4
|
+
|
5
|
+
RSpec.describe "neovim-ruby documentation" do
|
6
|
+
it "has up-to-date generated method docs" do
|
7
|
+
begin
|
8
|
+
url = "https://api.github.com/repos/neovim/neovim/releases/latest"
|
9
|
+
response = open(url) { |json| JSON.load(json) }
|
10
|
+
|
11
|
+
client_file = File.read(
|
12
|
+
File.expand_path("../../lib/neovim/client.rb", __FILE__)
|
13
|
+
)
|
14
|
+
docs_version = client_file[
|
15
|
+
/The methods documented here were generated using (.+)$/,
|
16
|
+
1
|
17
|
+
]
|
18
|
+
|
19
|
+
expect(docs_version).to eq(response["name"])
|
20
|
+
rescue SocketError => e
|
21
|
+
skip "Skipping: #{e}"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/spec/helper.rb
CHANGED
@@ -8,52 +8,11 @@ end
|
|
8
8
|
require "fileutils"
|
9
9
|
require "neovim"
|
10
10
|
require "pry"
|
11
|
-
require "
|
11
|
+
require "rubygems"
|
12
12
|
require "stringio"
|
13
13
|
require "timeout"
|
14
14
|
|
15
|
-
|
16
|
-
def self.workspace
|
17
|
-
File.expand_path("../workspace", __FILE__)
|
18
|
-
end
|
19
|
-
|
20
|
-
def self.socket_path
|
21
|
-
file_path("nvim.sock")
|
22
|
-
end
|
23
|
-
|
24
|
-
def self.tcp_port
|
25
|
-
server = TCPServer.new("127.0.0.1", 0)
|
26
|
-
|
27
|
-
begin
|
28
|
-
server.addr[1]
|
29
|
-
ensure
|
30
|
-
server.close
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
def self.file_path(name)
|
35
|
-
File.join(workspace, name)
|
36
|
-
end
|
37
|
-
|
38
|
-
def self.setup_workspace
|
39
|
-
FileUtils.mkdir_p(workspace)
|
40
|
-
end
|
41
|
-
|
42
|
-
def self.teardown_workspace
|
43
|
-
FileUtils.rm_rf(workspace)
|
44
|
-
end
|
45
|
-
|
46
|
-
def self.child_argv
|
47
|
-
nvim_exe = ENV.fetch("NVIM_EXECUTABLE", "nvim")
|
48
|
-
[nvim_exe, "--headless", "-i", "NONE", "-u", "NONE", "-n"]
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
unless system("#{Support.child_argv.shelljoin} --version | grep -q NVIM")
|
53
|
-
warn("Failed to load nvim. See installation instructions:")
|
54
|
-
warn("https://github.com/neovim/neovim/wiki/Installing-Neovim")
|
55
|
-
exit(1)
|
56
|
-
end
|
15
|
+
require File.expand_path("../support.rb", __FILE__)
|
57
16
|
|
58
17
|
RSpec.configure do |config|
|
59
18
|
config.expect_with :rspec do |exp|
|
@@ -74,21 +33,37 @@ RSpec.configure do |config|
|
|
74
33
|
end
|
75
34
|
end
|
76
35
|
|
77
|
-
config.around(:example, :
|
36
|
+
config.around(:example, :silence_warnings) do |spec|
|
78
37
|
old_logger = Neovim.logger
|
79
38
|
log_target = StringIO.new
|
80
39
|
Neovim.logger = Logger.new(log_target)
|
40
|
+
Neovim.logger.level = Logger::WARN
|
81
41
|
|
82
42
|
begin
|
83
43
|
spec.run
|
84
44
|
|
85
45
|
expect(log_target.string).not_to be_empty,
|
86
|
-
":
|
46
|
+
":silence_warnings used but nothing logged at WARN level"
|
87
47
|
ensure
|
88
48
|
Neovim.logger = old_logger
|
89
49
|
end
|
90
50
|
end
|
91
51
|
|
52
|
+
config.before(:example, :nvim_version) do |spec|
|
53
|
+
req = Gem::Requirement.new(spec.metadata[:nvim_version])
|
54
|
+
|
55
|
+
begin
|
56
|
+
nvim_vrs = Support.nvim_version
|
57
|
+
vrs = Gem::Version.new(nvim_vrs)
|
58
|
+
rescue ArgumentError
|
59
|
+
vrs = Gem::Version.new(nvim_vrs.gsub("-", "."))
|
60
|
+
end
|
61
|
+
|
62
|
+
unless req.satisfied_by?(vrs.release)
|
63
|
+
pending "Pending: Installed nvim (#{vrs}) doesn't satisfy '#{req}'."
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
92
67
|
Kernel.srand config.seed
|
93
68
|
end
|
94
69
|
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require "helper"
|
2
|
+
|
3
|
+
module Neovim
|
4
|
+
RSpec.describe Executable do
|
5
|
+
describe ".from_env" do
|
6
|
+
it "respects NVIM_EXECUTABLE" do
|
7
|
+
executable = Executable.from_env("NVIM_EXECUTABLE" => "/foo/nvim")
|
8
|
+
expect(executable.path).to eq("/foo/nvim")
|
9
|
+
end
|
10
|
+
|
11
|
+
it "returns a default path" do
|
12
|
+
executable = Executable.from_env({})
|
13
|
+
expect(executable.path).to eq("nvim")
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe "#version" do
|
18
|
+
it "returns the current nvim version" do
|
19
|
+
executable = Executable.from_env
|
20
|
+
expect(executable.version).to match(/^\d+\.\d+\.\d+/)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "raises with an invalid executable path" do
|
24
|
+
executable = Executable.new("/dev/null")
|
25
|
+
|
26
|
+
expect {
|
27
|
+
executable.version
|
28
|
+
}.to raise_error(Executable::Error, /\/dev\/null/)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/spec/neovim/host_spec.rb
CHANGED
@@ -34,7 +34,7 @@ module Neovim
|
|
34
34
|
host.run
|
35
35
|
end
|
36
36
|
|
37
|
-
it "rescues session exceptions", :
|
37
|
+
it "rescues session exceptions", :silence_warnings do
|
38
38
|
expect(session).to receive(:run).and_raise("BOOM")
|
39
39
|
expect { host.run }.not_to raise_error
|
40
40
|
end
|
@@ -136,7 +136,7 @@ module Neovim
|
|
136
136
|
host.handle(message)
|
137
137
|
end
|
138
138
|
|
139
|
-
it "rescues plugin sync handler exceptions", :
|
139
|
+
it "rescues plugin sync handler exceptions", :silence_warnings do
|
140
140
|
plugin = Plugin.from_config_block("source") do |plug|
|
141
141
|
plug.command(:Foo, :sync => true) { raise "BOOM" }
|
142
142
|
end
|
@@ -2,6 +2,27 @@ require "helper"
|
|
2
2
|
require "neovim/ruby_provider/vim"
|
3
3
|
|
4
4
|
RSpec.describe Vim do
|
5
|
+
around do |spec|
|
6
|
+
client = Vim.instance_variable_get(:@__client)
|
7
|
+
buffer_cache = Vim.instance_variable_get(:@__buffer_cache)
|
8
|
+
curbuf = $curbuf
|
9
|
+
curwin = $curwin
|
10
|
+
|
11
|
+
begin
|
12
|
+
Vim.__client = nil
|
13
|
+
Vim.instance_variable_set(:@__buffer_cache, {})
|
14
|
+
$curbuf = nil
|
15
|
+
$curwin = nil
|
16
|
+
|
17
|
+
spec.run
|
18
|
+
ensure
|
19
|
+
Vim.__client = client
|
20
|
+
Vim.instance_variable_set(:@__buffer_cache, buffer_cache)
|
21
|
+
$curbuf = curbuf
|
22
|
+
$curwin = curwin
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
5
26
|
describe Vim::Buffer do
|
6
27
|
it "refers to Neovim::Buffer" do
|
7
28
|
expect(Vim::Buffer).to be(Neovim::Buffer)
|
@@ -23,10 +44,27 @@ RSpec.describe Vim do
|
|
23
44
|
describe "#method_missing" do
|
24
45
|
it "delegates method calls to @__client" do
|
25
46
|
client = double(:client)
|
47
|
+
expect(Vim).to receive(:__refresh_globals).with(client)
|
26
48
|
expect(client).to receive(:foo).with(1, 2)
|
27
49
|
|
28
50
|
Vim.__client = client
|
29
51
|
Vim.foo(1, 2)
|
30
52
|
end
|
53
|
+
|
54
|
+
it "refreshes global variables" do
|
55
|
+
client = Neovim.attach_child(Support.child_argv)
|
56
|
+
client.command("vs foo")
|
57
|
+
|
58
|
+
Vim.__client = client
|
59
|
+
Vim.__refresh_globals(client)
|
60
|
+
|
61
|
+
expect {
|
62
|
+
Vim.command("wincmd n")
|
63
|
+
}.to change { $curwin.index }.by(1)
|
64
|
+
|
65
|
+
expect {
|
66
|
+
Vim.command("vs bar")
|
67
|
+
}.to change { $curbuf.index }.by(1)
|
68
|
+
end
|
31
69
|
end
|
32
70
|
end
|