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
data/lib/ruby-lint/ast/node.rb
CHANGED
|
@@ -34,6 +34,16 @@ module RubyLint
|
|
|
34
34
|
def name
|
|
35
35
|
return const? ? children[-1].to_s : children[0].to_s
|
|
36
36
|
end
|
|
37
|
+
|
|
38
|
+
##
|
|
39
|
+
# Similar to `#inspect` but formats the value so that it fits on a single
|
|
40
|
+
# line.
|
|
41
|
+
#
|
|
42
|
+
# @return [String]
|
|
43
|
+
#
|
|
44
|
+
def inspect_oneline
|
|
45
|
+
return inspect.gsub(/\s*\n\s*/, ' ')
|
|
46
|
+
end
|
|
37
47
|
end # Node
|
|
38
48
|
end # AST
|
|
39
49
|
end # RubyLint
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
RubyLint::CLI.options.command :analyze do
|
|
2
2
|
banner 'Usage: ruby-lint analyze [FILES] [OPTIONS]'
|
|
3
|
-
description '
|
|
3
|
+
description 'Analyze the source code of Ruby files'
|
|
4
4
|
|
|
5
5
|
separator <<-EOF.chomp
|
|
6
6
|
|
|
@@ -15,8 +15,8 @@ Configuration:
|
|
|
15
15
|
When this command is executed it will try to load a configuration file in
|
|
16
16
|
one of the following two locations (in this order):
|
|
17
17
|
|
|
18
|
-
* $PWD/ruby-lint.
|
|
19
|
-
* ~/.ruby-lint.
|
|
18
|
+
* $PWD/ruby-lint.yml
|
|
19
|
+
* ~/.ruby-lint.yml
|
|
20
20
|
|
|
21
21
|
Only the first existing configuration file is loaded.
|
|
22
22
|
|
|
@@ -58,6 +58,8 @@ Examples:
|
|
|
58
58
|
on :l=, :levels=, 'The reporting levels to enable', :as => Array
|
|
59
59
|
on :p=, :presenter=, 'The presenter to use', :as => String
|
|
60
60
|
on :a=, :analysis=, 'The analysis classes to use', :as => Array
|
|
61
|
+
on :b, :benchmark, 'Enables benchmarking mode'
|
|
62
|
+
on :d, :debug, 'Displays debugging output in STDERR'
|
|
61
63
|
|
|
62
64
|
##
|
|
63
65
|
# Returns an Array containing the file paths that exist. If a non existing
|
|
@@ -89,7 +91,8 @@ Examples:
|
|
|
89
91
|
return {
|
|
90
92
|
:levels => :report_levels=,
|
|
91
93
|
:presenter => :presenter=,
|
|
92
|
-
:analysis => :analysis_classes
|
|
94
|
+
:analysis => :analysis_classes=,
|
|
95
|
+
:debug => :debug=
|
|
93
96
|
}
|
|
94
97
|
end
|
|
95
98
|
|
|
@@ -110,6 +113,7 @@ Examples:
|
|
|
110
113
|
run do |opts, args|
|
|
111
114
|
abort 'You must specify at least one file to analyze' if args.empty?
|
|
112
115
|
|
|
116
|
+
start_time = Time.now.to_f
|
|
113
117
|
files = extract_files(args)
|
|
114
118
|
configuration = RubyLint::Configuration.load_from_file
|
|
115
119
|
|
|
@@ -121,5 +125,19 @@ Examples:
|
|
|
121
125
|
output = runner.analyze(files)
|
|
122
126
|
|
|
123
127
|
output_destination.puts output unless output.empty?
|
|
128
|
+
|
|
129
|
+
exec_time = Time.now.to_f - start_time
|
|
130
|
+
|
|
131
|
+
if opts[:benchmark]
|
|
132
|
+
memory_kb = `ps -o rss= #{Process.pid}`.strip.to_f
|
|
133
|
+
memory_mb = memory_kb / 1024
|
|
134
|
+
|
|
135
|
+
output_destination.puts unless output.empty?
|
|
136
|
+
|
|
137
|
+
output_destination.puts "Execution time: #{exec_time.round(2)} seconds"
|
|
138
|
+
|
|
139
|
+
output_destination.puts "Memory usage: #{memory_mb.round(2)} MB " \
|
|
140
|
+
"(#{memory_kb.round(2)} KB)"
|
|
141
|
+
end
|
|
124
142
|
end # run do |opts, args|
|
|
125
143
|
end # RubyLint::CLI.options.command
|
data/lib/ruby-lint/cli/base.rb
CHANGED
|
@@ -18,6 +18,8 @@ module RubyLint
|
|
|
18
18
|
#
|
|
19
19
|
OPTIONS_HEADER = "\nOptions:\n"
|
|
20
20
|
|
|
21
|
+
#:nocov:
|
|
22
|
+
|
|
21
23
|
##
|
|
22
24
|
# Returns a String containing a list of names as registered in
|
|
23
25
|
# {RubyLint::Configuration.names}.
|
|
@@ -33,8 +35,10 @@ module RubyLint
|
|
|
33
35
|
##
|
|
34
36
|
# Starts the CLI.
|
|
35
37
|
#
|
|
36
|
-
|
|
37
|
-
|
|
38
|
+
# @param [Array] argv
|
|
39
|
+
#
|
|
40
|
+
def self.run(argv = ARGV)
|
|
41
|
+
options.parse(argv)
|
|
38
42
|
end
|
|
39
43
|
|
|
40
44
|
##
|
|
@@ -93,5 +97,7 @@ module RubyLint
|
|
|
93
97
|
def self.version_information
|
|
94
98
|
return "ruby-lint v#{VERSION} on #{RUBY_DESCRIPTION}"
|
|
95
99
|
end
|
|
100
|
+
|
|
101
|
+
#:nocov:
|
|
96
102
|
end # CLI
|
|
97
103
|
end # RubyLint
|
|
@@ -6,13 +6,25 @@ module RubyLint
|
|
|
6
6
|
#
|
|
7
7
|
# @!attribute [r] analysis_classes
|
|
8
8
|
# @return [Array]
|
|
9
|
+
#
|
|
9
10
|
# @!attribute [r] report_levels
|
|
10
11
|
# @return [Array]
|
|
12
|
+
#
|
|
11
13
|
# @!attribute [r] presenter
|
|
12
14
|
# @return [Class]
|
|
13
15
|
#
|
|
16
|
+
# @!attribute [r] directories
|
|
17
|
+
# @return [Array]
|
|
18
|
+
#
|
|
19
|
+
# @!attribute [rw] debug
|
|
20
|
+
# @return [TrueClass|FalseClass]
|
|
21
|
+
#
|
|
22
|
+
# @!attribute [rw] ignore_paths
|
|
23
|
+
# @return [Array]
|
|
24
|
+
#
|
|
14
25
|
class Configuration
|
|
15
|
-
attr_reader :analysis_classes, :report_levels, :presenter
|
|
26
|
+
attr_reader :analysis_classes, :report_levels, :presenter, :directories
|
|
27
|
+
attr_accessor :debug, :ignore_paths
|
|
16
28
|
|
|
17
29
|
##
|
|
18
30
|
# Returns an Array of locations from which to load configuration files.
|
|
@@ -74,6 +86,8 @@ module RubyLint
|
|
|
74
86
|
# @param [Hash] options
|
|
75
87
|
#
|
|
76
88
|
def initialize(options = {})
|
|
89
|
+
@debug = false
|
|
90
|
+
|
|
77
91
|
options.each do |key, value|
|
|
78
92
|
setter = "#{key}="
|
|
79
93
|
|
|
@@ -85,6 +99,8 @@ module RubyLint
|
|
|
85
99
|
@analysis_classes ||= default_analysis_classes
|
|
86
100
|
@report_levels ||= default_report_levels
|
|
87
101
|
@presenter ||= default_presenter
|
|
102
|
+
@directories ||= default_directories
|
|
103
|
+
@ignore_paths ||= []
|
|
88
104
|
end
|
|
89
105
|
|
|
90
106
|
##
|
|
@@ -97,7 +113,7 @@ module RubyLint
|
|
|
97
113
|
end
|
|
98
114
|
|
|
99
115
|
##
|
|
100
|
-
#
|
|
116
|
+
# Sets a list of the enabled report levels.
|
|
101
117
|
#
|
|
102
118
|
# @param [Array] given The report levels specified by the user.
|
|
103
119
|
# @return [Array]
|
|
@@ -118,7 +134,7 @@ module RubyLint
|
|
|
118
134
|
end
|
|
119
135
|
|
|
120
136
|
##
|
|
121
|
-
#
|
|
137
|
+
# Sets the presenter to use.
|
|
122
138
|
#
|
|
123
139
|
# @param [String] name The friendly name of the presenter as set by the
|
|
124
140
|
# user.
|
|
@@ -136,7 +152,7 @@ module RubyLint
|
|
|
136
152
|
end
|
|
137
153
|
|
|
138
154
|
##
|
|
139
|
-
#
|
|
155
|
+
# Sets a collection of the analysis constants to use.
|
|
140
156
|
#
|
|
141
157
|
# @param [Array] names The analysis names as given by the user.
|
|
142
158
|
# @return [Array]
|
|
@@ -156,6 +172,22 @@ module RubyLint
|
|
|
156
172
|
@analysis_classes = classes
|
|
157
173
|
end
|
|
158
174
|
|
|
175
|
+
##
|
|
176
|
+
# Sets the directories to scan for external Ruby files using
|
|
177
|
+
# {RubyLint::FileLoader}.
|
|
178
|
+
#
|
|
179
|
+
# @param [Array] directories
|
|
180
|
+
#
|
|
181
|
+
def directories=(directories)
|
|
182
|
+
directories.each do |dir|
|
|
183
|
+
unless File.directory?(dir)
|
|
184
|
+
raise ArgumentError, "The directory #{dir} does not exist"
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
@directories = directories
|
|
189
|
+
end
|
|
190
|
+
|
|
159
191
|
##
|
|
160
192
|
# Returns the default (= all) analysis classes to use.
|
|
161
193
|
#
|
|
@@ -178,5 +210,12 @@ module RubyLint
|
|
|
178
210
|
def default_presenter
|
|
179
211
|
return RubyLint::Presenter::Text
|
|
180
212
|
end
|
|
213
|
+
|
|
214
|
+
##
|
|
215
|
+
# @return [Array]
|
|
216
|
+
#
|
|
217
|
+
def default_directories
|
|
218
|
+
return [Dir.pwd]
|
|
219
|
+
end
|
|
181
220
|
end # Configuration
|
|
182
221
|
end # RubyLint
|
|
@@ -13,7 +13,7 @@ module RubyLint
|
|
|
13
13
|
# @!attribute [r] proxy_name
|
|
14
14
|
# @return [String]
|
|
15
15
|
#
|
|
16
|
-
# @!
|
|
16
|
+
# @!attribute [r] proxy_definition
|
|
17
17
|
# @return [RubyLint::Definition::RubyObject]
|
|
18
18
|
#
|
|
19
19
|
class ConstantProxy
|
|
@@ -41,6 +41,15 @@ module RubyLint
|
|
|
41
41
|
end
|
|
42
42
|
end
|
|
43
43
|
|
|
44
|
+
##
|
|
45
|
+
# @return [String]
|
|
46
|
+
#
|
|
47
|
+
def inspect
|
|
48
|
+
lookup_proxy_definition
|
|
49
|
+
|
|
50
|
+
return proxy_definition ? proxy_definition.inspect : super
|
|
51
|
+
end
|
|
52
|
+
|
|
44
53
|
private
|
|
45
54
|
|
|
46
55
|
##
|
|
@@ -9,40 +9,45 @@ module RubyLint
|
|
|
9
9
|
# @!attribute [r] visibility
|
|
10
10
|
# @return [Symbol] The method visibility such as `:public`.
|
|
11
11
|
#
|
|
12
|
-
# @!attribute [r] arguments
|
|
13
|
-
# @return [Array] The required/specified arguments of a method definition
|
|
14
|
-
# or method call.
|
|
15
|
-
#
|
|
16
|
-
# @!attribute [r] optional_arguments
|
|
17
|
-
# @return [Array] Array containing the optional arguments of a method
|
|
18
|
-
# definition.
|
|
19
|
-
#
|
|
20
|
-
# @!attribute [r] rest_argument
|
|
21
|
-
# @return [RubyLint::Definition::RubyObject] The rest argument of a
|
|
22
|
-
# method definition.
|
|
23
|
-
#
|
|
24
|
-
# @!attribute [r] block_argument
|
|
25
|
-
# @return [RubyLint::Definition::RubyObject] The block argument of a
|
|
26
|
-
# method definition.
|
|
27
|
-
#
|
|
28
12
|
# @!attribute [r] return_value
|
|
29
13
|
# @return [Mixed] The value that is returned by the method.
|
|
30
14
|
#
|
|
31
15
|
class RubyMethod < RubyObject
|
|
32
|
-
attr_reader :
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
16
|
+
attr_reader :return_value, :visibility
|
|
17
|
+
|
|
18
|
+
##
|
|
19
|
+
# @return [Array]
|
|
20
|
+
#
|
|
21
|
+
def arguments
|
|
22
|
+
return list(:arg)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
##
|
|
26
|
+
# @return [RubyLint::Definition::RubyObject]
|
|
27
|
+
#
|
|
28
|
+
def block_argument
|
|
29
|
+
return list(:blockarg).first
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
##
|
|
33
|
+
# @return [Array]
|
|
34
|
+
#
|
|
35
|
+
def keyword_arguments
|
|
36
|
+
return list(:kwoptarg)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
##
|
|
40
|
+
# @return [Array]
|
|
41
|
+
#
|
|
42
|
+
def optional_arguments
|
|
43
|
+
return list(:optarg)
|
|
44
|
+
end
|
|
38
45
|
|
|
39
46
|
##
|
|
40
|
-
#
|
|
41
|
-
# called before calling any supplied blocks.
|
|
47
|
+
# @return [RubyLint::Definition::RubyObject]
|
|
42
48
|
#
|
|
43
|
-
def
|
|
44
|
-
|
|
45
|
-
@optional_arguments ||= []
|
|
49
|
+
def rest_argument
|
|
50
|
+
return list(:restarg).first
|
|
46
51
|
end
|
|
47
52
|
|
|
48
53
|
##
|
|
@@ -70,7 +75,16 @@ module RubyLint
|
|
|
70
75
|
# @param [String] name The name of the argument.
|
|
71
76
|
#
|
|
72
77
|
def define_argument(name)
|
|
73
|
-
|
|
78
|
+
create_argument(:arg, name)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
##
|
|
82
|
+
# Defines a keyword argument for the method.
|
|
83
|
+
#
|
|
84
|
+
# @see RubyLint::Definition::RubyObject#define_argument
|
|
85
|
+
#
|
|
86
|
+
def define_keyword_argument(name)
|
|
87
|
+
create_argument(:kwoptarg, name)
|
|
74
88
|
end
|
|
75
89
|
|
|
76
90
|
##
|
|
@@ -79,7 +93,7 @@ module RubyLint
|
|
|
79
93
|
# @see RubyLint::Definition::RubyObject#define_argument
|
|
80
94
|
#
|
|
81
95
|
def define_optional_argument(name)
|
|
82
|
-
|
|
96
|
+
create_argument(:optarg, name)
|
|
83
97
|
end
|
|
84
98
|
|
|
85
99
|
##
|
|
@@ -88,7 +102,7 @@ module RubyLint
|
|
|
88
102
|
# @see RubyLint::Definition::RubyObject#define_argument
|
|
89
103
|
#
|
|
90
104
|
def define_rest_argument(name)
|
|
91
|
-
|
|
105
|
+
create_argument(:restarg, name)
|
|
92
106
|
end
|
|
93
107
|
|
|
94
108
|
##
|
|
@@ -97,7 +111,7 @@ module RubyLint
|
|
|
97
111
|
# @see RubyLint::Definition::RubyObject#define_argument
|
|
98
112
|
#
|
|
99
113
|
def define_block_argument(name)
|
|
100
|
-
|
|
114
|
+
create_argument(:blockarg, name)
|
|
101
115
|
end
|
|
102
116
|
|
|
103
117
|
private
|
|
@@ -91,19 +91,21 @@ module RubyLint
|
|
|
91
91
|
# @return [Array<Symbol>]
|
|
92
92
|
#
|
|
93
93
|
VALID_TYPES = [
|
|
94
|
-
:
|
|
95
|
-
:
|
|
94
|
+
:arg,
|
|
95
|
+
:blockarg,
|
|
96
|
+
:const,
|
|
96
97
|
:cvar,
|
|
97
98
|
:gvar,
|
|
98
|
-
:const,
|
|
99
|
-
:method,
|
|
100
99
|
:instance_method,
|
|
101
|
-
:
|
|
100
|
+
:ivar,
|
|
102
101
|
:keyword,
|
|
103
|
-
:
|
|
102
|
+
:kwoptarg,
|
|
103
|
+
:lvar,
|
|
104
|
+
:member,
|
|
105
|
+
:method,
|
|
104
106
|
:optarg,
|
|
105
107
|
:restarg,
|
|
106
|
-
:
|
|
108
|
+
:unknown
|
|
107
109
|
].freeze
|
|
108
110
|
|
|
109
111
|
attr_reader :update_parents,
|
|
@@ -114,6 +116,15 @@ module RubyLint
|
|
|
114
116
|
|
|
115
117
|
attr_accessor :instance_type, :parents, :reference_amount
|
|
116
118
|
|
|
119
|
+
##
|
|
120
|
+
# Creates an object that represents an unknown value.
|
|
121
|
+
#
|
|
122
|
+
# @return [RubyLint::Definition::RubyObject]
|
|
123
|
+
#
|
|
124
|
+
def self.create_unknown
|
|
125
|
+
return new(:type => :unknown, :name => 'unknown')
|
|
126
|
+
end
|
|
127
|
+
|
|
117
128
|
##
|
|
118
129
|
# @example
|
|
119
130
|
# string = RubyObject.new(:name => 'String', :type => :const)
|
|
@@ -243,10 +254,11 @@ module RubyLint
|
|
|
243
254
|
if defines?(type, name)
|
|
244
255
|
found = definitions[type][name]
|
|
245
256
|
|
|
246
|
-
# Look up the definition in the parent scope(s) (if any are set).
|
|
257
|
+
# Look up the definition in the parent scope(s) (if any are set). This
|
|
258
|
+
# takes the parents themselves also into account.
|
|
247
259
|
elsif lookup_parent?(type) and lookup_parent
|
|
248
260
|
parents.each do |parent|
|
|
249
|
-
parent_definition = parent
|
|
261
|
+
parent_definition = determine_parent(parent, type, name)
|
|
250
262
|
|
|
251
263
|
if parent_definition
|
|
252
264
|
found = parent_definition
|
|
@@ -320,7 +332,7 @@ module RubyLint
|
|
|
320
332
|
# @return [Mixed]
|
|
321
333
|
#
|
|
322
334
|
def call(context = self)
|
|
323
|
-
retval = return_value
|
|
335
|
+
retval = respond_to?(:return_value) ? return_value : nil
|
|
324
336
|
retval = retval.call(context) if retval.respond_to?(:call)
|
|
325
337
|
|
|
326
338
|
return retval
|
|
@@ -436,6 +448,8 @@ module RubyLint
|
|
|
436
448
|
# set to the `source_type` value by default.
|
|
437
449
|
#
|
|
438
450
|
def copy(source, source_type, target_type = source_type)
|
|
451
|
+
return unless source.definitions.key?(source_type)
|
|
452
|
+
|
|
439
453
|
source.list(source_type).each do |definition|
|
|
440
454
|
add(target_type, definition.name, definition)
|
|
441
455
|
end
|
|
@@ -460,6 +474,14 @@ module RubyLint
|
|
|
460
474
|
return self.class.new(options)
|
|
461
475
|
end
|
|
462
476
|
|
|
477
|
+
##
|
|
478
|
+
# Changes the instance type of the current definition to `:instance`. If
|
|
479
|
+
# you want to return a new definition use {#instance} instead.
|
|
480
|
+
#
|
|
481
|
+
def instance!
|
|
482
|
+
@instance_type = :instance
|
|
483
|
+
end
|
|
484
|
+
|
|
463
485
|
##
|
|
464
486
|
# Returns `true` if the object was referenced more than once.
|
|
465
487
|
#
|
|
@@ -501,7 +523,7 @@ module RubyLint
|
|
|
501
523
|
# @param [String] name
|
|
502
524
|
# @param [Mixed] value
|
|
503
525
|
#
|
|
504
|
-
def define_global_variable(name, value =
|
|
526
|
+
def define_global_variable(name, value = self.class.create_unknown)
|
|
505
527
|
return add_child_definition(:gvar, name, value)
|
|
506
528
|
end
|
|
507
529
|
|
|
@@ -587,6 +609,24 @@ module RubyLint
|
|
|
587
609
|
end
|
|
588
610
|
end
|
|
589
611
|
|
|
612
|
+
##
|
|
613
|
+
# Determines what parent definition to use.
|
|
614
|
+
#
|
|
615
|
+
# @param [RubyLint::Definition::RubyObject] parent
|
|
616
|
+
# @param [Symbol] type
|
|
617
|
+
# @param [String] name
|
|
618
|
+
# @return [RubyLint::Definition::RubyObject]
|
|
619
|
+
#
|
|
620
|
+
def determine_parent(parent, type, name)
|
|
621
|
+
if parent.type == type and parent.name == name
|
|
622
|
+
parent_definition = parent
|
|
623
|
+
else
|
|
624
|
+
parent_definition = parent.lookup(type, name)
|
|
625
|
+
end
|
|
626
|
+
|
|
627
|
+
return parent_definition
|
|
628
|
+
end
|
|
629
|
+
|
|
590
630
|
##
|
|
591
631
|
# Adds a new child definition to the current definition.
|
|
592
632
|
#
|
|
@@ -599,7 +639,7 @@ module RubyLint
|
|
|
599
639
|
definition = self.class.new(
|
|
600
640
|
:name => name,
|
|
601
641
|
:type => type,
|
|
602
|
-
:value =>
|
|
642
|
+
:value => value,
|
|
603
643
|
:parents => [self],
|
|
604
644
|
&block
|
|
605
645
|
)
|
|
@@ -616,9 +656,10 @@ module RubyLint
|
|
|
616
656
|
#
|
|
617
657
|
def add_child_method(type, name, &block)
|
|
618
658
|
definition = RubyMethod.new(
|
|
619
|
-
:name
|
|
620
|
-
:type
|
|
621
|
-
:parents
|
|
659
|
+
:name => name,
|
|
660
|
+
:type => type,
|
|
661
|
+
:parents => [self],
|
|
662
|
+
:instance_type => :instance,
|
|
622
663
|
&block
|
|
623
664
|
)
|
|
624
665
|
|