ruby-lint 1.1.0 → 2.0.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.
Files changed (205) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +43 -29
  3. data/LICENSE +1 -1
  4. data/README.md +0 -1
  5. data/bin/ruby-lint +91 -3
  6. data/checksum/ruby-lint-1.1.0.gem.sha512 +1 -0
  7. data/doc/changelog.md +30 -0
  8. data/doc/code_analysis.md +13 -0
  9. data/doc/configuration.md +5 -24
  10. data/lib/ruby-lint.rb +7 -10
  11. data/lib/ruby-lint/analysis/argument_amount.rb +2 -0
  12. data/lib/ruby-lint/analysis/base.rb +12 -0
  13. data/lib/ruby-lint/analysis/pedantics.rb +2 -0
  14. data/lib/ruby-lint/analysis/shadowing_variables.rb +2 -0
  15. data/lib/ruby-lint/analysis/undefined_methods.rb +5 -2
  16. data/lib/ruby-lint/analysis/undefined_variables.rb +2 -0
  17. data/lib/ruby-lint/analysis/unused_variables.rb +2 -0
  18. data/lib/ruby-lint/analysis/useless_equality_checks.rb +2 -0
  19. data/lib/ruby-lint/ast/node.rb +0 -15
  20. data/lib/ruby-lint/command.rb +100 -0
  21. data/lib/ruby-lint/configuration.rb +35 -66
  22. data/lib/ruby-lint/constant_path.rb +7 -2
  23. data/lib/ruby-lint/definition/ruby_object.rb +20 -6
  24. data/lib/ruby-lint/definitions/core/argf.rb +3 -3
  25. data/lib/ruby-lint/definitions/gems/minitest.rb +792 -0
  26. data/lib/ruby-lint/file_list.rb +1 -1
  27. data/lib/ruby-lint/file_loader.rb +2 -20
  28. data/lib/ruby-lint/file_scanner.rb +11 -2
  29. data/lib/ruby-lint/method_evaluation.rb +21 -0
  30. data/lib/ruby-lint/presenter/base.rb +18 -0
  31. data/lib/ruby-lint/presenter/json.rb +3 -1
  32. data/lib/ruby-lint/presenter/syntastic.rb +3 -1
  33. data/lib/ruby-lint/presenter/text.rb +3 -1
  34. data/lib/ruby-lint/runner.rb +6 -63
  35. data/lib/ruby-lint/variable_predicates.rb +3 -3
  36. data/lib/ruby-lint/version.rb +1 -1
  37. data/lib/ruby-lint/virtual_machine.rb +4 -1
  38. data/ruby-lint.gemspec +13 -4
  39. metadata +12 -187
  40. data/.editorconfig +0 -15
  41. data/.gitignore +0 -6
  42. data/.ruby-version +0 -1
  43. data/.travis.yml +0 -19
  44. data/Gemfile +0 -15
  45. data/MANIFEST +0 -469
  46. data/Rakefile +0 -25
  47. data/benchmark/bootup.rb +0 -13
  48. data/benchmark/virtual_machine.rb +0 -17
  49. data/checksum/.gitkeep +0 -0
  50. data/doc/.gitkeep +0 -0
  51. data/doc/css/.gitkeep +0 -0
  52. data/doc/images/.gitkeep +0 -0
  53. data/gen/rails/constants.txt +0 -12
  54. data/gen/rails/requires.rb +0 -2
  55. data/gen/stdlib/constants.rb +0 -30
  56. data/gen/stdlib/constants.txt +0 -214
  57. data/gen/stdlib/requires.rb +0 -64
  58. data/lib/ruby-lint/benchmark/average.rb +0 -115
  59. data/lib/ruby-lint/cache.rb +0 -121
  60. data/lib/ruby-lint/cache_entry.rb +0 -44
  61. data/lib/ruby-lint/cli.rb +0 -4
  62. data/lib/ruby-lint/cli/analyze.rb +0 -209
  63. data/lib/ruby-lint/cli/base.rb +0 -103
  64. data/lib/ruby-lint/cli/cache.rb +0 -60
  65. data/lib/ruby-lint/default_names.rb +0 -19
  66. data/lib/ruby-lint/definitions/gems/.gitkeep +0 -0
  67. data/lib/ruby-lint/node_hash.rb +0 -105
  68. data/misc/stdlib.rb +0 -66
  69. data/profiling/virtual_machine.rb +0 -20
  70. data/ruby-lint.yml +0 -7
  71. data/spec/fixtures/associating.rb +0 -7
  72. data/spec/fixtures/complex/rails/basic_controller.rb +0 -9
  73. data/spec/fixtures/complex/rcap.rb +0 -67
  74. data/spec/fixtures/complex/slop.rb +0 -701
  75. data/spec/fixtures/config.yml +0 -8
  76. data/spec/fixtures/deeply/nested/file.rb +0 -1
  77. data/spec/fixtures/file_scanner/lib/example/recursive/source.rb +0 -6
  78. data/spec/fixtures/file_scanner/lib/example/recursive/target.rb +0 -8
  79. data/spec/fixtures/file_scanner/lib/example/user.rb +0 -6
  80. data/spec/fixtures/file_scanner/lib/ruby-lint/definition/constant_proxy.rb +0 -6
  81. data/spec/fixtures/file_scanner/lib/ruby-lint/global_scope.rb +0 -6
  82. data/spec/fixtures/file_scanner/lib/test-dashes/foo.rb +0 -4
  83. data/spec/fixtures/file_scanner/rails/app/models/example/user.rb +0 -6
  84. data/spec/fixtures/file_scanner/rails/app/models/user.rb +0 -4
  85. data/spec/fixtures/invalid.rb +0 -3
  86. data/spec/fixtures/invalid_2.rb +0 -3
  87. data/spec/fixtures/syntax_error.rb +0 -1
  88. data/spec/fixtures/uses_external.rb +0 -1
  89. data/spec/fixtures/uses_external_invalid.rb +0 -3
  90. data/spec/fixtures/uses_external_namespace.rb +0 -1
  91. data/spec/fixtures/valid.rb +0 -3
  92. data/spec/ruby-lint/analysis/argument_amount_spec.rb +0 -131
  93. data/spec/ruby-lint/analysis/base_spec.rb +0 -24
  94. data/spec/ruby-lint/analysis/pedantics_spec.rb +0 -63
  95. data/spec/ruby-lint/analysis/shadowing_variables_spec.rb +0 -85
  96. data/spec/ruby-lint/analysis/undefined_methods_spec.rb +0 -337
  97. data/spec/ruby-lint/analysis/undefined_variables_spec.rb +0 -138
  98. data/spec/ruby-lint/analysis/unused_variables_spec.rb +0 -270
  99. data/spec/ruby-lint/analysis/useless_equality_checks_spec.rb +0 -107
  100. data/spec/ruby-lint/ast/node_spec.rb +0 -39
  101. data/spec/ruby-lint/cache_entry_spec.rb +0 -25
  102. data/spec/ruby-lint/cache_spec.rb +0 -53
  103. data/spec/ruby-lint/cli/analyze_spec.rb +0 -52
  104. data/spec/ruby-lint/configuration_spec.rb +0 -126
  105. data/spec/ruby-lint/constant_loader_spec.rb +0 -79
  106. data/spec/ruby-lint/constant_path.rb +0 -63
  107. data/spec/ruby-lint/definition/constant_proxy_spec.rb +0 -85
  108. data/spec/ruby-lint/definition/dsl_spec.rb +0 -135
  109. data/spec/ruby-lint/definition/registry_spec.rb +0 -106
  110. data/spec/ruby-lint/definition/ruby_method_spec.rb +0 -106
  111. data/spec/ruby-lint/definition/ruby_object_spec.rb +0 -264
  112. data/spec/ruby-lint/definition_builder/primitive_spec.rb +0 -62
  113. data/spec/ruby-lint/definition_builder/ruby_class_spec.rb +0 -107
  114. data/spec/ruby-lint/definition_builder/ruby_method_spec.rb +0 -53
  115. data/spec/ruby-lint/definition_builder/ruby_module_spec.rb +0 -52
  116. data/spec/ruby-lint/definitions/argv_spec.rb +0 -18
  117. data/spec/ruby-lint/definitions/env_spec.rb +0 -13
  118. data/spec/ruby-lint/definitions/file_spec.rb +0 -17
  119. data/spec/ruby-lint/definitions/fixnum_spec.rb +0 -18
  120. data/spec/ruby-lint/definitions/io_spec.rb +0 -15
  121. data/spec/ruby-lint/definitions/kernel_spec.rb +0 -18
  122. data/spec/ruby-lint/definitions/range_spec.rb +0 -21
  123. data/spec/ruby-lint/definitions/string_spec.rb +0 -20
  124. data/spec/ruby-lint/docstring/mapping.rb +0 -27
  125. data/spec/ruby-lint/docstring/parser_spec.rb +0 -88
  126. data/spec/ruby-lint/extensions/string_spec.rb +0 -7
  127. data/spec/ruby-lint/file_list_spec.rb +0 -25
  128. data/spec/ruby-lint/file_loader_spec.rb +0 -69
  129. data/spec/ruby-lint/file_scanner_spec.rb +0 -84
  130. data/spec/ruby-lint/inspector_spec.rb +0 -224
  131. data/spec/ruby-lint/iterator_spec.rb +0 -151
  132. data/spec/ruby-lint/method_call/.gitkeep +0 -0
  133. data/spec/ruby-lint/nested_stack_spec.rb +0 -23
  134. data/spec/ruby-lint/node_hash_spec.rb +0 -56
  135. data/spec/ruby-lint/parser_spec.rb +0 -38
  136. data/spec/ruby-lint/presenter/json_spec.rb +0 -58
  137. data/spec/ruby-lint/presenter/syntastic_spec.rb +0 -49
  138. data/spec/ruby-lint/presenter/text_spec.rb +0 -49
  139. data/spec/ruby-lint/report/entry_spec.rb +0 -58
  140. data/spec/ruby-lint/report_spec.rb +0 -39
  141. data/spec/ruby-lint/runner_spec.rb +0 -74
  142. data/spec/ruby-lint/variable_predicates_spec.rb +0 -30
  143. data/spec/ruby-lint/virtual_machine/alias_spec.rb +0 -55
  144. data/spec/ruby-lint/virtual_machine/assignments/arrays_spec.rb +0 -87
  145. data/spec/ruby-lint/virtual_machine/assignments/assignment_arguments_spec.rb +0 -14
  146. data/spec/ruby-lint/virtual_machine/assignments/constants_spec.rb +0 -23
  147. data/spec/ruby-lint/virtual_machine/assignments/hashes_spec.rb +0 -52
  148. data/spec/ruby-lint/virtual_machine/assignments/optional_spec.rb +0 -41
  149. data/spec/ruby-lint/virtual_machine/assignments/range_spec.rb +0 -28
  150. data/spec/ruby-lint/virtual_machine/assignments/return_values_spec.rb +0 -78
  151. data/spec/ruby-lint/virtual_machine/assignments/variables_spec.rb +0 -130
  152. data/spec/ruby-lint/virtual_machine/associate_nodes_spec.rb +0 -61
  153. data/spec/ruby-lint/virtual_machine/autoloading_spec.rb +0 -18
  154. data/spec/ruby-lint/virtual_machine/blocks_spec.rb +0 -90
  155. data/spec/ruby-lint/virtual_machine/classes/class_methods_spec.rb +0 -21
  156. data/spec/ruby-lint/virtual_machine/classes/extending_spec.rb +0 -109
  157. data/spec/ruby-lint/virtual_machine/classes/redefining_spec.rb +0 -51
  158. data/spec/ruby-lint/virtual_machine/classes/sclass_spec.rb +0 -96
  159. data/spec/ruby-lint/virtual_machine/classes/scoping_spec.rb +0 -60
  160. data/spec/ruby-lint/virtual_machine/complex/rails_spec.rb +0 -21
  161. data/spec/ruby-lint/virtual_machine/complex/rcap_spec.rb +0 -15
  162. data/spec/ruby-lint/virtual_machine/complex/slop_spec.rb +0 -16
  163. data/spec/ruby-lint/virtual_machine/constants_spec.rb +0 -31
  164. data/spec/ruby-lint/virtual_machine/for_spec.rb +0 -16
  165. data/spec/ruby-lint/virtual_machine/freeze_spec.rb +0 -13
  166. data/spec/ruby-lint/virtual_machine/global_variables_spec.rb +0 -15
  167. data/spec/ruby-lint/virtual_machine/inherit_kernel_spec.rb +0 -15
  168. data/spec/ruby-lint/virtual_machine/interpolation_spec.rb +0 -12
  169. data/spec/ruby-lint/virtual_machine/location_spec.rb +0 -64
  170. data/spec/ruby-lint/virtual_machine/method_call_tracking_spec.rb +0 -57
  171. data/spec/ruby-lint/virtual_machine/methods/attr_spec.rb +0 -182
  172. data/spec/ruby-lint/virtual_machine/methods/calls_spec.rb +0 -25
  173. data/spec/ruby-lint/virtual_machine/methods/define_method_spec.rb +0 -41
  174. data/spec/ruby-lint/virtual_machine/methods/defining_spec.rb +0 -40
  175. data/spec/ruby-lint/virtual_machine/methods/docstrings_spec.rb +0 -80
  176. data/spec/ruby-lint/virtual_machine/methods/exporting_spec.rb +0 -19
  177. data/spec/ruby-lint/virtual_machine/methods/kernel_spec.rb +0 -25
  178. data/spec/ruby-lint/virtual_machine/methods/parameters_spec.rb +0 -89
  179. data/spec/ruby-lint/virtual_machine/methods/patching_spec.rb +0 -20
  180. data/spec/ruby-lint/virtual_machine/methods/scoping_spec.rb +0 -63
  181. data/spec/ruby-lint/virtual_machine/methods/square_bracket_spec.rb +0 -32
  182. data/spec/ruby-lint/virtual_machine/methods/visibility_spec.rb +0 -64
  183. data/spec/ruby-lint/virtual_machine/modules_spec.rb +0 -205
  184. data/spec/ruby-lint/virtual_machine/reference_amount_spec.rb +0 -81
  185. data/spec/ruby-lint/virtual_machine/self_spec.rb +0 -37
  186. data/spec/ruby-lint/virtual_machine/unused_spec.rb +0 -17
  187. data/spec/spec_helper.rb +0 -28
  188. data/spec/support/building.rb +0 -50
  189. data/spec/support/coveralls.rb +0 -5
  190. data/spec/support/definitions.rb +0 -39
  191. data/spec/support/fixtures.rb +0 -20
  192. data/spec/support/parsing.rb +0 -30
  193. data/spec/support/simplecov.rb +0 -18
  194. data/spec/support/versions.rb +0 -9
  195. data/task/build.rake +0 -4
  196. data/task/checksum.rake +0 -13
  197. data/task/coverage.rake +0 -6
  198. data/task/doc.rake +0 -16
  199. data/task/generate.rake +0 -77
  200. data/task/graphviz.rake +0 -12
  201. data/task/manifest.rake +0 -8
  202. data/task/tag.rake +0 -6
  203. data/task/test.rake +0 -4
  204. data/task/todo.rake +0 -6
  205. data/task/travis.rake +0 -8
