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,17 @@
1
+ -----BEGIN PGP SIGNATURE-----
2
+ Version: GnuPG v2.0.19 (GNU/Linux)
3
+
4
+ iQIcBAABAgAGBQJRdZvaAAoJEPMbESk2SfREY1gP/0UTWkTwDBrtPXxDQSF6M0lk
5
+ v2AxKsRx/fyQZx6QAgNuCR+aOGKTHwiyHzJ6Kkk8uRqH8x4XUUj8drl3ASToZxGc
6
+ hYrm26FPKUovqkoyW9zP6Ybp1GhkEdSLq1MoFg5ZZAgvRovz4RXLHQulwMo0f2Yd
7
+ 0KFHMYQyyEH+S+nq7gt0ZBtsxPzoLG4l2g4QV9d4iie0mU7hXOFmhW6QQ02sx9EP
8
+ qTEFHCIalpGBLHfCL+GEPo8P6ro1jSMRqWCvB15mtdGtqCKpg4u/EB5c2YQsgJAl
9
+ UGFUOIEYw6UyfEqu3D0gPmNf8PUviL3BAI6CUBeN0tV6XNBzgcEAHrCqY+wwoC9b
10
+ gFzRLW2q7A1Kq41NRNCUnrrc81ojEZeA/9V+y5hJWrQWPTQtTPeFcLbPUqDkh6FX
11
+ yX+CjhHoKvG52d1IcpExctKr74jXUmyQVPxrFEfumt8HrMTqGuPVaKAUI10wZvAE
12
+ tWAtTioTQbJ+2AUQnS0J33CVEZbih1MwDHUCnJQEYV1wqacW7sBPaV5OBFFXBcr7
13
+ xENLrtctZFGfQNxAFZEasLsTOmnY8sekW8axAs2Lb3VPd8sK1MXYFWnlFzkZc+jR
14
+ kGxzEHdmWytp4y2UIj2rnNQqv2y6muB61b53CbFJT3LIv+KhCb09/leg7oa7yYu5
15
+ +fQy0GBWGfzgWdidG/8z
16
+ =0Dl7
17
+ -----END PGP SIGNATURE-----
@@ -1 +0,0 @@
1
- 1.9.3-p194
@@ -1,407 +0,0 @@
1
- module RubyLint
2
- module Analyze
3
- ##
4
- # {RubyLint::Analyze::CodingStyle} checks if a block of code matches a given
5
- # set of coding standards. While none of the problems found by this class
6
- # are considered harmful they are usually frowned upon as they do not
7
- # follow the unofficial but generally accepted Ruby coding standards.
8
- #
9
- # ## Standards References
10
- #
11
- # The following was used to determine the standards this class should
12
- # assume to be correct:
13
- #
14
- # * https://github.com/styleguide/ruby
15
- # * https://github.com/bbatsov/ruby-style-guide
16
- # * http://confluence.jetbrains.net/display/RUBYDEV/RubyMine+Inspections
17
- # * My own opinion
18
- #
19
- # ## Checks
20
- #
21
- # This class checks for the following:
22
- #
23
- # * The length of method and variable names, should be less than the value
24
- # set in {RubyLint::Analyze::CodingStyle::MAXIMUM\_NAME\_LENGTH}.
25
- # * The use of class variables (it's relatively rare that you actually need
26
- # those).
27
- # * The use of parenthesis around various statements: these are not needed
28
- # in Ruby.
29
- # * The use of camelCase for method and variable names instead of
30
- # `snake_case`, the latter is what Ruby code should use.
31
- # * Whether or not predicate methods are named correctly.
32
- # * If a particular method name should be replaced by a different one (e.g.
33
- # "map" instead of "collect").
34
- #
35
- class CodingStyle < RubyLint::Callback
36
- ##
37
- # A short description of this class.
38
- #
39
- # @return [String]
40
- #
41
- DESCRIPTION = 'Checks the coding style of a block of code.'
42
-
43
- ##
44
- # The maximum length for method and variable names.
45
- #
46
- # @return [Fixnum]
47
- #
48
- MAXIMUM_NAME_LENGTH = 30
49
-
50
- ##
51
- # Hash containing the names of method names and the names that should be
52
- # used instead.
53
- #
54
- # @return [Hash]
55
- #
56
- RECOMMENDED_METHOD_NAMES = {
57
- 'collect' => 'map',
58
- 'detect' => 'find',
59
- 'find_all' => 'select',
60
- 'inject' => 'reduce',
61
- 'length' => 'size'
62
- }
63
-
64
- ##
65
- # @see RubyLint::Callback#initialize
66
- #
67
- def initialize(*args)
68
- super
69
-
70
- @in_method = false
71
- @predicate_method = false
72
- end
73
-
74
- ##
75
- # Called when an instance variable is found.
76
- #
77
- # The following checks are run for instance variables:
78
- #
79
- # * Whether or not instance variables are `snake_cased` instead of
80
- # camelCased.
81
- # * Whether or not the length of an instance variable is smaller than the
82
- # value defined in {RubyLint::Analyze::CodingStyle::MAXIMUM\_NAME\_LENGTH}.
83
- #
84
- # @param [RubyLint::Token::VariableToken] token The token containing details
85
- # about the variable.
86
- #
87
- def on_instance_variable(token)
88
- validate_name(token)
89
- end
90
-
91
- ##
92
- # Called when a class variable is found.
93
- #
94
- # This method will check for the same things as
95
- # {RubyLint::Analyze::CodingStyle#on_instance_variable} along with adding an
96
- # info message about class variables being discouraged.
97
- #
98
- # @see RubyLint::Analyze::CodingStyle#on_instance_variable
99
- #
100
- def on_class_variable(token)
101
- validate_name(token)
102
-
103
- info(
104
- 'the use of class variables is discouraged',
105
- token.line,
106
- token.column
107
- )
108
- end
109
-
110
- ##
111
- # Called when a constant is found.
112
- #
113
- # @see RubyLint::Analyze::CodingStyle#on_instance_variable
114
- #
115
- def on_constant(token)
116
- validate_name_length(token)
117
- end
118
-
119
- ##
120
- # Called when a global variable is found.
121
- #
122
- # @see RubyLint::Analyze::CodingStyle#on_instance_variable
123
- #
124
- def on_global_variable(token)
125
- validate_name(token)
126
- end
127
-
128
- ##
129
- # Called when an instance variable is found.
130
- #
131
- # @see RubyLint::Analyze::CodingStyle#on_instance_variable
132
- #
133
- def on_local_variable(token)
134
- validate_name(token)
135
- end
136
-
137
- ##
138
- # Called when a value is assigned.
139
- #
140
- # This method checks for the name of the used variable (similar to
141
- # instance variables) as well as adding a warning when an instance
142
- # variable is assigned.
143
- #
144
- # @see RubyLint::Analyze::CodingStyle#on_instance_variable
145
- # @see RubyLint::Analyze::CodingStyle#on_class_variable
146
- #
147
- def on_assignment(token)
148
- validate_name(token)
149
-
150
- if token.type == :class_variable
151
- info(
152
- 'the use of class variables is discouraged',
153
- token.line,
154
- token.column
155
- )
156
- end
157
- end
158
-
159
- ##
160
- # Called when a return statement is found.
161
- #
162
- # @param [RubyLint::Token::StatementToken] token The token of the return
163
- # statement.
164
- #
165
- def on_return(token)
166
- if !token.value or token.value.empty? or !@in_method
167
- return
168
- end
169
-
170
- token.value.each do |value|
171
- # TODO: this probably won't work very well if there's a lambda inside
172
- # a method that returns `true` or `false`.
173
- if value.type == :keyword \
174
- and (value.name == 'true' or value.name == 'false')
175
- @predicate_method = true
176
-
177
- break
178
- end
179
- end
180
- end
181
-
182
- ##
183
- # Called when a method is defined. This method validates the name similar
184
- # to instance variables as well as checking if the method definition
185
- # modifies a core Ruby constant.
186
- #
187
- # @see RubyLint::Analyze::CodingStyle#on_instance_variable
188
- #
189
- def on_method_definition(token)
190
- validate_name(token)
191
-
192
- if token.receiver
193
- validate_ruby_constant_modification(token.receiver)
194
- end
195
-
196
- @in_method = true
197
- end
198
-
199
- ##
200
- # Called when a class is created. This callback adds a warning if a core
201
- # Ruby constant is modified.
202
- #
203
- # @param [RubyLint::Token::ClassToken] token Token class containing details
204
- # about the newly created class.
205
- #
206
- def on_class(token)
207
- validate_ruby_constant_modification(token)
208
- end
209
-
210
- ##
211
- # Called after a method token has been processed. This callback checks if
212
- # a method is a predicate method and if so if the name is set correctly.
213
- #
214
- # @param [RubyLint::Token::MethodDefinitionToken] token The token containing
215
- # details about the method definition.
216
- # @todo This method currently only performs a very limited check for
217
- # predicate methods. Once a proper scoping system has been implemented
218
- # this method should be updated accordingly.
219
- #
220
- def after_method_definition(token)
221
- if @predicate_method and token.name !~ /\?$/
222
- info(
223
- 'predicate methods should end with a question mark',
224
- token.line,
225
- token.column
226
- )
227
- end
228
-
229
- @in_method = false
230
- @predicate_method = false
231
- end
232
-
233
- ##
234
- # Called when a method call is found.
235
- #
236
- # This method checks if the used method should be named differently
237
- # instead (e.g. "map" instead of "collect").
238
- #
239
- # @param [RubyLint::Token::MethodToken] token Token containing details about
240
- # the method.
241
- #
242
- def on_method(token)
243
- if RECOMMENDED_METHOD_NAMES.key?(token.name)
244
- recommended = RECOMMENDED_METHOD_NAMES[token.name]
245
-
246
- info(
247
- 'it is recommended to use the method "%s" instead of "%s"' % [
248
- recommended,
249
- token.name
250
- ],
251
- token.line,
252
- token.column
253
- )
254
- end
255
- end
256
-
257
- ##
258
- # Called when an if statement is found.
259
- #
260
- # This method checks to see if there are any parenthesis around the
261
- # statement and adds an info message if this is the case.
262
- #
263
- # @param [RubyLint::Token::StatementToken] token The token containing
264
- # details about the if statement.
265
- #
266
- def on_if(token)
267
- validate_parenthesis(token)
268
- end
269
-
270
- ##
271
- # Called when an elsif statement is found.
272
- #
273
- # @see RubyLint::Analyze::CodingStyle#on_if
274
- #
275
- def on_elsif(token)
276
- validate_parenthesis(token)
277
- end
278
-
279
- ##
280
- # Called when a while statement is found.
281
- #
282
- # @see RubyLint::Analyze::CodingStyle#on_if
283
- #
284
- def on_while(token)
285
- validate_parenthesis(token)
286
- end
287
-
288
- ##
289
- # Called when a case statement is found.
290
- #
291
- # @see RubyLint::Analyze::CodingStyle#on_if
292
- #
293
- def on_case(token)
294
- validate_parenthesis(token)
295
- end
296
-
297
- ##
298
- # Called when a when statement is found.
299
- #
300
- # @see RubyLint::Analyze::CodingStyle#on_if
301
- #
302
- def on_when(token)
303
- validate_parenthesis(token)
304
- end
305
-
306
- ##
307
- # Called when an until statement is found.
308
- #
309
- # @see RubyLint::Analyze::CodingStyle#on_if
310
- #
311
- def on_until(token)
312
- validate_parenthesis(token)
313
- end
314
-
315
- ##
316
- # Called when an unless statement is found.
317
- #
318
- # @see RubyLint::Analyze::CodingStyle#on_if
319
- #
320
- def on_unless(token)
321
- validate_parenthesis(token)
322
- end
323
-
324
- private
325
-
326
- ##
327
- # Validates the name of the specified token. This method will check for
328
- # the use of camelCase as well as checking for the length of the name.
329
- #
330
- # @param [RubyLint::Token::Token] token The token to validate.
331
- #
332
- def validate_name(token)
333
- if !token.respond_to?(:name) or !token.name
334
- return
335
- end
336
-
337
- if token.name =~ /[a-z]+[A-Z]+/
338
- info(
339
- 'the use of camelCase for names is discouraged',
340
- token.line,
341
- token.column
342
- )
343
- end
344
-
345
- validate_name_length(token)
346
- end
347
-
348
- ##
349
- # Checks if the name of the given token is too long or not. The maximum
350
- # length of names is set in
351
- # {RubyLint::Analyze::CodingStyle::MAXIMUM\_NAME\_LENGTH}.
352
- #
353
- # @param [RubyLint::Token::Token] token The token to validate.
354
- #
355
- def validate_name_length(token)
356
- if !token.respond_to?(:name) or !token.name
357
- return
358
- end
359
-
360
- if token.name.length > MAXIMUM_NAME_LENGTH
361
- info(
362
- "method and variable names should not be longer than " \
363
- "#{MAXIMUM_NAME_LENGTH} characters",
364
- token.line,
365
- token.column
366
- )
367
- end
368
- end
369
-
370
- ##
371
- # Checks if there are any parenthesis wrapped around a statement.
372
- #
373
- # @param [RubyLint::Token::Token] token The token to validate.
374
- #
375
- def validate_parenthesis(token)
376
- if token.code =~ /#{token.type}\s*\(/
377
- info(
378
- 'the use of parenthesis for statements is discouraged',
379
- token.line,
380
- token.column
381
- )
382
- end
383
- end
384
-
385
- ##
386
- # Adds a warning for modifying a core Ruby constant.
387
- #
388
- # @param [RubyLint::Token::Token] token The token class to validate.
389
- #
390
- def validate_ruby_constant_modification(token)
391
- if token.name.is_a?(Array)
392
- name = token.name.join('::')
393
- else
394
- name = token.name
395
- end
396
-
397
- if Object.constants.include?(name.to_sym)
398
- warning(
399
- 'modification of a core Ruby constant',
400
- token.line,
401
- token.column
402
- )
403
- end
404
- end
405
- end # CodingStyle
406
- end # Analyze
407
- end # RubyLint
@@ -1,244 +0,0 @@
1
- module RubyLint
2
- module Analyze
3
- ##
4
- # {RubyLint::Analyze::Definitions} is a callback class that is used for
5
- # building a list of all the definitions (variables, methods, etc) of a
6
- # block of Ruby code.
7
- #
8
- # The resulting instance of {RubyLint::Definition} is stored in the `@storage`
9
- # instance variable under the key `:scope`. This makes it possible for
10
- # other callback classes to access this data easily.
11
- #
12
- class Definitions < RubyLint::Callback
13
- include Helper::Scoping
14
-
15
- ##
16
- # A short description of this class.
17
- #
18
- # @return [String]
19
- #
20
- DESCRIPTION = 'Builds a list of definitions, always enabled.'
21
-
22
- ##
23
- # Array containing the key names of the variables that should be exported
24
- # out of a method definition.
25
- #
26
- # @return [Array]
27
- #
28
- EXPORT_VARIABLES = [:instance_variable, :class_variable, :constant]
29
-
30
- ##
31
- # Hash containing the scoping data to copy over when extending a class
32
- # using a module.
33
- #
34
- # @return [Hash]
35
- #
36
- INCLUDE_SYMBOLS = {
37
- 'include' => {
38
- :constant => :constant,
39
- :instance_method => :instance_method
40
- },
41
- 'extend' => {
42
- :constant => :constant,
43
- :instance_method => :method
44
- }
45
- }
46
-
47
- ##
48
- # Called when a value is assigned to a variable.
49
- #
50
- # @param [RubyLint::Token::AssignmentToken] token
51
- #
52
- def on_assignment(token)
53
- if token.type == :global_variable
54
- variable_scope = @storage[:scope]
55
- else
56
- variable_scope = scope
57
- end
58
-
59
- # Assignment using a constant path. In this case each path segment
60
- # should exist (with the exception of the last one) for the assignment
61
- # to take place.
62
- if token.name.is_a?(Array)
63
- name_scope = scope
64
-
65
- token.name[0..-2].each do |segment|
66
- name_scope = name_scope.lookup(:constant, segment)
67
- end
68
-
69
- if name_scope
70
- variable_scope = name_scope
71
- else
72
- return
73
- end
74
-
75
- name = token.name[-1]
76
- type = :constant
77
- else
78
- name = token.name
79
- type = token.type
80
- end
81
-
82
- variable_scope.add(
83
- type,
84
- name,
85
- Definition.new(nil, :token => token, :reset => false)
86
- )
87
- end
88
-
89
- ##
90
- # Called when a new method is defined.
91
- #
92
- # @param [RubyLint::Token::MethodDefinitionToken] token
93
- #
94
- def on_method_definition(token)
95
- type = :instance_method
96
- new_scope = Definition.new(scope, :token => token)
97
- target = scope
98
-
99
- token.parameters.each do |param|
100
- new_scope.add(
101
- param.type,
102
- param.name,
103
- Definition.new(nil, :token => param, :reset => false)
104
- )
105
- end
106
-
107
- # The method is a class method.
108
- if token.receiver
109
- type = :method
110
-
111
- if token.receiver.name != 'self' \
112
- and token.receiver.name != @namespace[-1]
113
- found = target.lookup(token.receiver.type, token.receiver.name)
114
- target = found if found
115
- end
116
- end
117
-
118
- target.add(type, token.name, new_scope)
119
-
120
- @scopes << new_scope
121
- end
122
-
123
- ##
124
- # Called after a method definition has been processed.
125
- #
126
- # @see RubyLint::Analyze::Definitions#on_method_definition
127
- #
128
- def after_method_definition(token)
129
- # TODO: exporting these variables should only be done if the method is
130
- # actually called.
131
- last_scope = @scopes.pop
132
-
133
- EXPORT_VARIABLES.each do |key|
134
- scope.symbols[key] = scope.symbols[key].merge(
135
- last_scope.symbols[key]
136
- )
137
- end
138
- end
139
-
140
- ##
141
- # Called when a class definition is found.
142
- #
143
- # @param [RubyLint::Token::ClassToken] token
144
- #
145
- def on_class(token)
146
- name = token.name.join('::')
147
- @namespace << name
148
- existing = scope.lookup(:constant, name)
149
-
150
- # If a class has already been defined the scope should not be
151
- # overwritten.
152
- if existing
153
- existing.parent << scope
154
- @scopes << existing
155
-
156
- return
157
- end
158
-
159
- parent = scope.lookup(:constant, token.parent.join('::'))
160
- new_scope = Definition.new([parent, scope], :token => token)
161
-
162
- scope.add(:constant, name, new_scope)
163
-
164
- @scopes << new_scope
165
- end
166
-
167
- ##
168
- # Called after a class definition was found and processed.
169
- #
170
- # @see RubyLint::Analyze::Definitions#on_class
171
- #
172
- def after_class(token)
173
- @scopes.pop
174
- @namespace.pop
175
- end
176
-
177
- ##
178
- # Called when a module is defined.
179
- #
180
- # @param [RubyLint::Token::Token] token
181
- #
182
- def on_module(token)
183
- name = token.name.join('::')
184
- @namespace << name
185
- existing = scope.lookup(:constant, name)
186
-
187
- # If a module has already been defined the scope should not be
188
- # overwritten.
189
- if existing
190
- existing.parent << scope
191
- @scopes << existing
192
-
193
- return
194
- end
195
-
196
- new_scope = Definition.new(scope, :token => token)
197
-
198
- scope.add(:constant, name, new_scope)
199
-
200
- @scopes << new_scope
201
- end
202
-
203
- ##
204
- # Called after a module definition has been processed.
205
- #
206
- # @see RubyLint::Analyze::Definitions#on_module
207
- #
208
- def after_module(token)
209
- @scopes.pop
210
- @namespace.pop
211
- end
212
-
213
- ##
214
- # Called when a method call is found. This callback is used to extend
215
- # classes using modules.
216
- #
217
- # @param [RubyLint::Token::MethodToken] token
218
- #
219
- def on_method(token)
220
- if INCLUDE_SYMBOLS.key?(token.name)
221
- token.parameters.each do |param|
222
- found = nil
223
-
224
- # Extract the definition and scope to include.
225
- if param.type == :constant_path
226
- found = resolve_definition(param.name)
227
- elsif param.type == :constant
228
- found = scope.lookup(:constant, param.name)
229
- end
230
-
231
- next unless found
232
-
233
- # Copy over all the constants and methods.
234
- INCLUDE_SYMBOLS[token.name].each do |source, target|
235
- found.symbols[source].each do |name, data|
236
- scope.add(target, name, data)
237
- end
238
- end
239
- end
240
- end
241
- end
242
- end # Definitions
243
- end # Analyze
244
- end # RubyLint