ruby-lint 0.0.2 → 0.0.3

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 (321) hide show
  1. data.tar.gz.asc +17 -0
  2. data/.gitignore +1 -0
  3. data/.travis.yml +25 -0
  4. data/.yardopts +4 -0
  5. data/Gemfile +1 -1
  6. data/LICENSE +1 -1
  7. data/MANIFEST +238 -49
  8. data/README.md +84 -131
  9. data/Rakefile +6 -0
  10. data/bin/ruby-lint +2 -2
  11. data/checksum/.gitkeep +0 -0
  12. data/doc/DCO.md +26 -0
  13. data/doc/architecture.md +63 -0
  14. data/doc/code_analysis.md +90 -0
  15. data/doc/configuration.md +86 -0
  16. data/doc/contributing.md +16 -0
  17. data/doc/graphviz/flow.dot +7 -0
  18. data/doc/images/.gitkeep +0 -0
  19. data/doc/images/flow.png +0 -0
  20. data/lib/ruby-lint.rb +35 -35
  21. data/lib/ruby-lint/analyze/argument_amount.rb +73 -0
  22. data/lib/ruby-lint/analyze/shadowing_variables.rb +19 -24
  23. data/lib/ruby-lint/analyze/undefined_methods.rb +68 -0
  24. data/lib/ruby-lint/analyze/undefined_variables.rb +42 -69
  25. data/lib/ruby-lint/analyze/unused_variables.rb +23 -78
  26. data/lib/ruby-lint/base.rb +85 -0
  27. data/lib/ruby-lint/cli.rb +23 -167
  28. data/lib/ruby-lint/cli/analyze.rb +99 -0
  29. data/lib/ruby-lint/cli/ast.rb +35 -0
  30. data/lib/ruby-lint/cli/base.rb +120 -0
  31. data/lib/ruby-lint/configuration.rb +112 -0
  32. data/lib/ruby-lint/constant_loader.rb +92 -0
  33. data/lib/ruby-lint/definition/ruby_method.rb +248 -0
  34. data/lib/ruby-lint/definition/ruby_object.rb +757 -0
  35. data/lib/ruby-lint/definition_generator.rb +155 -0
  36. data/lib/ruby-lint/definitions/core.rb +5 -0
  37. data/lib/ruby-lint/definitions/core/arg0.rb +7 -0
  38. data/lib/ruby-lint/definitions/core/argf.rb +7 -0
  39. data/lib/ruby-lint/definitions/core/argument_error.rb +12 -0
  40. data/lib/ruby-lint/definitions/core/argv.rb +7 -0
  41. data/lib/ruby-lint/definitions/core/array.rb +414 -0
  42. data/lib/ruby-lint/definitions/core/autoload.rb +39 -0
  43. data/lib/ruby-lint/definitions/core/basic_object.rb +46 -0
  44. data/lib/ruby-lint/definitions/core/bignum.rb +128 -0
  45. data/lib/ruby-lint/definitions/core/binding.rb +52 -0
  46. data/lib/ruby-lint/definitions/core/class.rb +23 -0
  47. data/lib/ruby-lint/definitions/core/comparable.rb +38 -0
  48. data/lib/ruby-lint/definitions/core/complex.rb +195 -0
  49. data/lib/ruby-lint/definitions/core/condition_variable.rb +19 -0
  50. data/lib/ruby-lint/definitions/core/continuation.rb +8 -0
  51. data/lib/ruby-lint/definitions/core/data.rb +8 -0
  52. data/lib/ruby-lint/definitions/core/date.rb +706 -0
  53. data/lib/ruby-lint/definitions/core/date_time.rb +381 -0
  54. data/lib/ruby-lint/definitions/core/default_record_separator.rb +7 -0
  55. data/lib/ruby-lint/definitions/core/digest.rb +166 -0
  56. data/lib/ruby-lint/definitions/core/dir.rb +496 -0
  57. data/lib/ruby-lint/definitions/core/encoding.rb +2030 -0
  58. data/lib/ruby-lint/definitions/core/encoding_error.rb +8 -0
  59. data/lib/ruby-lint/definitions/core/enumerable.rb +352 -0
  60. data/lib/ruby-lint/definitions/core/enumerator.rb +37 -0
  61. data/lib/ruby-lint/definitions/core/env.rb +7 -0
  62. data/lib/ruby-lint/definitions/core/eoferror.rb +8 -0
  63. data/lib/ruby-lint/definitions/core/erb.rb +304 -0
  64. data/lib/ruby-lint/definitions/core/errno.rb +3331 -0
  65. data/lib/ruby-lint/definitions/core/etc.rb +138 -0
  66. data/lib/ruby-lint/definitions/core/exception.rb +72 -0
  67. data/lib/ruby-lint/definitions/core/false.rb +7 -0
  68. data/lib/ruby-lint/definitions/core/false_class.rb +30 -0
  69. data/lib/ruby-lint/definitions/core/fatal_error.rb +8 -0
  70. data/lib/ruby-lint/definitions/core/fiber.rb +35 -0
  71. data/lib/ruby-lint/definitions/core/fiber_error.rb +8 -0
  72. data/lib/ruby-lint/definitions/core/file.rb +1277 -0
  73. data/lib/ruby-lint/definitions/core/file_list.rb +727 -0
  74. data/lib/ruby-lint/definitions/core/file_test.rb +106 -0
  75. data/lib/ruby-lint/definitions/core/file_utils.rb +1027 -0
  76. data/lib/ruby-lint/definitions/core/fixnum.rb +156 -0
  77. data/lib/ruby-lint/definitions/core/float.rb +307 -0
  78. data/lib/ruby-lint/definitions/core/float_domain_error.rb +8 -0
  79. data/lib/ruby-lint/definitions/core/gc.rb +57 -0
  80. data/lib/ruby-lint/definitions/core/gem.rb +3161 -0
  81. data/lib/ruby-lint/definitions/core/hash.rb +512 -0
  82. data/lib/ruby-lint/definitions/core/immediate_value.rb +19 -0
  83. data/lib/ruby-lint/definitions/core/index_error.rb +8 -0
  84. data/lib/ruby-lint/definitions/core/integer.rb +100 -0
  85. data/lib/ruby-lint/definitions/core/interrupt.rb +14 -0
  86. data/lib/ruby-lint/definitions/core/io.rb +928 -0
  87. data/lib/ruby-lint/definitions/core/ioerror.rb +8 -0
  88. data/lib/ruby-lint/definitions/core/kernel.rb +504 -0
  89. data/lib/ruby-lint/definitions/core/key_error.rb +8 -0
  90. data/lib/ruby-lint/definitions/core/load_error.rb +28 -0
  91. data/lib/ruby-lint/definitions/core/local_jump_error.rb +8 -0
  92. data/lib/ruby-lint/definitions/core/main.rb +25 -0
  93. data/lib/ruby-lint/definitions/core/marshal.rb +466 -0
  94. data/lib/ruby-lint/definitions/core/match_data.rb +73 -0
  95. data/lib/ruby-lint/definitions/core/math.rb +205 -0
  96. data/lib/ruby-lint/definitions/core/memory_segmention_error.rb +8 -0
  97. data/lib/ruby-lint/definitions/core/method.rb +61 -0
  98. data/lib/ruby-lint/definitions/core/module.rb +262 -0
  99. data/lib/ruby-lint/definitions/core/monitor.rb +39 -0
  100. data/lib/ruby-lint/definitions/core/monitor_mixin.rb +59 -0
  101. data/lib/ruby-lint/definitions/core/mutex.rb +32 -0
  102. data/lib/ruby-lint/definitions/core/name_error.rb +16 -0
  103. data/lib/ruby-lint/definitions/core/nil.rb +7 -0
  104. data/lib/ruby-lint/definitions/core/nil_class.rb +46 -0
  105. data/lib/ruby-lint/definitions/core/no_memory_error.rb +8 -0
  106. data/lib/ruby-lint/definitions/core/no_method_error.rb +18 -0
  107. data/lib/ruby-lint/definitions/core/not_implemented_error.rb +8 -0
  108. data/lib/ruby-lint/definitions/core/numeric.rb +123 -0
  109. data/lib/ruby-lint/definitions/core/object.rb +31 -0
  110. data/lib/ruby-lint/definitions/core/object_space.rb +41 -0
  111. data/lib/ruby-lint/definitions/core/open_struct.rb +49 -0
  112. data/lib/ruby-lint/definitions/core/option_parser.rb +1355 -0
  113. data/lib/ruby-lint/definitions/core/precision.rb +21 -0
  114. data/lib/ruby-lint/definitions/core/primitive_failure.rb +8 -0
  115. data/lib/ruby-lint/definitions/core/proc.rb +109 -0
  116. data/lib/ruby-lint/definitions/core/process.rb +602 -0
  117. data/lib/ruby-lint/definitions/core/psych.rb +2231 -0
  118. data/lib/ruby-lint/definitions/core/queue.rb +44 -0
  119. data/lib/ruby-lint/definitions/core/rake.rb +4784 -0
  120. data/lib/ruby-lint/definitions/core/rake_file_utils.rb +203 -0
  121. data/lib/ruby-lint/definitions/core/rakeversion.rb +7 -0
  122. data/lib/ruby-lint/definitions/core/random.rb +38 -0
  123. data/lib/ruby-lint/definitions/core/range.rb +104 -0
  124. data/lib/ruby-lint/definitions/core/range_error.rb +8 -0
  125. data/lib/ruby-lint/definitions/core/rational.rb +96 -0
  126. data/lib/ruby-lint/definitions/core/rb_config.rb +36 -0
  127. data/lib/ruby-lint/definitions/core/regexp.rb +396 -0
  128. data/lib/ruby-lint/definitions/core/regexp_error.rb +8 -0
  129. data/lib/ruby-lint/definitions/core/rubinius.rb +16637 -0
  130. data/lib/ruby-lint/definitions/core/ruby_copyright.rb +7 -0
  131. data/lib/ruby-lint/definitions/core/ruby_description.rb +7 -0
  132. data/lib/ruby-lint/definitions/core/ruby_engine.rb +7 -0
  133. data/lib/ruby-lint/definitions/core/ruby_lint.rb +93 -0
  134. data/lib/ruby-lint/definitions/core/ruby_patchlevel.rb +7 -0
  135. data/lib/ruby-lint/definitions/core/ruby_platform.rb +7 -0
  136. data/lib/ruby-lint/definitions/core/ruby_release_date.rb +7 -0
  137. data/lib/ruby-lint/definitions/core/ruby_version.rb +7 -0
  138. data/lib/ruby-lint/definitions/core/runtime_error.rb +8 -0
  139. data/lib/ruby-lint/definitions/core/scan_error.rb +8 -0
  140. data/lib/ruby-lint/definitions/core/script_error.rb +8 -0
  141. data/lib/ruby-lint/definitions/core/security_error.rb +8 -0
  142. data/lib/ruby-lint/definitions/core/shellwords.rb +37 -0
  143. data/lib/ruby-lint/definitions/core/signal.rb +37 -0
  144. data/lib/ruby-lint/definitions/core/signal_exception.rb +19 -0
  145. data/lib/ruby-lint/definitions/core/singleton.rb +37 -0
  146. data/lib/ruby-lint/definitions/core/sized_queue.rb +42 -0
  147. data/lib/ruby-lint/definitions/core/standard_error.rb +8 -0
  148. data/lib/ruby-lint/definitions/core/stderr.rb +7 -0
  149. data/lib/ruby-lint/definitions/core/stdin.rb +7 -0
  150. data/lib/ruby-lint/definitions/core/stdout.rb +7 -0
  151. data/lib/ruby-lint/definitions/core/stop_iteration.rb +8 -0
  152. data/lib/ruby-lint/definitions/core/string.rb +713 -0
  153. data/lib/ruby-lint/definitions/core/string_io.rb +287 -0
  154. data/lib/ruby-lint/definitions/core/string_scanner.rb +158 -0
  155. data/lib/ruby-lint/definitions/core/struct.rb +357 -0
  156. data/lib/ruby-lint/definitions/core/syck.rb +30 -0
  157. data/lib/ruby-lint/definitions/core/symbol.rb +90 -0
  158. data/lib/ruby-lint/definitions/core/syntax_error.rb +44 -0
  159. data/lib/ruby-lint/definitions/core/system_call_error.rb +31 -0
  160. data/lib/ruby-lint/definitions/core/system_exit.rb +19 -0
  161. data/lib/ruby-lint/definitions/core/system_stack_error.rb +8 -0
  162. data/lib/ruby-lint/definitions/core/thread.rb +209 -0
  163. data/lib/ruby-lint/definitions/core/thread_error.rb +8 -0
  164. data/lib/ruby-lint/definitions/core/thread_group.rb +22 -0
  165. data/lib/ruby-lint/definitions/core/time.rb +233 -0
  166. data/lib/ruby-lint/definitions/core/toplevel_binding.rb +7 -0
  167. data/lib/ruby-lint/definitions/core/true.rb +7 -0
  168. data/lib/ruby-lint/definitions/core/true_class.rb +30 -0
  169. data/lib/ruby-lint/definitions/core/type_error.rb +8 -0
  170. data/lib/ruby-lint/definitions/core/unbound_method.rb +51 -0
  171. data/lib/ruby-lint/definitions/core/unmarshalable.rb +13 -0
  172. data/lib/ruby-lint/definitions/core/unsupported_library_error.rb +8 -0
  173. data/lib/ruby-lint/definitions/core/weak_ref.rb +42 -0
  174. data/lib/ruby-lint/definitions/core/zero_division_error.rb +8 -0
  175. data/lib/ruby-lint/definitions_builder.rb +692 -0
  176. data/lib/ruby-lint/extensions/string.rb +15 -0
  177. data/lib/ruby-lint/helper/constant_paths.rb +41 -0
  178. data/lib/ruby-lint/helper/conversion.rb +33 -0
  179. data/lib/ruby-lint/helper/current_scope.rb +98 -0
  180. data/lib/ruby-lint/helper/methods.rb +91 -0
  181. data/lib/ruby-lint/inspector.rb +191 -0
  182. data/lib/ruby-lint/iterator.rb +187 -127
  183. data/lib/ruby-lint/node.rb +107 -0
  184. data/lib/ruby-lint/parser.rb +510 -1137
  185. data/lib/ruby-lint/parser_error.rb +15 -27
  186. data/lib/ruby-lint/presenter/json.rb +19 -0
  187. data/lib/ruby-lint/presenter/text.rb +37 -0
  188. data/lib/ruby-lint/report.rb +95 -53
  189. data/lib/ruby-lint/report/entry.rb +71 -0
  190. data/lib/ruby-lint/template/definition.erb +24 -0
  191. data/lib/ruby-lint/template/scope.rb +25 -0
  192. data/lib/ruby-lint/variable_predicates.rb +109 -0
  193. data/lib/ruby-lint/version.rb +1 -1
  194. data/ruby-lint.gemspec +19 -8
  195. data/spec/helper.rb +10 -2
  196. data/spec/ruby-lint/analyze/argument_amount.rb +91 -0
  197. data/spec/ruby-lint/analyze/shadowing_variables.rb +69 -14
  198. data/spec/ruby-lint/analyze/undefined_methods.rb +174 -0
  199. data/spec/ruby-lint/analyze/undefined_variables.rb +70 -179
  200. data/spec/ruby-lint/analyze/unused_variables.rb +63 -183
  201. data/spec/ruby-lint/configuration.rb +15 -0
  202. data/spec/ruby-lint/constant_loader.rb +32 -0
  203. data/spec/ruby-lint/definition/dsl.rb +142 -0
  204. data/spec/ruby-lint/definition/method_calls.rb +26 -0
  205. data/spec/ruby-lint/definition/ruby_method.rb +175 -0
  206. data/spec/ruby-lint/definition/ruby_object.rb +228 -0
  207. data/spec/ruby-lint/definitions_builder/assignments/arrays.rb +71 -0
  208. data/spec/ruby-lint/definitions_builder/assignments/hashes.rb +65 -0
  209. data/spec/ruby-lint/definitions_builder/assignments/objects.rb +23 -0
  210. data/spec/ruby-lint/definitions_builder/assignments/optional.rb +22 -0
  211. data/spec/ruby-lint/definitions_builder/assignments/return_values.rb +78 -0
  212. data/spec/ruby-lint/definitions_builder/assignments/variables.rb +71 -0
  213. data/spec/ruby-lint/definitions_builder/associate_nodes.rb +17 -0
  214. data/spec/ruby-lint/definitions_builder/blocks.rb +40 -0
  215. data/spec/ruby-lint/definitions_builder/classes.rb +230 -0
  216. data/spec/ruby-lint/definitions_builder/for.rb +16 -0
  217. data/spec/ruby-lint/definitions_builder/methods.rb +147 -0
  218. data/spec/ruby-lint/definitions_builder/modules.rb +175 -0
  219. data/spec/ruby-lint/definitions_builder/reference_amount.rb +31 -0
  220. data/spec/ruby-lint/definitions_builder/unused.rb +15 -0
  221. data/spec/ruby-lint/extensions/string.rb +7 -0
  222. data/spec/ruby-lint/iterator.rb +42 -417
  223. data/spec/ruby-lint/node.rb +38 -0
  224. data/spec/ruby-lint/parser/assignments.rb +225 -0
  225. data/spec/ruby-lint/parser/classes.rb +80 -122
  226. data/spec/ruby-lint/parser/errors.rb +7 -14
  227. data/spec/ruby-lint/parser/metadata.rb +17 -0
  228. data/spec/ruby-lint/parser/method_definitions.rb +111 -0
  229. data/spec/ruby-lint/parser/methods.rb +184 -216
  230. data/spec/ruby-lint/parser/modules.rb +54 -33
  231. data/spec/ruby-lint/parser/operators.rb +30 -65
  232. data/spec/ruby-lint/parser/statements/begin.rb +55 -0
  233. data/spec/ruby-lint/parser/statements/case.rb +34 -0
  234. data/spec/ruby-lint/parser/statements/defined.rb +11 -0
  235. data/spec/ruby-lint/parser/statements/for.rb +34 -0
  236. data/spec/ruby-lint/parser/statements/if.rb +46 -0
  237. data/spec/ruby-lint/parser/statements/return.rb +14 -0
  238. data/spec/ruby-lint/parser/statements/super.rb +49 -0
  239. data/spec/ruby-lint/parser/statements/unless.rb +42 -0
  240. data/spec/ruby-lint/parser/statements/until.rb +25 -0
  241. data/spec/ruby-lint/parser/statements/while.rb +25 -0
  242. data/spec/ruby-lint/parser/statements/yield.rb +18 -0
  243. data/spec/ruby-lint/parser/types/arrays.rb +47 -0
  244. data/spec/ruby-lint/parser/types/booleans.rb +11 -0
  245. data/spec/ruby-lint/parser/types/constants.rb +32 -0
  246. data/spec/ruby-lint/parser/types/hashes.rb +55 -0
  247. data/spec/ruby-lint/parser/types/nil.rb +7 -0
  248. data/spec/ruby-lint/parser/types/numbers.rb +11 -0
  249. data/spec/ruby-lint/parser/types/procs.rb +11 -0
  250. data/spec/ruby-lint/parser/types/ranges.rb +11 -0
  251. data/spec/ruby-lint/parser/types/regexp.rb +27 -0
  252. data/spec/ruby-lint/parser/types/strings.rb +44 -0
  253. data/spec/ruby-lint/parser/types/symbols.rb +15 -0
  254. data/spec/ruby-lint/presenter/json.rb +31 -0
  255. data/spec/ruby-lint/presenter/text.rb +22 -0
  256. data/spec/ruby-lint/report.rb +45 -15
  257. data/spec/ruby-lint/report/entry.rb +24 -0
  258. data/spec/support/bacon.rb +33 -0
  259. data/spec/support/building.rb +43 -0
  260. data/spec/support/definitions.rb +23 -0
  261. data/spec/support/parsing.rb +23 -0
  262. data/spec/support/simplecov.rb +16 -0
  263. data/task/build.rake +9 -0
  264. data/task/checksum.rake +13 -0
  265. data/task/coverage.rake +6 -0
  266. data/task/doc.rake +5 -0
  267. data/task/generate.rake +34 -0
  268. data/task/graphviz.rake +12 -0
  269. data/task/stdlib.rake +2 -9
  270. data/task/tag.rake +6 -0
  271. metadata +337 -68
  272. metadata.gz.asc +17 -0
  273. data/.rbenv-version +0 -1
  274. data/lib/ruby-lint/analyze/coding_style.rb +0 -407
  275. data/lib/ruby-lint/analyze/definitions.rb +0 -244
  276. data/lib/ruby-lint/analyze/method_validation.rb +0 -104
  277. data/lib/ruby-lint/callback.rb +0 -67
  278. data/lib/ruby-lint/constant_importer.rb +0 -112
  279. data/lib/ruby-lint/definition.rb +0 -230
  280. data/lib/ruby-lint/formatter/text.rb +0 -54
  281. data/lib/ruby-lint/helper/definition_resolver.rb +0 -143
  282. data/lib/ruby-lint/helper/scoping.rb +0 -138
  283. data/lib/ruby-lint/options.rb +0 -58
  284. data/lib/ruby-lint/token/assignment_token.rb +0 -35
  285. data/lib/ruby-lint/token/begin_rescue_token.rb +0 -57
  286. data/lib/ruby-lint/token/block_token.rb +0 -26
  287. data/lib/ruby-lint/token/case_token.rb +0 -44
  288. data/lib/ruby-lint/token/class_token.rb +0 -24
  289. data/lib/ruby-lint/token/keyword_token.rb +0 -43
  290. data/lib/ruby-lint/token/method_definition_token.rb +0 -64
  291. data/lib/ruby-lint/token/method_token.rb +0 -56
  292. data/lib/ruby-lint/token/parameters_token.rb +0 -99
  293. data/lib/ruby-lint/token/regexp_token.rb +0 -15
  294. data/lib/ruby-lint/token/statement_token.rb +0 -69
  295. data/lib/ruby-lint/token/token.rb +0 -176
  296. data/lib/ruby-lint/token/variable_token.rb +0 -18
  297. data/spec/benchmarks/memory.rb +0 -52
  298. data/spec/benchmarks/parse_parser.rb +0 -16
  299. data/spec/fixtures/stdlib/un.rb +0 -348
  300. data/spec/ruby-lint/analyze/coding_style.rb +0 -224
  301. data/spec/ruby-lint/analyze/complex/un.rb +0 -29
  302. data/spec/ruby-lint/analyze/definitions/classes.rb +0 -114
  303. data/spec/ruby-lint/analyze/definitions/methods.rb +0 -91
  304. data/spec/ruby-lint/analyze/definitions/modules.rb +0 -207
  305. data/spec/ruby-lint/analyze/definitions/variables.rb +0 -103
  306. data/spec/ruby-lint/analyze/method_validation.rb +0 -177
  307. data/spec/ruby-lint/callback.rb +0 -28
  308. data/spec/ruby-lint/constant_importer.rb +0 -27
  309. data/spec/ruby-lint/definition.rb +0 -96
  310. data/spec/ruby-lint/formatter/text.rb +0 -21
  311. data/spec/ruby-lint/parser/arrays.rb +0 -147
  312. data/spec/ruby-lint/parser/expander_assignments.rb +0 -183
  313. data/spec/ruby-lint/parser/hashes.rb +0 -136
  314. data/spec/ruby-lint/parser/keywords.rb +0 -89
  315. data/spec/ruby-lint/parser/objects.rb +0 -39
  316. data/spec/ruby-lint/parser/procs.rb +0 -113
  317. data/spec/ruby-lint/parser/ranges.rb +0 -49
  318. data/spec/ruby-lint/parser/regexp.rb +0 -31
  319. data/spec/ruby-lint/parser/scalars.rb +0 -93
  320. data/spec/ruby-lint/parser/statements.rb +0 -591
  321. data/spec/ruby-lint/parser/variables.rb +0 -230