@@ -1,182 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe RubyLint::VirtualMachine do
4
- context 'attr methods' do
5
- example 'should define a read-only attribute using #attr' do
6
- code = <<-CODE
7
- class Example
8
- attr :number
9
- end
10
- CODE
11
-
12
- defs = build_definitions(code)
13
-
14
- defs.lookup(:const, 'Example')
15
- .has_definition?(:instance_method, 'number')
16
- .should == true
17
-
18
- defs.lookup(:const, 'Example')
19
- .has_definition?(:ivar, '@number')
20
- .should == true
21
-
22
- defs.lookup(:const, 'Example')
23
- .lookup(:ivar, '@number')
24
- .used?
25
- .should == true
26
- end
27
-
28
- example 'should define an accessor attribute using #attr' do
29
- code = <<-CODE
30
- class Example
31
- attr :number, true
32
- end
33
- CODE
34
-
35
- defs = build_definitions(code)
36
-
37
- defs.lookup(:const, 'Example')
38
- .has_definition?(:instance_method, 'number')
39
- .should == true
40
-
41
- defs.lookup(:const, 'Example')
42
- .has_definition?(:instance_method, 'number=')
43
- .should == true
44
-
45
- defs.lookup(:const, 'Example')
46
- .has_definition?(:ivar, '@number')
47
- .should == true
48
- end
49
-
50
- example 'should define a read-only attribute using #attr_reader' do
51
- code = <<-CODE
52
- class Example
53
- attr_reader :number
54
- end
55
- CODE
56
-
57
- defs = build_definitions(code)
58
-
59
- defs.lookup(:const, 'Example')
60
- .has_definition?(:instance_method, 'number')
61
- .should == true
62
-
63
- defs.lookup(:const, 'Example')
64
- .has_definition?(:instance_method, 'number=')
65
- .should == false
66
-
67
- defs.lookup(:const, 'Example')
68
- .has_definition?(:ivar, '@number')
69
- .should == true
70
- end
71
-
72
- example 'should define a write-only attribute using #attr_writer' do
73
- code = <<-CODE
74
- class Example
75
- attr_writer :number
76
- end
77
- CODE
78
-
79
- defs = build_definitions(code)
80
-
81
- defs.lookup(:const, 'Example')
82
- .has_definition?(:instance_method, 'number')
83
- .should == false
84
-
85
- defs.lookup(:const, 'Example')
86
- .has_definition?(:instance_method, 'number=')
87
- .should == true
88
-
89
- defs.lookup(:const, 'Example')
90
- .has_definition?(:ivar, '@number')
91
- .should == true
92
- end
93
-
94
- example 'should define an accessor attribute using #attr_accessor' do
95
- code = <<-CODE
96
- class Example
97
- attr_accessor :number
98
- end
99
- CODE
100
-
101
- defs = build_definitions(code)
102
-
103
- defs.lookup(:const, 'Example')
104
- .has_definition?(:instance_method, 'number')
105
- .should == true
106
-
107
- defs.lookup(:const, 'Example')
108
- .has_definition?(:instance_method, 'number=')
109
- .should == true
110
-
111
- defs.lookup(:const, 'Example')
112
- .has_definition?(:ivar, '@number')
113
- .should == true
114
- end
115
- end
116
-
117
- context 'attr methods and argument amounts' do
118
- example 'set the arguments for attr' do
119
- code = <<-CODE
120
- class Example
121
- attr :foo
122
- end
123
- CODE
124
-
125
- defs = build_definitions(code)
126
-
127
- defs.lookup(:const, 'Example')
128
- .lookup(:instance_method, 'foo')
129
- .arguments
130
- .empty?
131
- .should == true
132
- end
133
-
134
- example 'set the arguments for attr_reader' do
135
- code = <<-CODE
136
- class Example
137
- attr_reader :foo
138
- end
139
- CODE
140
-
141
- defs = build_definitions(code)
142
-
143
- defs.lookup(:const, 'Example')
144
- .lookup(:instance_method, 'foo')
145
- .arguments
146
- .empty?
147
- .should == true
148
- end
149
-
150
- example 'set the arguments for attr_writer' do
151
- code = <<-CODE
152
- class Example
153
- attr_writer :foo
154
- end
155
- CODE
156
-
157
- defs = build_definitions(code)
158
-
159
- defs.lookup(:const, 'Example')
160
- .lookup(:instance_method, 'foo=')
161
- .arguments
162
- .length
163
- .should == 1
164
- end
165
-
166
- example 'set the arguments for attr_accessor' do
167
- code = <<-CODE
168
- class Example
169
- attr_accessor :foo
170
- end
171
- CODE
172
-
173
- defs = build_definitions(code)
174
-
175
- defs.lookup(:const, 'Example')
176
- .lookup(:instance_method, 'foo=')
177
- .arguments
178
- .length
179
- .should == 1
180
- end
181
- end
182
- end
@@ -1,25 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe RubyLint::VirtualMachine do
4
- context 'evaluating method calls' do
5
- before :all do
6
- code = <<-EOF
7
- # @return [String]
8
- def example
9
- return 'foo'
10
- end
11
-
12
- variable = example
13
- EOF
14
-
15
- @defs = build_definitions(code)
16
- end
17
-
18
- example 'assign the correct return value to a local variable' do
19
- value = @defs.lookup(:lvar, 'variable').value
20
-
21
- value.type.should == :const
22
- value.name.should == 'String'
23
- end
24
- end
25
- end
@@ -1,41 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe RubyLint::VirtualMachine do
4
- context 'define_method' do
5
- example 'change the instance type of the block to `:instance`' do
6
- code = <<-CODE
7
- class A
8
- define_method(:example) do
9
- end
10
- end
11
- CODE
12
-
13
- assoc = build_associations(code).to_a[-2].last
14
-
15
- assoc.type.should == :block
16
- assoc.instance_type.should == :instance
17
- end
18
-
19
- example 'should not mess up nested blocks' do
20
- code = <<-CODE
21
- class A
22
- something.each do
23
- define_method(:example) do
24
- end
25
- end
26
- end
27
- CODE
28
-
29
- assoc = build_associations(code).to_a
30
-
31
- something = assoc[2].last
32
- define = assoc[4].last
33
-
34
- something.type.should == :block
35
- something.instance_type.should == :class
36
-
37
- define.type.should == :block
38
- define.instance_type.should == :instance
39
- end
40
- end
41
- end
@@ -1,40 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe RubyLint::VirtualMachine do
4
- describe 'defining methods' do
5
- example 'process a definition with a variable assignment in the body' do
6
- code = <<-CODE
7
- def example
8
- number = 10
9
- end
10
- CODE
11
-
12
- defs = build_definitions(code)
13
-
14
- defs.lookup(:instance_method, 'example') \
15
- .lookup(:lvar, 'number') \
16
- .is_a?(ruby_object) \
17
- .should == true
18
-
19
- defs.lookup(:lvar, 'number').nil?.should == true
20
- end
21
-
22
- example 'process a definition with a receiver' do
23
- code = <<-CODE
24
- def String.example
25
- number = 10
26
- end
27
- CODE
28
-
29
- defs = build_definitions(code)
30
-
31
- defs.lookup(:const, 'String') \
32
- .lookup(:method, 'example') \
33
- .is_a?(ruby_method) \
34
- .should == true
35
-
36
- defs.lookup(:method, 'example').nil?.should == true
37
- defs.lookup(:instance_method, 'example').nil?.should == true
38
- end
39
- end
40
- end
@@ -1,80 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe RubyLint::VirtualMachine do
4
- context 'method arguments and docstrings' do
5
- example 'extract the type of a parameter' do
6
- code = <<-CODE
7
- # @param [Numeric] number
8
- def example(number)
9
- end
10
- CODE
11
-
12
- defs = build_definitions(code)
13
-
14
- number = defs.lookup(:instance_method, 'example').lookup(:lvar, 'number')
15
- numeric = defs.lookup(:const, 'Numeric')
16
-
17
- number.is_a?(ruby_object).should == true
18
- numeric.is_a?(ruby_object).should == true
19
- number.parents.include?(numeric).should == true
20
- end
21
-
22
- example 'extract the type of a parameter using a method' do
23
- code = <<-CODE
24
- # @param [#to_s] number
25
- def example(number)
26
- end
27
- CODE
28
-
29
- defs = build_definitions(code)
30
- number = defs.lookup(:instance_method, 'example').lookup(:lvar, 'number')
31
-
32
- number.is_a?(ruby_object).should == true
33
- number.lookup(:instance_method, 'to_s').is_a?(ruby_method).should == true
34
- end
35
-
36
- example 'extract multiple types from a parameter' do
37
- code = <<-CODE
38
- # @param [Float|Fixnum] number
39
- def example(number)
40
- end
41
- CODE
42
-
43
- defs = build_definitions(code)
44
- float = defs.lookup(:const, 'Float')
45
- fixnum = defs.lookup(:const, 'Fixnum')
46
-
47
- number = defs.lookup(:instance_method, 'example').lookup(:lvar, 'number')
48
-
49
- number.is_a?(ruby_object).should == true
50
- number.parents.include?(float).should == true
51
- number.parents.include?(fixnum).should == true
52
- end
53
- end
54
-
55
- context 'method return values and docstrings' do
56
- before :all do
57
- code = <<-CODE
58
- # @return [Numeric]
59
- def example
60
- end
61
- CODE
62
-
63
- @defs = build_definitions(code)
64
- end
65
-
66
- example 'extract the type of a return tag' do
67
- method = @defs.lookup(:instance_method, 'example')
68
- numeric = @defs.lookup(:const, 'Numeric')
69
-
70
- method.return_value.type.should == :const
71
- method.return_value.name.should == 'Numeric'
72
- end
73
-
74
- example 'return values as instances' do
75
- method = @defs.lookup(:instance_method, 'example')
76
-
77
- method.return_value.instance?.should == true
78
- end
79
- end
80
- end
@@ -1,19 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe RubyLint::VirtualMachine do
4
- describe 'exporting variables out of method scopes' do
5
- example 'export variables to the outer scope' do
6
- code = <<-CODE
7
- def example
8
- @number = 10
9
- end
10
- CODE
11
-
12
- defs = build_definitions(code)
13
-
14
- defs.lookup(:ivar, '@number') \
15
- .is_a?(ruby_object) \
16
- .should == true
17
- end
18
- end
19
- end
@@ -1,25 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe RubyLint::VirtualMachine do
4
- describe 'updating the Kernel module' do
5
- before :all do
6
- code = <<-CODE
7
- module Kernel
8
- def foobar
9
- end
10
- end
11
- CODE
12
-
13
- @definitions = build_definitions(code)
14
- @kernel = @definitions.lookup(:const, 'Kernel')
15
- end
16
-
17
- example 'add the method to the Kernel module' do
18
- @kernel.has_definition?(:instance_method, 'foobar').should == true
19
- end
20
-
21
- example 'add the method to the global scope' do
22
- @definitions.has_definition?(:instance_method, 'foobar').should == true
23
- end
24
- end
25
- end
@@ -1,89 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe RubyLint::VirtualMachine do
4
- describe 'creating variables for method parameters' do
5
- example 'create local variables' do
6
- code = <<-CODE
7
- def example(number)
8
- return number
9
- end
10
- CODE
11
-
12
- defs = build_definitions(code)
13
-
14
- defs.lookup(:instance_method, 'example') \
15
- .lookup(:lvar, 'number') \
16
- .is_a?(ruby_object) \
17
- .should == true
18
- end
19
-
20
- example 'allow the assignment using parameters' do
21
- code = <<-CODE
22
- def example(number)
23
- other_number = number
24
- end
25
- CODE
26
-
27
- defs = build_definitions(code)
28
-
29
- defs.lookup(:instance_method, 'example') \
30
- .lookup(:lvar, 'other_number') \
31
- .is_a?(ruby_object) \
32
- .should == true
33
- end
34
-
35
- example 'take all argument types into account' do
36
- code = <<-CODE
37
- def example(required, optional = 10, *splat, more, &block)
38
- _required = required
39
- _optional = optional
40
- _splat = splat
41
- _more = more
42
- _block = block
43
- end
44
- CODE
45
-
46
- defs = build_definitions(code)
47
- method = defs.lookup(:instance_method, 'example')
48
-
49
- %w{_required _splat _more _block}.each do |name|
50
- method.lookup(:lvar, name).is_a?(ruby_object).should == true
51
- end
52
-
53
- method.lookup(:lvar, '_optional').value.value.should == 10
54
- end
55
-
56
- example 'store arguments under special types' do
57
- code = <<-CODE
58
- def example(required, optional = 10, *splat, more, &block)
59
- end
60
- CODE
61
-
62
- defs = build_definitions(code)
63
- method = defs.lookup(:instance_method, 'example')
64
- types = [
65
- [:arg, 'required'],
66
- [:optarg, 'optional'],
67
- [:restarg, 'splat'],
68
- [:arg, 'more'],
69
- [:blockarg, 'block']
70
- ]
71
-
72
- types.each do |(type, name)|
73
- method.lookup(type, name).is_a?(ruby_object).should == true
74
- end
75
- end
76
-
77
- # Keyword arguments were introduced in Ruby 2.0.
78
- specific_ruby_version '2.0' do
79
- example 'support keyword arguments' do
80
- code = 'def example(number: 10); end'
81
- defs = build_definitions(code)
82
- method = defs.lookup(:instance_method, 'example')
83
-
84
- method.lookup(:kwoptarg, 'number').value.value.should == 10
85
- method.lookup(:lvar, 'number').value.value.should == 10
86
- end
87
- end
88
- end
89
- end