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
@@ -0,0 +1,42 @@
1
+ require File.expand_path('../../../../helper', __FILE__)
2
+
3
+ describe 'Parsing unless statements' do
4
+ should 'parse a multi line statement' do
5
+ code = <<-CODE
6
+ unless bar
7
+ foo
8
+ end
9
+ CODE
10
+
11
+ parse(code).should == s(
12
+ :unless,
13
+ s(:method, 'bar', s(:arguments), nil, nil),
14
+ [s(:method, 'foo', s(:arguments), nil, nil)]
15
+ )
16
+ end
17
+
18
+ should 'parse a multi line statement with an else statement' do
19
+ code = <<-CODE
20
+ unless bar
21
+ foo
22
+ else
23
+ baz
24
+ end
25
+ CODE
26
+
27
+ parse(code).should == s(
28
+ :unless,
29
+ s(:method, 'bar', s(:arguments), nil, nil),
30
+ [s(:method, 'foo', s(:arguments), nil, nil)],
31
+ s(:else, s(:method, 'baz', s(:arguments), nil, nil))
32
+ )
33
+ end
34
+
35
+ should 'parse a single line statement' do
36
+ parse('foo unless bar').should == s(
37
+ :unless,
38
+ s(:method, 'bar', s(:arguments), nil, nil),
39
+ [s(:method, 'foo', s(:arguments), nil, nil)]
40
+ )
41
+ end
42
+ end
@@ -0,0 +1,25 @@
1
+ require File.expand_path('../../../../helper', __FILE__)
2
+
3
+ describe 'Parsing until statements' do
4
+ should 'parse a multi line statement' do
5
+ code = <<-CODE
6
+ until foo
7
+ bar
8
+ end
9
+ CODE
10
+
11
+ parse(code).should == s(
12
+ :until,
13
+ s(:method, 'foo', s(:arguments), nil, nil),
14
+ [s(:method, 'bar', s(:arguments), nil, nil)]
15
+ )
16
+ end
17
+
18
+ should 'parse a single line statement' do
19
+ parse('bar until foo').should == s(
20
+ :until,
21
+ s(:method, 'foo', s(:arguments), nil, nil),
22
+ [s(:method, 'bar', s(:arguments), nil, nil)]
23
+ )
24
+ end
25
+ end
@@ -0,0 +1,25 @@
1
+ require File.expand_path('../../../../helper', __FILE__)
2
+
3
+ describe 'Parsing while statements' do
4
+ should 'parse a multi line statement' do
5
+ code = <<-CODE
6
+ while foo
7
+ bar
8
+ end
9
+ CODE
10
+
11
+ parse(code).should == s(
12
+ :while,
13
+ s(:method, 'foo', s(:arguments), nil, nil),
14
+ [s(:method, 'bar', s(:arguments), nil, nil)]
15
+ )
16
+ end
17
+
18
+ should 'parse a single line statement' do
19
+ parse('bar while foo').should == s(
20
+ :while,
21
+ s(:method, 'foo', s(:arguments), nil, nil),
22
+ [s(:method, 'bar', s(:arguments), nil, nil)]
23
+ )
24
+ end
25
+ end
@@ -0,0 +1,18 @@
1
+ require File.expand_path('../../../../helper', __FILE__)
2
+
3
+ describe 'Parsing yield statements' do
4
+ should 'parse a statement without parameters' do
5
+ parse('yield').should == s(:yield)
6
+ end
7
+
8
+ should 'parse a statement with parameters' do
9
+ parse('yield 10, 20').should == s(
10
+ :yield,
11
+ s(
12
+ :arguments,
13
+ s(:argument, s(:integer, '10')),
14
+ s(:argument, s(:integer, '20'))
15
+ )
16
+ )
17
+ end
18
+ end
@@ -0,0 +1,47 @@
1
+ require File.expand_path('../../../../helper', __FILE__)
2
+
3
+ describe 'Parsing Arrays' do
4
+ should 'parse an array with integers' do
5
+ parse('[10, 20]').should == s(:array, s(:integer, '10'), s(:integer, '20'))
6
+ end
7
+
8
+ should 'parse an array with strings using %w{}' do
9
+ parse('%w{10 20}').should == s(:array, s(:string, '10'), s(:string, '20'))
10
+ end
11
+
12
+ should 'parse an array with strings using %W{}' do
13
+ parse('%W{10 20}').should == s(:array, s(:string, '10'), s(:string, '20'))
14
+ end
15
+
16
+ should 'parse referencing an index of an array directly' do
17
+ parse('[10][0]').should == s(
18
+ :aref,
19
+ s(:array, s(:integer, '10')),
20
+ s(:arguments, s(:argument, s(:integer, '0')))
21
+ )
22
+ end
23
+
24
+ should 'parse referencing multiple indexes of an array directly' do
25
+ parse('[10][0,1]').should == s(
26
+ :aref,
27
+ s(:array, s(:integer, '10')),
28
+ s(
29
+ :arguments,
30
+ s(:argument, s(:integer, '0')),
31
+ s(:argument, s(:integer, '1'))
32
+ )
33
+ )
34
+ end
35
+
36
+ should 'parse assigning a value to an array index' do
37
+ parse('[][0] = 10').should == s(
38
+ :assign,
39
+ s(
40
+ :aref,
41
+ s(:array),
42
+ s(:arguments, s(:argument, s(:integer, '0')))
43
+ ),
44
+ [s(:integer, '10')]
45
+ )
46
+ end
47
+ end
@@ -0,0 +1,11 @@
1
+ require File.expand_path('../../../../helper', __FILE__)
2
+
3
+ describe 'Parsing booleans' do
4
+ should 'parse a TrueClass' do
5
+ parse('true').should == s(:keyword, 'true')
6
+ end
7
+
8
+ should 'parse a Falseclass' do
9
+ parse('false').should == s(:keyword, 'false')
10
+ end
11
+ end
@@ -0,0 +1,32 @@
1
+ require File.expand_path('../../../../helper', __FILE__)
2
+
3
+ describe 'Parsing constants' do
4
+ should 'parse a constant' do
5
+ parse('String').should == s(:constant, 'String')
6
+ end
7
+
8
+ should 'parse a constant path' do
9
+ parse('Foo::Bar').should == s(
10
+ :constant_path,
11
+ s(:constant, 'Foo'),
12
+ s(:constant, 'Bar')
13
+ )
14
+ end
15
+
16
+ should 'parse a constant path with more than two segments' do
17
+ parse('A::B::C').should == s(
18
+ :constant_path,
19
+ s(:constant, 'A'),
20
+ s(:constant, 'B'),
21
+ s(:constant, 'C')
22
+ )
23
+ end
24
+
25
+ should 'parse a top level constant path' do
26
+ parse('::Foo::Bar').should == s(
27
+ :constant_path,
28
+ s(:constant, 'Foo'),
29
+ s(:constant, 'Bar')
30
+ )
31
+ end
32
+ end
@@ -0,0 +1,55 @@
1
+ require File.expand_path('../../../../helper', __FILE__)
2
+
3
+ describe 'Parsing Hashes' do
4
+ should 'parse a hash with the keys as strings' do
5
+ parse('{"name" => "Ruby", "foo" => "Bar"}').should == s(
6
+ :hash,
7
+ s(:key_value, s(:string, 'name'), s(:string, 'Ruby')),
8
+ s(:key_value, s(:string, 'foo'), s(:string, 'Bar'))
9
+ )
10
+ end
11
+
12
+ should 'parse a hash with the keys as symbols' do
13
+ parse('{:name => "Ruby", :foo => "Bar"}').should == s(
14
+ :hash,
15
+ s(:key_value, s(:symbol, 'name'), s(:string, 'Ruby')),
16
+ s(:key_value, s(:symbol, 'foo'), s(:string, 'Bar'))
17
+ )
18
+ end
19
+
20
+ should 'parse Ruby 1.9 key syntax' do
21
+ parse('{name: "Ruby", foo: "Bar"}').should == s(
22
+ :hash,
23
+ s(:key_value, s(:symbol, 'name:'), s(:string, 'Ruby')),
24
+ s(:key_value, s(:symbol, 'foo:'), s(:string, 'Bar'))
25
+ )
26
+ end
27
+
28
+ should 'parse a hash key reference using a string' do
29
+ parse('{"name" => "Ruby"}["name"]').should == s(
30
+ :aref,
31
+ s(:hash, s(:key_value, s(:string, 'name'), s(:string, 'Ruby'))),
32
+ s(:arguments, s(:argument, s(:string, 'name')))
33
+ )
34
+ end
35
+
36
+ should 'parse a hash key reference using a symbol' do
37
+ parse('{"name" => "Ruby"}[:name]').should == s(
38
+ :aref,
39
+ s(:hash, s(:key_value, s(:string, 'name'), s(:string, 'Ruby'))),
40
+ s(:arguments, s(:argument, s(:symbol, 'name')))
41
+ )
42
+ end
43
+
44
+ should 'parse the assignment to multiple hash keys' do
45
+ parse('{}[:name] = "Ruby"').should == s(
46
+ :assign,
47
+ s(
48
+ :aref,
49
+ s(:hash),
50
+ s(:arguments, s(:argument, s(:symbol, 'name')))
51
+ ),
52
+ [s(:string, 'Ruby')]
53
+ )
54
+ end
55
+ end
@@ -0,0 +1,7 @@
1
+ require File.expand_path('../../../../helper', __FILE__)
2
+
3
+ describe 'Parsing nil values' do
4
+ should 'parse NilClass' do
5
+ parse('nil').should == s(:keyword, 'nil')
6
+ end
7
+ end
@@ -0,0 +1,11 @@
1
+ require File.expand_path('../../../../helper', __FILE__)
2
+
3
+ describe 'Parsing numbers' do
4
+ should 'parse a integer' do
5
+ parse('10').should == s(:integer, '10')
6
+ end
7
+
8
+ should 'parse a float' do
9
+ parse('10.5').should == s(:float, '10.5')
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ require File.expand_path('../../../../helper', __FILE__)
2
+
3
+ describe 'Parsing Lambdas' do
4
+ should 'parse the dash rocket syntax' do
5
+ parse('-> example { example }').should == s(
6
+ :lambda,
7
+ s(:arguments, s(:argument, s(:local_variable, 'example'))),
8
+ s(:body, [s(:local_variable, 'example')])
9
+ )
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ require File.expand_path('../../../../helper', __FILE__)
2
+
3
+ describe 'Parsing Ranges' do
4
+ should 'parse a range created using two dots' do
5
+ parse('0..1').should == s(:dot2, s(:integer, '0'), s(:integer, '1'))
6
+ end
7
+
8
+ should 'parse a range created using three dots' do
9
+ parse('0...1').should == s(:dot3, s(:integer, '0'), s(:integer, '1'))
10
+ end
11
+ end
@@ -0,0 +1,27 @@
1
+ require File.expand_path('../../../../helper', __FILE__)
2
+
3
+ describe 'Parsing Regexps' do
4
+ should 'parse a regular expression without a mode' do
5
+ parse('/foo/').should == s(
6
+ :regexp,
7
+ s(:string, 'foo'),
8
+ s(:regexp_end, '/')
9
+ )
10
+ end
11
+
12
+ should 'parse a regular expression with two modes' do
13
+ parse('/foo/im').should == s(
14
+ :regexp,
15
+ s(:string, 'foo'),
16
+ s(:regexp_end, '/im')
17
+ )
18
+ end
19
+
20
+ should 'parse a regular expression created using %r{}' do
21
+ parse('%r{foo}').should == s(
22
+ :regexp,
23
+ s(:string, 'foo'),
24
+ s(:regexp_end, '}')
25
+ )
26
+ end
27
+ end
@@ -0,0 +1,44 @@
1
+ require File.expand_path('../../../../helper', __FILE__)
2
+
3
+ describe 'Parsing Strings' do
4
+ should 'parse an empty string' do
5
+ parse('""').should == s(:string)
6
+ end
7
+
8
+ should 'parse a string using single quotes' do
9
+ parse("'hello'").should == s(:string, 'hello')
10
+ end
11
+
12
+ should 'parse a string using double quotes' do
13
+ parse('"hello"').should == s(:string, 'hello')
14
+ end
15
+
16
+ should 'parse a string created using %q{}' do
17
+ parse('%q{hello world}').should == s(:string, 'hello world')
18
+ end
19
+
20
+ should 'parse a string created using %Q{}' do
21
+ parse('%Q{hello world}').should == s(:string, 'hello world')
22
+ end
23
+
24
+ should 'parse a string containing an embedded expression' do
25
+ parse('"#{10}"').should == s(:embed, s(:integer, '10'))
26
+ end
27
+
28
+ should 'parse a string containing an embedded expression using a shorthand' do
29
+ parse('"#$foo"').should == s(:embed, s(:global_variable, '$foo'))
30
+ end
31
+
32
+ should 'parse a string spread out over two lines using backslashes' do
33
+ code = <<-CODE
34
+ 'hello' \
35
+ 'world'
36
+ CODE
37
+
38
+ parse(code).should == s(
39
+ :string_concat,
40
+ s(:string, 'hello'),
41
+ s(:string, 'world')
42
+ )
43
+ end
44
+ end
@@ -0,0 +1,15 @@
1
+ require File.expand_path('../../../../helper', __FILE__)
2
+
3
+ describe 'Parsing Symbols' do
4
+ should 'parse a symbol without quotes' do
5
+ parse(':hello').should == s(:symbol, 'hello')
6
+ end
7
+
8
+ should 'parse a symbol with quotes' do
9
+ parse(':"hello"').should == s(:symbol, 'hello')
10
+ end
11
+
12
+ should 'parse an instance variable as the symbol name' do
13
+ parse(':@name').should == s(:symbol, '@name')
14
+ end
15
+ end
@@ -0,0 +1,31 @@
1
+ require File.expand_path('../../../helper', __FILE__)
2
+ require 'json'
3
+
4
+ describe RubyLint::Presenter::JSON do
5
+ should 'format a set of entries' do
6
+ report = RubyLint::Report.new
7
+ presenter = RubyLint::Presenter::JSON.new
8
+
9
+ report.error('error message', 1, 1, 'a.rb')
10
+ report.error('error message 2', 2, 1, 'a.rb')
11
+ report.warning('warning message', 1, 1, 'b.rb')
12
+ report.info('info message', 1, 1, 'c.rb')
13
+
14
+ output = presenter.present(report)
15
+ decoded = JSON(output)
16
+
17
+ decoded.length.should == 4
18
+
19
+ decoded[0]['file'].should == 'a.rb'
20
+ decoded[0]['level'].should == 'error'
21
+
22
+ decoded[1]['file'].should == 'a.rb'
23
+ decoded[1]['level'].should == 'error'
24
+
25
+ decoded[2]['file'].should == 'b.rb'
26
+ decoded[2]['level'].should == 'warning'
27
+
28
+ decoded[3]['file'].should == 'c.rb'
29
+ decoded[3]['level'].should == 'info'
30
+ end
31
+ end
@@ -0,0 +1,22 @@
1
+ require File.expand_path('../../../helper', __FILE__)
2
+
3
+ describe RubyLint::Presenter::Text do
4
+ should 'format a set of entries' do
5
+ report = RubyLint::Report.new
6
+ presenter = RubyLint::Presenter::Text.new
7
+
8
+ report.error('error message', 1, 1, 'a.rb')
9
+ report.error('error message 2', 2, 1, 'a.rb')
10
+ report.warning('warning message', 1, 1, 'b.rb')
11
+ report.info('info message', 1, 1, 'c.rb')
12
+
13
+ output = presenter.present(report)
14
+
15
+ output.should == <<-EOF.strip
16
+ a.rb: error: line 1, column 1: error message
17
+ a.rb: error: line 2, column 1: error message 2
18
+ b.rb: warning: line 1, column 1: warning message
19
+ c.rb: info: line 1, column 1: info message
20
+ EOF
21
+ end
22
+ end