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,93 +0,0 @@
1
- require File.expand_path('../../../helper', __FILE__)
2
-
3
- describe 'RubyLint::Parser' do
4
- it 'Parse a String' do
5
- ['"hello"', "'hello'"].each do |string|
6
- token = RubyLint::Parser.new(string).parse[0]
7
-
8
- token.class.should == RubyLint::Token::Token
9
- token.type.should == :string
10
- token.value.should == 'hello'
11
- token.line.should == 1
12
- token.column.should == 1
13
- token.code.should == string
14
- end
15
- end
16
-
17
- it 'Parse a Symbol' do
18
- token = RubyLint::Parser.new(':hello').parse[0]
19
-
20
- token.class.should == RubyLint::Token::Token
21
- token.type.should == :symbol
22
- token.value.should == 'hello'
23
- token.line.should == 1
24
- token.column.should == 1
25
- token.code.should == ':hello'
26
-
27
- token = RubyLint::Parser.new(':"hello"').parse[0]
28
-
29
- token.class.should == RubyLint::Token::Token
30
- token.type.should == :symbol
31
- token.value.should == 'hello'
32
- token.line.should == 1
33
- token.column.should == 2
34
- token.code.should == ':"hello"'
35
- end
36
-
37
- it 'Parse a string using %q{} and %Q{}' do
38
- ['%q{hello}', '%Q{hello}'].each do |string|
39
- token = RubyLint::Parser.new(string).parse[0]
40
-
41
- token.class.should == RubyLint::Token::Token
42
- token.type.should == :string
43
- token.value.should == 'hello'
44
- token.line.should == 1
45
- token.column.should == 3
46
- token.code.should == string
47
- end
48
- end
49
-
50
- it 'Parse a Fixnum' do
51
- token = RubyLint::Parser.new('10').parse[0]
52
-
53
- token.class.should == RubyLint::Token::Token
54
- token.type.should == :integer
55
- token.value.should == '10'
56
- token.line.should == 1
57
- token.column.should == 0
58
- token.code.should == '10'
59
- end
60
-
61
- it 'Parse a Float' do
62
- token = RubyLint::Parser.new('10.2').parse[0]
63
-
64
- token.class.should == RubyLint::Token::Token
65
- token.type.should == :float
66
- token.value.should == '10.2'
67
- token.line.should == 1
68
- token.column.should == 0
69
- token.code.should == '10.2'
70
- end
71
-
72
- it 'Parse a boolean' do
73
- token = RubyLint::Parser.new('true').parse[0]
74
-
75
- token.class.should == RubyLint::Token::VariableToken
76
- token.type.should == :keyword
77
- token.name.should == 'true'
78
- token.line.should == 1
79
- token.column.should == 0
80
- token.code.should == 'true'
81
- end
82
-
83
- it 'Parse a nil value' do
84
- token = RubyLint::Parser.new('nil').parse[0]
85
-
86
- token.class.should == RubyLint::Token::VariableToken
87
- token.type.should == :keyword
88
- token.name.should == 'nil'
89
- token.line.should == 1
90
- token.column.should == 0
91
- token.code.should == 'nil'
92
- end
93
- end
@@ -1,591 +0,0 @@
1
- require File.expand_path('../../../helper', __FILE__)
2
-
3
- describe 'RubyLint::Parser' do
4
- it 'Parse a return statement' do
5
- token = RubyLint::Parser.new('return 10').parse[0]
6
-
7
- token.class.should == RubyLint::Token::StatementToken
8
- token.type.should == :return
9
- token.line.should == 1
10
- token.column.should == 0
11
-
12
- token.value.class.should == Array
13
- token.value.length.should == 1
14
-
15
- val = token.value[0]
16
-
17
- val.class.should == RubyLint::Token::Token
18
- val.type.should == :integer
19
- val.line.should == 1
20
- val.column.should == 7
21
- val.value.should == '10'
22
- end
23
-
24
- it 'Parse a return statement with multiple return values' do
25
- token = RubyLint::Parser.new('return 10, 20').parse[0]
26
-
27
- token.class.should == RubyLint::Token::StatementToken
28
- token.type.should == :return
29
- token.line.should == 1
30
- token.column.should == 0
31
-
32
- token.value.class.should == Array
33
- token.value.length.should == 2
34
-
35
- val = token.value[0]
36
-
37
- val.class.should == RubyLint::Token::Token
38
- val.type.should == :integer
39
- val.line.should == 1
40
- val.column.should == 7
41
- val.value.should == '10'
42
-
43
- val = token.value[1]
44
-
45
- val.class.should == RubyLint::Token::Token
46
- val.type.should == :integer
47
- val.line.should == 1
48
- val.column.should == 11
49
- val.value.should == '20'
50
- end
51
-
52
- it 'Parse a return statement with parenthesis' do
53
- token = RubyLint::Parser.new('return ( 10 )').parse[0]
54
-
55
- token.class.should == RubyLint::Token::StatementToken
56
- token.type.should == :return
57
- token.line.should == 1
58
- token.column.should == 0
59
- token.code.should == 'return ( 10 )'
60
-
61
- token.value.class.should == Array
62
- token.value.length.should == 1
63
- end
64
-
65
- it 'Parse a while loop' do
66
- token = RubyLint::Parser.new('while true; return 10; end').parse[0]
67
-
68
- token.class.should == RubyLint::Token::StatementToken
69
- token.type.should == :while
70
- token.line.should == 1
71
- token.column.should == 0
72
-
73
- token.statement.class.should == RubyLint::Token::VariableToken
74
- token.statement.type.should == :keyword
75
- token.statement.name.should == 'true'
76
-
77
- token.value.class.should == Array
78
- token.value.length.should == 1
79
-
80
- val = token.value[0]
81
-
82
- val.class.should == RubyLint::Token::StatementToken
83
- val.type.should == :return
84
-
85
- val.value.class.should == Array
86
- val.value.length.should == 1
87
-
88
- val.value[0].class.should == RubyLint::Token::Token
89
- val.value[0].type.should == :integer
90
- val.value[0].value.should == '10'
91
- end
92
-
93
- it 'Parse a single line while loop' do
94
- token = RubyLint::Parser.new('foo while bar').parse[0]
95
-
96
- token.class.should == RubyLint::Token::StatementToken
97
- token.type.should == :while
98
-
99
- token.statement.class.should == RubyLint::Token::MethodToken
100
- token.statement.name.should == 'bar'
101
-
102
- token.value.class.should == Array
103
- token.value.length.should == 1
104
-
105
- token.value[0].class.should == RubyLint::Token::MethodToken
106
- token.value[0].name.should == 'foo'
107
- end
108
-
109
- it 'Parse a while loop using parenthesis' do
110
- token = RubyLint::Parser.new('while ( true ); return 10; end').parse[0]
111
-
112
- token.class.should == RubyLint::Token::StatementToken
113
- token.type.should == :while
114
- token.line.should == 1
115
- token.column.should == 0
116
- token.code.should == 'while ( true ); return 10; end'
117
-
118
- token.value.class.should == Array
119
- token.value.length.should == 1
120
- end
121
-
122
- it 'Parse a for loop' do
123
- code = <<-CODE
124
- for key, value in {:name => 'Ruby'}
125
- return key, value
126
- end
127
- CODE
128
-
129
- token = RubyLint::Parser.new(code).parse[0]
130
-
131
- token.class.should == RubyLint::Token::StatementToken
132
- token.type.should == :for
133
-
134
- token.statement.class.should == Array
135
- token.statement.length.should == 2
136
-
137
- vars = token.statement[0]
138
- enum = token.statement[1]
139
-
140
- vars.class.should == Array
141
- vars.length.should == 2
142
-
143
- vars[0].class.should == RubyLint::Token::Token
144
- vars[0].type.should == :identifier
145
- vars[0].value.should == 'key'
146
-
147
- vars[1].class.should == RubyLint::Token::Token
148
- vars[1].type.should == :identifier
149
- vars[1].value.should == 'value'
150
-
151
- enum.class.should == RubyLint::Token::Token
152
- enum.type.should == :hash
153
-
154
- enum.value.class.should == Array
155
- enum.value.length.should == 1
156
-
157
- val = enum.value[0]
158
-
159
- val.class.should == RubyLint::Token::Token
160
- val.type.should == :symbol
161
- val.name.should == 'name'
162
-
163
- val.value.class.should == RubyLint::Token::Token
164
- val.value.type.should == :string
165
- val.value.value.should == 'Ruby'
166
-
167
- token.value.class.should == Array
168
- token.value.length.should == 1
169
- end
170
-
171
- it 'Parse a for loop with one parameter' do
172
- code = <<-CODE
173
- for number in [10, 20, 30]
174
- puts number
175
- end
176
- CODE
177
-
178
- token = RubyLint::Parser.new(code).parse[0]
179
-
180
- token.class.should == RubyLint::Token::StatementToken
181
- token.type.should == :for
182
-
183
- token.statement[0].class.should == Array
184
- token.statement[0].length.should == 1
185
-
186
- var = token.statement[0][0]
187
-
188
- var.class.should == RubyLint::Token::Token
189
- var.type.should == :identifier
190
- var.name.should == 'number'
191
- end
192
-
193
- it 'Parse a simple if statement' do
194
- token = RubyLint::Parser.new('if 10 == 20; return 10; end').parse[0]
195
-
196
- token.class.should == RubyLint::Token::StatementToken
197
- token.else.nil?.should == true
198
- token.elsif.class.should == Array
199
- token.elsif.length.should == 0
200
-
201
- token.statement.class.should == RubyLint::Token::Token
202
- token.statement.value.class.should == Array
203
- token.statement.value.length.should == 3
204
-
205
- token.statement.value[0].class.should == RubyLint::Token::Token
206
- token.statement.value[0].type.should == :integer
207
- token.statement.value[0].value.should == '10'
208
-
209
- token.statement.value[1].should == :==
210
-
211
- token.statement.value[2].class.should == RubyLint::Token::Token
212
- token.statement.value[2].type.should == :integer
213
- token.statement.value[2].value.should == '20'
214
- end
215
-
216
- it 'Parse an if, elsif and else statement' do
217
- code = <<-CODE
218
- if 10 == 20
219
- return 10
220
- elsif 10 == 15
221
- return 20
222
- elsif 10 == 10
223
- return 30
224
- else
225
- return 40
226
- end
227
- CODE
228
-
229
- token = RubyLint::Parser.new(code).parse[0]
230
-
231
- token.class.should == RubyLint::Token::StatementToken
232
- token.type.should == :if
233
-
234
- token.elsif.class.should == Array
235
- token.elsif.length.should == 2
236
-
237
- first = token.elsif[0]
238
- last = token.elsif[1]
239
-
240
- first.class.should == RubyLint::Token::StatementToken
241
- first.type.should == :elsif
242
-
243
- first.statement.class.should == RubyLint::Token::Token
244
- first.statement.value.class.should == Array
245
- first.statement.value.length.should == 3
246
-
247
- last.class.should == RubyLint::Token::StatementToken
248
- last.type.should == :elsif
249
-
250
- last.statement.class.should == RubyLint::Token::Token
251
- last.statement.value.class.should == Array
252
- last.statement.value.length.should == 3
253
-
254
- token.else.class.should == RubyLint::Token::StatementToken
255
- token.else.statement.nil?.should == true
256
-
257
- token.else.value.class.should == Array
258
- token.else.value.length.should == 1
259
- end
260
-
261
- it 'Parse a begin/rescue statement' do
262
- code = <<-CODE
263
- begin
264
- return 10
265
- rescue RuntimeError, StandardError => e
266
- return 20
267
- rescue StandardError => e
268
- return 30
269
- else
270
- return 40
271
- ensure
272
- return 50
273
- end
274
- CODE
275
-
276
- token = RubyLint::Parser.new(code).parse[0]
277
-
278
- token.class.should == RubyLint::Token::BeginRescueToken
279
-
280
- token.else.class.should == RubyLint::Token::StatementToken
281
- token.else.type.should == :else
282
- token.else.value.class.should == Array
283
- token.else.value.length.should == 1
284
-
285
- token.ensure.class.should == RubyLint::Token::StatementToken
286
- token.ensure.type.should == :ensure
287
- token.ensure.value.class.should == Array
288
- token.ensure.value.length.should == 1
289
-
290
- token.rescue.class.should == Array
291
- token.rescue.length.should == 2
292
-
293
- first, second = token.rescue
294
-
295
- first.type.should == :rescue
296
- first.value.class.should == Array
297
- first.value.length.should == 1
298
-
299
- first.statement.class.should == Array
300
- first.statement.length.should == 2
301
-
302
- constants = first.statement[0]
303
- var = first.statement[1]
304
-
305
- constants.class.should == Array
306
- constants.length.should == 2
307
-
308
- constants[0].class.should == RubyLint::Token::VariableToken
309
- constants[0].type.should == :constant
310
- constants[0].name.should == 'RuntimeError'
311
- constants[0].line.should == 3
312
-
313
- constants[1].class.should == RubyLint::Token::VariableToken
314
- constants[1].type.should == :constant
315
- constants[1].name.should == 'StandardError'
316
- constants[1].line.should == 3
317
-
318
- var.class.should == RubyLint::Token::Token
319
- var.type.should == :identifier
320
- var.value.should == 'e'
321
- var.line.should == 3
322
-
323
- second.type.should == :rescue
324
- second.value.class.should == Array
325
- second.value.length.should == 1
326
-
327
- constants = second.statement[0]
328
- var = second.statement[1]
329
-
330
- constants.class.should == Array
331
- constants.length.should == 1
332
-
333
- constants[0].class.should == RubyLint::Token::VariableToken
334
- constants[0].type.should == :constant
335
- constants[0].name.should == 'StandardError'
336
- constants[0].line.should == 5
337
-
338
- var.class.should == RubyLint::Token::Token
339
- var.type.should == :identifier
340
- var.value.should == 'e'
341
- var.line.should == 5
342
- end
343
-
344
- it 'Parse a case statement' do
345
- code = <<-CODE
346
- case number
347
- when 10, 20
348
- puts '10 or 20'
349
- when 30
350
- puts '30'
351
- else
352
- puts 'something else'
353
- end
354
- CODE
355
-
356
- token = RubyLint::Parser.new(code).parse[0]
357
-
358
- token.class.should == RubyLint::Token::CaseToken
359
- token.type.should == :case
360
-
361
- token.statement.class.should == RubyLint::Token::MethodToken
362
- token.statement.name.should == 'number'
363
-
364
- token.when.class.should == Array
365
- token.when.length.should == 2
366
-
367
- first, second = token.when
368
-
369
- # Check the first when statement.
370
- first.class.should == RubyLint::Token::StatementToken
371
- first.statement.class == Array
372
- first.statement.length.should == 2
373
-
374
- first.statement[0].class.should == RubyLint::Token::Token
375
- first.statement[0].type.should == :integer
376
- first.statement[0].value.should == '10'
377
-
378
- first.statement[1].class.should == RubyLint::Token::Token
379
- first.statement[1].type.should == :integer
380
- first.statement[1].value.should == '20'
381
-
382
- first.value.class.should == Array
383
- first.value.length.should == 1
384
-
385
- first.value[0].class.should == RubyLint::Token::MethodToken
386
- first.value[0].name.should == 'puts'
387
- first.value[0].parameters.class.should == Array
388
- first.value[0].parameters.length.should == 1
389
-
390
- # Check the second when statement.
391
- second.class.should == RubyLint::Token::StatementToken
392
- second.statement.class.should == Array
393
- second.statement.length.should == 1
394
-
395
- second.statement[0].class.should == RubyLint::Token::Token
396
- second.statement[0].type.should == :integer
397
- second.statement[0].value.should == '30'
398
-
399
- second.value.class.should == Array
400
- second.value.length.should == 1
401
-
402
- second.value[0].class.should == RubyLint::Token::MethodToken
403
- second.value[0].name.should == 'puts'
404
- second.value[0].parameters.class.should == Array
405
- second.value[0].parameters.length.should == 1
406
-
407
- # Check the else statement.
408
- token.else.class.should == RubyLint::Token::StatementToken
409
-
410
- token.else.value.class.should == Array
411
- token.else.value.length.should == 1
412
-
413
- token.else.value[0].class.should == RubyLint::Token::MethodToken
414
- token.else.value[0].name.should == 'puts'
415
-
416
- token.else.value[0].parameters.class.should == Array
417
- token.else.value[0].parameters.length.should == 1
418
- end
419
-
420
- it 'Parse a case statement without a statement' do
421
- code = <<-CODE
422
- case
423
- when 10
424
-
425
- when 20
426
-
427
- end
428
- CODE
429
-
430
- token = RubyLint::Parser.new(code).parse[0]
431
-
432
- token.class.should == RubyLint::Token::CaseToken
433
- token.statement.nil?.should == true
434
-
435
- token.when.class.should == Array
436
- token.when.length.should == 2
437
- end
438
-
439
- it 'Parse a single line if statement' do
440
- token = RubyLint::Parser.new('foo if bar').parse[0]
441
-
442
- token.class.should == RubyLint::Token::StatementToken
443
- token.type.should == :if
444
-
445
- token.statement.class.should == RubyLint::Token::MethodToken
446
- token.statement.name.should == 'bar'
447
-
448
- token.value.class.should == Array
449
- token.value.length.should == 1
450
-
451
- token.value[0].class.should == RubyLint::Token::MethodToken
452
- token.value[0].name.should == 'foo'
453
- end
454
-
455
- it 'Parse a single line begin/rescue statement' do
456
- token = RubyLint::Parser.new('foo rescue bar').parse[0]
457
-
458
- token.class.should == RubyLint::Token::BeginRescueToken
459
- token.type.should == :rescue
460
-
461
- token.rescue.class.should == Array
462
- token.rescue.length.should == 1
463
-
464
- token.rescue[0].class.should == RubyLint::Token::MethodToken
465
- token.rescue[0].name.should == 'bar'
466
-
467
- token.value.class.should == Array
468
- token.value.length.should == 1
469
-
470
- token.value[0].class.should == RubyLint::Token::MethodToken
471
- token.value[0].name.should == 'foo'
472
- end
473
-
474
- it 'Parse an unless statement' do
475
- token = RubyLint::Parser.new('unless foo; bar; else; baz; end').parse[0]
476
-
477
- token.class.should == RubyLint::Token::StatementToken
478
- token.type.should == :unless
479
-
480
- token.statement.class.should == RubyLint::Token::MethodToken
481
- token.statement.name.should == 'foo'
482
-
483
- token.else.class.should == RubyLint::Token::StatementToken
484
- token.else.type.should == :else
485
-
486
- token.else.value.class.should == Array
487
- token.else.value[0].class.should == RubyLint::Token::MethodToken
488
- token.else.value[0].name.should == 'baz'
489
-
490
- token.value.class.should == Array
491
- token.value.length.should == 1
492
-
493
- token.value[0].class.should == RubyLint::Token::MethodToken
494
- token.value[0].name.should == 'bar'
495
- end
496
-
497
- it 'Parse a single line unless statement' do
498
- token = RubyLint::Parser.new('foo unless bar').parse[0]
499
-
500
- token.class.should == RubyLint::Token::StatementToken
501
- token.type.should == :unless
502
-
503
- token.statement.class.should == RubyLint::Token::MethodToken
504
- token.statement.name.should == 'bar'
505
-
506
- token.value.class.should == Array
507
- token.value.length.should == 1
508
-
509
- token.value[0].class.should == RubyLint::Token::MethodToken
510
- token.value[0].name.should == 'foo'
511
- end
512
-
513
- it 'Parse a until statement' do
514
- code = <<-CODE
515
- until foo == bar
516
- puts 'foo'
517
- end
518
- CODE
519
-
520
- token = RubyLint::Parser.new(code).parse[0]
521
-
522
- token.class.should == RubyLint::Token::StatementToken
523
- token.type.should == :until
524
-
525
- token.statement.class.should == RubyLint::Token::Token
526
- token.statement.type.should == :binary
527
-
528
- token.statement.value.class.should == Array
529
- token.statement.value.length.should == 3
530
-
531
- left, op, right = token.statement.value
532
-
533
- left.class.should == RubyLint::Token::MethodToken
534
- left.name.should == 'foo'
535
-
536
- op.should == :==
537
-
538
- right.class.should == RubyLint::Token::MethodToken
539
- right.name.should == 'bar'
540
-
541
- token.value.class.should == Array
542
- token.value.length.should == 1
543
- end
544
-
545
- it 'Parse a single line until statement' do
546
- token = RubyLint::Parser.new('foo until bar').parse[0]
547
-
548
- token.class.should == RubyLint::Token::StatementToken
549
- token.type.should == :until
550
-
551
- token.statement.class.should == RubyLint::Token::MethodToken
552
- token.statement.name.should == 'bar'
553
-
554
- token.value.class.should == Array
555
- token.value.length.should == 1
556
-
557
- token.value[0].class.should == RubyLint::Token::MethodToken
558
- token.value[0].name.should == 'foo'
559
- end
560
-
561
- it 'Parse a tenary operator' do
562
- token = RubyLint::Parser.new('statement ? true : false').parse[0]
563
-
564
- token.class.should == RubyLint::Token::StatementToken
565
- token.type.should == :if
566
-
567
- token.statement.class.should == RubyLint::Token::MethodToken
568
- token.statement.name.should == 'statement'
569
- token.statement.column.should == 0
570
- token.statement.line.should == 1
571
-
572
- token.value.class.should == Array
573
- token.value.length.should == 1
574
-
575
- token.value[0].class.should == RubyLint::Token::VariableToken
576
- token.value[0].name.should == 'true'
577
- token.value[0].line.should == 1
578
- token.value[0].column.should == 12
579
-
580
- token.else.class.should == RubyLint::Token::StatementToken
581
- token.else.statement.nil?.should == true
582
- token.else.line.should == 1
583
- token.else.column.should == 19
584
-
585
- token.else.value.class.should == Array
586
- token.else.value.length.should == 1
587
-
588
- token.else.value[0].class.should == RubyLint::Token::VariableToken
589
- token.else.value[0].name.should == 'false'
590
- end
591
- end