@@ -1,225 +1,105 @@
1
1
  require File.expand_path('../../../helper', __FILE__)
2
2
 
3
- describe 'RubyLint::Analyze::UnusedVariables' do
4
- it 'Add warnings for unused variables in the global scope' do
5
- code = <<-CODE
6
- number = 10
7
- @number = 10
8
- @@number = 10
9
- $number = 10
10
-
11
- number_2 = 10
12
- @number_2 = 10
13
- @@number_2 = 10
14
- $number_2 = 10
15
-
16
- puts number_2
17
- puts @number_2
18
- puts @@number_2
19
- puts $number_2
20
- CODE
21
-
22
- tokens = RubyLint::Parser.new(code).parse
23
- report = RubyLint::Report.new
24
- iterator = RubyLint::Iterator.new(report)
25
-
26
- iterator.bind(RubyLint::Analyze::Definitions)
27
- iterator.bind(RubyLint::Analyze::UnusedVariables)
28
- iterator.run(tokens)
3
+ describe RubyLint::Analyze::UnusedVariables do
4
+ should 'warn for unused local variables' do
5
+ report = build_report('number = 1', RubyLint::Analyze::UnusedVariables)
6
+ entry = report.entries[0]
29
7
 
30
- report.messages[:warning].class.should == Array
31
- report.messages[:warning].length.should == 4
8
+ entry.is_a?(RubyLint::Report::Entry).should == true
32
9
 
