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,176 +0,0 @@
1
- module RubyLint
2
- module Token
3
- ##
4
- # Generic token class used for data that doesn't require its own specific
5
- # token.
6
- #
7
- # @since 2012-07-29
8
- #
9
- class Token
10
- ##
11
- # Hash containing various Ripper types and the RubyLint types to use
12
- # instead.
13
- #
14
- # @since 2012-07-29
15
- # @return [Hash]
16
- #
17
- TYPE_MAPPING = {
18
- :ident => :identifier,
19
- :gvar => :global_variable,
20
- :ivar => :instance_variable,
21
- :cvar => :class_variable,
22
- :const => :constant,
23
- :int => :integer,
24
- :float => :float,
25
- :tstring_content => :string,
26
- :label => :symbol,
27
- :kw => :keyword
28
- }
29
-
30
- ##
31
- # The name of the token. For example, when the token is an identifier
32
- # this value is set to `:ident`.
33
- #
34
- # @since 2012-07-29
35
- # @return [String]
36
- #
37
- attr_accessor :name
38
-
39
- ##
40
- # The value of the token. For example, if the token is a variable this
41
- # attribute is set to the token for the variable's value.
42
- #
43
- # @since 2012-07-29
44
- # @return [RubyLint::Token::Token]
45
- #
46
- attr_accessor :value
47
-
48
- ##
49
- # The type of token. For example, if the token is a local variable then
50
- # this value is set to `:local_variable`.
51
- #
52
- # @since 2012-07-29
53
- # @return [Symbol]
54
- #
55
- attr_reader :type
56
-
57
- ##
58
- # The line number on which the token was defined.
59
- #
60
- # @since 2012-07-29
61
- # @return [Fixnum|Bignum]
62
- #
63
- attr_accessor :line
64
-
65
- ##
66
- # The column number on which the token was defined.
67
- #
68
- # @since 2012-07-29
69
- # @return [Fixnum|Bignum]
70
- #
71
- attr_accessor :column
72
-
73
- ##
74
- # The code of the current line.
75
- #
76
- # @return [String]
77
- #
78
- attr_accessor :code
79
-
80
- ##
81
- # The key, index or object member that was accessed from the token.
82
- #
83
- # @since 2012-08-24
84
- # @return [Array]
85
- #
86
- attr_accessor :key
87
-
88
- ##
89
- # The name of the event to call when iterating over an AST. Set to the
90
- # value of {RubyLint::Token::Token#type} unless specified otherwise.
91
- #
92
- # @return [Symbol]
93
- #
94
- attr_reader :event
95
-
96
- ##
97
- # Set to `true` when a token's values should be expanded. Example:
98
- #
99
- # def foo(*args)
100
- # return *args
101
- # end
102
- #
103
- # @return [TrueClass|FalseClass]
104
- #
105
- attr_accessor :expand
106
-
107
- ##
108
- # Creates a new instance of the token and sets various instance variables
109
- # based on the specified hash.
110
- #
111
- # @since 2012-07-29
112
- # @param [Hash] options A hash containing various instance variables to
113
- # set and their values. For a variable to be set it requires a
114
- # corresponding public getter mehtod to be set.
115
- #
116
- def initialize(options = {})
117
- @line, @column = 0, 0
118
- @expand = false
119
-
120
- options.each do |key, value|
121
- if respond_to?(key)
122
- instance_variable_set("@#{key}", value)
123
- end
124
- end
125
-
126
- if TYPE_MAPPING[@type]
127
- @type = TYPE_MAPPING[@type]
128
- end
129
-
130
- @event = @type
131
-
132
- # Remove NilClass instances from the `value` array, these serve no
133
- # useful purpose.
134
- @value.select! { |t| !t.nil? } if @value.is_a?(Array)
135
- end
136
-
137
- ##
138
- # Sets the type of the token and updates the event name accordingly.
139
- #
140
- # @param [Symbol] type The new type of the token.
141
- #
142
- def type=(type)
143
- if TYPE_MAPPING[type]
144
- type = TYPE_MAPPING[type]
145
- end
146
-
147
- @type = type
148
- @event = type
149
- end
150
-
151
- ##
152
- # Returns an array containing all the child nodes that can be iterated by
153
- # {RubyLint::Iterator}.
154
- #
155
- # @return [Array]
156
- #
157
- def child_nodes
158
- nodes = []
159
-
160
- if @value
161
- if @value.is_a?(Array)
162
- nodes << @value
163
- else
164
- nodes << [@value]
165
- end
166
- end
167
-
168
- if @key
169
- nodes << @key
170
- end
171
-
172
- return nodes
173
- end
174
- end # Token
175
- end # Token
176
- end # RubyLint
@@ -1,18 +0,0 @@
1
- module RubyLint
2
- module Token
3
- ##
4
- # Token class used for storing information about variable references.
5
- #
6
- class VariableToken < Token
7
- ##
8
- # @see RubyLint::Token::Token#initialize
9
- #
10
- def initialize(*args)
11
- super
12
-
13
- @type = :local_variable if @type == :identifier
14
- @event = @type
15
- end
16
- end # VariableToken
17
- end # Token
18
- end # RubyLint
@@ -1,52 +0,0 @@
1
- require File.expand_path('../../../lib/ruby-lint', __FILE__)
2
-
3
- # This file benchmarks the memory increase after parsing a particular RubyLint
4
- # file and performing code analysis on the resulting tokens.
5
- #
6
- # For each iteration (the amount is set in the "AMOUNT" environment variable)
7
- # the increase is measured. Once finished the average increase is displayed as
8
- # well as the total memory usage at the end of the script.
9
-
10
- def memory_usage
11
- return `ps -o rss= #{Process.pid}`.strip.to_i
12
- end
13
-
14
- def benchmark_memory
15
- start_memory = memory_usage
16
-
17
- yield
18
-
19
- return memory_usage - start_memory
20
- end
21
-
22
- memory_kb = 0.0
23
- amount = ENV['AMOUNT'] ? ENV['AMOUNT'].to_i : 100
24
- path = File.expand_path('../../../lib/ruby-lint/parser.rb', __FILE__)
25
- code = File.read(path, File.size(path))
26
-
27
- amount.times do
28
- memory_kb += benchmark_memory do
29
- tokens = RubyLint::Parser.new(code, path).parse
30
- iterator = RubyLint::Iterator.new
31
-
32
- iterator.bind(RubyLint::Analyze::CodingStyle)
33
- iterator.bind(RubyLint::Analyze::Definitions)
34
-
35
- iterator.run(tokens)
36
- end
37
- end
38
-
39
- memory_kb /= amount
40
- memory_mb = memory_kb / 1024
41
- memory_end_kb = memory_usage
42
- memory_end_mb = memory_end_kb / 1024
43
-
44
- puts "Average memory increase for each iteration (total of #{amount})"
45
- puts
46
- puts "Kilobytes: #{memory_kb.round}"
47
- puts "Megabytes: #{memory_mb.round(2)}"
48
- puts
49
- puts 'End memory usage'
50
- puts
51
- puts "Kilobytes: #{memory_end_kb.round}"
52
- puts "Megabytes: #{memory_end_mb.round(2)}"
@@ -1,16 +0,0 @@
1
- # This file runs a simple benchmark to see how fast (or slow) RubyLint is.
2
- # It benchmarks how long it takes to parse the main parser file
3
- # (lib/ruby-lint/parser.rb) itself.
4
- require File.expand_path('../../../lib/ruby-lint', __FILE__)
5
- require 'benchmark'
6
-
7
- code = File.read(File.expand_path('../../../lib/ruby-lint/parser.rb', __FILE__))
8
- amount = ENV['AMOUNT'] ? ENV['AMOUNT'].to_i : 100
9
-
10
- Benchmark.bmbm(40) do |bench|
11
- bench.report "Parse parser.rb #{amount} times" do
12
- amount.times do
13
- RubyLint::Parser.new(code).parse
14
- end
15
- end
16
- end
@@ -1,348 +0,0 @@
1
- #
2
- # = un.rb
3
- #
4
- # Copyright (c) 2003 WATANABE Hirofumi <eban@ruby-lang.org>
5
- #
6
- # This program is free software.
7
- # You can distribute/modify this program under the same terms of Ruby.
8
- #
9
- # == Utilities to replace common UNIX commands in Makefiles etc
10
- #
11
- # == SYNOPSIS
12
- #
13
- # ruby -run -e cp -- [OPTION] SOURCE DEST
14
- # ruby -run -e ln -- [OPTION] TARGET LINK_NAME
15
- # ruby -run -e mv -- [OPTION] SOURCE DEST
16
- # ruby -run -e rm -- [OPTION] FILE
17
- # ruby -run -e mkdir -- [OPTION] DIRS
18
- # ruby -run -e rmdir -- [OPTION] DIRS
19
- # ruby -run -e install -- [OPTION] SOURCE DEST
20
- # ruby -run -e chmod -- [OPTION] OCTAL-MODE FILE
21
- # ruby -run -e touch -- [OPTION] FILE
22
- # ruby -run -e wait_writable -- [OPTION] FILE
23
- # ruby -run -e mkmf -- [OPTION] EXTNAME [OPTION]
24
- # ruby -run -e httpd -- [OPTION] DocumentRoot
25
- # ruby -run -e help [COMMAND]
26
-
27
- require "fileutils"
28
- require "optparse"
29
-
30
- module FileUtils
31
- # @fileutils_label = ""
32
- @fileutils_output = $stdout
33
- end
34
-
35
- def setup(options = "", *long_options)
36
- opt_hash = {}
37
- argv = []
38
- OptionParser.new do |o|
39
- options.scan(/.:?/) do |s|
40
- opt_name = s.delete(":").intern
41
- o.on("-" + s.tr(":", " ")) do |val|
42
- opt_hash[opt_name] = val
43
- end
44
- end
45
- long_options.each do |s|
46
- opt_name, arg_name = s.split(/(?=[\s=])/, 2)
47
- opt_name.sub!(/\A--/, '')
48
- s = "--#{opt_name.gsub(/([A-Z]+|[a-z])([A-Z])/, '\1-\2').downcase}#{arg_name}"
49
- puts "#{opt_name}=>#{s}" if $DEBUG
50
- opt_name = opt_name.intern
51
- o.on(s) do |val|
52
- opt_hash[opt_name] = val
53
- end
54
- end
55
- o.on("-v") do opt_hash[:verbose] = true end
56
- o.order!(ARGV) do |x|
57
- if /[*?\[{]/ =~ x
58
- argv.concat(Dir[x])
59
- else
60
- argv << x
61
- end
62
- end
63
- end
64
- yield argv, opt_hash
65
- end
66
-
67
- ##
68
- # Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY
69
- #
70
- # ruby -run -e cp -- [OPTION] SOURCE DEST
71
- #
72
- # -p preserve file attributes if possible
73
- # -r copy recursively
74
- # -v verbose
75
- #
76
-
77
- def cp
78
- setup("pr") do |argv, options|
79
- cmd = "cp"
80
- cmd += "_r" if options.delete :r
81
- options[:preserve] = true if options.delete :p
82
- dest = argv.pop
83
- argv = argv[0] if argv.size == 1
84
- FileUtils.send cmd, argv, dest, options
85
- end
86
- end
87
-
88
- ##
89
- # Create a link to the specified TARGET with LINK_NAME.
90
- #
91
- # ruby -run -e ln -- [OPTION] TARGET LINK_NAME
92
- #
93
- # -s make symbolic links instead of hard links
94
- # -f remove existing destination files
95
- # -v verbose
96
- #
97
-
98
- def ln
99
- setup("sf") do |argv, options|
100
- cmd = "ln"
101
- cmd += "_s" if options.delete :s
102
- options[:force] = true if options.delete :f
103
- dest = argv.pop
104
- argv = argv[0] if argv.size == 1
105
- FileUtils.send cmd, argv, dest, options
106
- end
107
- end
108
-
109
- ##
110
- # Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.
111
- #
112
- # ruby -run -e mv -- [OPTION] SOURCE DEST
113
- #
114
- # -v verbose
115
- #
116
-
117
- def mv
118
- setup do |argv, options|
119
- dest = argv.pop
120
- argv = argv[0] if argv.size == 1
121
- FileUtils.mv argv, dest, options
122
- end
123
- end
124
-
125
- ##
126
- # Remove the FILE
127
- #
128
- # ruby -run -e rm -- [OPTION] FILE
129
- #
130
- # -f ignore nonexistent files
131
- # -r remove the contents of directories recursively
132
- # -v verbose
133
- #
134
-
135
- def rm
136
- setup("fr") do |argv, options|
137
- cmd = "rm"
138
- cmd += "_r" if options.delete :r
139
- options[:force] = true if options.delete :f
140
- FileUtils.send cmd, argv, options
141
- end
142
- end
143
-
144
- ##
145
- # Create the DIR, if they do not already exist.
146
- #
147
- # ruby -run -e mkdir -- [OPTION] DIR
148
- #
149
- # -p no error if existing, make parent directories as needed
150
- # -v verbose
151
- #
152
-
153
- def mkdir
154
- setup("p") do |argv, options|
155
- cmd = "mkdir"
156
- cmd += "_p" if options.delete :p
157
- FileUtils.send cmd, argv, options
158
- end
159
- end
160
-
161
- ##
162
- # Remove the DIR.
163
- #
164
- # ruby -run -e rmdir -- [OPTION] DIR
165
- #
166
- # -p remove DIRECTORY and its ancestors.
167
- # -v verbose
168
- #
169
-
170
- def rmdir
171
- setup("p") do |argv, options|
172
- options[:parents] = true if options.delete :p
173
- FileUtils.rmdir argv, options
174
- end
175
- end
176
-
177
- ##
178
- # Copy SOURCE to DEST.
179
- #
180
- # ruby -run -e install -- [OPTION] SOURCE DEST
181
- #
182
- # -p apply access/modification times of SOURCE files to
183
- # corresponding destination files
184
- # -m set permission mode (as in chmod), instead of 0755
185
- # -v verbose
186
- #
187
-
188
- def install
189
- setup("pm:") do |argv, options|
190
- options[:mode] = (mode = options.delete :m) ? mode.oct : 0755
191
- options[:preserve] = true if options.delete :p
192
- dest = argv.pop
193
- argv = argv[0] if argv.size == 1
194
- FileUtils.install argv, dest, options
195
- end
196
- end
197
-
198
- ##
199
- # Change the mode of each FILE to OCTAL-MODE.
200
- #
201
- # ruby -run -e chmod -- [OPTION] OCTAL-MODE FILE
202
- #
203
- # -v verbose
204
- #
205
-
206
- def chmod
207
- setup do |argv, options|
208
- mode = argv.shift.oct
209
- FileUtils.chmod mode, argv, options
210
- end
211
- end
212
-
213
- ##
214
- # Update the access and modification times of each FILE to the current time.
215
- #
216
- # ruby -run -e touch -- [OPTION] FILE
217
- #
218
- # -v verbose
219
- #
220
-
221
- def touch
222
- setup do |argv, options|
223
- FileUtils.touch argv, options
224
- end
225
- end
226
-
227
- ##
228
- # Wait until the file becomes writable.
229
- #
230
- # ruby -run -e wait_writable -- [OPTION] FILE
231
- #
232
- # -n RETRY count to retry
233
- # -w SEC each wait time in seconds
234
- # -v verbose
235
- #
236
-
237
- def wait_writable
238
- setup("n:w:v") do |argv, options|
239
- verbose = options[:verbose]
240
- n = options[:n] and n = Integer(n)
241
- wait = (wait = options[:w]) ? Float(wait) : 0.2
242
- argv.each do |file|
243
- begin
244
- open(file, "r+b")
245
- rescue Errno::ENOENT
246
- break
247
- rescue Errno::EACCES => e
248
- raise if n and (n -= 1) <= 0
249
- puts e
250
- STDOUT.flush
251
- sleep wait
252
- retry
253
- end
254
- end
255
- end
256
- end
257
-
258
- ##
259
- # Create makefile using mkmf.
260
- #
261
- # ruby -run -e mkmf -- [OPTION] EXTNAME [OPTION]
262
- #
263
- # -d ARGS run dir_config
264
- # -h ARGS run have_header
265
- # -l ARGS run have_library
266
- # -f ARGS run have_func
267
- # -v ARGS run have_var
268
- # -t ARGS run have_type
269
- # -m ARGS run have_macro
270
- # -c ARGS run have_const
271
- # --vendor install to vendor_ruby
272
- #
273
-
274
- def mkmf
275
- setup("d:h:l:f:v:t:m:c:", "vendor") do |argv, options|
276
- require 'mkmf'
277
- opt = options[:d] and opt.split(/:/).each {|n| dir_config(*n.split(/,/))}
278
- opt = options[:h] and opt.split(/:/).each {|n| have_header(*n.split(/,/))}
279
- opt = options[:l] and opt.split(/:/).each {|n| have_library(*n.split(/,/))}
280
- opt = options[:f] and opt.split(/:/).each {|n| have_func(*n.split(/,/))}
281
- opt = options[:v] and opt.split(/:/).each {|n| have_var(*n.split(/,/))}
282
- opt = options[:t] and opt.split(/:/).each {|n| have_type(*n.split(/,/))}
283
- opt = options[:m] and opt.split(/:/).each {|n| have_macro(*n.split(/,/))}
284
- opt = options[:c] and opt.split(/:/).each {|n| have_const(*n.split(/,/))}
285
- $configure_args["--vendor"] = true if options[:vendor]
286
- create_makefile(*argv)
287
- end
288
- end
289
-
290
- ##
291
- # Run WEBrick HTTP server.
292
- #
293
- # ruby -run -e httpd -- [OPTION] DocumentRoot
294
- #
295
- # --bind-address=ADDR address to bind
296
- # --port=NUM listening port number
297
- # --max-clients=MAX max number of simultaneous clients
298
- # --temp-dir=DIR temporary directory
299
- # --do-not-reverse-lookup disable reverse lookup
300
- # --request-timeout=SECOND request timeout in seconds
301
- # --http-version=VERSION HTTP version
302
- # -v verbose
303
- #
304
-
305
- def httpd
306
- setup("", "BindAddress=ADDR", "Port=PORT", "MaxClients=NUM", "TempDir=DIR",
307
- "DoNotReverseLookup", "RequestTimeout=SECOND", "HTTPVersion=VERSION") do
308
- |argv, options|
309
- require 'webrick'
310
- opt = options[:RequestTimeout] and options[:RequestTimeout] = opt.to_i
311
- [:Port, :MaxClients].each do |name|
312
- opt = options[name] and (options[name] = Integer(opt)) rescue nil
313
- end
314
- unless argv.empty?
315
- options[:DocumentRoot] = argv.shift
316
- end
317
- s = WEBrick::HTTPServer.new(options)
318
- shut = proc {s.shutdown}
319
- Signal.trap("TERM", shut)
320
- Signal.trap("QUIT", shut) if Signal.list.has_key?("QUIT")
321
- if STDIN.tty?
322
- Signal.trap("HUP", shut) if Signal.list.has_key?("HUP")
323
- Signal.trap("INT", shut)
324
- end
325
- s.start
326
- end
327
- end
328
-
329
- ##
330
- # Display help message.
331
- #
332
- # ruby -run -e help [COMMAND]
333
- #
334
-
335
- def help
336
- setup do |argv,|
337
- all = argv.empty?
338
- open(__FILE__) do |me|
339
- while me.gets("##\n")
340
- if help = me.gets("\n\n")
341
- if all or argv.delete help[/-e \w+/].sub(/-e /, "")
342
- print help.gsub(/^# ?/, "")
343
- end
344
- end
345
- end
346
- end
347
- end
348
- end