ruby-lint 1.1.0 → 2.0.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
- data/CONTRIBUTING.md +43 -29
- data/LICENSE +1 -1
- data/README.md +0 -1
- data/bin/ruby-lint +91 -3
- data/checksum/ruby-lint-1.1.0.gem.sha512 +1 -0
- data/doc/changelog.md +30 -0
- data/doc/code_analysis.md +13 -0
- data/doc/configuration.md +5 -24
- data/lib/ruby-lint.rb +7 -10
- data/lib/ruby-lint/analysis/argument_amount.rb +2 -0
- data/lib/ruby-lint/analysis/base.rb +12 -0
- data/lib/ruby-lint/analysis/pedantics.rb +2 -0
- data/lib/ruby-lint/analysis/shadowing_variables.rb +2 -0
- data/lib/ruby-lint/analysis/undefined_methods.rb +5 -2
- data/lib/ruby-lint/analysis/undefined_variables.rb +2 -0
- data/lib/ruby-lint/analysis/unused_variables.rb +2 -0
- data/lib/ruby-lint/analysis/useless_equality_checks.rb +2 -0
- data/lib/ruby-lint/ast/node.rb +0 -15
- data/lib/ruby-lint/command.rb +100 -0
- data/lib/ruby-lint/configuration.rb +35 -66
- data/lib/ruby-lint/constant_path.rb +7 -2
- data/lib/ruby-lint/definition/ruby_object.rb +20 -6
- data/lib/ruby-lint/definitions/core/argf.rb +3 -3
- data/lib/ruby-lint/definitions/gems/minitest.rb +792 -0
- data/lib/ruby-lint/file_list.rb +1 -1
- data/lib/ruby-lint/file_loader.rb +2 -20
- data/lib/ruby-lint/file_scanner.rb +11 -2
- data/lib/ruby-lint/method_evaluation.rb +21 -0
- data/lib/ruby-lint/presenter/base.rb +18 -0
- data/lib/ruby-lint/presenter/json.rb +3 -1
- data/lib/ruby-lint/presenter/syntastic.rb +3 -1
- data/lib/ruby-lint/presenter/text.rb +3 -1
- data/lib/ruby-lint/runner.rb +6 -63
- data/lib/ruby-lint/variable_predicates.rb +3 -3
- data/lib/ruby-lint/version.rb +1 -1
- data/lib/ruby-lint/virtual_machine.rb +4 -1
- data/ruby-lint.gemspec +13 -4
- metadata +12 -187
- data/.editorconfig +0 -15
- data/.gitignore +0 -6
- data/.ruby-version +0 -1
- data/.travis.yml +0 -19
- data/Gemfile +0 -15
- data/MANIFEST +0 -469
- data/Rakefile +0 -25
- data/benchmark/bootup.rb +0 -13
- data/benchmark/virtual_machine.rb +0 -17
- data/checksum/.gitkeep +0 -0
- data/doc/.gitkeep +0 -0
- data/doc/css/.gitkeep +0 -0
- data/doc/images/.gitkeep +0 -0
- data/gen/rails/constants.txt +0 -12
- data/gen/rails/requires.rb +0 -2
- data/gen/stdlib/constants.rb +0 -30
- data/gen/stdlib/constants.txt +0 -214
- data/gen/stdlib/requires.rb +0 -64
- data/lib/ruby-lint/benchmark/average.rb +0 -115
- data/lib/ruby-lint/cache.rb +0 -121
- data/lib/ruby-lint/cache_entry.rb +0 -44
- data/lib/ruby-lint/cli.rb +0 -4
- data/lib/ruby-lint/cli/analyze.rb +0 -209
- data/lib/ruby-lint/cli/base.rb +0 -103
- data/lib/ruby-lint/cli/cache.rb +0 -60
- data/lib/ruby-lint/default_names.rb +0 -19
- data/lib/ruby-lint/definitions/gems/.gitkeep +0 -0
- data/lib/ruby-lint/node_hash.rb +0 -105
- data/misc/stdlib.rb +0 -66
- data/profiling/virtual_machine.rb +0 -20
- data/ruby-lint.yml +0 -7
- data/spec/fixtures/associating.rb +0 -7
- data/spec/fixtures/complex/rails/basic_controller.rb +0 -9
- data/spec/fixtures/complex/rcap.rb +0 -67
- data/spec/fixtures/complex/slop.rb +0 -701
- data/spec/fixtures/config.yml +0 -8
- data/spec/fixtures/deeply/nested/file.rb +0 -1
- data/spec/fixtures/file_scanner/lib/example/recursive/source.rb +0 -6
- data/spec/fixtures/file_scanner/lib/example/recursive/target.rb +0 -8
- data/spec/fixtures/file_scanner/lib/example/user.rb +0 -6
- data/spec/fixtures/file_scanner/lib/ruby-lint/definition/constant_proxy.rb +0 -6
- data/spec/fixtures/file_scanner/lib/ruby-lint/global_scope.rb +0 -6
- data/spec/fixtures/file_scanner/lib/test-dashes/foo.rb +0 -4
- data/spec/fixtures/file_scanner/rails/app/models/example/user.rb +0 -6
- data/spec/fixtures/file_scanner/rails/app/models/user.rb +0 -4
- data/spec/fixtures/invalid.rb +0 -3
- data/spec/fixtures/invalid_2.rb +0 -3
- data/spec/fixtures/syntax_error.rb +0 -1
- data/spec/fixtures/uses_external.rb +0 -1
- data/spec/fixtures/uses_external_invalid.rb +0 -3
- data/spec/fixtures/uses_external_namespace.rb +0 -1
- data/spec/fixtures/valid.rb +0 -3
- data/spec/ruby-lint/analysis/argument_amount_spec.rb +0 -131
- data/spec/ruby-lint/analysis/base_spec.rb +0 -24
- data/spec/ruby-lint/analysis/pedantics_spec.rb +0 -63
- data/spec/ruby-lint/analysis/shadowing_variables_spec.rb +0 -85
- data/spec/ruby-lint/analysis/undefined_methods_spec.rb +0 -337
- data/spec/ruby-lint/analysis/undefined_variables_spec.rb +0 -138
- data/spec/ruby-lint/analysis/unused_variables_spec.rb +0 -270
- data/spec/ruby-lint/analysis/useless_equality_checks_spec.rb +0 -107
- data/spec/ruby-lint/ast/node_spec.rb +0 -39
- data/spec/ruby-lint/cache_entry_spec.rb +0 -25
- data/spec/ruby-lint/cache_spec.rb +0 -53
- data/spec/ruby-lint/cli/analyze_spec.rb +0 -52
- data/spec/ruby-lint/configuration_spec.rb +0 -126
- data/spec/ruby-lint/constant_loader_spec.rb +0 -79
- data/spec/ruby-lint/constant_path.rb +0 -63
- data/spec/ruby-lint/definition/constant_proxy_spec.rb +0 -85
- data/spec/ruby-lint/definition/dsl_spec.rb +0 -135
- data/spec/ruby-lint/definition/registry_spec.rb +0 -106
- data/spec/ruby-lint/definition/ruby_method_spec.rb +0 -106
- data/spec/ruby-lint/definition/ruby_object_spec.rb +0 -264
- data/spec/ruby-lint/definition_builder/primitive_spec.rb +0 -62
- data/spec/ruby-lint/definition_builder/ruby_class_spec.rb +0 -107
- data/spec/ruby-lint/definition_builder/ruby_method_spec.rb +0 -53
- data/spec/ruby-lint/definition_builder/ruby_module_spec.rb +0 -52
- data/spec/ruby-lint/definitions/argv_spec.rb +0 -18
- data/spec/ruby-lint/definitions/env_spec.rb +0 -13
- data/spec/ruby-lint/definitions/file_spec.rb +0 -17
- data/spec/ruby-lint/definitions/fixnum_spec.rb +0 -18
- data/spec/ruby-lint/definitions/io_spec.rb +0 -15
- data/spec/ruby-lint/definitions/kernel_spec.rb +0 -18
- data/spec/ruby-lint/definitions/range_spec.rb +0 -21
- data/spec/ruby-lint/definitions/string_spec.rb +0 -20
- data/spec/ruby-lint/docstring/mapping.rb +0 -27
- data/spec/ruby-lint/docstring/parser_spec.rb +0 -88
- data/spec/ruby-lint/extensions/string_spec.rb +0 -7
- data/spec/ruby-lint/file_list_spec.rb +0 -25
- data/spec/ruby-lint/file_loader_spec.rb +0 -69
- data/spec/ruby-lint/file_scanner_spec.rb +0 -84
- data/spec/ruby-lint/inspector_spec.rb +0 -224
- data/spec/ruby-lint/iterator_spec.rb +0 -151
- data/spec/ruby-lint/method_call/.gitkeep +0 -0
- data/spec/ruby-lint/nested_stack_spec.rb +0 -23
- data/spec/ruby-lint/node_hash_spec.rb +0 -56
- data/spec/ruby-lint/parser_spec.rb +0 -38
- data/spec/ruby-lint/presenter/json_spec.rb +0 -58
- data/spec/ruby-lint/presenter/syntastic_spec.rb +0 -49
- data/spec/ruby-lint/presenter/text_spec.rb +0 -49
- data/spec/ruby-lint/report/entry_spec.rb +0 -58
- data/spec/ruby-lint/report_spec.rb +0 -39
- data/spec/ruby-lint/runner_spec.rb +0 -74
- data/spec/ruby-lint/variable_predicates_spec.rb +0 -30
- data/spec/ruby-lint/virtual_machine/alias_spec.rb +0 -55
- data/spec/ruby-lint/virtual_machine/assignments/arrays_spec.rb +0 -87
- data/spec/ruby-lint/virtual_machine/assignments/assignment_arguments_spec.rb +0 -14
- data/spec/ruby-lint/virtual_machine/assignments/constants_spec.rb +0 -23
- data/spec/ruby-lint/virtual_machine/assignments/hashes_spec.rb +0 -52
- data/spec/ruby-lint/virtual_machine/assignments/optional_spec.rb +0 -41
- data/spec/ruby-lint/virtual_machine/assignments/range_spec.rb +0 -28
- data/spec/ruby-lint/virtual_machine/assignments/return_values_spec.rb +0 -78
- data/spec/ruby-lint/virtual_machine/assignments/variables_spec.rb +0 -130
- data/spec/ruby-lint/virtual_machine/associate_nodes_spec.rb +0 -61
- data/spec/ruby-lint/virtual_machine/autoloading_spec.rb +0 -18
- data/spec/ruby-lint/virtual_machine/blocks_spec.rb +0 -90
- data/spec/ruby-lint/virtual_machine/classes/class_methods_spec.rb +0 -21
- data/spec/ruby-lint/virtual_machine/classes/extending_spec.rb +0 -109
- data/spec/ruby-lint/virtual_machine/classes/redefining_spec.rb +0 -51
- data/spec/ruby-lint/virtual_machine/classes/sclass_spec.rb +0 -96
- data/spec/ruby-lint/virtual_machine/classes/scoping_spec.rb +0 -60
- data/spec/ruby-lint/virtual_machine/complex/rails_spec.rb +0 -21
- data/spec/ruby-lint/virtual_machine/complex/rcap_spec.rb +0 -15
- data/spec/ruby-lint/virtual_machine/complex/slop_spec.rb +0 -16
- data/spec/ruby-lint/virtual_machine/constants_spec.rb +0 -31
- data/spec/ruby-lint/virtual_machine/for_spec.rb +0 -16
- data/spec/ruby-lint/virtual_machine/freeze_spec.rb +0 -13
- data/spec/ruby-lint/virtual_machine/global_variables_spec.rb +0 -15
- data/spec/ruby-lint/virtual_machine/inherit_kernel_spec.rb +0 -15
- data/spec/ruby-lint/virtual_machine/interpolation_spec.rb +0 -12
- data/spec/ruby-lint/virtual_machine/location_spec.rb +0 -64
- data/spec/ruby-lint/virtual_machine/method_call_tracking_spec.rb +0 -57
- data/spec/ruby-lint/virtual_machine/methods/attr_spec.rb +0 -182
- data/spec/ruby-lint/virtual_machine/methods/calls_spec.rb +0 -25
- data/spec/ruby-lint/virtual_machine/methods/define_method_spec.rb +0 -41
- data/spec/ruby-lint/virtual_machine/methods/defining_spec.rb +0 -40
- data/spec/ruby-lint/virtual_machine/methods/docstrings_spec.rb +0 -80
- data/spec/ruby-lint/virtual_machine/methods/exporting_spec.rb +0 -19
- data/spec/ruby-lint/virtual_machine/methods/kernel_spec.rb +0 -25
- data/spec/ruby-lint/virtual_machine/methods/parameters_spec.rb +0 -89
- data/spec/ruby-lint/virtual_machine/methods/patching_spec.rb +0 -20
- data/spec/ruby-lint/virtual_machine/methods/scoping_spec.rb +0 -63
- data/spec/ruby-lint/virtual_machine/methods/square_bracket_spec.rb +0 -32
- data/spec/ruby-lint/virtual_machine/methods/visibility_spec.rb +0 -64
- data/spec/ruby-lint/virtual_machine/modules_spec.rb +0 -205
- data/spec/ruby-lint/virtual_machine/reference_amount_spec.rb +0 -81
- data/spec/ruby-lint/virtual_machine/self_spec.rb +0 -37
- data/spec/ruby-lint/virtual_machine/unused_spec.rb +0 -17
- data/spec/spec_helper.rb +0 -28
- data/spec/support/building.rb +0 -50
- data/spec/support/coveralls.rb +0 -5
- data/spec/support/definitions.rb +0 -39
- data/spec/support/fixtures.rb +0 -20
- data/spec/support/parsing.rb +0 -30
- data/spec/support/simplecov.rb +0 -18
- data/spec/support/versions.rb +0 -9
- data/task/build.rake +0 -4
- data/task/checksum.rake +0 -13
- data/task/coverage.rake +0 -6
- data/task/doc.rake +0 -16
- data/task/generate.rake +0 -77
- data/task/graphviz.rake +0 -12
- data/task/manifest.rake +0 -8
- data/task/tag.rake +0 -6
- data/task/test.rake +0 -4
- data/task/todo.rake +0 -6
- data/task/travis.rake +0 -8
data/lib/ruby-lint/cache.rb
DELETED
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
module RubyLint
|
|
2
|
-
##
|
|
3
|
-
# The Cache class is used for storing arbitrary Ruby objects in a cache
|
|
4
|
-
# directory. The primary use case of this class is to store cached ASTs and
|
|
5
|
-
# their comment associations (as is done by {RubyLint::Runner}).
|
|
6
|
-
#
|
|
7
|
-
# @!attribute [r] directory
|
|
8
|
-
# @return [String]
|
|
9
|
-
#
|
|
10
|
-
class Cache
|
|
11
|
-
attr_reader :directory
|
|
12
|
-
|
|
13
|
-
##
|
|
14
|
-
# The version of the cache format.
|
|
15
|
-
#
|
|
16
|
-
# @return [String]
|
|
17
|
-
#
|
|
18
|
-
FORMAT_VERSION = '1'
|
|
19
|
-
|
|
20
|
-
##
|
|
21
|
-
# @param [String] directory Path to the cache directory.
|
|
22
|
-
#
|
|
23
|
-
def initialize(directory)
|
|
24
|
-
@directory = directory
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
##
|
|
28
|
-
# Creates the directory specified in {#directory} unless it already exists.
|
|
29
|
-
#
|
|
30
|
-
def create_directory!
|
|
31
|
-
Dir.mkdir(directory) unless File.directory?(directory)
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
##
|
|
35
|
-
# Checks if there's a cache entry for the given name.
|
|
36
|
-
#
|
|
37
|
-
# @return [TrueClass|FalseClass]
|
|
38
|
-
#
|
|
39
|
-
def exists?(name)
|
|
40
|
-
return File.file?(entry_filepath(name))
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
##
|
|
44
|
-
# Returns the cache entry for the given name or `nil` if the entry doesn't
|
|
45
|
-
# exist.
|
|
46
|
-
#
|
|
47
|
-
# @param [String] name
|
|
48
|
-
# @return [Mixed]
|
|
49
|
-
#
|
|
50
|
-
def get(name)
|
|
51
|
-
return unless exists?(name)
|
|
52
|
-
|
|
53
|
-
data = File.read(entry_filepath(name))
|
|
54
|
-
|
|
55
|
-
return decode(data)
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
##
|
|
59
|
-
# Sets the cache entry to the given value. Existing cache entries are
|
|
60
|
-
# overwritten.
|
|
61
|
-
#
|
|
62
|
-
# @param [String] name
|
|
63
|
-
# @param [Mixed] value
|
|
64
|
-
#
|
|
65
|
-
def set(name, value)
|
|
66
|
-
File.open(entry_filepath(name), 'w') do |handle|
|
|
67
|
-
handle.write(encode(value))
|
|
68
|
-
end
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
##
|
|
72
|
-
# Removes a cache entry.
|
|
73
|
-
#
|
|
74
|
-
# @param [String] name
|
|
75
|
-
#
|
|
76
|
-
def delete(name)
|
|
77
|
-
File.unlink(entry_filepath(name)) if exists?(name)
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
private
|
|
81
|
-
|
|
82
|
-
##
|
|
83
|
-
# Returns the filename for the given entry name.
|
|
84
|
-
#
|
|
85
|
-
# @param [String] name
|
|
86
|
-
# @return [String]
|
|
87
|
-
#
|
|
88
|
-
def entry_filename(name)
|
|
89
|
-
return "#{name}.#{FORMAT_VERSION}.cache"
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
##
|
|
93
|
-
# Returns the full filename of the cache entry's name.
|
|
94
|
-
#
|
|
95
|
-
# @param [String] name
|
|
96
|
-
# @return [String]
|
|
97
|
-
#
|
|
98
|
-
def entry_filepath(name)
|
|
99
|
-
return File.join(directory, entry_filename(name))
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
##
|
|
103
|
-
# Decodes a cache entry.
|
|
104
|
-
#
|
|
105
|
-
# @param [String] input
|
|
106
|
-
# @return [Mixed]
|
|
107
|
-
#
|
|
108
|
-
def decode(input)
|
|
109
|
-
return Marshal.load(Zlib::Inflate.inflate(input))
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
##
|
|
113
|
-
# Encodes a cache entry.
|
|
114
|
-
#
|
|
115
|
-
# @param [String] input
|
|
116
|
-
#
|
|
117
|
-
def encode(input)
|
|
118
|
-
return Zlib::Deflate.deflate(Marshal.dump(input))
|
|
119
|
-
end
|
|
120
|
-
end # Cache
|
|
121
|
-
end # RubyLint
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
module RubyLint
|
|
2
|
-
##
|
|
3
|
-
# The CacheEntry class is used to store nodes, comments and file modification
|
|
4
|
-
# times that belong to a certain root AST. It's primarily used by
|
|
5
|
-
# {RubyLint::Runner}.
|
|
6
|
-
#
|
|
7
|
-
# @!attribute [r] nodes
|
|
8
|
-
# @return [Array]
|
|
9
|
-
#
|
|
10
|
-
# @!attribute [r] comments
|
|
11
|
-
# @return [Hash]
|
|
12
|
-
#
|
|
13
|
-
# @!attribute [r] mtimes
|
|
14
|
-
# @return [Hash]
|
|
15
|
-
#
|
|
16
|
-
class CacheEntry
|
|
17
|
-
attr_reader :nodes, :comments, :mtimes
|
|
18
|
-
|
|
19
|
-
##
|
|
20
|
-
# @param [Array] nodes
|
|
21
|
-
# @param [Hash] comments
|
|
22
|
-
# @param [Hash] mtimes
|
|
23
|
-
#
|
|
24
|
-
def initialize(nodes, comments, mtimes)
|
|
25
|
-
@nodes = nodes
|
|
26
|
-
@comments = comments
|
|
27
|
-
@mtimes = mtimes
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
##
|
|
31
|
-
# Returns `true` if none of the associated files have been modified,
|
|
32
|
-
# `false` otherwise.
|
|
33
|
-
#
|
|
34
|
-
# @return [TrueClass|FalseClass]
|
|
35
|
-
#
|
|
36
|
-
def valid?
|
|
37
|
-
mtimes.each do |file, mtime|
|
|
38
|
-
return false if File.mtime(file) != mtime
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
return true
|
|
42
|
-
end
|
|
43
|
-
end # CacheEntry
|
|
44
|
-
end # RubyLint
|
data/lib/ruby-lint/cli.rb
DELETED
|
@@ -1,209 +0,0 @@
|
|
|
1
|
-
RubyLint::CLI.options.command :analyze do
|
|
2
|
-
banner 'Usage: ruby-lint analyze [FILES] [OPTIONS]'
|
|
3
|
-
description 'Analyze the source code of Ruby files'
|
|
4
|
-
|
|
5
|
-
separator <<-EOF.chomp
|
|
6
|
-
|
|
7
|
-
About:
|
|
8
|
-
|
|
9
|
-
This command analyses the source code of a Ruby file and presents a report
|
|
10
|
-
containing information such as errors about invalid code, warnings and
|
|
11
|
-
informational messages.
|
|
12
|
-
|
|
13
|
-
Configuration:
|
|
14
|
-
|
|
15
|
-
When this command is executed it will try to load a configuration file in
|
|
16
|
-
one of the following two locations (in this order):
|
|
17
|
-
|
|
18
|
-
* $PWD/ruby-lint.yml
|
|
19
|
-
* ~/.ruby-lint.yml
|
|
20
|
-
|
|
21
|
-
Only the first existing configuration file is loaded.
|
|
22
|
-
|
|
23
|
-
These configuration files can be used for specifying the presenter, reporting
|
|
24
|
-
levels and various other options.
|
|
25
|
-
|
|
26
|
-
You can also configure various parts using the supplied commandline options.
|
|
27
|
-
For example, to use the JSON presenter you'd run the following:
|
|
28
|
-
|
|
29
|
-
$ ruby-lint analyze ./test_file.rb --presenter=json
|
|
30
|
-
|
|
31
|
-
Analysis Classes:
|
|
32
|
-
|
|
33
|
-
#{RubyLint::CLI.format_names('analysis')}
|
|
34
|
-
|
|
35
|
-
Presenters:
|
|
36
|
-
|
|
37
|
-
#{RubyLint::CLI.format_names('presenters')}
|
|
38
|
-
|
|
39
|
-
Reporting Levels:
|
|
40
|
-
|
|
41
|
-
#{RubyLint::CLI.format_names('levels')}
|
|
42
|
-
|
|
43
|
-
Examples:
|
|
44
|
-
|
|
45
|
-
To analyze a single file you can run the following command:
|
|
46
|
-
|
|
47
|
-
$ ruby-lint analyze ./test_file.rb
|
|
48
|
-
|
|
49
|
-
You can also specify multiple files:
|
|
50
|
-
|
|
51
|
-
$ ruby-lint analyze first_file.rb second_file.rb
|
|
52
|
-
|
|
53
|
-
Run analysis on an entire directory:
|
|
54
|
-
|
|
55
|
-
$ ruby-lint analyze lib/
|
|
56
|
-
EOF
|
|
57
|
-
|
|
58
|
-
separator RubyLint::CLI::OPTIONS_HEADER
|
|
59
|
-
|
|
60
|
-
RubyLint::CLI.help_option(self)
|
|
61
|
-
|
|
62
|
-
on :l=, :levels=, 'The reporting levels to enable', :as => Array
|
|
63
|
-
on :p=, :presenter=, 'The presenter to use', :as => String
|
|
64
|
-
on :a=, :analysis=, 'The analysis classes to use', :as => Array
|
|
65
|
-
on :b, :benchmark, 'Enables benchmarking mode'
|
|
66
|
-
on :d, :debug, 'Displays debugging output in STDERR'
|
|
67
|
-
|
|
68
|
-
on :'disable-cache', 'Disables caching of external files'
|
|
69
|
-
|
|
70
|
-
##
|
|
71
|
-
# Returns an Array containing the file paths that exist. If a non existing
|
|
72
|
-
# file is encountered `abort` is called.
|
|
73
|
-
#
|
|
74
|
-
# @param [Array] files
|
|
75
|
-
# @return [Array]
|
|
76
|
-
#
|
|
77
|
-
def extract_files(files)
|
|
78
|
-
return RubyLint::FileList.new.process(files)
|
|
79
|
-
|
|
80
|
-
rescue Errno::ENOENT => error
|
|
81
|
-
abort error.message
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
##
|
|
85
|
-
# @return [Hash]
|
|
86
|
-
#
|
|
87
|
-
def option_mapping
|
|
88
|
-
return {
|
|
89
|
-
:levels => :report_levels=,
|
|
90
|
-
:presenter => :presenter=,
|
|
91
|
-
:analysis => :analysis_classes=,
|
|
92
|
-
:debug => :debug=
|
|
93
|
-
}
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
##
|
|
97
|
-
# @return [IO]
|
|
98
|
-
#
|
|
99
|
-
def output_destination
|
|
100
|
-
return @output_destination ||= STDOUT
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
##
|
|
104
|
-
# @param [IO] destination
|
|
105
|
-
#
|
|
106
|
-
def output_destination=(destination)
|
|
107
|
-
@output_destination = destination
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
# The stdout and stderr methods mainly exist to make testing a bit easier.
|
|
111
|
-
|
|
112
|
-
##
|
|
113
|
-
# @return [IO]
|
|
114
|
-
#
|
|
115
|
-
def stdout
|
|
116
|
-
return STDOUT
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
##
|
|
120
|
-
# @return [IO]
|
|
121
|
-
#
|
|
122
|
-
def stderr
|
|
123
|
-
return STDERR
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
##
|
|
127
|
-
# @param [RubyLint::Configuration] configuration
|
|
128
|
-
# @param [Hash] opts
|
|
129
|
-
#
|
|
130
|
-
def configure(configuration, options)
|
|
131
|
-
option_mapping.each do |key, setter|
|
|
132
|
-
configuration.send(setter, options[key]) if options[key]
|
|
133
|
-
end
|
|
134
|
-
|
|
135
|
-
if options[:'disable-cache']
|
|
136
|
-
configuration.enable_cache = false
|
|
137
|
-
end
|
|
138
|
-
end
|
|
139
|
-
|
|
140
|
-
##
|
|
141
|
-
# @param [String] output
|
|
142
|
-
# @param [Float] exec_time
|
|
143
|
-
#
|
|
144
|
-
def show_benchmark_info(output, exec_time)
|
|
145
|
-
memory_kb = `ps -o rss= #{Process.pid}`.strip.to_f
|
|
146
|
-
memory_mb = memory_kb / 1024
|
|
147
|
-
|
|
148
|
-
output_destination.puts unless output.empty?
|
|
149
|
-
|
|
150
|
-
output_destination.puts "Execution time: #{exec_time.round(4)} seconds"
|
|
151
|
-
|
|
152
|
-
output_destination.puts "Memory usage: #{memory_mb.round(2)} MB " \
|
|
153
|
-
"(#{memory_kb.round(2)} KB)"
|
|
154
|
-
end
|
|
155
|
-
|
|
156
|
-
##
|
|
157
|
-
# Shows a lump of debugging information before the rest of the output.
|
|
158
|
-
#
|
|
159
|
-
# @param [RubyLint::Configuration] config
|
|
160
|
-
#
|
|
161
|
-
#:nocov:
|
|
162
|
-
def debug_header(config)
|
|
163
|
-
directories = config.directories.map do |dir|
|
|
164
|
-
File.directory?(dir) ? "#{dir}: exists" : "#{dir}: doesn't exist"
|
|
165
|
-
end
|
|
166
|
-
|
|
167
|
-
directories = directories.empty? ? 'None' : directories.join("\n")
|
|
168
|
-
|
|
169
|
-
stderr.puts <<-EOF.strip
|
|
170
|
-
ruby: #{RUBY_DESCRIPTION}
|
|
171
|
-
ruby-lint: #{RubyLint::VERSION}
|
|
172
|
-
directory: #{Dir.pwd}
|
|
173
|
-
|
|
174
|
-
Caching:
|
|
175
|
-
|
|
176
|
-
enabled: #{config.enable_cache}
|
|
177
|
-
directory: #{config.cache_directory}
|
|
178
|
-
|
|
179
|
-
Directories:
|
|
180
|
-
|
|
181
|
-
#{directories}
|
|
182
|
-
|
|
183
|
-
------
|
|
184
|
-
EOF
|
|
185
|
-
|
|
186
|
-
stderr.puts
|
|
187
|
-
end
|
|
188
|
-
#:nocov:
|
|
189
|
-
|
|
190
|
-
run do |opts, args|
|
|
191
|
-
abort 'You must specify at least one file to analyze' if args.empty?
|
|
192
|
-
|
|
193
|
-
start_time = Time.now.to_f
|
|
194
|
-
files = extract_files(args)
|
|
195
|
-
configuration = RubyLint::Configuration.load_from_file
|
|
196
|
-
|
|
197
|
-
configure(configuration, opts)
|
|
198
|
-
|
|
199
|
-
debug_header(configuration) if configuration.debug
|
|
200
|
-
|
|
201
|
-
runner = RubyLint::Runner.new(configuration)
|
|
202
|
-
output = runner.analyze(files)
|
|
203
|
-
exec_time = Time.now.to_f - start_time
|
|
204
|
-
|
|
205
|
-
output_destination.puts output unless output.empty?
|
|
206
|
-
|
|
207
|
-
show_benchmark_info(output, exec_time) if opts[:benchmark]
|
|
208
|
-
end # run do |opts, args|
|
|
209
|
-
end # RubyLint::CLI.options.command
|
data/lib/ruby-lint/cli/base.rb
DELETED
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
module RubyLint
|
|
2
|
-
module CLI
|
|
3
|
-
##
|
|
4
|
-
# Hash containing configuration options for Slop.
|
|
5
|
-
#
|
|
6
|
-
# @return [Hash]
|
|
7
|
-
#
|
|
8
|
-
SLOP_OPTIONS = {
|
|
9
|
-
:strict => true,
|
|
10
|
-
:banner => 'Usage: ruby-lint [COMMAND] [OPTIONS]'
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
##
|
|
14
|
-
# The header to use for separating options with other bits of information
|
|
15
|
-
# in help messages.
|
|
16
|
-
#
|
|
17
|
-
# @return [String]
|
|
18
|
-
#
|
|
19
|
-
OPTIONS_HEADER = "\nOptions:\n"
|
|
20
|
-
|
|
21
|
-
#:nocov:
|
|
22
|
-
|
|
23
|
-
##
|
|
24
|
-
# Returns a String containing a list of names as registered in
|
|
25
|
-
# {RubyLint::Configuration.names}.
|
|
26
|
-
#
|
|
27
|
-
# @param [String] scope
|
|
28
|
-
# @see RubyLint::Configuration.names
|
|
29
|
-
# @return [String]
|
|
30
|
-
#
|
|
31
|
-
def self.format_names(scope)
|
|
32
|
-
return "* #{Configuration.names[scope].keys.sort.join("\n * ")}"
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
##
|
|
36
|
-
# Starts the CLI.
|
|
37
|
-
#
|
|
38
|
-
# @param [Array] argv
|
|
39
|
-
#
|
|
40
|
-
def self.run(argv = ARGV)
|
|
41
|
-
options.parse(argv)
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
##
|
|
45
|
-
# @return [Slop]
|
|
46
|
-
#
|
|
47
|
-
def self.options
|
|
48
|
-
return @options ||= default_options
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
##
|
|
52
|
-
# @return [Slop]
|
|
53
|
-
#
|
|
54
|
-
def self.default_options
|
|
55
|
-
return Slop.new(SLOP_OPTIONS) do
|
|
56
|
-
separator OPTIONS_HEADER
|
|
57
|
-
|
|
58
|
-
CLI.help_option(self)
|
|
59
|
-
|
|
60
|
-
on :v, :version, 'Shows the current version' do
|
|
61
|
-
puts CLI.version_information
|
|
62
|
-
exit
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
run do |opts, args|
|
|
66
|
-
if args.empty?
|
|
67
|
-
puts self
|
|
68
|
-
exit
|
|
69
|
-
else
|
|
70
|
-
CLI.options.commands['analyze'].parse(args)
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
##
|
|
77
|
-
# Adds a `-h/--help` option for a command. This method should be executed
|
|
78
|
-
# in the context of a Slop command.
|
|
79
|
-
#
|
|
80
|
-
# @param [Mixed] command
|
|
81
|
-
#
|
|
82
|
-
def self.help_option(command)
|
|
83
|
-
command.instance_eval do
|
|
84
|
-
on :h, :help, 'Shows this help message' do
|
|
85
|
-
puts self
|
|
86
|
-
exit
|
|
87
|
-
end
|
|
88
|
-
end
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
##
|
|
92
|
-
# Returns a String containing information about the current ruby-lint
|
|
93
|
-
# version and platform.
|
|
94
|
-
#
|
|
95
|
-
# @return [String]
|
|
96
|
-
#
|
|
97
|
-
def self.version_information
|
|
98
|
-
return "ruby-lint v#{VERSION} on #{RUBY_DESCRIPTION}"
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
#:nocov:
|
|
102
|
-
end # CLI
|
|
103
|
-
end # RubyLint
|