33
- warnings = report.messages[:warning]
34
-
35
- warnings[0][:message].should == 'assigned but unused local variable number'
36
- warnings[0][:line].should == 1
37
- warnings[0][:column].should == 0
10
+ entry.line.should == 1
11
+ entry.column.should == 0
12
+ entry.message.should == 'unused local variable number'
13
+ end
38
14
 
39
- warnings[1][:message].should == 'assigned but unused instance ' \
40
- 'variable @number'
15
+ should 'warn for unused global variables' do
16
+ report = build_report('$number = 1', RubyLint::Analyze::UnusedVariables)
17
+ entry = report.entries[0]
41
18
 
42
- warnings[1][:line].should == 2
43
- warnings[1][:column].should == 0
19
+ entry.is_a?(RubyLint::Report::Entry).should == true
44
20
 
45
- warnings[2][:message].should == 'assigned but unused class ' \
46
- 'variable @@number'
21
+ entry.line.should == 1
22
+ entry.column.should == 0
23
+ entry.message.should == 'unused global variable $number'
24
+ end
47
25
 
48
- warnings[2][:line].should == 3
49
- warnings[2][:column].should == 0
26
+ should 'warn for unused constants' do
27
+ report = build_report('NUMBER = 10', RubyLint::Analyze::UnusedVariables)
28
+ entry = report.entries[0]
50
29
 
