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.
- data.tar.gz.asc +17 -0
- data/.gitignore +1 -0
- data/.travis.yml +25 -0
- data/.yardopts +4 -0
- data/Gemfile +1 -1
- data/LICENSE +1 -1
- data/MANIFEST +238 -49
- data/README.md +84 -131
- data/Rakefile +6 -0
- data/bin/ruby-lint +2 -2
- data/checksum/.gitkeep +0 -0
- data/doc/DCO.md +26 -0
- data/doc/architecture.md +63 -0
- data/doc/code_analysis.md +90 -0
- data/doc/configuration.md +86 -0
- data/doc/contributing.md +16 -0
- data/doc/graphviz/flow.dot +7 -0
- data/doc/images/.gitkeep +0 -0
- data/doc/images/flow.png +0 -0
- data/lib/ruby-lint.rb +35 -35
- data/lib/ruby-lint/analyze/argument_amount.rb +73 -0
- data/lib/ruby-lint/analyze/shadowing_variables.rb +19 -24
- data/lib/ruby-lint/analyze/undefined_methods.rb +68 -0
- data/lib/ruby-lint/analyze/undefined_variables.rb +42 -69
- data/lib/ruby-lint/analyze/unused_variables.rb +23 -78
- data/lib/ruby-lint/base.rb +85 -0
- data/lib/ruby-lint/cli.rb +23 -167
- data/lib/ruby-lint/cli/analyze.rb +99 -0
- data/lib/ruby-lint/cli/ast.rb +35 -0
- data/lib/ruby-lint/cli/base.rb +120 -0
- data/lib/ruby-lint/configuration.rb +112 -0
- data/lib/ruby-lint/constant_loader.rb +92 -0
- data/lib/ruby-lint/definition/ruby_method.rb +248 -0
- data/lib/ruby-lint/definition/ruby_object.rb +757 -0
- data/lib/ruby-lint/definition_generator.rb +155 -0
- data/lib/ruby-lint/definitions/core.rb +5 -0
- data/lib/ruby-lint/definitions/core/arg0.rb +7 -0
- data/lib/ruby-lint/definitions/core/argf.rb +7 -0
- data/lib/ruby-lint/definitions/core/argument_error.rb +12 -0
- data/lib/ruby-lint/definitions/core/argv.rb +7 -0
- data/lib/ruby-lint/definitions/core/array.rb +414 -0
- data/lib/ruby-lint/definitions/core/autoload.rb +39 -0
- data/lib/ruby-lint/definitions/core/basic_object.rb +46 -0
- data/lib/ruby-lint/definitions/core/bignum.rb +128 -0
- data/lib/ruby-lint/definitions/core/binding.rb +52 -0
- data/lib/ruby-lint/definitions/core/class.rb +23 -0
- data/lib/ruby-lint/definitions/core/comparable.rb +38 -0
- data/lib/ruby-lint/definitions/core/complex.rb +195 -0
- data/lib/ruby-lint/definitions/core/condition_variable.rb +19 -0
- data/lib/ruby-lint/definitions/core/continuation.rb +8 -0
- data/lib/ruby-lint/definitions/core/data.rb +8 -0
- data/lib/ruby-lint/definitions/core/date.rb +706 -0
- data/lib/ruby-lint/definitions/core/date_time.rb +381 -0
- data/lib/ruby-lint/definitions/core/default_record_separator.rb +7 -0
- data/lib/ruby-lint/definitions/core/digest.rb +166 -0
- data/lib/ruby-lint/definitions/core/dir.rb +496 -0
- data/lib/ruby-lint/definitions/core/encoding.rb +2030 -0
- data/lib/ruby-lint/definitions/core/encoding_error.rb +8 -0
- data/lib/ruby-lint/definitions/core/enumerable.rb +352 -0
- data/lib/ruby-lint/definitions/core/enumerator.rb +37 -0
- data/lib/ruby-lint/definitions/core/env.rb +7 -0
- data/lib/ruby-lint/definitions/core/eoferror.rb +8 -0
- data/lib/ruby-lint/definitions/core/erb.rb +304 -0
- data/lib/ruby-lint/definitions/core/errno.rb +3331 -0
- data/lib/ruby-lint/definitions/core/etc.rb +138 -0
- data/lib/ruby-lint/definitions/core/exception.rb +72 -0
- data/lib/ruby-lint/definitions/core/false.rb +7 -0
- data/lib/ruby-lint/definitions/core/false_class.rb +30 -0
- data/lib/ruby-lint/definitions/core/fatal_error.rb +8 -0
- data/lib/ruby-lint/definitions/core/fiber.rb +35 -0
- data/lib/ruby-lint/definitions/core/fiber_error.rb +8 -0
- data/lib/ruby-lint/definitions/core/file.rb +1277 -0
- data/lib/ruby-lint/definitions/core/file_list.rb +727 -0
- data/lib/ruby-lint/definitions/core/file_test.rb +106 -0
- data/lib/ruby-lint/definitions/core/file_utils.rb +1027 -0
- data/lib/ruby-lint/definitions/core/fixnum.rb +156 -0
- data/lib/ruby-lint/definitions/core/float.rb +307 -0
- data/lib/ruby-lint/definitions/core/float_domain_error.rb +8 -0
- data/lib/ruby-lint/definitions/core/gc.rb +57 -0
- data/lib/ruby-lint/definitions/core/gem.rb +3161 -0
- data/lib/ruby-lint/definitions/core/hash.rb +512 -0
- data/lib/ruby-lint/definitions/core/immediate_value.rb +19 -0
- data/lib/ruby-lint/definitions/core/index_error.rb +8 -0
- data/lib/ruby-lint/definitions/core/integer.rb +100 -0
- data/lib/ruby-lint/definitions/core/interrupt.rb +14 -0
- data/lib/ruby-lint/definitions/core/io.rb +928 -0
- data/lib/ruby-lint/definitions/core/ioerror.rb +8 -0
- data/lib/ruby-lint/definitions/core/kernel.rb +504 -0
- data/lib/ruby-lint/definitions/core/key_error.rb +8 -0
- data/lib/ruby-lint/definitions/core/load_error.rb +28 -0
- data/lib/ruby-lint/definitions/core/local_jump_error.rb +8 -0
- data/lib/ruby-lint/definitions/core/main.rb +25 -0
- data/lib/ruby-lint/definitions/core/marshal.rb +466 -0
- data/lib/ruby-lint/definitions/core/match_data.rb +73 -0
- data/lib/ruby-lint/definitions/core/math.rb +205 -0
- data/lib/ruby-lint/definitions/core/memory_segmention_error.rb +8 -0
- data/lib/ruby-lint/definitions/core/method.rb +61 -0
- data/lib/ruby-lint/definitions/core/module.rb +262 -0
- data/lib/ruby-lint/definitions/core/monitor.rb +39 -0
- data/lib/ruby-lint/definitions/core/monitor_mixin.rb +59 -0
- data/lib/ruby-lint/definitions/core/mutex.rb +32 -0
- data/lib/ruby-lint/definitions/core/name_error.rb +16 -0
- data/lib/ruby-lint/definitions/core/nil.rb +7 -0
- data/lib/ruby-lint/definitions/core/nil_class.rb +46 -0
- data/lib/ruby-lint/definitions/core/no_memory_error.rb +8 -0
- data/lib/ruby-lint/definitions/core/no_method_error.rb +18 -0
- data/lib/ruby-lint/definitions/core/not_implemented_error.rb +8 -0
- data/lib/ruby-lint/definitions/core/numeric.rb +123 -0
- data/lib/ruby-lint/definitions/core/object.rb +31 -0
- data/lib/ruby-lint/definitions/core/object_space.rb +41 -0
- data/lib/ruby-lint/definitions/core/open_struct.rb +49 -0
- data/lib/ruby-lint/definitions/core/option_parser.rb +1355 -0
- data/lib/ruby-lint/definitions/core/precision.rb +21 -0
- data/lib/ruby-lint/definitions/core/primitive_failure.rb +8 -0
- data/lib/ruby-lint/definitions/core/proc.rb +109 -0
- data/lib/ruby-lint/definitions/core/process.rb +602 -0
- data/lib/ruby-lint/definitions/core/psych.rb +2231 -0
- data/lib/ruby-lint/definitions/core/queue.rb +44 -0
- data/lib/ruby-lint/definitions/core/rake.rb +4784 -0
- data/lib/ruby-lint/definitions/core/rake_file_utils.rb +203 -0
- data/lib/ruby-lint/definitions/core/rakeversion.rb +7 -0
- data/lib/ruby-lint/definitions/core/random.rb +38 -0
- data/lib/ruby-lint/definitions/core/range.rb +104 -0
- data/lib/ruby-lint/definitions/core/range_error.rb +8 -0
- data/lib/ruby-lint/definitions/core/rational.rb +96 -0
- data/lib/ruby-lint/definitions/core/rb_config.rb +36 -0
- data/lib/ruby-lint/definitions/core/regexp.rb +396 -0
- data/lib/ruby-lint/definitions/core/regexp_error.rb +8 -0
- data/lib/ruby-lint/definitions/core/rubinius.rb +16637 -0
- data/lib/ruby-lint/definitions/core/ruby_copyright.rb +7 -0
- data/lib/ruby-lint/definitions/core/ruby_description.rb +7 -0
- data/lib/ruby-lint/definitions/core/ruby_engine.rb +7 -0
- data/lib/ruby-lint/definitions/core/ruby_lint.rb +93 -0
- data/lib/ruby-lint/definitions/core/ruby_patchlevel.rb +7 -0
- data/lib/ruby-lint/definitions/core/ruby_platform.rb +7 -0
- data/lib/ruby-lint/definitions/core/ruby_release_date.rb +7 -0
- data/lib/ruby-lint/definitions/core/ruby_version.rb +7 -0
- data/lib/ruby-lint/definitions/core/runtime_error.rb +8 -0
- data/lib/ruby-lint/definitions/core/scan_error.rb +8 -0
- data/lib/ruby-lint/definitions/core/script_error.rb +8 -0
- data/lib/ruby-lint/definitions/core/security_error.rb +8 -0
- data/lib/ruby-lint/definitions/core/shellwords.rb +37 -0
- data/lib/ruby-lint/definitions/core/signal.rb +37 -0
- data/lib/ruby-lint/definitions/core/signal_exception.rb +19 -0
- data/lib/ruby-lint/definitions/core/singleton.rb +37 -0
- data/lib/ruby-lint/definitions/core/sized_queue.rb +42 -0
- data/lib/ruby-lint/definitions/core/standard_error.rb +8 -0
- data/lib/ruby-lint/definitions/core/stderr.rb +7 -0
- data/lib/ruby-lint/definitions/core/stdin.rb +7 -0
- data/lib/ruby-lint/definitions/core/stdout.rb +7 -0
- data/lib/ruby-lint/definitions/core/stop_iteration.rb +8 -0
- data/lib/ruby-lint/definitions/core/string.rb +713 -0
- data/lib/ruby-lint/definitions/core/string_io.rb +287 -0
- data/lib/ruby-lint/definitions/core/string_scanner.rb +158 -0
- data/lib/ruby-lint/definitions/core/struct.rb +357 -0
- data/lib/ruby-lint/definitions/core/syck.rb +30 -0
- data/lib/ruby-lint/definitions/core/symbol.rb +90 -0
- data/lib/ruby-lint/definitions/core/syntax_error.rb +44 -0
- data/lib/ruby-lint/definitions/core/system_call_error.rb +31 -0
- data/lib/ruby-lint/definitions/core/system_exit.rb +19 -0
- data/lib/ruby-lint/definitions/core/system_stack_error.rb +8 -0
- data/lib/ruby-lint/definitions/core/thread.rb +209 -0
- data/lib/ruby-lint/definitions/core/thread_error.rb +8 -0
- data/lib/ruby-lint/definitions/core/thread_group.rb +22 -0
- data/lib/ruby-lint/definitions/core/time.rb +233 -0
- data/lib/ruby-lint/definitions/core/toplevel_binding.rb +7 -0
- data/lib/ruby-lint/definitions/core/true.rb +7 -0
- data/lib/ruby-lint/definitions/core/true_class.rb +30 -0
- data/lib/ruby-lint/definitions/core/type_error.rb +8 -0
- data/lib/ruby-lint/definitions/core/unbound_method.rb +51 -0
- data/lib/ruby-lint/definitions/core/unmarshalable.rb +13 -0
- data/lib/ruby-lint/definitions/core/unsupported_library_error.rb +8 -0
- data/lib/ruby-lint/definitions/core/weak_ref.rb +42 -0
- data/lib/ruby-lint/definitions/core/zero_division_error.rb +8 -0
- data/lib/ruby-lint/definitions_builder.rb +692 -0
- data/lib/ruby-lint/extensions/string.rb +15 -0
- data/lib/ruby-lint/helper/constant_paths.rb +41 -0
- data/lib/ruby-lint/helper/conversion.rb +33 -0
- data/lib/ruby-lint/helper/current_scope.rb +98 -0
- data/lib/ruby-lint/helper/methods.rb +91 -0
- data/lib/ruby-lint/inspector.rb +191 -0
- data/lib/ruby-lint/iterator.rb +187 -127
- data/lib/ruby-lint/node.rb +107 -0
- data/lib/ruby-lint/parser.rb +510 -1137
- data/lib/ruby-lint/parser_error.rb +15 -27
- data/lib/ruby-lint/presenter/json.rb +19 -0
- data/lib/ruby-lint/presenter/text.rb +37 -0
- data/lib/ruby-lint/report.rb +95 -53
- data/lib/ruby-lint/report/entry.rb +71 -0
- data/lib/ruby-lint/template/definition.erb +24 -0
- data/lib/ruby-lint/template/scope.rb +25 -0
- data/lib/ruby-lint/variable_predicates.rb +109 -0
- data/lib/ruby-lint/version.rb +1 -1
- data/ruby-lint.gemspec +19 -8
- data/spec/helper.rb +10 -2
- data/spec/ruby-lint/analyze/argument_amount.rb +91 -0
- data/spec/ruby-lint/analyze/shadowing_variables.rb +69 -14
- data/spec/ruby-lint/analyze/undefined_methods.rb +174 -0
- data/spec/ruby-lint/analyze/undefined_variables.rb +70 -179
- data/spec/ruby-lint/analyze/unused_variables.rb +63 -183
- data/spec/ruby-lint/configuration.rb +15 -0
- data/spec/ruby-lint/constant_loader.rb +32 -0
- data/spec/ruby-lint/definition/dsl.rb +142 -0
- data/spec/ruby-lint/definition/method_calls.rb +26 -0
- data/spec/ruby-lint/definition/ruby_method.rb +175 -0
- data/spec/ruby-lint/definition/ruby_object.rb +228 -0
- data/spec/ruby-lint/definitions_builder/assignments/arrays.rb +71 -0
- data/spec/ruby-lint/definitions_builder/assignments/hashes.rb +65 -0
- data/spec/ruby-lint/definitions_builder/assignments/objects.rb +23 -0
- data/spec/ruby-lint/definitions_builder/assignments/optional.rb +22 -0
- data/spec/ruby-lint/definitions_builder/assignments/return_values.rb +78 -0
- data/spec/ruby-lint/definitions_builder/assignments/variables.rb +71 -0
- data/spec/ruby-lint/definitions_builder/associate_nodes.rb +17 -0
- data/spec/ruby-lint/definitions_builder/blocks.rb +40 -0
- data/spec/ruby-lint/definitions_builder/classes.rb +230 -0
- data/spec/ruby-lint/definitions_builder/for.rb +16 -0
- data/spec/ruby-lint/definitions_builder/methods.rb +147 -0
- data/spec/ruby-lint/definitions_builder/modules.rb +175 -0
- data/spec/ruby-lint/definitions_builder/reference_amount.rb +31 -0
- data/spec/ruby-lint/definitions_builder/unused.rb +15 -0
- data/spec/ruby-lint/extensions/string.rb +7 -0
- data/spec/ruby-lint/iterator.rb +42 -417
- data/spec/ruby-lint/node.rb +38 -0
- data/spec/ruby-lint/parser/assignments.rb +225 -0
- data/spec/ruby-lint/parser/classes.rb +80 -122
- data/spec/ruby-lint/parser/errors.rb +7 -14
- data/spec/ruby-lint/parser/metadata.rb +17 -0
- data/spec/ruby-lint/parser/method_definitions.rb +111 -0
- data/spec/ruby-lint/parser/methods.rb +184 -216
- data/spec/ruby-lint/parser/modules.rb +54 -33
- data/spec/ruby-lint/parser/operators.rb +30 -65
- data/spec/ruby-lint/parser/statements/begin.rb +55 -0
- data/spec/ruby-lint/parser/statements/case.rb +34 -0
- data/spec/ruby-lint/parser/statements/defined.rb +11 -0
- data/spec/ruby-lint/parser/statements/for.rb +34 -0
- data/spec/ruby-lint/parser/statements/if.rb +46 -0
- data/spec/ruby-lint/parser/statements/return.rb +14 -0
- data/spec/ruby-lint/parser/statements/super.rb +49 -0
- data/spec/ruby-lint/parser/statements/unless.rb +42 -0
- data/spec/ruby-lint/parser/statements/until.rb +25 -0
- data/spec/ruby-lint/parser/statements/while.rb +25 -0
- data/spec/ruby-lint/parser/statements/yield.rb +18 -0
- data/spec/ruby-lint/parser/types/arrays.rb +47 -0
- data/spec/ruby-lint/parser/types/booleans.rb +11 -0
- data/spec/ruby-lint/parser/types/constants.rb +32 -0
- data/spec/ruby-lint/parser/types/hashes.rb +55 -0
- data/spec/ruby-lint/parser/types/nil.rb +7 -0
- data/spec/ruby-lint/parser/types/numbers.rb +11 -0
- data/spec/ruby-lint/parser/types/procs.rb +11 -0
- data/spec/ruby-lint/parser/types/ranges.rb +11 -0
- data/spec/ruby-lint/parser/types/regexp.rb +27 -0
- data/spec/ruby-lint/parser/types/strings.rb +44 -0
- data/spec/ruby-lint/parser/types/symbols.rb +15 -0
- data/spec/ruby-lint/presenter/json.rb +31 -0
- data/spec/ruby-lint/presenter/text.rb +22 -0
- data/spec/ruby-lint/report.rb +45 -15
- data/spec/ruby-lint/report/entry.rb +24 -0
- data/spec/support/bacon.rb +33 -0
- data/spec/support/building.rb +43 -0
- data/spec/support/definitions.rb +23 -0
- data/spec/support/parsing.rb +23 -0
- data/spec/support/simplecov.rb +16 -0
- data/task/build.rake +9 -0
- data/task/checksum.rake +13 -0
- data/task/coverage.rake +6 -0
- data/task/doc.rake +5 -0
- data/task/generate.rake +34 -0
- data/task/graphviz.rake +12 -0
- data/task/stdlib.rake +2 -9
- data/task/tag.rake +6 -0
- metadata +337 -68
- metadata.gz.asc +17 -0
- data/.rbenv-version +0 -1
- data/lib/ruby-lint/analyze/coding_style.rb +0 -407
- data/lib/ruby-lint/analyze/definitions.rb +0 -244
- data/lib/ruby-lint/analyze/method_validation.rb +0 -104
- data/lib/ruby-lint/callback.rb +0 -67
- data/lib/ruby-lint/constant_importer.rb +0 -112
- data/lib/ruby-lint/definition.rb +0 -230
- data/lib/ruby-lint/formatter/text.rb +0 -54
- data/lib/ruby-lint/helper/definition_resolver.rb +0 -143
- data/lib/ruby-lint/helper/scoping.rb +0 -138
- data/lib/ruby-lint/options.rb +0 -58
- data/lib/ruby-lint/token/assignment_token.rb +0 -35
- data/lib/ruby-lint/token/begin_rescue_token.rb +0 -57
- data/lib/ruby-lint/token/block_token.rb +0 -26
- data/lib/ruby-lint/token/case_token.rb +0 -44
- data/lib/ruby-lint/token/class_token.rb +0 -24
- data/lib/ruby-lint/token/keyword_token.rb +0 -43
- data/lib/ruby-lint/token/method_definition_token.rb +0 -64
- data/lib/ruby-lint/token/method_token.rb +0 -56
- data/lib/ruby-lint/token/parameters_token.rb +0 -99
- data/lib/ruby-lint/token/regexp_token.rb +0 -15
- data/lib/ruby-lint/token/statement_token.rb +0 -69
- data/lib/ruby-lint/token/token.rb +0 -176
- data/lib/ruby-lint/token/variable_token.rb +0 -18
- data/spec/benchmarks/memory.rb +0 -52
- data/spec/benchmarks/parse_parser.rb +0 -16
- data/spec/fixtures/stdlib/un.rb +0 -348
- data/spec/ruby-lint/analyze/coding_style.rb +0 -224
- data/spec/ruby-lint/analyze/complex/un.rb +0 -29
- data/spec/ruby-lint/analyze/definitions/classes.rb +0 -114
- data/spec/ruby-lint/analyze/definitions/methods.rb +0 -91
- data/spec/ruby-lint/analyze/definitions/modules.rb +0 -207
- data/spec/ruby-lint/analyze/definitions/variables.rb +0 -103
- data/spec/ruby-lint/analyze/method_validation.rb +0 -177
- data/spec/ruby-lint/callback.rb +0 -28
- data/spec/ruby-lint/constant_importer.rb +0 -27
- data/spec/ruby-lint/definition.rb +0 -96
- data/spec/ruby-lint/formatter/text.rb +0 -21
- data/spec/ruby-lint/parser/arrays.rb +0 -147
- data/spec/ruby-lint/parser/expander_assignments.rb +0 -183
- data/spec/ruby-lint/parser/hashes.rb +0 -136
- data/spec/ruby-lint/parser/keywords.rb +0 -89
- data/spec/ruby-lint/parser/objects.rb +0 -39
- data/spec/ruby-lint/parser/procs.rb +0 -113
- data/spec/ruby-lint/parser/ranges.rb +0 -49
- data/spec/ruby-lint/parser/regexp.rb +0 -31
- data/spec/ruby-lint/parser/scalars.rb +0 -93
- data/spec/ruby-lint/parser/statements.rb +0 -591
- data/spec/ruby-lint/parser/variables.rb +0 -230
metadata.gz.asc
ADDED
|
@@ -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-----
|
data/.rbenv-version
DELETED
|
@@ -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
|