ruby-lint 0.0.4 → 0.0.5
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.
- checksums.yaml +7 -0
- checksums.yaml.gz.asc +17 -0
- data.tar.gz.asc +14 -14
- data/.ruby-version +1 -0
- data/.travis.yml +0 -1
- data/.yardopts +1 -0
- data/CONTRIBUTING.md +41 -0
- data/MANIFEST +99 -66
- data/README.md +36 -10
- data/Rakefile +6 -0
- data/checksum/ruby-lint-0.0.4.gem.sha512 +1 -0
- data/doc/changelog.md +94 -0
- data/lib/ruby-lint.rb +18 -1
- data/lib/ruby-lint/analysis/argument_amount.rb +43 -10
- data/lib/ruby-lint/analysis/base.rb +23 -17
- data/lib/ruby-lint/analysis/pedantics.rb +3 -1
- data/lib/ruby-lint/analysis/undefined_methods.rb +48 -10
- data/lib/ruby-lint/analysis/unused_variables.rb +27 -5
- data/lib/ruby-lint/ast/node.rb +10 -0
- data/lib/ruby-lint/cli/analyze.rb +22 -4
- data/lib/ruby-lint/cli/base.rb +8 -2
- data/lib/ruby-lint/configuration.rb +43 -4
- data/lib/ruby-lint/definition/constant_proxy.rb +10 -1
- data/lib/ruby-lint/definition/ruby_method.rb +45 -31
- data/lib/ruby-lint/definition/ruby_object.rb +56 -15
- data/lib/ruby-lint/definition_builder/base.rb +4 -0
- data/lib/ruby-lint/definition_builder/primitive.rb +1 -1
- data/lib/ruby-lint/definition_builder/ruby_array.rb +1 -1
- data/lib/ruby-lint/definition_builder/ruby_block.rb +1 -0
- data/lib/ruby-lint/definition_builder/ruby_class.rb +1 -1
- data/lib/ruby-lint/definition_builder/ruby_hash.rb +1 -1
- data/lib/ruby-lint/definition_builder/ruby_module.rb +3 -1
- data/lib/ruby-lint/definition_generator.rb +15 -7
- data/lib/ruby-lint/definitions/core/arg0.rb +1 -1
- data/lib/ruby-lint/definitions/core/argf.rb +1 -1
- data/lib/ruby-lint/definitions/core/argument_error.rb +2 -2
- data/lib/ruby-lint/definitions/core/argv.rb +1 -1
- data/lib/ruby-lint/definitions/core/array.rb +6 -6
- data/lib/ruby-lint/definitions/core/autoload.rb +2 -2
- data/lib/ruby-lint/definitions/core/basic_object.rb +8 -12
- data/lib/ruby-lint/definitions/core/bignum.rb +2 -2
- data/lib/ruby-lint/definitions/core/binding.rb +2 -2
- data/lib/ruby-lint/definitions/core/class.rb +2 -2
- data/lib/ruby-lint/definitions/core/comparable.rb +1 -1
- data/lib/ruby-lint/definitions/core/complex.rb +4 -4
- data/lib/ruby-lint/definitions/core/condition_variable.rb +2 -2
- data/lib/ruby-lint/definitions/core/continuation.rb +2 -2
- data/lib/ruby-lint/definitions/core/data.rb +2 -2
- data/lib/ruby-lint/definitions/core/date.rb +34 -34
- data/lib/ruby-lint/definitions/core/date_time.rb +26 -26
- data/lib/ruby-lint/definitions/core/default_record_separator.rb +1 -1
- data/lib/ruby-lint/definitions/core/digest.rb +14 -14
- data/lib/ruby-lint/definitions/core/dir.rb +34 -34
- data/lib/ruby-lint/definitions/core/encoding.rb +237 -237
- data/lib/ruby-lint/definitions/core/encoding_error.rb +2 -2
- data/lib/ruby-lint/definitions/core/enumerable.rb +15 -15
- data/lib/ruby-lint/definitions/core/enumerator.rb +2 -2
- data/lib/ruby-lint/definitions/core/env.rb +1 -1
- data/lib/ruby-lint/definitions/core/eoferror.rb +2 -2
- data/lib/ruby-lint/definitions/core/erb.rb +30 -23
- data/lib/ruby-lint/definitions/core/errno.rb +525 -525
- data/lib/ruby-lint/definitions/core/etc.rb +6 -6
- data/lib/ruby-lint/definitions/core/exception.rb +2 -2
- data/lib/ruby-lint/definitions/core/false.rb +1 -1
- data/lib/ruby-lint/definitions/core/false_class.rb +2 -2
- data/lib/ruby-lint/definitions/core/fatal_error.rb +2 -2
- data/lib/ruby-lint/definitions/core/fiber.rb +2 -2
- data/lib/ruby-lint/definitions/core/fiber_error.rb +2 -2
- data/lib/ruby-lint/definitions/core/file.rb +68 -68
- data/lib/ruby-lint/definitions/core/file_list.rb +2 -2
- data/lib/ruby-lint/definitions/core/file_test.rb +1 -1
- data/lib/ruby-lint/definitions/core/file_utils.rb +16 -16
- data/lib/ruby-lint/definitions/core/fixnum.rb +4 -4
- data/lib/ruby-lint/definitions/core/float.rb +16 -16
- data/lib/ruby-lint/definitions/core/float_domain_error.rb +2 -2
- data/lib/ruby-lint/definitions/core/gc.rb +2 -2
- data/lib/ruby-lint/definitions/core/gem.rb +119 -119
- data/lib/ruby-lint/definitions/core/hash.rb +14 -14
- data/lib/ruby-lint/definitions/core/immediate_value.rb +1 -1
- data/lib/ruby-lint/definitions/core/index_error.rb +2 -2
- data/lib/ruby-lint/definitions/core/integer.rb +2 -2
- data/lib/ruby-lint/definitions/core/interrupt.rb +2 -2
- data/lib/ruby-lint/definitions/core/io.rb +38 -38
- data/lib/ruby-lint/definitions/core/ioerror.rb +2 -2
- data/lib/ruby-lint/definitions/core/kernel.rb +113 -60
- data/lib/ruby-lint/definitions/core/key_error.rb +2 -2
- data/lib/ruby-lint/definitions/core/load_error.rb +6 -6
- data/lib/ruby-lint/definitions/core/local_jump_error.rb +2 -2
- data/lib/ruby-lint/definitions/core/marshal.rb +35 -35
- data/lib/ruby-lint/definitions/core/match_data.rb +2 -2
- data/lib/ruby-lint/definitions/core/math.rb +7 -7
- data/lib/ruby-lint/definitions/core/memory_segmention_error.rb +2 -2
- data/lib/ruby-lint/definitions/core/method.rb +2 -2
- data/lib/ruby-lint/definitions/core/module.rb +39 -3
- data/lib/ruby-lint/definitions/core/monitor.rb +4 -4
- data/lib/ruby-lint/definitions/core/monitor_mixin.rb +5 -5
- data/lib/ruby-lint/definitions/core/mutex.rb +2 -2
- data/lib/ruby-lint/definitions/core/name_error.rb +2 -2
- data/lib/ruby-lint/definitions/core/nil.rb +1 -1
- data/lib/ruby-lint/definitions/core/nil_class.rb +2 -2
- data/lib/ruby-lint/definitions/core/no_memory_error.rb +2 -2
- data/lib/ruby-lint/definitions/core/no_method_error.rb +2 -2
- data/lib/ruby-lint/definitions/core/not_implemented_error.rb +2 -2
- data/lib/ruby-lint/definitions/core/numeric.rb +2 -2
- data/lib/ruby-lint/definitions/core/object.rb +2 -2
- data/lib/ruby-lint/definitions/core/object_space.rb +1 -1
- data/lib/ruby-lint/definitions/core/open_struct.rb +3 -3
- data/lib/ruby-lint/definitions/core/option_parser.rb +83 -83
- data/lib/ruby-lint/definitions/core/precision.rb +1 -1
- data/lib/ruby-lint/definitions/core/primitive_failure.rb +2 -2
- data/lib/ruby-lint/definitions/core/proc.rb +2 -2
- data/lib/ruby-lint/definitions/core/process.rb +29 -29
- data/lib/ruby-lint/definitions/core/queue.rb +2 -2
- data/lib/ruby-lint/definitions/core/rake.rb +117 -117
- data/lib/ruby-lint/definitions/core/rake_file_utils.rb +1 -1
- data/lib/ruby-lint/definitions/core/rakeversion.rb +1 -1
- data/lib/ruby-lint/definitions/core/random.rb +2 -2
- data/lib/ruby-lint/definitions/core/range.rb +4 -4
- data/lib/ruby-lint/definitions/core/range_error.rb +2 -2
- data/lib/ruby-lint/definitions/core/rational.rb +2 -2
- data/lib/ruby-lint/definitions/core/rb_config.rb +3 -3
- data/lib/ruby-lint/definitions/core/regexp.rb +28 -28
- data/lib/ruby-lint/definitions/core/regexp_error.rb +2 -2
- data/lib/ruby-lint/definitions/core/ruby_copyright.rb +1 -1
- data/lib/ruby-lint/definitions/core/ruby_description.rb +1 -1
- data/lib/ruby-lint/definitions/core/ruby_engine.rb +1 -1
- data/lib/ruby-lint/definitions/core/ruby_patchlevel.rb +1 -1
- data/lib/ruby-lint/definitions/core/ruby_platform.rb +1 -1
- data/lib/ruby-lint/definitions/core/ruby_release_date.rb +1 -1
- data/lib/ruby-lint/definitions/core/ruby_version.rb +1 -1
- data/lib/ruby-lint/definitions/core/runtime_error.rb +2 -2
- data/lib/ruby-lint/definitions/core/scan_error.rb +2 -2
- data/lib/ruby-lint/definitions/core/script_error.rb +2 -2
- data/lib/ruby-lint/definitions/core/security_error.rb +2 -2
- data/lib/ruby-lint/definitions/core/shellwords.rb +1 -1
- data/lib/ruby-lint/definitions/core/signal.rb +3 -3
- data/lib/ruby-lint/definitions/core/signal_exception.rb +2 -2
- data/lib/ruby-lint/definitions/core/singleton.rb +2 -2
- data/lib/ruby-lint/definitions/core/sized_queue.rb +2 -2
- data/lib/ruby-lint/definitions/core/standard_error.rb +2 -2
- data/lib/ruby-lint/definitions/core/stderr.rb +3 -2
- data/lib/ruby-lint/definitions/core/stdin.rb +3 -2
- data/lib/ruby-lint/definitions/core/stdout.rb +3 -2
- data/lib/ruby-lint/definitions/core/stop_iteration.rb +2 -2
- data/lib/ruby-lint/definitions/core/string.rb +21 -21
- data/lib/ruby-lint/definitions/core/string_io.rb +7 -7
- data/lib/ruby-lint/definitions/core/string_scanner.rb +4 -4
- data/lib/ruby-lint/definitions/core/struct.rb +20 -20
- data/lib/ruby-lint/definitions/core/syck.rb +4 -4
- data/lib/ruby-lint/definitions/core/symbol.rb +2 -2
- data/lib/ruby-lint/definitions/core/syntax_error.rb +2 -2
- data/lib/ruby-lint/definitions/core/system_call_error.rb +2 -2
- data/lib/ruby-lint/definitions/core/system_exit.rb +2 -2
- data/lib/ruby-lint/definitions/core/system_stack_error.rb +2 -2
- data/lib/ruby-lint/definitions/core/thread.rb +6 -6
- data/lib/ruby-lint/definitions/core/thread_error.rb +2 -2
- data/lib/ruby-lint/definitions/core/thread_group.rb +2 -2
- data/lib/ruby-lint/definitions/core/time.rb +3 -3
- data/lib/ruby-lint/definitions/core/toplevel_binding.rb +1 -1
- data/lib/ruby-lint/definitions/core/true.rb +1 -1
- data/lib/ruby-lint/definitions/core/true_class.rb +2 -2
- data/lib/ruby-lint/definitions/core/type_error.rb +2 -2
- data/lib/ruby-lint/definitions/core/unbound_method.rb +2 -2
- data/lib/ruby-lint/definitions/core/unmarshalable.rb +1 -1
- data/lib/ruby-lint/definitions/core/unsupported_library_error.rb +2 -2
- data/lib/ruby-lint/definitions/core/weak_ref.rb +4 -4
- data/lib/ruby-lint/definitions/core/yaml.rb +2361 -0
- data/lib/ruby-lint/definitions/core/zero_division_error.rb +2 -2
- data/lib/ruby-lint/definitions/global_variables.rb +9 -0
- data/lib/ruby-lint/definitions/rails/abstract_controller.rb +174 -28
- data/lib/ruby-lint/definitions/rails/action_controller.rb +4959 -550
- data/lib/ruby-lint/definitions/rails/action_dispatch.rb +2489 -292
- data/lib/ruby-lint/definitions/rails/action_mailer.rb +1285 -42
- data/lib/ruby-lint/definitions/rails/action_pack.rb +14 -6
- data/lib/ruby-lint/definitions/rails/action_view.rb +6941 -445
- data/lib/ruby-lint/definitions/rails/active_model.rb +1212 -69
- data/lib/ruby-lint/definitions/rails/active_record.rb +10344 -1450
- data/lib/ruby-lint/definitions/rails/active_support.rb +4631 -573
- data/lib/ruby-lint/definitions/rails/arel.rb +3211 -319
- data/lib/ruby-lint/definitions/rails/rails.rb +2922 -84
- data/lib/ruby-lint/definitions/rails/sprockets.rb +3048 -277
- data/lib/ruby-lint/docstring/mapping.rb +55 -0
- data/lib/ruby-lint/docstring/param_tag.rb +29 -0
- data/lib/ruby-lint/docstring/parser.rb +133 -0
- data/lib/ruby-lint/docstring/return_tag.rb +24 -0
- data/lib/ruby-lint/file_loader.rb +96 -0
- data/lib/ruby-lint/file_scanner.rb +91 -0
- data/lib/ruby-lint/global_scope.rb +56 -0
- data/lib/ruby-lint/helper/constant_paths.rb +1 -1
- data/lib/ruby-lint/inspector.rb +11 -33
- data/lib/ruby-lint/iterator.rb +31 -4
- data/lib/ruby-lint/method_call/alias.rb +46 -0
- data/lib/ruby-lint/method_call/assign_member.rb +55 -0
- data/lib/ruby-lint/method_call/attribute.rb +102 -0
- data/lib/ruby-lint/method_call/base.rb +37 -0
- data/lib/ruby-lint/method_call/define_method.rb +17 -0
- data/lib/ruby-lint/method_call/include.rb +39 -0
- data/lib/ruby-lint/parser.rb +9 -4
- data/lib/ruby-lint/presenter/text.rb +2 -1
- data/lib/ruby-lint/report.rb +19 -42
- data/lib/ruby-lint/report/entry.rb +20 -17
- data/lib/ruby-lint/runner.rb +92 -11
- data/lib/ruby-lint/template/definition.erb +2 -2
- data/lib/ruby-lint/variable_predicates.rb +7 -10
- data/lib/ruby-lint/version.rb +1 -1
- data/lib/ruby-lint/virtual_machine.rb +265 -188
- data/ruby-lint.gemspec +4 -4
- data/ruby-lint.yml +7 -0
- data/spec/fixtures/associating.rb +7 -0
- data/spec/fixtures/file_scanner/lib/example/recursive/source.rb +6 -0
- data/spec/fixtures/file_scanner/lib/example/recursive/target.rb +8 -0
- data/spec/fixtures/file_scanner/lib/example/user.rb +6 -0
- data/spec/fixtures/file_scanner/lib/test-dashes/foo.rb +4 -0
- data/spec/fixtures/file_scanner/rails/app/models/example/user.rb +6 -0
- data/spec/fixtures/file_scanner/rails/app/models/user.rb +4 -0
- data/spec/fixtures/uses_external.rb +1 -0
- data/spec/fixtures/uses_external_invalid.rb +3 -0
- data/spec/fixtures/uses_external_namespace.rb +1 -0
- data/spec/ruby-lint/analysis/{argument_amount.rb → argument_amount_spec.rb} +33 -7
- data/spec/ruby-lint/analysis/base_spec.rb +12 -0
- data/spec/ruby-lint/analysis/{pedantics.rb → pedantics_spec.rb} +24 -4
- data/spec/ruby-lint/analysis/{shadowing_variables.rb → shadowing_variables_spec.rb} +6 -6
- data/spec/ruby-lint/analysis/undefined_methods_spec.rb +320 -0
- data/spec/ruby-lint/analysis/{undefined_variables.rb → undefined_variables_spec.rb} +33 -10
- data/spec/ruby-lint/analysis/{unused_variables.rb → unused_variables_spec.rb} +36 -9
- data/spec/ruby-lint/ast/{node.rb → node_spec.rb} +12 -6
- data/spec/ruby-lint/cli/{analyze.rb → analyze_spec.rb} +16 -5
- data/spec/ruby-lint/cli/{ast.rb → ast_spec.rb} +3 -3
- data/spec/ruby-lint/configuration_spec.rb +106 -0
- data/spec/ruby-lint/definition/constant_proxy_spec.rb +54 -0
- data/spec/ruby-lint/definition/{dsl.rb → dsl_spec.rb} +15 -15
- data/spec/ruby-lint/definition/{ruby_method.rb → ruby_method_spec.rb} +31 -17
- data/spec/ruby-lint/definition/{ruby_object.rb → ruby_object_spec.rb} +28 -23
- data/spec/ruby-lint/definition_builder/{primitive.rb → primitive_spec.rb} +9 -9
- data/spec/ruby-lint/definition_builder/{ruby_class.rb → ruby_class_spec.rb} +13 -13
- data/spec/ruby-lint/definition_builder/{ruby_method.rb → ruby_method_spec.rb} +9 -9
- data/spec/ruby-lint/definition_builder/{ruby_module.rb → ruby_module_spec.rb} +12 -10
- data/spec/ruby-lint/docstring/mapping.rb +27 -0
- data/spec/ruby-lint/docstring/parser_spec.rb +88 -0
- data/spec/ruby-lint/extensions/{string.rb → string_spec.rb} +3 -3
- data/spec/ruby-lint/file_loader_spec.rb +69 -0
- data/spec/ruby-lint/file_scanner_spec.rb +51 -0
- data/spec/ruby-lint/inspector_spec.rb +44 -0
- data/spec/ruby-lint/{iterator.rb → iterator_spec.rb} +39 -4
- data/spec/ruby-lint/{nested_stack.rb → nested_stack_spec.rb} +4 -4
- data/spec/ruby-lint/parser_spec.rb +31 -0
- data/spec/ruby-lint/presenter/json_spec.rb +58 -0
- data/spec/ruby-lint/presenter/text_spec.rb +49 -0
- data/spec/ruby-lint/report/entry_spec.rb +58 -0
- data/spec/ruby-lint/report_spec.rb +39 -0
- data/spec/ruby-lint/runner_spec.rb +52 -0
- data/spec/ruby-lint/virtual_machine/alias_spec.rb +55 -0
- data/spec/ruby-lint/virtual_machine/assignments/{arrays.rb → arrays_spec.rb} +7 -7
- data/spec/ruby-lint/virtual_machine/assignments/{hashes.rb → hashes_spec.rb} +6 -6
- data/spec/ruby-lint/virtual_machine/assignments/{optional.rb → optional_spec.rb} +6 -6
- data/spec/ruby-lint/virtual_machine/assignments/{return_values.rb → return_values_spec.rb} +11 -11
- data/spec/ruby-lint/virtual_machine/assignments/{variables.rb → variables_spec.rb} +38 -7
- data/spec/ruby-lint/virtual_machine/associate_nodes_spec.rb +59 -0
- data/spec/ruby-lint/virtual_machine/{autoloading.rb → autoloading_spec.rb} +6 -6
- data/spec/ruby-lint/virtual_machine/{blocks.rb → blocks_spec.rb} +30 -4
- data/spec/ruby-lint/virtual_machine/classes/{class_methods.rb → class_methods_spec.rb} +3 -3
- data/spec/ruby-lint/virtual_machine/classes/{extending.rb → extending_spec.rb} +20 -15
- data/spec/ruby-lint/virtual_machine/classes/{redefining.rb → redefining_spec.rb} +3 -3
- data/spec/ruby-lint/virtual_machine/classes/{sclass.rb → sclass_spec.rb} +7 -7
- data/spec/ruby-lint/virtual_machine/classes/{scoping.rb → scoping_spec.rb} +5 -5
- data/spec/ruby-lint/virtual_machine/complex/{rails.rb → rails_spec.rb} +3 -3
- data/spec/ruby-lint/virtual_machine/complex/{rcap.rb → rcap_spec.rb} +3 -3
- data/spec/ruby-lint/virtual_machine/complex/{slop.rb → slop_spec.rb} +3 -3
- data/spec/ruby-lint/virtual_machine/constants_spec.rb +31 -0
- data/spec/ruby-lint/virtual_machine/{for.rb → for_spec.rb} +3 -3
- data/spec/ruby-lint/virtual_machine/{freeze.rb → freeze_spec.rb} +3 -3
- data/spec/ruby-lint/virtual_machine/global_variables_spec.rb +12 -0
- data/spec/ruby-lint/virtual_machine/inherit_kernel_spec.rb +15 -0
- data/spec/ruby-lint/virtual_machine/{interpolation.rb → interpolation_spec.rb} +3 -3
- data/spec/ruby-lint/virtual_machine/methods/attr_spec.rb +116 -0
- data/spec/ruby-lint/virtual_machine/methods/define_method_spec.rb +41 -0
- data/spec/ruby-lint/virtual_machine/methods/{defining.rb → defining_spec.rb} +4 -4
- data/spec/ruby-lint/virtual_machine/methods/docstrings_spec.rb +69 -0
- data/spec/ruby-lint/virtual_machine/methods/{exporting.rb → exporting_spec.rb} +3 -3
- data/spec/ruby-lint/virtual_machine/methods/{parameters.rb → parameters_spec.rb} +17 -5
- data/spec/ruby-lint/virtual_machine/methods/{patching.rb → patching_spec.rb} +4 -4
- data/spec/ruby-lint/virtual_machine/methods/{scoping.rb → scoping_spec.rb} +5 -5
- data/spec/ruby-lint/virtual_machine/methods/{visibility.rb → visibility_spec.rb} +6 -6
- data/spec/ruby-lint/virtual_machine/{modules.rb → modules_spec.rb} +39 -9
- data/spec/ruby-lint/virtual_machine/reference_amount_spec.rb +61 -0
- data/spec/ruby-lint/virtual_machine/{unused.rb → unused_spec.rb} +4 -4
- data/spec/{helper.rb → spec_helper.rb} +6 -4
- data/spec/support/building.rb +10 -6
- data/spec/support/coveralls.rb +1 -1
- data/spec/support/parsing.rb +10 -1
- data/spec/support/simplecov.rb +1 -1
- data/spec/support/versions.rb +9 -0
- data/task/test.rake +2 -4
- data/task/travis.rake +1 -0
- metadata +144 -143
- metadata.gz.asc +14 -14
- data/.rubocop.yml +0 -59
- data/doc/contributing.md +0 -16
- data/lib/ruby-lint/analysis/confusing_variables.rb +0 -26
- data/lib/ruby-lint/definitions/core/main.rb +0 -25
- data/lib/ruby-lint/definitions/core/psych.rb +0 -2231
- data/lib/ruby-lint/definitions/core/rubinius.rb +0 -16637
- data/lib/ruby-lint/definitions/core/ruby_lint.rb +0 -93
- data/spec/ruby-lint/analysis/confusing_variables.rb +0 -46
- data/spec/ruby-lint/analysis/undefined_methods.rb +0 -174
- data/spec/ruby-lint/configuration.rb +0 -54
- data/spec/ruby-lint/definition/constant_proxy.rb +0 -31
- data/spec/ruby-lint/parser.rb +0 -14
- data/spec/ruby-lint/presenter/json.rb +0 -31
- data/spec/ruby-lint/presenter/text.rb +0 -22
- data/spec/ruby-lint/report.rb +0 -50
- data/spec/ruby-lint/report/entry.rb +0 -28
- data/spec/ruby-lint/runner.rb +0 -32
- data/spec/ruby-lint/virtual_machine/associate_nodes.rb +0 -17
- data/spec/ruby-lint/virtual_machine/reference_amount.rb +0 -33
- data/spec/support/bacon.rb +0 -33
- data/task/cop.rake +0 -11
|
@@ -17,7 +17,7 @@ module RubyLint
|
|
|
17
17
|
# @return [RubyLint::Definition::RubyObject|NilClass]
|
|
18
18
|
#
|
|
19
19
|
def resolve_constant_path(node)
|
|
20
|
-
current =
|
|
20
|
+
current = current_scope
|
|
21
21
|
|
|
22
22
|
constant_segments(node).each_with_index do |segment, index|
|
|
23
23
|
found = current.lookup(:const, segment, index == 0)
|
data/lib/ruby-lint/inspector.rb
CHANGED
|
@@ -28,7 +28,7 @@ module RubyLint
|
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
##
|
|
31
|
-
# Returns an Array containing all child constants and their
|
|
31
|
+
# Returns an Array containing all child constants and their children
|
|
32
32
|
# (recursively).
|
|
33
33
|
#
|
|
34
34
|
# The constants returned by this method are returned as String instances
|
|
@@ -92,7 +92,7 @@ module RubyLint
|
|
|
92
92
|
def inspect_methods
|
|
93
93
|
return [] unless constant.respond_to?(:methods)
|
|
94
94
|
|
|
95
|
-
methods =
|
|
95
|
+
methods = get_methods.map do |name|
|
|
96
96
|
method_information(:method, name)
|
|
97
97
|
end
|
|
98
98
|
|
|
@@ -107,7 +107,7 @@ module RubyLint
|
|
|
107
107
|
def inspect_instance_methods
|
|
108
108
|
return [] unless constant.respond_to?(:instance_methods)
|
|
109
109
|
|
|
110
|
-
methods =
|
|
110
|
+
methods = get_methods(:instance_methods).map do |name|
|
|
111
111
|
method_information(:instance_method, name)
|
|
112
112
|
end
|
|
113
113
|
|
|
@@ -123,41 +123,19 @@ module RubyLint
|
|
|
123
123
|
return constant.respond_to?(:superclass) ? constant.superclass : nil
|
|
124
124
|
end
|
|
125
125
|
|
|
126
|
-
|
|
127
|
-
# Formats the list of methods in a human readable format.
|
|
128
|
-
#
|
|
129
|
-
# @param [Array] methods
|
|
130
|
-
# @return [String]
|
|
131
|
-
#
|
|
132
|
-
def format_methods(methods)
|
|
133
|
-
output = []
|
|
134
|
-
longest = 0
|
|
135
|
-
|
|
136
|
-
methods.each do |method|
|
|
137
|
-
longest = method.name.length if method.name.length > longest
|
|
138
|
-
end
|
|
139
|
-
|
|
140
|
-
methods.each do |method|
|
|
141
|
-
output << "%-#{longest}s: %s" % [
|
|
142
|
-
method.name,
|
|
143
|
-
method.parameters.inspect
|
|
144
|
-
]
|
|
145
|
-
end
|
|
146
|
-
|
|
147
|
-
return output.join("\n")
|
|
148
|
-
end
|
|
126
|
+
private
|
|
149
127
|
|
|
150
128
|
##
|
|
151
|
-
#
|
|
129
|
+
# Gets the methods of the current constant minus those defined in Object.
|
|
152
130
|
#
|
|
153
|
-
# @param [
|
|
154
|
-
# @return [
|
|
131
|
+
# @param [Symbol] getter
|
|
132
|
+
# @return [Array]
|
|
155
133
|
#
|
|
156
|
-
def
|
|
157
|
-
|
|
158
|
-
end
|
|
134
|
+
def get_methods(getter = :methods)
|
|
135
|
+
diff = constant.send(getter) - Object.send(getter)
|
|
159
136
|
|
|
160
|
-
|
|
137
|
+
return diff | constant.send(getter, false)
|
|
138
|
+
end
|
|
161
139
|
|
|
162
140
|
##
|
|
163
141
|
# @param [Class] source
|
data/lib/ruby-lint/iterator.rb
CHANGED
|
@@ -35,6 +35,21 @@ module RubyLint
|
|
|
35
35
|
# integers it processes. After processing an integer it will display three
|
|
36
36
|
# dashes.
|
|
37
37
|
#
|
|
38
|
+
# ## Skipping Child Nodes
|
|
39
|
+
#
|
|
40
|
+
# The `on_*` callbacks can tell the Iterator class to not process any
|
|
41
|
+
# following child nodes by calling `skip_child_nodes!`:
|
|
42
|
+
#
|
|
43
|
+
# def on_const(node)
|
|
44
|
+
# # ...
|
|
45
|
+
#
|
|
46
|
+
# skip_child_nodes!(node)
|
|
47
|
+
# end
|
|
48
|
+
#
|
|
49
|
+
# Internally this uses `throw` and makes sure to only skip the child nodes of
|
|
50
|
+
# the specified node (`throw` calls bubble up regardless of `catch` calls,
|
|
51
|
+
# unlike when using `begin/rescue`).
|
|
52
|
+
#
|
|
38
53
|
class Iterator
|
|
39
54
|
##
|
|
40
55
|
# @param [Hash] options Hash containing custom options to set for the
|
|
@@ -58,11 +73,14 @@ module RubyLint
|
|
|
58
73
|
return unless node.is_a?(AST::Node)
|
|
59
74
|
|
|
60
75
|
before, after = callback_names(node)
|
|
76
|
+
skip_node = catch :skip_child_nodes do
|
|
77
|
+
execute_callback(before, node)
|
|
78
|
+
end
|
|
61
79
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
80
|
+
if skip_node != node
|
|
81
|
+
node.children.each do |child|
|
|
82
|
+
iterate(child) if child.is_a?(AST::Node)
|
|
83
|
+
end
|
|
66
84
|
end
|
|
67
85
|
|
|
68
86
|
execute_callback(after, node)
|
|
@@ -70,6 +88,15 @@ module RubyLint
|
|
|
70
88
|
|
|
71
89
|
protected
|
|
72
90
|
|
|
91
|
+
##
|
|
92
|
+
# Instructs {#iterate} to not process any child nodes.
|
|
93
|
+
#
|
|
94
|
+
# @param [RubyLint::AST::Node] node
|
|
95
|
+
#
|
|
96
|
+
def skip_child_nodes!(node)
|
|
97
|
+
throw :skip_child_nodes, node
|
|
98
|
+
end
|
|
99
|
+
|
|
73
100
|
##
|
|
74
101
|
# Executes the specified callback method if it exists.
|
|
75
102
|
#
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
module RubyLint
|
|
2
|
+
module MethodCall
|
|
3
|
+
##
|
|
4
|
+
# The Alias class is used to evaluate the use of `alias` and
|
|
5
|
+
# `alias_method`.
|
|
6
|
+
#
|
|
7
|
+
class Alias < Base
|
|
8
|
+
##
|
|
9
|
+
# @see Base#evaluate
|
|
10
|
+
#
|
|
11
|
+
def evaluate(arguments, context, block = nil)
|
|
12
|
+
if node.type == :alias and node.children[0].gvar?
|
|
13
|
+
alias_gvar(arguments, context)
|
|
14
|
+
else
|
|
15
|
+
alias_sym(arguments, context)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
private
|
|
20
|
+
|
|
21
|
+
##
|
|
22
|
+
# @see Base#evaluate
|
|
23
|
+
#
|
|
24
|
+
def alias_sym(arguments, context)
|
|
25
|
+
method_type = context.method_call_type
|
|
26
|
+
alias_name = arguments[0].value.to_s
|
|
27
|
+
source_name = arguments[1].value.to_s
|
|
28
|
+
source = context.lookup(method_type, source_name)
|
|
29
|
+
|
|
30
|
+
context.add(method_type, alias_name, source) if source
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
##
|
|
34
|
+
# @see Base#evaluate
|
|
35
|
+
#
|
|
36
|
+
def alias_gvar(arguments, context)
|
|
37
|
+
alias_name = node.children[0].name
|
|
38
|
+
source_name = node.children[1].name
|
|
39
|
+
source = context.lookup(:gvar, source_name)
|
|
40
|
+
|
|
41
|
+
# Global variables should be added to the root scope.
|
|
42
|
+
vm.definitions.add(:gvar, alias_name, source) if source
|
|
43
|
+
end
|
|
44
|
+
end # Alias
|
|
45
|
+
end # MethodCall
|
|
46
|
+
end # RubyLint
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
module RubyLint
|
|
2
|
+
module MethodCall
|
|
3
|
+
##
|
|
4
|
+
# The AssignMember class is used for evaluating object member assignments.
|
|
5
|
+
# This includes the following types of assignments:
|
|
6
|
+
#
|
|
7
|
+
# * Array index assignments
|
|
8
|
+
# * Hash key assignments
|
|
9
|
+
#
|
|
10
|
+
class AssignMember < Base
|
|
11
|
+
##
|
|
12
|
+
# @see Base#evaluate
|
|
13
|
+
#
|
|
14
|
+
def evaluate(arguments, context, block = nil)
|
|
15
|
+
*members, values = arguments
|
|
16
|
+
member_values = prepare_values(values)
|
|
17
|
+
|
|
18
|
+
members.each do |member|
|
|
19
|
+
member = create_member(member.value.to_s, member_values.shift)
|
|
20
|
+
|
|
21
|
+
context.add_definition(member)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
private
|
|
26
|
+
|
|
27
|
+
##
|
|
28
|
+
# @param [String] name
|
|
29
|
+
# @param [Mixed] value
|
|
30
|
+
# @return [RubyLint::Definition::RubyObject]
|
|
31
|
+
#
|
|
32
|
+
def create_member(name, value)
|
|
33
|
+
return Definition::RubyObject.new(
|
|
34
|
+
:name => name,
|
|
35
|
+
:type => :member,
|
|
36
|
+
:value => value
|
|
37
|
+
)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
##
|
|
41
|
+
# @param [Array] values
|
|
42
|
+
# @return [Array]
|
|
43
|
+
#
|
|
44
|
+
def prepare_values(values)
|
|
45
|
+
if values and values.array?
|
|
46
|
+
member_values = values.list(:member).map(&:value)
|
|
47
|
+
elsif values
|
|
48
|
+
member_values = [values]
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
return member_values
|
|
52
|
+
end
|
|
53
|
+
end # AssignMember
|
|
54
|
+
end # MethodCall
|
|
55
|
+
end # RubyLint
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
module RubyLint
|
|
2
|
+
module MethodCall
|
|
3
|
+
##
|
|
4
|
+
# The Attribute class is used for evaluating method calls to `attr`,
|
|
5
|
+
# `attr_reader` and similar methods.
|
|
6
|
+
#
|
|
7
|
+
class Attribute < Base
|
|
8
|
+
##
|
|
9
|
+
# @see Base#evaluate
|
|
10
|
+
#
|
|
11
|
+
def evaluate(arguments, context, block = nil)
|
|
12
|
+
method = "evaluate_#{node.children[1]}"
|
|
13
|
+
|
|
14
|
+
send(method, arguments, context)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
private
|
|
18
|
+
|
|
19
|
+
##
|
|
20
|
+
# Evaluates a call to `attr`. The `attr` method can be used in two
|
|
21
|
+
# different ways (thank you Ruby for being consistent):
|
|
22
|
+
#
|
|
23
|
+
# 1. `attr [NAME], [TRUE|FALSE]`
|
|
24
|
+
# 2. `attr [NAME], [NAME], etc
|
|
25
|
+
#
|
|
26
|
+
# @see #evaluate
|
|
27
|
+
#
|
|
28
|
+
def evaluate_attr(arguments, context)
|
|
29
|
+
if arguments[1] and arguments[1].type == :true
|
|
30
|
+
names = [arguments[0].value.to_s, arguments[0].value.to_s + '=']
|
|
31
|
+
else
|
|
32
|
+
names = arguments.map { |arg| arg.value.to_s }
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
names.each do |name|
|
|
36
|
+
define_attribute(name, context)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
##
|
|
41
|
+
# Evaluates method calls to `attr_reader`.
|
|
42
|
+
#
|
|
43
|
+
# @see #evaluate
|
|
44
|
+
#
|
|
45
|
+
def evaluate_attr_reader(arguments, context)
|
|
46
|
+
arguments.each do |arg|
|
|
47
|
+
define_attribute(arg.value.to_s, context)
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
##
|
|
52
|
+
# Evaluates method calls to `attr_writer`.
|
|
53
|
+
#
|
|
54
|
+
# @see #evaluate
|
|
55
|
+
#
|
|
56
|
+
def evaluate_attr_writer(arguments, context)
|
|
57
|
+
arguments.each do |arg|
|
|
58
|
+
define_attribute(arg.value.to_s, context, true)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
##
|
|
63
|
+
# Evaluates method calls to `attr_accessor`.
|
|
64
|
+
#
|
|
65
|
+
# @see #evaluate
|
|
66
|
+
#
|
|
67
|
+
def evaluate_attr_accessor(arguments, context)
|
|
68
|
+
arguments.each do |arg|
|
|
69
|
+
name = arg.value.to_s
|
|
70
|
+
|
|
71
|
+
define_attribute(name, context)
|
|
72
|
+
define_attribute(name, context, true)
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
##
|
|
77
|
+
# @param [String] name
|
|
78
|
+
# @param [RubyLint::Definition::RubyObject] context
|
|
79
|
+
# @param [TrueClass|FalseClass] setter
|
|
80
|
+
#
|
|
81
|
+
def define_attribute(name, context, setter = false)
|
|
82
|
+
ivar_name = '@' + name
|
|
83
|
+
|
|
84
|
+
if setter
|
|
85
|
+
name = name + '='
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
context.define_instance_method(name)
|
|
89
|
+
|
|
90
|
+
unless context.has_definition?(:ivar, ivar_name)
|
|
91
|
+
ivar = Definition::RubyObject.new(
|
|
92
|
+
:type => :ivar,
|
|
93
|
+
:name => ivar_name,
|
|
94
|
+
:reference_amount => 1
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
context.add_definition(ivar)
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end # Attribute
|
|
101
|
+
end # MethodCall
|
|
102
|
+
end # RubyLint
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
module RubyLint
|
|
2
|
+
module MethodCall
|
|
3
|
+
##
|
|
4
|
+
# Base class for the various method call handlers, takes care of some of
|
|
5
|
+
# the common boilerplate code.
|
|
6
|
+
#
|
|
7
|
+
# @!attribute [r] node
|
|
8
|
+
# @return [RubyLint::AST::Node]
|
|
9
|
+
#
|
|
10
|
+
# @!attribute [r] vm
|
|
11
|
+
# @return [RubyLint::VirtualMachine]
|
|
12
|
+
#
|
|
13
|
+
class Base
|
|
14
|
+
attr_reader :node, :vm
|
|
15
|
+
|
|
16
|
+
##
|
|
17
|
+
# @param [RubyLint::AST::Node] node
|
|
18
|
+
# @param [RubyLint::VirtualMachine] vm
|
|
19
|
+
#
|
|
20
|
+
def initialize(node, vm)
|
|
21
|
+
@node = node
|
|
22
|
+
@vm = vm
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
##
|
|
26
|
+
# @param [Array] arguments
|
|
27
|
+
# @param [RubyLint::Definition::RubyObject] context
|
|
28
|
+
# @param [RubyLint::Definition::RubyObject] block
|
|
29
|
+
#
|
|
30
|
+
#:nocov:
|
|
31
|
+
def evaluate(arguments, context, block = nil)
|
|
32
|
+
raise NotImplementedError, '#evaluate must be implemented'
|
|
33
|
+
end
|
|
34
|
+
#:nocov:
|
|
35
|
+
end # Base
|
|
36
|
+
end # MethodCall
|
|
37
|
+
end # RubyLint
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module RubyLint
|
|
2
|
+
module MethodCall
|
|
3
|
+
##
|
|
4
|
+
# The DefineMethod class is used to process `define_method` calls.
|
|
5
|
+
# Currently this class is only used to set the instance type of the block
|
|
6
|
+
# to the correct value.
|
|
7
|
+
#
|
|
8
|
+
class DefineMethod < Base
|
|
9
|
+
##
|
|
10
|
+
# @see Base#evaluate
|
|
11
|
+
#
|
|
12
|
+
def evaluate(arguments, context, block = nil)
|
|
13
|
+
block.instance! if block && block.block?
|
|
14
|
+
end
|
|
15
|
+
end # DefineMethod
|
|
16
|
+
end # MethodCall
|
|
17
|
+
end # RubyLint
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
module RubyLint
|
|
2
|
+
module MethodCall
|
|
3
|
+
##
|
|
4
|
+
# The Include class is used for evaluating the use of `include` and
|
|
5
|
+
# `extend` method calls.
|
|
6
|
+
#
|
|
7
|
+
class Include < Base
|
|
8
|
+
##
|
|
9
|
+
# Hash containing the source and target definition types for both
|
|
10
|
+
# `include` and `extend` method calls.
|
|
11
|
+
#
|
|
12
|
+
COPY_TYPES = {
|
|
13
|
+
:include => {
|
|
14
|
+
:const => :const,
|
|
15
|
+
:instance_method => :instance_method
|
|
16
|
+
},
|
|
17
|
+
:extend => {
|
|
18
|
+
:const => :const,
|
|
19
|
+
:instance_method => :method
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
##
|
|
24
|
+
# @see Base#evaluate
|
|
25
|
+
#
|
|
26
|
+
def evaluate(arguments, context, block = nil)
|
|
27
|
+
node_name = node.children[1]
|
|
28
|
+
|
|
29
|
+
arguments.each do |source|
|
|
30
|
+
COPY_TYPES[node_name].each do |from, to|
|
|
31
|
+
source.list(from).each do |definition|
|
|
32
|
+
context.add(to, definition.name, definition)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end # Include
|
|
38
|
+
end # MethodCall
|
|
39
|
+
end # RubyLint
|