51
- warnings[3][:message].should == 'assigned but unused global ' \
52
- 'variable $number'
30
+ entry.is_a?(RubyLint::Report::Entry).should == true
53
31
 
54
- warnings[3][:line].should == 4
55
- warnings[3][:column].should == 0
32
+ entry.line.should == 1
33
+ entry.column.should == 0
34
+ entry.message.should == 'unused constant NUMBER'
56
35
  end
57
36
 
58
- it 'Add warnings for unused variables in a method definition scope' do
37
+ should 'warn for unused constant paths' do
59
38
  code = <<-CODE
60
- def example
61
- number = 10
62
- @number = 10
63
- @@number = 10
64
- $number = 10
65
-
66
- number_2 = 10
67
- @number_2 = 10
68
- @@number_2 = 10
69
- $number_2 = 10
70
-
71
- puts number_2
72
- puts @number_2
73
- puts @@number_2
74
- puts $number_2
39
+ module A
75
40
  end
76
- CODE
77
41
 
78
- tokens = RubyLint::Parser.new(code).parse
79
- report = RubyLint::Report.new
80
- iterator = RubyLint::Iterator.new(report)
81
-
82
- iterator.bind(RubyLint::Analyze::Definitions)
83
- iterator.bind(RubyLint::Analyze::UnusedVariables)
84
- iterator.run(tokens)
85
-
86
- report.messages[:warning].class.should == Array
87
- report.messages[:warning].length.should == 4
88
-
89
- warnings = report.messages[:warning]
90
-
91
- warnings[0][:message].should == 'assigned but unused local variable number'
92
- warnings[0][:line].should == 2
93
- warnings[0][:column].should == 2
94
-
95
- warnings[1][:message].should == 'assigned but unused instance ' \
96
- 'variable @number'
42
+ A::B = 10
43
+ CODE
97
44
 
