ruby-lint 0.0.5 → 0.9.0
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 +4 -4
- checksums.yaml.gz.asc +14 -14
- data/.gitignore +1 -0
- data/.yardopts +1 -1
- data/Gemfile +3 -3
- data/MANIFEST +16 -3
- data/benchmark/virtual_machine.rb +17 -0
- data/checksum/ruby-lint-0.0.5.gem.sha512 +1 -0
- data/doc/changelog.md +42 -0
- data/doc/configuration.md +133 -13
- data/lib/ruby-lint/analysis/shadowing_variables.rb +8 -14
- data/lib/ruby-lint/analysis/unused_variables.rb +17 -0
- data/lib/ruby-lint/ast/node.rb +18 -3
- data/lib/ruby-lint/cache.rb +121 -0
- data/lib/ruby-lint/cache_entry.rb +44 -0
- data/lib/ruby-lint/cli/analyze.rb +37 -18
- data/lib/ruby-lint/cli/plot.rb +94 -0
- data/lib/ruby-lint/cli.rb +1 -0
- data/lib/ruby-lint/configuration.rb +48 -3
- data/lib/ruby-lint/definition/ruby_method.rb +28 -1
- data/lib/ruby-lint/definition/ruby_object.rb +37 -3
- data/lib/ruby-lint/definition_builder/ruby_method.rb +4 -1
- data/lib/ruby-lint/definition_builder/ruby_module.rb +4 -1
- data/lib/ruby-lint/definition_generator.rb +3 -2
- data/lib/ruby-lint/definitions/core/arg0.rb +3 -1
- data/lib/ruby-lint/definitions/core/argf.rb +3 -1
- data/lib/ruby-lint/definitions/core/argument_error.rb +3 -1
- data/lib/ruby-lint/definitions/core/argv.rb +3 -1
- data/lib/ruby-lint/definitions/core/array.rb +3 -1
- data/lib/ruby-lint/definitions/core/autoload.rb +3 -1
- data/lib/ruby-lint/definitions/core/basic_object.rb +2 -0
- data/lib/ruby-lint/definitions/core/bignum.rb +3 -1
- data/lib/ruby-lint/definitions/core/binding.rb +3 -1
- data/lib/ruby-lint/definitions/core/class.rb +2 -0
- data/lib/ruby-lint/definitions/core/comparable.rb +3 -1
- data/lib/ruby-lint/definitions/core/complex.rb +3 -1
- data/lib/ruby-lint/definitions/core/condition_variable.rb +3 -1
- data/lib/ruby-lint/definitions/core/continuation.rb +3 -1
- data/lib/ruby-lint/definitions/core/data.rb +3 -1
- data/lib/ruby-lint/definitions/core/date.rb +3 -1
- data/lib/ruby-lint/definitions/core/date_time.rb +3 -1
- data/lib/ruby-lint/definitions/core/default_record_separator.rb +3 -1
- data/lib/ruby-lint/definitions/core/digest.rb +3 -1
- data/lib/ruby-lint/definitions/core/dir.rb +3 -1
- data/lib/ruby-lint/definitions/core/encoding.rb +3 -1
- data/lib/ruby-lint/definitions/core/encoding_error.rb +3 -1
- data/lib/ruby-lint/definitions/core/enumerable.rb +3 -1
- data/lib/ruby-lint/definitions/core/enumerator.rb +3 -1
- data/lib/ruby-lint/definitions/core/env.rb +4 -1
- data/lib/ruby-lint/definitions/core/eoferror.rb +3 -1
- data/lib/ruby-lint/definitions/core/erb.rb +2 -0
- data/lib/ruby-lint/definitions/core/errno.rb +3 -1
- data/lib/ruby-lint/definitions/core/etc.rb +3 -1
- data/lib/ruby-lint/definitions/core/exception.rb +3 -1
- data/lib/ruby-lint/definitions/core/false.rb +3 -1
- data/lib/ruby-lint/definitions/core/false_class.rb +3 -1
- data/lib/ruby-lint/definitions/core/fatal_error.rb +3 -1
- data/lib/ruby-lint/definitions/core/fiber.rb +3 -1
- data/lib/ruby-lint/definitions/core/fiber_error.rb +3 -1
- data/lib/ruby-lint/definitions/core/file.rb +3 -1
- data/lib/ruby-lint/definitions/core/file_list.rb +3 -1
- data/lib/ruby-lint/definitions/core/file_test.rb +3 -1
- data/lib/ruby-lint/definitions/core/file_utils.rb +3 -1
- data/lib/ruby-lint/definitions/core/fixnum.rb +3 -1
- data/lib/ruby-lint/definitions/core/float.rb +3 -1
- data/lib/ruby-lint/definitions/core/float_domain_error.rb +3 -1
- data/lib/ruby-lint/definitions/core/gc.rb +3 -1
- data/lib/ruby-lint/definitions/core/gem.rb +3 -1
- data/lib/ruby-lint/definitions/core/hash.rb +3 -1
- data/lib/ruby-lint/definitions/core/immediate_value.rb +3 -1
- data/lib/ruby-lint/definitions/core/index_error.rb +3 -1
- data/lib/ruby-lint/definitions/core/integer.rb +3 -1
- data/lib/ruby-lint/definitions/core/interrupt.rb +3 -1
- data/lib/ruby-lint/definitions/core/io.rb +3 -1
- data/lib/ruby-lint/definitions/core/ioerror.rb +3 -1
- data/lib/ruby-lint/definitions/core/kernel.rb +2 -0
- data/lib/ruby-lint/definitions/core/key_error.rb +3 -1
- data/lib/ruby-lint/definitions/core/load_error.rb +3 -1
- data/lib/ruby-lint/definitions/core/local_jump_error.rb +3 -1
- data/lib/ruby-lint/definitions/core/marshal.rb +3 -1
- data/lib/ruby-lint/definitions/core/match_data.rb +3 -1
- data/lib/ruby-lint/definitions/core/math.rb +3 -1
- data/lib/ruby-lint/definitions/core/memory_segmention_error.rb +3 -1
- data/lib/ruby-lint/definitions/core/method.rb +3 -1
- data/lib/ruby-lint/definitions/core/module.rb +2 -0
- data/lib/ruby-lint/definitions/core/monitor.rb +3 -1
- data/lib/ruby-lint/definitions/core/monitor_mixin.rb +3 -1
- data/lib/ruby-lint/definitions/core/mutex.rb +3 -1
- data/lib/ruby-lint/definitions/core/name_error.rb +3 -1
- data/lib/ruby-lint/definitions/core/nil.rb +3 -1
- data/lib/ruby-lint/definitions/core/nil_class.rb +3 -1
- data/lib/ruby-lint/definitions/core/no_memory_error.rb +3 -1
- data/lib/ruby-lint/definitions/core/no_method_error.rb +3 -1
- data/lib/ruby-lint/definitions/core/not_implemented_error.rb +3 -1
- data/lib/ruby-lint/definitions/core/numeric.rb +3 -1
- data/lib/ruby-lint/definitions/core/object.rb +3 -1
- data/lib/ruby-lint/definitions/core/object_space.rb +3 -1
- data/lib/ruby-lint/definitions/core/open_struct.rb +3 -1
- data/lib/ruby-lint/definitions/core/option_parser.rb +3 -1
- data/lib/ruby-lint/definitions/core/precision.rb +3 -1
- data/lib/ruby-lint/definitions/core/primitive_failure.rb +3 -1
- data/lib/ruby-lint/definitions/core/proc.rb +3 -1
- data/lib/ruby-lint/definitions/core/process.rb +3 -1
- data/lib/ruby-lint/definitions/core/queue.rb +3 -1
- data/lib/ruby-lint/definitions/core/rake.rb +3 -1
- data/lib/ruby-lint/definitions/core/rake_file_utils.rb +3 -1
- data/lib/ruby-lint/definitions/core/rakeversion.rb +3 -1
- data/lib/ruby-lint/definitions/core/random.rb +3 -1
- data/lib/ruby-lint/definitions/core/range.rb +3 -1
- data/lib/ruby-lint/definitions/core/range_error.rb +3 -1
- data/lib/ruby-lint/definitions/core/rational.rb +3 -1
- data/lib/ruby-lint/definitions/core/rb_config.rb +3 -1
- data/lib/ruby-lint/definitions/core/regexp.rb +3 -1
- data/lib/ruby-lint/definitions/core/regexp_error.rb +3 -1
- data/lib/ruby-lint/definitions/core/ruby_copyright.rb +3 -1
- data/lib/ruby-lint/definitions/core/ruby_description.rb +3 -1
- data/lib/ruby-lint/definitions/core/ruby_engine.rb +3 -1
- data/lib/ruby-lint/definitions/core/ruby_patchlevel.rb +3 -1
- data/lib/ruby-lint/definitions/core/ruby_platform.rb +3 -1
- data/lib/ruby-lint/definitions/core/ruby_release_date.rb +3 -1
- data/lib/ruby-lint/definitions/core/ruby_version.rb +3 -1
- data/lib/ruby-lint/definitions/core/runtime_error.rb +3 -1
- data/lib/ruby-lint/definitions/core/scan_error.rb +3 -1
- data/lib/ruby-lint/definitions/core/script_error.rb +3 -1
- data/lib/ruby-lint/definitions/core/security_error.rb +3 -1
- data/lib/ruby-lint/definitions/core/shellwords.rb +3 -1
- data/lib/ruby-lint/definitions/core/signal.rb +3 -1
- data/lib/ruby-lint/definitions/core/signal_exception.rb +3 -1
- data/lib/ruby-lint/definitions/core/singleton.rb +3 -1
- data/lib/ruby-lint/definitions/core/sized_queue.rb +3 -1
- data/lib/ruby-lint/definitions/core/standard_error.rb +3 -1
- data/lib/ruby-lint/definitions/core/stderr.rb +2 -0
- data/lib/ruby-lint/definitions/core/stdin.rb +2 -0
- data/lib/ruby-lint/definitions/core/stdout.rb +2 -0
- data/lib/ruby-lint/definitions/core/stop_iteration.rb +3 -1
- data/lib/ruby-lint/definitions/core/string.rb +3 -1
- data/lib/ruby-lint/definitions/core/string_io.rb +3 -1
- data/lib/ruby-lint/definitions/core/string_scanner.rb +3 -1
- data/lib/ruby-lint/definitions/core/struct.rb +3 -1
- data/lib/ruby-lint/definitions/core/syck.rb +3 -1
- data/lib/ruby-lint/definitions/core/symbol.rb +3 -1
- data/lib/ruby-lint/definitions/core/syntax_error.rb +3 -1
- data/lib/ruby-lint/definitions/core/system_call_error.rb +3 -1
- data/lib/ruby-lint/definitions/core/system_exit.rb +3 -1
- data/lib/ruby-lint/definitions/core/system_stack_error.rb +3 -1
- data/lib/ruby-lint/definitions/core/thread.rb +3 -1
- data/lib/ruby-lint/definitions/core/thread_error.rb +3 -1
- data/lib/ruby-lint/definitions/core/thread_group.rb +3 -1
- data/lib/ruby-lint/definitions/core/time.rb +3 -1
- data/lib/ruby-lint/definitions/core/toplevel_binding.rb +3 -1
- data/lib/ruby-lint/definitions/core/true.rb +3 -1
- data/lib/ruby-lint/definitions/core/true_class.rb +3 -1
- data/lib/ruby-lint/definitions/core/type_error.rb +3 -1
- data/lib/ruby-lint/definitions/core/unbound_method.rb +3 -1
- data/lib/ruby-lint/definitions/core/unmarshalable.rb +3 -1
- data/lib/ruby-lint/definitions/core/unsupported_library_error.rb +3 -1
- data/lib/ruby-lint/definitions/core/weak_ref.rb +3 -1
- data/lib/ruby-lint/definitions/core/yaml.rb +1 -0
- data/lib/ruby-lint/definitions/core/zero_division_error.rb +3 -1
- data/lib/ruby-lint/definitions/core/zlib.rb +8840 -0
- data/lib/ruby-lint/definitions/rails/abstract_controller.rb +1 -0
- data/lib/ruby-lint/definitions/rails/action_controller.rb +1 -0
- data/lib/ruby-lint/definitions/rails/action_dispatch.rb +1 -0
- data/lib/ruby-lint/definitions/rails/action_mailer.rb +1 -0
- data/lib/ruby-lint/definitions/rails/action_pack.rb +1 -0
- data/lib/ruby-lint/definitions/rails/action_view.rb +1 -0
- data/lib/ruby-lint/definitions/rails/active_model.rb +1 -0
- data/lib/ruby-lint/definitions/rails/active_record.rb +1 -0
- data/lib/ruby-lint/definitions/rails/active_support.rb +1 -0
- data/lib/ruby-lint/definitions/rails/arel.rb +1 -0
- data/lib/ruby-lint/definitions/rails/rails.rb +1 -0
- data/lib/ruby-lint/definitions/rails/sprockets.rb +1 -0
- data/lib/ruby-lint/file_scanner.rb +2 -0
- data/lib/ruby-lint/iterator.rb +21 -12
- data/lib/ruby-lint/method_call_info.rb +31 -0
- data/lib/ruby-lint/node_hash.rb +105 -0
- data/lib/ruby-lint/parser.rb +4 -2
- data/lib/ruby-lint/runner.rb +62 -6
- data/lib/ruby-lint/template/definition.erb +2 -0
- data/lib/ruby-lint/version.rb +1 -1
- data/lib/ruby-lint/virtual_machine.rb +75 -43
- data/lib/ruby-lint.rb +20 -2
- data/profiling/virtual_machine.rb +20 -0
- data/ruby-lint.gemspec +2 -1
- data/spec/fixtures/complex/rcap.rb +29 -0
- data/spec/fixtures/complex/slop.rb +21 -0
- data/spec/fixtures/file_scanner/lib/ruby-lint/definition/constant_proxy.rb +6 -0
- data/spec/fixtures/file_scanner/lib/ruby-lint/global_scope.rb +6 -0
- data/spec/ruby-lint/analysis/unused_variables_spec.rb +114 -0
- data/spec/ruby-lint/cache_entry_spec.rb +25 -0
- data/spec/ruby-lint/cache_spec.rb +53 -0
- data/spec/ruby-lint/definition/ruby_method_spec.rb +4 -4
- data/spec/ruby-lint/definition/ruby_object_spec.rb +33 -0
- data/spec/ruby-lint/iterator_spec.rb +15 -0
- data/spec/ruby-lint/node_hash_spec.rb +56 -0
- data/spec/ruby-lint/runner_spec.rb +6 -1
- data/spec/ruby-lint/virtual_machine/assignments/variables_spec.rb +2 -2
- data/spec/ruby-lint/virtual_machine/location_spec.rb +64 -0
- data/spec/ruby-lint/virtual_machine/method_call_tracking_spec.rb +64 -0
- data/spec/spec_helper.rb +7 -0
- data/task/generate.rake +1 -1
- data.tar.gz.asc +14 -14
- metadata +34 -7
- metadata.gz.asc +14 -14
- data/debug/memory_usage.rb +0 -14
- data/debug/profile.rb +0 -18
- data/task/profile.rake +0 -27
|
@@ -12,8 +12,35 @@ module RubyLint
|
|
|
12
12
|
# @!attribute [r] return_value
|
|
13
13
|
# @return [Mixed] The value that is returned by the method.
|
|
14
14
|
#
|
|
15
|
+
# @!attribute [r] calls
|
|
16
|
+
# @return [Array<RubyLint::MethodCallInfo>] The method calls made in the
|
|
17
|
+
# body of this method.
|
|
18
|
+
#
|
|
19
|
+
# @!attribute [r] callers
|
|
20
|
+
# @return [Array<RubyLint::MethodCallInfo>] The methods that called this
|
|
21
|
+
# method.
|
|
22
|
+
#
|
|
15
23
|
class RubyMethod < RubyObject
|
|
16
|
-
attr_reader :return_value, :visibility
|
|
24
|
+
attr_reader :calls, :callers, :return_value, :visibility
|
|
25
|
+
|
|
26
|
+
##
|
|
27
|
+
# Called after a new instance of this class is created.
|
|
28
|
+
#
|
|
29
|
+
def after_initialize
|
|
30
|
+
@calls = []
|
|
31
|
+
@callers = []
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
##
|
|
35
|
+
# @see RubyLint::Definition::RubyObject#deep_freeze
|
|
36
|
+
#
|
|
37
|
+
def deep_freeze
|
|
38
|
+
calls.freeze
|
|
39
|
+
callers.freeze
|
|
40
|
+
return_value.freeze
|
|
41
|
+
|
|
42
|
+
super
|
|
43
|
+
end
|
|
17
44
|
|
|
18
45
|
##
|
|
19
46
|
# @return [Array]
|
|
@@ -59,6 +59,15 @@ module RubyLint
|
|
|
59
59
|
# returns a collection of the members instead of the manually defined
|
|
60
60
|
# value.
|
|
61
61
|
#
|
|
62
|
+
# @!attribute [r] line
|
|
63
|
+
# @return [Numeric] The line number of the definition.
|
|
64
|
+
#
|
|
65
|
+
# @!attribute [r] column
|
|
66
|
+
# @return [Numeric] The column number of the definition.
|
|
67
|
+
#
|
|
68
|
+
# @!attribute [r] file
|
|
69
|
+
# @return [String] The file path of the definition.
|
|
70
|
+
#
|
|
62
71
|
class RubyObject
|
|
63
72
|
include VariablePredicates
|
|
64
73
|
|
|
@@ -109,7 +118,10 @@ module RubyLint
|
|
|
109
118
|
].freeze
|
|
110
119
|
|
|
111
120
|
attr_reader :update_parents,
|
|
121
|
+
:column,
|
|
112
122
|
:definitions,
|
|
123
|
+
:file,
|
|
124
|
+
:line,
|
|
113
125
|
:members_as_value,
|
|
114
126
|
:name,
|
|
115
127
|
:type
|
|
@@ -153,6 +165,26 @@ module RubyLint
|
|
|
153
165
|
yield self if block_given?
|
|
154
166
|
end
|
|
155
167
|
|
|
168
|
+
##
|
|
169
|
+
# Freezes the definition and all child definitions.
|
|
170
|
+
#
|
|
171
|
+
def deep_freeze
|
|
172
|
+
@definitions.each do |type, collection|
|
|
173
|
+
collection.each do |name, object|
|
|
174
|
+
if object != self and !object.frozen?
|
|
175
|
+
object.deep_freeze
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
@definitions.freeze
|
|
181
|
+
@parents.freeze
|
|
182
|
+
@update_parents.freeze
|
|
183
|
+
@value.freeze
|
|
184
|
+
|
|
185
|
+
freeze
|
|
186
|
+
end
|
|
187
|
+
|
|
156
188
|
##
|
|
157
189
|
# Returns the value of the definition. If `members_as_value` is set to
|
|
158
190
|
# `true` the return value is a Hash containing the names and values of
|
|
@@ -352,7 +384,7 @@ module RubyLint
|
|
|
352
384
|
def has_definition?(type, name)
|
|
353
385
|
type, name = prepare_lookup(type, name)
|
|
354
386
|
|
|
355
|
-
if definitions
|
|
387
|
+
if definitions.key?(type) and definitions[type].key?(name)
|
|
356
388
|
return true
|
|
357
389
|
|
|
358
390
|
elsif lookup_parent?(type)
|
|
@@ -397,7 +429,7 @@ module RubyLint
|
|
|
397
429
|
def defines?(type, name)
|
|
398
430
|
type, name = prepare_lookup(type, name)
|
|
399
431
|
|
|
400
|
-
return definitions
|
|
432
|
+
return definitions.key?(type) && definitions[type].key?(name)
|
|
401
433
|
end
|
|
402
434
|
|
|
403
435
|
##
|
|
@@ -411,7 +443,9 @@ module RubyLint
|
|
|
411
443
|
# @return [Array]
|
|
412
444
|
#
|
|
413
445
|
def list(type)
|
|
414
|
-
|
|
446
|
+
type = type.to_sym
|
|
447
|
+
|
|
448
|
+
return definitions.key?(type) ? definitions[type].values : []
|
|
415
449
|
end
|
|
416
450
|
|
|
417
451
|
##
|
|
@@ -62,7 +62,10 @@ module RubyLint
|
|
|
62
62
|
:parents => parents,
|
|
63
63
|
:type => type,
|
|
64
64
|
:instance_type => :instance,
|
|
65
|
-
:visibility => options[:visibility]
|
|
65
|
+
:visibility => options[:visibility],
|
|
66
|
+
:line => node.line,
|
|
67
|
+
:column => node.column,
|
|
68
|
+
:file => node.file
|
|
66
69
|
)
|
|
67
70
|
end
|
|
68
71
|
|
|
@@ -58,7 +58,10 @@ module RubyLint
|
|
|
58
58
|
:name => module_name,
|
|
59
59
|
:parents => parents,
|
|
60
60
|
:reference_amount => 1,
|
|
61
|
-
:type => :const
|
|
61
|
+
:type => :const,
|
|
62
|
+
:line => node.line,
|
|
63
|
+
:column => node.column,
|
|
64
|
+
:file => node.file
|
|
62
65
|
)
|
|
63
66
|
|
|
64
67
|
definition.add(:keyword, 'self', definition)
|
|
@@ -146,8 +146,9 @@ module RubyLint
|
|
|
146
146
|
methods.each do |method|
|
|
147
147
|
args = []
|
|
148
148
|
|
|
149
|
-
method.parameters.
|
|
150
|
-
|
|
149
|
+
method.parameters.each_with_index do |arg, index|
|
|
150
|
+
name = arg[1] || "arg#{index + 1}"
|
|
151
|
+
args << {:type => arg_mapping[arg[0]], :name => name}
|
|
151
152
|
end
|
|
152
153
|
|
|
153
154
|
info[type][method.name] = args
|
|
@@ -411,4 +411,6 @@ RubyLint::GlobalScope.definitions.define_constant('Array::ValueGenerator') do |k
|
|
|
411
411
|
klass.define_instance_method('next?')
|
|
412
412
|
|
|
413
413
|
klass.define_instance_method('rewind')
|
|
414
|
-
end
|
|
414
|
+
end
|
|
415
|
+
|
|
416
|
+
RubyLint::GlobalScope.definitions.lookup(:const, 'Array').deep_freeze
|
|
@@ -16,4 +16,6 @@ RubyLint::GlobalScope.definitions.define_constant('ConditionVariable') do |klass
|
|
|
16
16
|
method.define_argument('mutex')
|
|
17
17
|
method.define_optional_argument('timeout')
|
|
18
18
|
end
|
|
19
|
-
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
RubyLint::GlobalScope.definitions.lookup(:const, 'ConditionVariable').deep_freeze
|
|
@@ -163,4 +163,6 @@ end
|
|
|
163
163
|
#
|
|
164
164
|
RubyLint::GlobalScope.definitions.define_constant('Digest::SHA512') do |klass|
|
|
165
165
|
klass.inherits(RubyLint::GlobalScope.constant_proxy('Digest::Base'))
|
|
166
|
-
end
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
RubyLint::GlobalScope.definitions.lookup(:const, 'Digest').deep_freeze
|
|
@@ -349,4 +349,6 @@ RubyLint::GlobalScope.definitions.define_constant('Enumerable::SortedElement') d
|
|
|
349
349
|
klass.define_instance_method('sort_id')
|
|
350
350
|
|
|
351
351
|
klass.define_instance_method('value')
|
|
352
|
-
end
|
|
352
|
+
end
|
|
353
|
+
|
|
354
|
+
RubyLint::GlobalScope.definitions.lookup(:const, 'Enumerable').deep_freeze
|
|
@@ -34,4 +34,6 @@ RubyLint::GlobalScope.definitions.define_constant('Enumerator') do |klass|
|
|
|
34
34
|
klass.define_instance_method('with_index') do |method|
|
|
35
35
|
method.define_optional_argument('offset')
|
|
36
36
|
end
|
|
37
|
-
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
RubyLint::GlobalScope.definitions.lookup(:const, 'Enumerator').deep_freeze
|