ruby-lint 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
|