98
- warnings[1][:line].should == 3
99
- warnings[1][:column].should == 2
45
+ report = build_report(code, RubyLint::Analyze::UnusedVariables)
100
46
 
101
- warnings[2][:message].should == 'assigned but unused class ' \
102
- 'variable @@number'
47
+ report.entries.length.should == 1
103
48
 
104
- warnings[2][:line].should == 4
105
- warnings[2][:column].should == 2
49
+ entry = report.entries[0]
106
50
 
107
- warnings[3][:message].should == 'assigned but unused global ' \
108
- 'variable $number'
51
+ entry.is_a?(RubyLint::Report::Entry).should == true
109
52
 
110
- warnings[3][:line].should == 5
111
- warnings[3][:column].should == 2
53
+ entry.line.should == 4
54
+ entry.column.should == 3
55
+ entry.message.should == 'unused constant B'
112
56
  end
113
57
 
114
- it 'Add warnings for unused variables in a class definition scope' do
58
+ should 'warn for unused variables in a method scope' do
115
59
  code = <<-CODE
116
- class Example
117
- number = 10
118
- @number = 10
119
- @@number = 10
120
- $number = 10
121
-
122
- number_2 = 10
123
- @number_2 = 10
124
- @@number_2 = 10
125
- $number_2 = 10
126
-
127
- puts number_2
128
- puts @number_2
129
- puts @@number_2
130
- puts $number_2
60
+ def some_method
61
+ number = 10
131
62
  end
