yardcheck 0.0.1 → 0.0.2
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/.buildkite/hooks/pre-command +3 -0
- data/.buildkite/pipeline.yml +10 -0
- data/.gitmodules +3 -0
- data/.rubocop.yml +15 -13
- data/Gemfile +3 -2
- data/README.md +19 -4
- data/lib/yardcheck/const.rb +27 -1
- data/lib/yardcheck/documentation/method_object.rb +21 -3
- data/lib/yardcheck/method_call.rb +37 -10
- data/lib/yardcheck/method_tracer.rb +50 -11
- data/lib/yardcheck/observation.rb +32 -6
- data/lib/yardcheck/processed_source.rb +32 -0
- data/lib/yardcheck/runner.rb +6 -0
- data/lib/yardcheck/typedef/parser.rb +1 -1
- data/lib/yardcheck/typedef.rb +16 -2
- data/lib/yardcheck/version.rb +1 -1
- data/lib/yardcheck/violation.rb +38 -0
- data/lib/yardcheck.rb +2 -0
- data/spec/integration/yardcheck_spec.rb +9 -3
- data/spec/spec_helper.rb +5 -1
- data/spec/unit/yardcheck/const_spec.rb +14 -0
- data/spec/unit/yardcheck/documentation_spec.rb +17 -2
- data/spec/unit/yardcheck/method_tracer_spec.rb +4 -6
- data/spec/unit/yardcheck/processed_source_spec.rb +43 -0
- data/spec/unit/yardcheck/runner_spec.rb +19 -20
- data/test_app/Gemfile +1 -0
- data/test_app/Gemfile.lock +9 -4
- data/test_app/lib/test_app/ambiguous_raise.rb +33 -0
- data/test_app/lib/test_app/block_return.rb +40 -0
- data/test_app/lib/test_app/tracepoint_bug.rb +23 -0
- data/test_app/lib/test_app.rb +32 -1
- data/test_app/spec/test_app/ambiguous_raise_spec.rb +9 -0
- data/test_app/spec/test_app/block_return_spec.rb +9 -0
- data/test_app/spec/test_app/tracepoint_bug_spec.rb +7 -0
- data/test_app/spec/test_app_spec.rb +31 -13
- data/yardcheck.gemspec +1 -0
- metadata +27 -2
@@ -8,10 +8,17 @@ RSpec.describe Yardcheck::Const do
|
|
8
8
|
module Bar
|
9
9
|
module Baz
|
10
10
|
end # Baz
|
11
|
+
|
12
|
+
class Hash
|
13
|
+
end # Hash
|
11
14
|
end # Bar
|
12
15
|
end # Foo
|
13
16
|
end
|
14
17
|
|
18
|
+
it 'resolves Object' do
|
19
|
+
expect(described_class.resolve('')).to eql(described_class.new(Object))
|
20
|
+
end
|
21
|
+
|
15
22
|
it 'resolves top level constant' do
|
16
23
|
expect(described_class.resolve('Foo')).to eql(described_class.new(Foo))
|
17
24
|
end
|
@@ -45,4 +52,11 @@ RSpec.describe Yardcheck::Const do
|
|
45
52
|
described_class::Invalid.new(Foo::Bar, 'What')
|
46
53
|
)
|
47
54
|
end
|
55
|
+
|
56
|
+
it 'special cases Hash' do
|
57
|
+
aggregate_failures do
|
58
|
+
expect(described_class.resolve('Hash', Foo::Bar)).to eql(described_class.new(Hash))
|
59
|
+
expect(described_class.resolve('Bar::Hash', Foo)).to eql(described_class.new(Foo::Bar::Hash))
|
60
|
+
end
|
61
|
+
end
|
48
62
|
end
|
@@ -59,8 +59,10 @@ RSpec.describe Yardcheck::Documentation do
|
|
59
59
|
end
|
60
60
|
|
61
61
|
it 'handles documented returns without types' do
|
62
|
-
|
63
|
-
.to
|
62
|
+
aggregate_failures do
|
63
|
+
expect(method_object('TestApp::Namespace#tags_without_types').return_type).to be(nil)
|
64
|
+
expect(method_object('TestApp::Namespace#tags_without_types').params).to eql({})
|
65
|
+
end
|
64
66
|
end
|
65
67
|
|
66
68
|
it 'handles returns with a literal nil' do
|
@@ -145,4 +147,17 @@ RSpec.describe Yardcheck::Documentation do
|
|
145
147
|
it 'return type of undocumented' do
|
146
148
|
expect(undocumented.return_type).to be(nil)
|
147
149
|
end
|
150
|
+
|
151
|
+
it 'identifies predicate methods' do
|
152
|
+
aggregate_failures do
|
153
|
+
expect(namespace_add).not_to be_predicate_method
|
154
|
+
expect(method_object('TestApp::Namespace#truthy_predicate?')).to be_predicate_method
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
it 'exposes documented raise' do
|
159
|
+
expect(method_object('TestApp::Namespace#always_raise').raise_type).to eql(
|
160
|
+
typedef(literal(const(TestApp::Namespace::AppError)))
|
161
|
+
)
|
162
|
+
end
|
148
163
|
end
|
@@ -36,23 +36,21 @@ RSpec.describe Yardcheck::MethodTracer do
|
|
36
36
|
end
|
37
37
|
|
38
38
|
expect(tracer.events).to eq([
|
39
|
-
Yardcheck::MethodCall.process(
|
39
|
+
Yardcheck::MethodCall::Return.process(
|
40
40
|
scope: :class,
|
41
41
|
selector: :singleton_method_example,
|
42
42
|
namespace: Foo.singleton_class,
|
43
43
|
params: { baz: 'Hello' },
|
44
44
|
return_value: 'HELLO',
|
45
|
-
example_location: RSpec.current_example.location
|
46
|
-
error_raised: false
|
45
|
+
example_location: RSpec.current_example.location
|
47
46
|
),
|
48
|
-
Yardcheck::MethodCall.process(
|
47
|
+
Yardcheck::MethodCall::Return.process(
|
49
48
|
scope: :instance,
|
50
49
|
selector: :instance_method_example,
|
51
50
|
namespace: Foo,
|
52
51
|
params: { baz: 'Hello' },
|
53
52
|
return_value: 'HELLO',
|
54
|
-
example_location: RSpec.current_example.location
|
55
|
-
error_raised: false
|
53
|
+
example_location: RSpec.current_example.location
|
56
54
|
)
|
57
55
|
])
|
58
56
|
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.describe Yardcheck::ProcessedSource do
|
4
|
+
context 'when method has a rescue with an embedded explicit return' do
|
5
|
+
let(:source) { described_class.new(<<-RUBY) }
|
6
|
+
def foo
|
7
|
+
bar
|
8
|
+
rescue SomeError
|
9
|
+
return 2
|
10
|
+
end
|
11
|
+
RUBY
|
12
|
+
|
13
|
+
it 'marks it as tracepoint bug candidate' do
|
14
|
+
expect(source).to be_tracepoint_bug_candidate
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
context 'when the method does not have a rescue or return' do
|
19
|
+
let(:source) { described_class.new(<<-RUBY) }
|
20
|
+
def foo
|
21
|
+
bar
|
22
|
+
end
|
23
|
+
RUBY
|
24
|
+
|
25
|
+
it 'is not a bug candidate' do
|
26
|
+
expect(source).not_to be_tracepoint_bug_candidate
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'when the resbody contains an implicit return' do
|
31
|
+
let(:source) { described_class.new(<<-RUBY) }
|
32
|
+
def foo
|
33
|
+
bar
|
34
|
+
rescue
|
35
|
+
baz
|
36
|
+
end
|
37
|
+
RUBY
|
38
|
+
|
39
|
+
it 'is not a bug candidate' do
|
40
|
+
expect(source).not_to be_tracepoint_bug_candidate
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -19,23 +19,21 @@ RSpec.describe Yardcheck::Runner do
|
|
19
19
|
|
20
20
|
let(:observed_events) do
|
21
21
|
[
|
22
|
-
Yardcheck::MethodCall.process(
|
22
|
+
Yardcheck::MethodCall::Return.process(
|
23
23
|
scope: :instance,
|
24
24
|
selector: :add,
|
25
25
|
namespace: TestApp::Namespace,
|
26
26
|
params: { left: 'foo', right: 3 },
|
27
27
|
return_value: 5,
|
28
|
-
example_location: 'test_app_spec.rb:1'
|
29
|
-
error_raised: false
|
28
|
+
example_location: 'test_app_spec.rb:1'
|
30
29
|
),
|
31
|
-
Yardcheck::MethodCall.process(
|
30
|
+
Yardcheck::MethodCall::Return.process(
|
32
31
|
scope: :class,
|
33
32
|
selector: :add,
|
34
33
|
namespace: TestApp::Namespace.singleton_class,
|
35
34
|
params: { left: 2, right: 3 },
|
36
35
|
return_value: 5,
|
37
|
-
example_location: 'test_app_spec.rb:2'
|
38
|
-
error_raised: false
|
36
|
+
example_location: 'test_app_spec.rb:2'
|
39
37
|
)
|
40
38
|
]
|
41
39
|
end
|
@@ -44,7 +42,7 @@ RSpec.describe Yardcheck::Runner do
|
|
44
42
|
<<~MSG
|
45
43
|
Expected #<Class:TestApp::Namespace>#add to return String but observed Fixnum
|
46
44
|
|
47
|
-
source: ./test_app/lib/test_app.rb:
|
45
|
+
source: ./test_app/lib/test_app.rb:15
|
48
46
|
tests:
|
49
47
|
- test_app_spec.rb:2
|
50
48
|
|
@@ -60,7 +58,7 @@ RSpec.describe Yardcheck::Runner do
|
|
60
58
|
|
61
59
|
Expected TestApp::Namespace#add to receive Integer for left but observed String
|
62
60
|
|
63
|
-
source: ./test_app/lib/test_app.rb:
|
61
|
+
source: ./test_app/lib/test_app.rb:25
|
64
62
|
tests:
|
65
63
|
- test_app_spec.rb:1
|
66
64
|
|
@@ -76,7 +74,7 @@ RSpec.describe Yardcheck::Runner do
|
|
76
74
|
|
77
75
|
Expected TestApp::Namespace#add to return String but observed Fixnum
|
78
76
|
|
79
|
-
source: ./test_app/lib/test_app.rb:
|
77
|
+
source: ./test_app/lib/test_app.rb:25
|
80
78
|
tests:
|
81
79
|
- test_app_spec.rb:1
|
82
80
|
|
@@ -97,6 +95,10 @@ RSpec.describe Yardcheck::Runner do
|
|
97
95
|
string.gsub(/\e\[(?:1\;)?\d+m/, '')
|
98
96
|
end
|
99
97
|
|
98
|
+
before do
|
99
|
+
allow(Kernel).to receive(:exit).with(1)
|
100
|
+
end
|
101
|
+
|
100
102
|
shared_examples 'violation output' do
|
101
103
|
it 'compares the spec observations against the documentation' do
|
102
104
|
runner.check
|
@@ -110,32 +112,29 @@ RSpec.describe Yardcheck::Runner do
|
|
110
112
|
context 'when multiple tests find the same violation' do
|
111
113
|
let(:observed_events) do
|
112
114
|
[
|
113
|
-
Yardcheck::MethodCall.process(
|
115
|
+
Yardcheck::MethodCall::Return.process(
|
114
116
|
scope: :instance,
|
115
117
|
selector: :add,
|
116
118
|
namespace: TestApp::Namespace,
|
117
119
|
params: { left: 'foo', right: 3 },
|
118
120
|
return_value: 'valid return type',
|
119
|
-
example_location: 'test_app_spec.rb:1'
|
120
|
-
error_raised: false
|
121
|
+
example_location: 'test_app_spec.rb:1'
|
121
122
|
),
|
122
|
-
Yardcheck::MethodCall.process(
|
123
|
+
Yardcheck::MethodCall::Return.process(
|
123
124
|
scope: :instance,
|
124
125
|
selector: :add,
|
125
126
|
namespace: TestApp::Namespace,
|
126
127
|
params: { left: 'foo', right: 3 },
|
127
128
|
return_value: 'valid return type',
|
128
|
-
example_location: 'test_app_spec.rb:2'
|
129
|
-
error_raised: false
|
129
|
+
example_location: 'test_app_spec.rb:2'
|
130
130
|
),
|
131
|
-
Yardcheck::MethodCall.process(
|
131
|
+
Yardcheck::MethodCall::Return.process(
|
132
132
|
scope: :instance,
|
133
133
|
selector: :add,
|
134
134
|
namespace: TestApp::Namespace,
|
135
135
|
params: { left: 1, right: 'now this one is wrong' },
|
136
136
|
return_value: 'valid return type',
|
137
|
-
example_location: 'test_app_spec.rb:3'
|
138
|
-
error_raised: false
|
137
|
+
example_location: 'test_app_spec.rb:3'
|
139
138
|
)
|
140
139
|
]
|
141
140
|
end
|
@@ -144,7 +143,7 @@ RSpec.describe Yardcheck::Runner do
|
|
144
143
|
<<~MSG
|
145
144
|
Expected TestApp::Namespace#add to receive Integer for left but observed String
|
146
145
|
|
147
|
-
source: ./test_app/lib/test_app.rb:
|
146
|
+
source: ./test_app/lib/test_app.rb:25
|
148
147
|
tests:
|
149
148
|
- test_app_spec.rb:1
|
150
149
|
- test_app_spec.rb:2
|
@@ -161,7 +160,7 @@ RSpec.describe Yardcheck::Runner do
|
|
161
160
|
|
162
161
|
Expected TestApp::Namespace#add to receive Integer for right but observed String
|
163
162
|
|
164
|
-
source: ./test_app/lib/test_app.rb:
|
163
|
+
source: ./test_app/lib/test_app.rb:25
|
165
164
|
tests:
|
166
165
|
- test_app_spec.rb:3
|
167
166
|
|
data/test_app/Gemfile
CHANGED
data/test_app/Gemfile.lock
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ..
|
3
3
|
specs:
|
4
|
-
yardcheck (0.0.
|
5
|
-
anima
|
4
|
+
yardcheck (0.0.1)
|
5
|
+
anima (~> 0.3)
|
6
6
|
coderay (~> 1.1)
|
7
|
-
concord
|
8
|
-
|
7
|
+
concord (~> 0.1)
|
8
|
+
parser
|
9
|
+
rspec (~> 3.4)
|
9
10
|
yard (~> 0.9)
|
10
11
|
|
11
12
|
GEM
|
@@ -19,6 +20,7 @@ GEM
|
|
19
20
|
abstract_type (~> 0.0.7)
|
20
21
|
adamantium (~> 0.2)
|
21
22
|
equalizer (~> 0.0.11)
|
23
|
+
ast (2.3.0)
|
22
24
|
byebug (9.0.6)
|
23
25
|
coderay (1.1.1)
|
24
26
|
concord (0.1.5)
|
@@ -30,6 +32,8 @@ GEM
|
|
30
32
|
memoizable (0.4.2)
|
31
33
|
thread_safe (~> 0.3, >= 0.3.1)
|
32
34
|
method_source (0.8.2)
|
35
|
+
parser (2.4.0.0)
|
36
|
+
ast (~> 2.2)
|
33
37
|
pry (0.10.4)
|
34
38
|
coderay (~> 1.1.0)
|
35
39
|
method_source (~> 0.8.1)
|
@@ -60,6 +64,7 @@ PLATFORMS
|
|
60
64
|
DEPENDENCIES
|
61
65
|
pry
|
62
66
|
pry-byebug
|
67
|
+
yard
|
63
68
|
yardcheck!
|
64
69
|
|
65
70
|
BUNDLED WITH
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module TestApp
|
4
|
+
module AmbiguousRaise
|
5
|
+
SomeError = Class.new(StandardError)
|
6
|
+
|
7
|
+
# @return [Integer]
|
8
|
+
def self.method1
|
9
|
+
method2
|
10
|
+
end
|
11
|
+
|
12
|
+
# @return [Integer]
|
13
|
+
def self.method2
|
14
|
+
method3
|
15
|
+
rescue SomeError
|
16
|
+
2
|
17
|
+
end
|
18
|
+
|
19
|
+
# @return [Integer]
|
20
|
+
def self.method3
|
21
|
+
method4
|
22
|
+
|
23
|
+
3
|
24
|
+
end
|
25
|
+
|
26
|
+
# @return [Integer]
|
27
|
+
def self.method4
|
28
|
+
raise SomeError
|
29
|
+
|
30
|
+
4
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module TestApp
|
4
|
+
module BlockReturn
|
5
|
+
SomeError = Class.new(StandardError)
|
6
|
+
|
7
|
+
# @return [Integer]
|
8
|
+
def self.entrypoint
|
9
|
+
method_that_executes_normal_block do
|
10
|
+
1
|
11
|
+
end
|
12
|
+
|
13
|
+
method_that_passes_block_with_return_keyword_along do
|
14
|
+
return 1
|
15
|
+
end
|
16
|
+
|
17
|
+
'foo'
|
18
|
+
end
|
19
|
+
|
20
|
+
# @return [Integer]
|
21
|
+
def self.method_that_passes_block_with_return_keyword_along(&block)
|
22
|
+
method_that_yield_block_with_return_keyword(&block)
|
23
|
+
|
24
|
+
2
|
25
|
+
end
|
26
|
+
|
27
|
+
# @return [Integer]
|
28
|
+
def self.method_that_yield_block_with_return_keyword
|
29
|
+
yield
|
30
|
+
|
31
|
+
3
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.method_that_executes_normal_block
|
35
|
+
yield
|
36
|
+
|
37
|
+
4
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module TestApp
|
4
|
+
class TracepointBug
|
5
|
+
SomeError = Class.new(StandardError)
|
6
|
+
|
7
|
+
# @return [Integer]
|
8
|
+
def method1
|
9
|
+
method2
|
10
|
+
rescue SomeError => error
|
11
|
+
foo # resolve ambiguous raise state
|
12
|
+
return 1
|
13
|
+
end
|
14
|
+
|
15
|
+
def foo
|
16
|
+
1
|
17
|
+
end
|
18
|
+
|
19
|
+
def method2
|
20
|
+
raise SomeError
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/test_app/lib/test_app.rb
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'test_app/ambiguous_raise'
|
4
|
+
require 'test_app/block_return'
|
5
|
+
require 'test_app/tracepoint_bug'
|
6
|
+
|
1
7
|
module TestApp
|
2
8
|
class Namespace
|
3
9
|
# Singleton method with correct param definition and incorrect return
|
@@ -47,8 +53,9 @@ module TestApp
|
|
47
53
|
'str'
|
48
54
|
end
|
49
55
|
|
56
|
+
# @param foo but not type definition in brackets
|
50
57
|
# @return no type specified here
|
51
|
-
def
|
58
|
+
def tags_without_types(foo)
|
52
59
|
end
|
53
60
|
|
54
61
|
# @param [String]
|
@@ -98,6 +105,7 @@ module TestApp
|
|
98
105
|
|
99
106
|
AppError = Class.new(StandardError)
|
100
107
|
|
108
|
+
# @raise [AppError]
|
101
109
|
# @return [Fixnum]
|
102
110
|
def always_raise
|
103
111
|
raise AppError
|
@@ -105,11 +113,34 @@ module TestApp
|
|
105
113
|
1
|
106
114
|
end
|
107
115
|
|
116
|
+
# @raise [AppError]
|
117
|
+
def invalid_raise_documentation
|
118
|
+
raise KeyError
|
119
|
+
end
|
120
|
+
|
108
121
|
# @return [:foo]
|
109
122
|
def returns_literal_symbol
|
110
123
|
:foo
|
111
124
|
end
|
112
125
|
|
126
|
+
# This should be ignored since truthy and falsey values are all values
|
127
|
+
#
|
128
|
+
# @return [Boolean]
|
129
|
+
def truthy_predicate?
|
130
|
+
1
|
131
|
+
end
|
132
|
+
|
133
|
+
# @return [Array<Hash>]
|
134
|
+
def special_cases_top_level_constants
|
135
|
+
[{}]
|
136
|
+
end
|
137
|
+
|
138
|
+
class Hash
|
139
|
+
end
|
140
|
+
|
141
|
+
class Array
|
142
|
+
end
|
143
|
+
|
113
144
|
class Parent
|
114
145
|
end
|
115
146
|
|
@@ -3,47 +3,65 @@
|
|
3
3
|
require_relative './../lib/test_app'
|
4
4
|
|
5
5
|
RSpec.describe TestApp::Namespace do
|
6
|
-
|
7
|
-
expect(TestApp::Namespace.new.add(2, 3)).to be(5)
|
8
|
-
end
|
6
|
+
let(:object) { described_class.new }
|
9
7
|
|
10
8
|
it 'does math with singleton method' do
|
11
|
-
expect(
|
9
|
+
expect(described_class.add(2, 3)).to be(5)
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'does math with instance method' do
|
13
|
+
expect(object.add(2, 3)).to be(5)
|
12
14
|
end
|
13
15
|
|
14
16
|
it 'has an undocumented method and that is fine' do
|
15
|
-
expect(
|
17
|
+
expect(object.undocumented).to be(nil)
|
16
18
|
end
|
17
19
|
|
18
20
|
it 'documents returning the parent but returns child' do
|
19
|
-
expect(
|
21
|
+
expect(object.returns_generic).to be_an_instance_of(described_class::Child)
|
20
22
|
end
|
21
23
|
|
22
24
|
it 'documents returning a relative namespace incorrectly' do
|
23
|
-
expect(
|
25
|
+
expect(object.documents_relative).to be_a(String)
|
24
26
|
end
|
25
27
|
|
26
28
|
it 'incorrectly documents a method as accepting Enumerable<String>' do
|
27
|
-
expect(
|
29
|
+
expect(object.enumerable_param('hi')).to be(nil)
|
28
30
|
end
|
29
31
|
|
30
32
|
it 'properly tests a method with an instance double' do
|
31
|
-
expect(
|
33
|
+
expect(object.properly_tested_with_instance_double(instance_double(String))).to be(nil)
|
32
34
|
end
|
33
35
|
|
34
36
|
it 'improperly tests a method with an instance double' do
|
35
|
-
expect(
|
37
|
+
expect(object.improperly_tested_with_instance_double(instance_double(Integer))).to be(nil)
|
36
38
|
end
|
37
39
|
|
38
40
|
it 'tests a method that raises an error instead of returning' do
|
39
|
-
expect {
|
41
|
+
expect { object.always_raise }.to raise_error(described_class::AppError)
|
40
42
|
end
|
41
43
|
|
42
44
|
it 'improperly documents the param with an invalid const' do
|
43
|
-
expect(
|
45
|
+
expect(object.ignoring_invalid_types('hi')).to be(nil)
|
44
46
|
end
|
45
47
|
|
46
48
|
it 'returns a literal symbol' do
|
47
|
-
expect(
|
49
|
+
expect(object.returns_literal_symbol).to be(:foo)
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'returns a truthy value for predicate?' do
|
53
|
+
expect(object.truthy_predicate?).to be_truthy
|
54
|
+
end
|
55
|
+
|
56
|
+
specify do
|
57
|
+
expect(object.tags_without_types(1)).to be(nil)
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'special cases Array and Hash' do
|
61
|
+
expect(object.special_cases_top_level_constants).to eq([{}])
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'is documented as raising AppError but actually raises KeyError' do
|
65
|
+
expect { object.invalid_raise_documentation }.to raise_error(KeyError)
|
48
66
|
end
|
49
67
|
end
|
data/yardcheck.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yardcheck
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-
|
12
|
+
date: 2017-07-31 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: yard
|
@@ -81,6 +81,20 @@ dependencies:
|
|
81
81
|
- - "~>"
|
82
82
|
- !ruby/object:Gem::Version
|
83
83
|
version: '1.1'
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
name: parser
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - ">="
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0'
|
91
|
+
type: :runtime
|
92
|
+
prerelease: false
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - ">="
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '0'
|
84
98
|
description: Verify that your YARD @param and @return types are correct
|
85
99
|
email:
|
86
100
|
- johncbackus@gmail.com
|
@@ -89,7 +103,10 @@ executables:
|
|
89
103
|
extensions: []
|
90
104
|
extra_rdoc_files: []
|
91
105
|
files:
|
106
|
+
- ".buildkite/hooks/pre-command"
|
107
|
+
- ".buildkite/pipeline.yml"
|
92
108
|
- ".gitignore"
|
109
|
+
- ".gitmodules"
|
93
110
|
- ".rspec"
|
94
111
|
- ".rubocop.yml"
|
95
112
|
- ".rubocop_todo.yml"
|
@@ -106,6 +123,7 @@ files:
|
|
106
123
|
- lib/yardcheck/method_call.rb
|
107
124
|
- lib/yardcheck/method_tracer.rb
|
108
125
|
- lib/yardcheck/observation.rb
|
126
|
+
- lib/yardcheck/processed_source.rb
|
109
127
|
- lib/yardcheck/proxy.rb
|
110
128
|
- lib/yardcheck/runner.rb
|
111
129
|
- lib/yardcheck/source_lines.rb
|
@@ -122,6 +140,7 @@ files:
|
|
122
140
|
- spec/unit/yardcheck/const_spec.rb
|
123
141
|
- spec/unit/yardcheck/documentation_spec.rb
|
124
142
|
- spec/unit/yardcheck/method_tracer_spec.rb
|
143
|
+
- spec/unit/yardcheck/processed_source_spec.rb
|
125
144
|
- spec/unit/yardcheck/runner_spec.rb
|
126
145
|
- spec/unit/yardcheck/test_value_spec.rb
|
127
146
|
- spec/unit/yardcheck/typedef/parser_spec.rb
|
@@ -130,6 +149,12 @@ files:
|
|
130
149
|
- test_app/Gemfile
|
131
150
|
- test_app/Gemfile.lock
|
132
151
|
- test_app/lib/test_app.rb
|
152
|
+
- test_app/lib/test_app/ambiguous_raise.rb
|
153
|
+
- test_app/lib/test_app/block_return.rb
|
154
|
+
- test_app/lib/test_app/tracepoint_bug.rb
|
155
|
+
- test_app/spec/test_app/ambiguous_raise_spec.rb
|
156
|
+
- test_app/spec/test_app/block_return_spec.rb
|
157
|
+
- test_app/spec/test_app/tracepoint_bug_spec.rb
|
133
158
|
- test_app/spec/test_app_spec.rb
|
134
159
|
- yardcheck.gemspec
|
135
160
|
homepage: https://github.com/backus/yardcheck
|