132
63
  CODE
133
64
 
134
- tokens = RubyLint::Parser.new(code).parse
135
- report = RubyLint::Report.new
136
- iterator = RubyLint::Iterator.new(report)
137
-
138
- iterator.bind(RubyLint::Analyze::Definitions)
139
- iterator.bind(RubyLint::Analyze::UnusedVariables)
140
- iterator.run(tokens)
141
-
142
- report.messages[:warning].class.should == Array
143
- report.messages[:warning].length.should == 4
65
+ report = build_report(code, RubyLint::Analyze::UnusedVariables)
66
+ entry = report.entries[0]
144
67
 
145
- warnings = report.messages[:warning]
68
+ entry.is_a?(RubyLint::Report::Entry).should == true
146
69
 
147
- warnings[0][:message].should == 'assigned but unused local variable number'
148
- warnings[0][:line].should == 2
149
- warnings[0][:column].should == 2
150
-
151
- warnings[1][:message].should == 'assigned but unused instance ' \
152
- 'variable @number'
153
-
154
- warnings[1][:line].should == 3
155
- warnings[1][:column].should == 2
156
-
157
- warnings[2][:message].should == 'assigned but unused class ' \
158
- 'variable @@number'
159
-
160
- warnings[2][:line].should == 4
161
- warnings[2][:column].should == 2
162
-
163
- warnings[3][:message].should == 'assigned but unused global ' \
164
- 'variable $number'
165
-
166
- warnings[3][:line].should == 5
167
- warnings[3][:column].should == 2
70
+ entry.line.should == 2
71
+ entry.column.should == 2
72
+ entry.message.should == 'unused local variable number'
168
73
  end
169
74
 
170
- it 'Add warnings for unused variables in a module definition scope' do
75
+ should 'not add a warning when assigning a variable to another variable' do
171
76
  code = <<-CODE
172
- module Example
173
- number = 10
174
- @number = 10
175
- @@number = 10
176
- $number = 10
177
-
178
- number_2 = 10
179
- @number_2 = 10
180
- @@number_2 = 10
181
- $number_2 = 10
182
-
183
- puts number_2
184
- puts @number_2
185
- puts @@number_2
186
- puts $number_2
187
- end
77
+ first = 10
78
+ second = first
188
79
  CODE
189
80
 
190
- tokens = RubyLint::Parser.new(code).parse
191
- report = RubyLint::Report.new
192
- iterator = RubyLint::Iterator.new(report)
193
-
194
- iterator.bind(RubyLint::Analyze::Definitions)
195
- iterator.bind(RubyLint::Analyze::UnusedVariables)
196
- iterator.run(tokens)
81
+ report = build_report(code, RubyLint::Analyze::UnusedVariables)
197
82
 
198
- report.messages[:warning].class.should == Array
199
- report.messages[:warning].length.should == 4
83
+ report.entries.length.should == 1
200
84
 
201
- warnings = report.messages[:warning]
85
+ entry = report.entries[0]
202
86
 
203
- warnings[0][:message].should == 'assigned but unused local variable number'
204
- warnings[0][:line].should == 2
205
- warnings[0][:column].should == 2
206
-
207
- warnings[1][:message].should == 'assigned but unused instance ' \
208
- 'variable @number'
209
-
210
- warnings[1][:line].should == 3
211
- warnings[1][:column].should == 2
87
+ entry.line.should == 2
88
+ entry.column.should == 0
89
+ entry.message.should == 'unused local variable second'
90
+ end
212
91
 
213
- warnings[2][:message].should == 'assigned but unused class ' \
214
- 'variable @@number'
92
+ should 'not add warnings when defining classes and modules' do
93
+ code = <<-CODE
94
+ module A
95
+ end
215
96
 
216
- warnings[2][:line].should == 4
217
- warnings[2][:column].should == 2
97
+ class B
98
+ end
99
+ CODE
218
100
 
219
- warnings[3][:message].should == 'assigned but unused global ' \
220
- 'variable $number'
101
+ report = build_report(code, RubyLint::Analyze::UnusedVariables)
221
102
 
222
- warnings[3][:line].should == 5
223
- warnings[3][:column].should == 2
103
+ report.entries.empty?.should == true
224
104
  end
225
105
  end
@@ -0,0 +1,15 @@
1
+ require File.expand_path('../../helper', __FILE__)
2
+
3
+ describe RubyLint::Configuration do
4
+ should 'set a option using the constructor method' do
5
+ config = RubyLint::Configuration.new(:report_levels => [:test])
6
+
7
+ config.report_levels.should == [:test]
8
+ end
9
+
10
+ should 'set a default value for options' do
11
+ config = RubyLint::Configuration.new
12
+
13
+ config.report_levels.should == RubyLint::Report::DEFAULT_LEVELS
14
+ end
15
+ end
@@ -0,0 +1,32 @@
1
+ require File.expand_path('../../helper', __FILE__)
2
+
3
+ describe RubyLint::ConstantLoader do
4
+ after do
5
+ RubyLint.global_scope.definitions[:constant].delete('ERB')
6
+ end
7
+
8
+ should 'lazy load using a constant' do
9
+ constant = 'ERB'
10
+ ast = parse(constant)
11
+ iterator = RubyLint::ConstantLoader.new
12
+
13
+ RubyLint.global_scope.lookup(:constant, constant).nil?.should == true
14
+
15
+ iterator.iterate(ast)
16
+
17
+ RubyLint.global_scope.lookup(:constant, constant).nil?.should == false
18
+ end
19
+
20
+ should 'lazy load using a constant path' do
21
+ constant = 'Enumerable'
22
+ ast = parse('Enumerable::Enumerator')
23
+ iterator = RubyLint::ConstantLoader.new
24
+
25
+ RubyLint.global_scope.lookup(:constant, constant).nil?.should == true
26
+
27
+ iterator.iterate(ast)
28
+
29
+ RubyLint.global_scope.lookup(:constant, constant).nil?.should == false
30
+ RubyLint.global_scope.lookup(:constant, 'Enumerator').nil?.should == true
31
+ end
32
+ end
@@ -0,0 +1,142 @@
1
+ require File.expand_path('../../../helper', __FILE__)
2
+
3
+ describe RubyLint::Definition::RubyObject do
4
+ before do
5
+ @first = ruby_object.new(:name => 'First', :type => :constant)
6
+ end
7
+
8
+ describe 'definining constants using a DSL' do
9
+ should 'define a constant' do
10
+ @first.define_constant('B')
11
+
12
+ @first.lookup(:constant, 'B').is_a?(ruby_object).should == true
13
+ end
14
+
15
+ should 'define a constant using a block' do
16
+ @first.define_constant('B') do |b|
17
+ b.define_constant('C')
18
+ end
19
+
20
+ @first.lookup(:constant, 'B') \
21
+ .lookup(:constant, 'C') \
22
+ .is_a?(ruby_object) \
23
+ .should == true
24
+ end
25
+
26
+ should 'inherit from another object' do
27
+ @first.define_constant('B') do |b|
28
+ b.define_constant('C')
29
+ end
30
+
31
+ @first.define_constant('D') do |d|
32
+ d.inherits(@first.lookup(:constant, 'B'))
33
+ end
34
+
35
+ @first.lookup(:constant, 'D') \
36
+ .lookup(:constant, 'C') \
37
+ .is_a?(ruby_object) \
38
+ .should == true
39
+ end
40
+
41
+ should 'define a constant using a constant path' do
42
+ @first.define_constant('A')
43
+ @first.define_constant('A::B')
44
+
45
+ @first.lookup(:constant, 'A') \
46
+ .lookup(:constant, 'B') \
47
+ .is_a?(ruby_object) \
48
+ .should == true
49
+ end
50
+ end
51
+
52
+ describe 'defining methods using a DSL' do
53
+ should 'define a method' do
54
+ @first.define_method('example')
55
+
56
+ @first.lookup(:method, 'example').is_a?(ruby_method).should == true
57
+ end
58
+
59
+ should 'define an instance method' do
60
+ @first.define_instance_method('example')
61
+
62
+ @first.lookup(:instance_method, 'example') \
63
+ .is_a?(ruby_method) \
64
+ .should == true
65
+ end
66
+
67
+ should 'define a method\'s return value' do
68
+ string = ruby_object.new(:type => :string, :value => 'hello')
69
+
70
+ @first.define_method('example') do |example|
71
+ example.returns(string)
72
+ end
73
+
74
+ @first.lookup(:method, 'example') \
75
+ .return_value \
76
+ .is_a?(ruby_object) \
77
+ .should == true
78
+ end
79
+
80
+ should 'add a required argument' do
81
+ arg = method_with_argument(@first, :argument).arguments.first
82
+
83
+ arg.is_a?(ruby_object).should == true
84
+ arg.name.should == 'number'
85
+ end
86
+
87
+ should 'add a optional argument' do
88
+ arg = method_with_argument(@first, :optional_argument) \
89
+ .optional_arguments \
90
+ .first
91
+
92
+ arg.is_a?(ruby_object).should == true
93
+ arg.name.should == 'number'
94
+ end
95
+
96
+ should 'add a rest argument' do
97
+ arg = method_with_argument(@first, :rest_argument).rest_argument
98
+
99
+ arg.is_a?(ruby_object).should == true
100
+ arg.name.should == 'number'
101
+ end
102
+
103
+ should 'add a more argument' do
104
+ arg = method_with_argument(@first, :more_argument).more_arguments.first
105
+
106
+ arg.is_a?(ruby_object).should == true
107
+ arg.name.should == 'number'
108
+ end
109
+
110
+ should 'add a block argument' do
111
+ arg = method_with_argument(@first, :block_argument).block_argument
112
+
113
+ arg.is_a?(ruby_object).should == true
114
+ arg.name.should == 'number'
115
+ end
116
+
117
+ should 'easily define constructor methods' do
118
+ @first.define_constructors do |method|
119
+ method.define_argument('name')
120
+ end
121
+
122
+ @first.lookup(:method, 'new').arguments[0].name.should == 'name'
123
+
124
+ @first.lookup(:instance_method, 'initialize') \
125
+ .arguments[0] \
126
+ .name \
127
+ .should == 'name'
128
+ end
129
+ end
130
+
131
+ describe 'defining global variables using a DSL' do
132
+ should 'define a global variable' do
133
+ @first.define_global_variable('$number', '10')
134
+
135
+ found = @first.lookup(:global_variable, '$number')
136
+
137
+ found.is_a?(ruby_object).should == true
138
+ found.type.should == :global_variable
139
+ found.name.should == '$number'
140
+ end
141
+ end
142
+ end