ruby-lint 0.0.2 → 0.0.3
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.
- data.tar.gz.asc +17 -0
- data/.gitignore +1 -0
- data/.travis.yml +25 -0
- data/.yardopts +4 -0
- data/Gemfile +1 -1
- data/LICENSE +1 -1
- data/MANIFEST +238 -49
- data/README.md +84 -131
- data/Rakefile +6 -0
- data/bin/ruby-lint +2 -2
- data/checksum/.gitkeep +0 -0
- data/doc/DCO.md +26 -0
- data/doc/architecture.md +63 -0
- data/doc/code_analysis.md +90 -0
- data/doc/configuration.md +86 -0
- data/doc/contributing.md +16 -0
- data/doc/graphviz/flow.dot +7 -0
- data/doc/images/.gitkeep +0 -0
- data/doc/images/flow.png +0 -0
- data/lib/ruby-lint.rb +35 -35
- data/lib/ruby-lint/analyze/argument_amount.rb +73 -0
- data/lib/ruby-lint/analyze/shadowing_variables.rb +19 -24
- data/lib/ruby-lint/analyze/undefined_methods.rb +68 -0
- data/lib/ruby-lint/analyze/undefined_variables.rb +42 -69
- data/lib/ruby-lint/analyze/unused_variables.rb +23 -78
- data/lib/ruby-lint/base.rb +85 -0
- data/lib/ruby-lint/cli.rb +23 -167
- data/lib/ruby-lint/cli/analyze.rb +99 -0
- data/lib/ruby-lint/cli/ast.rb +35 -0
- data/lib/ruby-lint/cli/base.rb +120 -0
- data/lib/ruby-lint/configuration.rb +112 -0
- data/lib/ruby-lint/constant_loader.rb +92 -0
- data/lib/ruby-lint/definition/ruby_method.rb +248 -0
- data/lib/ruby-lint/definition/ruby_object.rb +757 -0
- data/lib/ruby-lint/definition_generator.rb +155 -0
- data/lib/ruby-lint/definitions/core.rb +5 -0
- data/lib/ruby-lint/definitions/core/arg0.rb +7 -0
- data/lib/ruby-lint/definitions/core/argf.rb +7 -0
- data/lib/ruby-lint/definitions/core/argument_error.rb +12 -0
- data/lib/ruby-lint/definitions/core/argv.rb +7 -0
- data/lib/ruby-lint/definitions/core/array.rb +414 -0
- data/lib/ruby-lint/definitions/core/autoload.rb +39 -0
- data/lib/ruby-lint/definitions/core/basic_object.rb +46 -0
- data/lib/ruby-lint/definitions/core/bignum.rb +128 -0
- data/lib/ruby-lint/definitions/core/binding.rb +52 -0
- data/lib/ruby-lint/definitions/core/class.rb +23 -0
- data/lib/ruby-lint/definitions/core/comparable.rb +38 -0
- data/lib/ruby-lint/definitions/core/complex.rb +195 -0
- data/lib/ruby-lint/definitions/core/condition_variable.rb +19 -0
- data/lib/ruby-lint/definitions/core/continuation.rb +8 -0
- data/lib/ruby-lint/definitions/core/data.rb +8 -0
- data/lib/ruby-lint/definitions/core/date.rb +706 -0
- data/lib/ruby-lint/definitions/core/date_time.rb +381 -0
- data/lib/ruby-lint/definitions/core/default_record_separator.rb +7 -0
- data/lib/ruby-lint/definitions/core/digest.rb +166 -0
- data/lib/ruby-lint/definitions/core/dir.rb +496 -0
- data/lib/ruby-lint/definitions/core/encoding.rb +2030 -0
- data/lib/ruby-lint/definitions/core/encoding_error.rb +8 -0
- data/lib/ruby-lint/definitions/core/enumerable.rb +352 -0
- data/lib/ruby-lint/definitions/core/enumerator.rb +37 -0
- data/lib/ruby-lint/definitions/core/env.rb +7 -0
- data/lib/ruby-lint/definitions/core/eoferror.rb +8 -0
- data/lib/ruby-lint/definitions/core/erb.rb +304 -0
- data/lib/ruby-lint/definitions/core/errno.rb +3331 -0
- data/lib/ruby-lint/definitions/core/etc.rb +138 -0
- data/lib/ruby-lint/definitions/core/exception.rb +72 -0
- data/lib/ruby-lint/definitions/core/false.rb +7 -0
- data/lib/ruby-lint/definitions/core/false_class.rb +30 -0
- data/lib/ruby-lint/definitions/core/fatal_error.rb +8 -0
- data/lib/ruby-lint/definitions/core/fiber.rb +35 -0
- data/lib/ruby-lint/definitions/core/fiber_error.rb +8 -0
- data/lib/ruby-lint/definitions/core/file.rb +1277 -0
- data/lib/ruby-lint/definitions/core/file_list.rb +727 -0
- data/lib/ruby-lint/definitions/core/file_test.rb +106 -0
- data/lib/ruby-lint/definitions/core/file_utils.rb +1027 -0
- data/lib/ruby-lint/definitions/core/fixnum.rb +156 -0
- data/lib/ruby-lint/definitions/core/float.rb +307 -0
- data/lib/ruby-lint/definitions/core/float_domain_error.rb +8 -0
- data/lib/ruby-lint/definitions/core/gc.rb +57 -0
- data/lib/ruby-lint/definitions/core/gem.rb +3161 -0
- data/lib/ruby-lint/definitions/core/hash.rb +512 -0
- data/lib/ruby-lint/definitions/core/immediate_value.rb +19 -0
- data/lib/ruby-lint/definitions/core/index_error.rb +8 -0
- data/lib/ruby-lint/definitions/core/integer.rb +100 -0
- data/lib/ruby-lint/definitions/core/interrupt.rb +14 -0
- data/lib/ruby-lint/definitions/core/io.rb +928 -0
- data/lib/ruby-lint/definitions/core/ioerror.rb +8 -0
- data/lib/ruby-lint/definitions/core/kernel.rb +504 -0
- data/lib/ruby-lint/definitions/core/key_error.rb +8 -0
- data/lib/ruby-lint/definitions/core/load_error.rb +28 -0
- data/lib/ruby-lint/definitions/core/local_jump_error.rb +8 -0
- data/lib/ruby-lint/definitions/core/main.rb +25 -0
- data/lib/ruby-lint/definitions/core/marshal.rb +466 -0
- data/lib/ruby-lint/definitions/core/match_data.rb +73 -0
- data/lib/ruby-lint/definitions/core/math.rb +205 -0
- data/lib/ruby-lint/definitions/core/memory_segmention_error.rb +8 -0
- data/lib/ruby-lint/definitions/core/method.rb +61 -0
- data/lib/ruby-lint/definitions/core/module.rb +262 -0
- data/lib/ruby-lint/definitions/core/monitor.rb +39 -0
- data/lib/ruby-lint/definitions/core/monitor_mixin.rb +59 -0
- data/lib/ruby-lint/definitions/core/mutex.rb +32 -0
- data/lib/ruby-lint/definitions/core/name_error.rb +16 -0
- data/lib/ruby-lint/definitions/core/nil.rb +7 -0
- data/lib/ruby-lint/definitions/core/nil_class.rb +46 -0
- data/lib/ruby-lint/definitions/core/no_memory_error.rb +8 -0
- data/lib/ruby-lint/definitions/core/no_method_error.rb +18 -0
- data/lib/ruby-lint/definitions/core/not_implemented_error.rb +8 -0
- data/lib/ruby-lint/definitions/core/numeric.rb +123 -0
- data/lib/ruby-lint/definitions/core/object.rb +31 -0
- data/lib/ruby-lint/definitions/core/object_space.rb +41 -0
- data/lib/ruby-lint/definitions/core/open_struct.rb +49 -0
- data/lib/ruby-lint/definitions/core/option_parser.rb +1355 -0
- data/lib/ruby-lint/definitions/core/precision.rb +21 -0
- data/lib/ruby-lint/definitions/core/primitive_failure.rb +8 -0
- data/lib/ruby-lint/definitions/core/proc.rb +109 -0
- data/lib/ruby-lint/definitions/core/process.rb +602 -0
- data/lib/ruby-lint/definitions/core/psych.rb +2231 -0
- data/lib/ruby-lint/definitions/core/queue.rb +44 -0
- data/lib/ruby-lint/definitions/core/rake.rb +4784 -0
- data/lib/ruby-lint/definitions/core/rake_file_utils.rb +203 -0
- data/lib/ruby-lint/definitions/core/rakeversion.rb +7 -0
- data/lib/ruby-lint/definitions/core/random.rb +38 -0
- data/lib/ruby-lint/definitions/core/range.rb +104 -0
- data/lib/ruby-lint/definitions/core/range_error.rb +8 -0
- data/lib/ruby-lint/definitions/core/rational.rb +96 -0
- data/lib/ruby-lint/definitions/core/rb_config.rb +36 -0
- data/lib/ruby-lint/definitions/core/regexp.rb +396 -0
- data/lib/ruby-lint/definitions/core/regexp_error.rb +8 -0
- data/lib/ruby-lint/definitions/core/rubinius.rb +16637 -0
- data/lib/ruby-lint/definitions/core/ruby_copyright.rb +7 -0
- data/lib/ruby-lint/definitions/core/ruby_description.rb +7 -0
- data/lib/ruby-lint/definitions/core/ruby_engine.rb +7 -0
- data/lib/ruby-lint/definitions/core/ruby_lint.rb +93 -0
- data/lib/ruby-lint/definitions/core/ruby_patchlevel.rb +7 -0
- data/lib/ruby-lint/definitions/core/ruby_platform.rb +7 -0
- data/lib/ruby-lint/definitions/core/ruby_release_date.rb +7 -0
- data/lib/ruby-lint/definitions/core/ruby_version.rb +7 -0
- data/lib/ruby-lint/definitions/core/runtime_error.rb +8 -0
- data/lib/ruby-lint/definitions/core/scan_error.rb +8 -0
- data/lib/ruby-lint/definitions/core/script_error.rb +8 -0
- data/lib/ruby-lint/definitions/core/security_error.rb +8 -0
- data/lib/ruby-lint/definitions/core/shellwords.rb +37 -0
- data/lib/ruby-lint/definitions/core/signal.rb +37 -0
- data/lib/ruby-lint/definitions/core/signal_exception.rb +19 -0
- data/lib/ruby-lint/definitions/core/singleton.rb +37 -0
- data/lib/ruby-lint/definitions/core/sized_queue.rb +42 -0
- data/lib/ruby-lint/definitions/core/standard_error.rb +8 -0
- data/lib/ruby-lint/definitions/core/stderr.rb +7 -0
- data/lib/ruby-lint/definitions/core/stdin.rb +7 -0
- data/lib/ruby-lint/definitions/core/stdout.rb +7 -0
- data/lib/ruby-lint/definitions/core/stop_iteration.rb +8 -0
- data/lib/ruby-lint/definitions/core/string.rb +713 -0
- data/lib/ruby-lint/definitions/core/string_io.rb +287 -0
- data/lib/ruby-lint/definitions/core/string_scanner.rb +158 -0
- data/lib/ruby-lint/definitions/core/struct.rb +357 -0
- data/lib/ruby-lint/definitions/core/syck.rb +30 -0
- data/lib/ruby-lint/definitions/core/symbol.rb +90 -0
- data/lib/ruby-lint/definitions/core/syntax_error.rb +44 -0
- data/lib/ruby-lint/definitions/core/system_call_error.rb +31 -0
- data/lib/ruby-lint/definitions/core/system_exit.rb +19 -0
- data/lib/ruby-lint/definitions/core/system_stack_error.rb +8 -0
- data/lib/ruby-lint/definitions/core/thread.rb +209 -0
- data/lib/ruby-lint/definitions/core/thread_error.rb +8 -0
- data/lib/ruby-lint/definitions/core/thread_group.rb +22 -0
- data/lib/ruby-lint/definitions/core/time.rb +233 -0
- data/lib/ruby-lint/definitions/core/toplevel_binding.rb +7 -0
- data/lib/ruby-lint/definitions/core/true.rb +7 -0
- data/lib/ruby-lint/definitions/core/true_class.rb +30 -0
- data/lib/ruby-lint/definitions/core/type_error.rb +8 -0
- data/lib/ruby-lint/definitions/core/unbound_method.rb +51 -0
- data/lib/ruby-lint/definitions/core/unmarshalable.rb +13 -0
- data/lib/ruby-lint/definitions/core/unsupported_library_error.rb +8 -0
- data/lib/ruby-lint/definitions/core/weak_ref.rb +42 -0
- data/lib/ruby-lint/definitions/core/zero_division_error.rb +8 -0
- data/lib/ruby-lint/definitions_builder.rb +692 -0
- data/lib/ruby-lint/extensions/string.rb +15 -0
- data/lib/ruby-lint/helper/constant_paths.rb +41 -0
- data/lib/ruby-lint/helper/conversion.rb +33 -0
- data/lib/ruby-lint/helper/current_scope.rb +98 -0
- data/lib/ruby-lint/helper/methods.rb +91 -0
- data/lib/ruby-lint/inspector.rb +191 -0
- data/lib/ruby-lint/iterator.rb +187 -127
- data/lib/ruby-lint/node.rb +107 -0
- data/lib/ruby-lint/parser.rb +510 -1137
- data/lib/ruby-lint/parser_error.rb +15 -27
- data/lib/ruby-lint/presenter/json.rb +19 -0
- data/lib/ruby-lint/presenter/text.rb +37 -0
- data/lib/ruby-lint/report.rb +95 -53
- data/lib/ruby-lint/report/entry.rb +71 -0
- data/lib/ruby-lint/template/definition.erb +24 -0
- data/lib/ruby-lint/template/scope.rb +25 -0
- data/lib/ruby-lint/variable_predicates.rb +109 -0
- data/lib/ruby-lint/version.rb +1 -1
- data/ruby-lint.gemspec +19 -8
- data/spec/helper.rb +10 -2
- data/spec/ruby-lint/analyze/argument_amount.rb +91 -0
- data/spec/ruby-lint/analyze/shadowing_variables.rb +69 -14
- data/spec/ruby-lint/analyze/undefined_methods.rb +174 -0
- data/spec/ruby-lint/analyze/undefined_variables.rb +70 -179
- data/spec/ruby-lint/analyze/unused_variables.rb +63 -183
- data/spec/ruby-lint/configuration.rb +15 -0
- data/spec/ruby-lint/constant_loader.rb +32 -0
- data/spec/ruby-lint/definition/dsl.rb +142 -0
- data/spec/ruby-lint/definition/method_calls.rb +26 -0
- data/spec/ruby-lint/definition/ruby_method.rb +175 -0
- data/spec/ruby-lint/definition/ruby_object.rb +228 -0
- data/spec/ruby-lint/definitions_builder/assignments/arrays.rb +71 -0
- data/spec/ruby-lint/definitions_builder/assignments/hashes.rb +65 -0
- data/spec/ruby-lint/definitions_builder/assignments/objects.rb +23 -0
- data/spec/ruby-lint/definitions_builder/assignments/optional.rb +22 -0
- data/spec/ruby-lint/definitions_builder/assignments/return_values.rb +78 -0
- data/spec/ruby-lint/definitions_builder/assignments/variables.rb +71 -0
- data/spec/ruby-lint/definitions_builder/associate_nodes.rb +17 -0
- data/spec/ruby-lint/definitions_builder/blocks.rb +40 -0
- data/spec/ruby-lint/definitions_builder/classes.rb +230 -0
- data/spec/ruby-lint/definitions_builder/for.rb +16 -0
- data/spec/ruby-lint/definitions_builder/methods.rb +147 -0
- data/spec/ruby-lint/definitions_builder/modules.rb +175 -0
- data/spec/ruby-lint/definitions_builder/reference_amount.rb +31 -0
- data/spec/ruby-lint/definitions_builder/unused.rb +15 -0
- data/spec/ruby-lint/extensions/string.rb +7 -0
- data/spec/ruby-lint/iterator.rb +42 -417
- data/spec/ruby-lint/node.rb +38 -0
- data/spec/ruby-lint/parser/assignments.rb +225 -0
- data/spec/ruby-lint/parser/classes.rb +80 -122
- data/spec/ruby-lint/parser/errors.rb +7 -14
- data/spec/ruby-lint/parser/metadata.rb +17 -0
- data/spec/ruby-lint/parser/method_definitions.rb +111 -0
- data/spec/ruby-lint/parser/methods.rb +184 -216
- data/spec/ruby-lint/parser/modules.rb +54 -33
- data/spec/ruby-lint/parser/operators.rb +30 -65
- data/spec/ruby-lint/parser/statements/begin.rb +55 -0
- data/spec/ruby-lint/parser/statements/case.rb +34 -0
- data/spec/ruby-lint/parser/statements/defined.rb +11 -0
- data/spec/ruby-lint/parser/statements/for.rb +34 -0
- data/spec/ruby-lint/parser/statements/if.rb +46 -0
- data/spec/ruby-lint/parser/statements/return.rb +14 -0
- data/spec/ruby-lint/parser/statements/super.rb +49 -0
- data/spec/ruby-lint/parser/statements/unless.rb +42 -0
- data/spec/ruby-lint/parser/statements/until.rb +25 -0
- data/spec/ruby-lint/parser/statements/while.rb +25 -0
- data/spec/ruby-lint/parser/statements/yield.rb +18 -0
- data/spec/ruby-lint/parser/types/arrays.rb +47 -0
- data/spec/ruby-lint/parser/types/booleans.rb +11 -0
- data/spec/ruby-lint/parser/types/constants.rb +32 -0
- data/spec/ruby-lint/parser/types/hashes.rb +55 -0
- data/spec/ruby-lint/parser/types/nil.rb +7 -0
- data/spec/ruby-lint/parser/types/numbers.rb +11 -0
- data/spec/ruby-lint/parser/types/procs.rb +11 -0
- data/spec/ruby-lint/parser/types/ranges.rb +11 -0
- data/spec/ruby-lint/parser/types/regexp.rb +27 -0
- data/spec/ruby-lint/parser/types/strings.rb +44 -0
- data/spec/ruby-lint/parser/types/symbols.rb +15 -0
- data/spec/ruby-lint/presenter/json.rb +31 -0
- data/spec/ruby-lint/presenter/text.rb +22 -0
- data/spec/ruby-lint/report.rb +45 -15
- data/spec/ruby-lint/report/entry.rb +24 -0
- data/spec/support/bacon.rb +33 -0
- data/spec/support/building.rb +43 -0
- data/spec/support/definitions.rb +23 -0
- data/spec/support/parsing.rb +23 -0
- data/spec/support/simplecov.rb +16 -0
- data/task/build.rake +9 -0
- data/task/checksum.rake +13 -0
- data/task/coverage.rake +6 -0
- data/task/doc.rake +5 -0
- data/task/generate.rake +34 -0
- data/task/graphviz.rake +12 -0
- data/task/stdlib.rake +2 -9
- data/task/tag.rake +6 -0
- metadata +337 -68
- metadata.gz.asc +17 -0
- data/.rbenv-version +0 -1
- data/lib/ruby-lint/analyze/coding_style.rb +0 -407
- data/lib/ruby-lint/analyze/definitions.rb +0 -244
- data/lib/ruby-lint/analyze/method_validation.rb +0 -104
- data/lib/ruby-lint/callback.rb +0 -67
- data/lib/ruby-lint/constant_importer.rb +0 -112
- data/lib/ruby-lint/definition.rb +0 -230
- data/lib/ruby-lint/formatter/text.rb +0 -54
- data/lib/ruby-lint/helper/definition_resolver.rb +0 -143
- data/lib/ruby-lint/helper/scoping.rb +0 -138
- data/lib/ruby-lint/options.rb +0 -58
- data/lib/ruby-lint/token/assignment_token.rb +0 -35
- data/lib/ruby-lint/token/begin_rescue_token.rb +0 -57
- data/lib/ruby-lint/token/block_token.rb +0 -26
- data/lib/ruby-lint/token/case_token.rb +0 -44
- data/lib/ruby-lint/token/class_token.rb +0 -24
- data/lib/ruby-lint/token/keyword_token.rb +0 -43
- data/lib/ruby-lint/token/method_definition_token.rb +0 -64
- data/lib/ruby-lint/token/method_token.rb +0 -56
- data/lib/ruby-lint/token/parameters_token.rb +0 -99
- data/lib/ruby-lint/token/regexp_token.rb +0 -15
- data/lib/ruby-lint/token/statement_token.rb +0 -69
- data/lib/ruby-lint/token/token.rb +0 -176
- data/lib/ruby-lint/token/variable_token.rb +0 -18
- data/spec/benchmarks/memory.rb +0 -52
- data/spec/benchmarks/parse_parser.rb +0 -16
- data/spec/fixtures/stdlib/un.rb +0 -348
- data/spec/ruby-lint/analyze/coding_style.rb +0 -224
- data/spec/ruby-lint/analyze/complex/un.rb +0 -29
- data/spec/ruby-lint/analyze/definitions/classes.rb +0 -114
- data/spec/ruby-lint/analyze/definitions/methods.rb +0 -91
- data/spec/ruby-lint/analyze/definitions/modules.rb +0 -207
- data/spec/ruby-lint/analyze/definitions/variables.rb +0 -103
- data/spec/ruby-lint/analyze/method_validation.rb +0 -177
- data/spec/ruby-lint/callback.rb +0 -28
- data/spec/ruby-lint/constant_importer.rb +0 -27
- data/spec/ruby-lint/definition.rb +0 -96
- data/spec/ruby-lint/formatter/text.rb +0 -21
- data/spec/ruby-lint/parser/arrays.rb +0 -147
- data/spec/ruby-lint/parser/expander_assignments.rb +0 -183
- data/spec/ruby-lint/parser/hashes.rb +0 -136
- data/spec/ruby-lint/parser/keywords.rb +0 -89
- data/spec/ruby-lint/parser/objects.rb +0 -39
- data/spec/ruby-lint/parser/procs.rb +0 -113
- data/spec/ruby-lint/parser/ranges.rb +0 -49
- data/spec/ruby-lint/parser/regexp.rb +0 -31
- data/spec/ruby-lint/parser/scalars.rb +0 -93
- data/spec/ruby-lint/parser/statements.rb +0 -591
- data/spec/ruby-lint/parser/variables.rb +0 -230
|
@@ -3,38 +3,26 @@ module RubyLint
|
|
|
3
3
|
# Exception class that's raised when the parser {RubyLint::Parser} detects
|
|
4
4
|
# syntax errors.
|
|
5
5
|
#
|
|
6
|
+
# @!attribute [r] line
|
|
7
|
+
# @return [Numeric]
|
|
8
|
+
# @!attribute [r] column
|
|
9
|
+
# @return [Numeric]
|
|
10
|
+
# @!attribute [r] file
|
|
11
|
+
# @return [String]
|
|
12
|
+
#
|
|
6
13
|
class ParserError < SyntaxError
|
|
7
|
-
|
|
8
|
-
# The line number on which the error occured.
|
|
9
|
-
#
|
|
10
|
-
# @return [Fixnum|Bignum]
|
|
11
|
-
#
|
|
12
|
-
attr_reader :line
|
|
14
|
+
attr_reader :line, :column, :file
|
|
13
15
|
|
|
14
16
|
##
|
|
15
|
-
#
|
|
16
|
-
#
|
|
17
|
-
# @
|
|
18
|
-
#
|
|
19
|
-
attr_reader :column
|
|
20
|
-
|
|
21
|
-
##
|
|
22
|
-
# The name of the file in which the error occured.
|
|
23
|
-
#
|
|
24
|
-
# @return [String]
|
|
25
|
-
#
|
|
26
|
-
attr_reader :file
|
|
27
|
-
|
|
28
|
-
##
|
|
29
|
-
# Creates a new instance of the error class.
|
|
30
|
-
#
|
|
31
|
-
# @param [String] message The error message.
|
|
32
|
-
# @param [Fixnum|Bignum] line The line of the error.
|
|
33
|
-
# @param [Fixnum|Bignum] column The column of the error.
|
|
34
|
-
# @param [String] file The file in which the error occured.
|
|
17
|
+
# @param [String] message
|
|
18
|
+
# @param [Numeric] line
|
|
19
|
+
# @param [Numeric] column
|
|
20
|
+
# @param [String] file
|
|
35
21
|
#
|
|
36
22
|
def initialize(message, line, column, file)
|
|
37
|
-
@line
|
|
23
|
+
@line = line
|
|
24
|
+
@column = column
|
|
25
|
+
@file = file
|
|
38
26
|
|
|
39
27
|
super(message)
|
|
40
28
|
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module RubyLint
|
|
2
|
+
module Presenter
|
|
3
|
+
##
|
|
4
|
+
# {RubyLint::Presenter::JSON} formats a instance of {RubyLint::Report} into
|
|
5
|
+
# a JSON formatted string.
|
|
6
|
+
#
|
|
7
|
+
class JSON
|
|
8
|
+
##
|
|
9
|
+
# @param [RubyLint::Report] report The report to present.
|
|
10
|
+
# @return [String]
|
|
11
|
+
#
|
|
12
|
+
def present(report)
|
|
13
|
+
require 'json'
|
|
14
|
+
|
|
15
|
+
return report.entries.sort.map(&:attributes).to_json
|
|
16
|
+
end
|
|
17
|
+
end # Text
|
|
18
|
+
end # Presenter
|
|
19
|
+
end # RubyLint
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
module RubyLint
|
|
2
|
+
module Presenter
|
|
3
|
+
##
|
|
4
|
+
# {RubyLint::Presenter::Text} formats a instance of {RubyLint::Report} into
|
|
5
|
+
# a text based, human readable format.
|
|
6
|
+
#
|
|
7
|
+
class Text
|
|
8
|
+
##
|
|
9
|
+
# The default format to use when presenting report entries.
|
|
10
|
+
#
|
|
11
|
+
# @return [String]
|
|
12
|
+
#
|
|
13
|
+
FORMAT = '%{file}: %{level}: line %{line}, column %{column}: %{message}'
|
|
14
|
+
|
|
15
|
+
##
|
|
16
|
+
# @param [String] format The format to use for each entry.
|
|
17
|
+
#
|
|
18
|
+
def initialize(format = FORMAT.dup)
|
|
19
|
+
@format = format
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
##
|
|
23
|
+
# @param [RubyLint::Report] report The report to present.
|
|
24
|
+
# @return [String]
|
|
25
|
+
#
|
|
26
|
+
def present(report)
|
|
27
|
+
entries = []
|
|
28
|
+
|
|
29
|
+
report.entries.sort.each do |entry|
|
|
30
|
+
entries << @format % entry.attributes
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
return entries.join("\n")
|
|
34
|
+
end
|
|
35
|
+
end # Text
|
|
36
|
+
end # Presenter
|
|
37
|
+
end # RubyLint
|
data/lib/ruby-lint/report.rb
CHANGED
|
@@ -1,98 +1,140 @@
|
|
|
1
1
|
module RubyLint
|
|
2
2
|
##
|
|
3
|
-
# {RubyLint::Report} is a
|
|
4
|
-
# informational messages
|
|
5
|
-
#
|
|
3
|
+
# {RubyLint::Report} is a data container for error messages, warnings,
|
|
4
|
+
# informational messages and other custom defined types of messages. It
|
|
5
|
+
# should be used by the various analysis classes to store information such as
|
|
6
|
+
# errors for undefined variables and warnings for potentially confusing code.
|
|
6
7
|
#
|
|
7
|
-
#
|
|
8
|
+
# ## Levels
|
|
8
9
|
#
|
|
9
|
-
#
|
|
10
|
-
#
|
|
10
|
+
# Each instance can add entries for a set of predefined reporting levels. By
|
|
11
|
+
# default the following levels are defined:
|
|
11
12
|
#
|
|
12
|
-
#
|
|
13
|
-
#
|
|
14
|
-
#
|
|
13
|
+
# * error
|
|
14
|
+
# * warning
|
|
15
|
+
# * info
|
|
15
16
|
#
|
|
16
|
-
#
|
|
17
|
-
#
|
|
18
|
-
# * `:info`
|
|
17
|
+
# Unless other levels are specified when creating an instance these levels
|
|
18
|
+
# are used for each new instance.
|
|
19
19
|
#
|
|
20
|
-
#
|
|
21
|
-
# to add data for a specific level. If this level is disabled the data is not
|
|
22
|
-
# added to the report.
|
|
20
|
+
# Adding available levels can be done as following:
|
|
23
21
|
#
|
|
24
|
-
#
|
|
22
|
+
# RubyLint::Report.add_level(:pedantic)
|
|
25
23
|
#
|
|
26
|
-
#
|
|
24
|
+
# Retrieving a list of available levels in turn is done as following:
|
|
27
25
|
#
|
|
28
|
-
#
|
|
26
|
+
# RubyLint::Report.levels # => [:error, :warning, :info, :pedantic]
|
|
29
27
|
#
|
|
30
|
-
#
|
|
31
|
-
#
|
|
28
|
+
# Each level is a Symbol and will be cased to one automatically.
|
|
29
|
+
#
|
|
30
|
+
# ## Adding Entries
|
|
31
|
+
#
|
|
32
|
+
# Adding entries can be done by either calling {RubyLint::Report#add} or a
|
|
33
|
+
# method for the corresponding reporting level:
|
|
34
|
+
#
|
|
35
|
+
# report = RubyLint::Report.new
|
|
36
|
+
#
|
|
37
|
+
# # Both these calls do the same.
|
|
38
|
+
# report.add(:info, 'informational message', 1, 2, 'file.rb')
|
|
39
|
+
# report.info('informational message', 1, 2, 'file.rb')
|
|
40
|
+
#
|
|
41
|
+
# When using {RubyLint::Report#add} any invalid/disabled reporting levels
|
|
42
|
+
# will be silently ignored. This makes it easier for code to add entries of a
|
|
43
|
+
# particular level without having to manually check if said level is enabled.
|
|
44
|
+
#
|
|
45
|
+
# @!attribute [r] entries
|
|
46
|
+
# @return [Array] The entries of the report.
|
|
47
|
+
# @!attribute [r] levels
|
|
48
|
+
# @return [Array] The enabled levels of the report.
|
|
32
49
|
#
|
|
33
50
|
class Report
|
|
51
|
+
attr_reader :entries, :levels
|
|
52
|
+
|
|
34
53
|
##
|
|
35
|
-
#
|
|
54
|
+
# Reporting levels that are always available.
|
|
36
55
|
#
|
|
37
56
|
# @return [Array]
|
|
38
57
|
#
|
|
39
58
|
DEFAULT_LEVELS = [:error, :warning, :info]
|
|
40
59
|
|
|
41
60
|
##
|
|
42
|
-
#
|
|
61
|
+
# Adds a new reporting level to the list of available levels.
|
|
43
62
|
#
|
|
44
|
-
# @
|
|
63
|
+
# @param [#to_sym] level The reporting level to add.
|
|
45
64
|
#
|
|
46
|
-
|
|
65
|
+
def self.add_level(level)
|
|
66
|
+
levels << level.to_sym
|
|
67
|
+
end
|
|
47
68
|
|
|
48
69
|
##
|
|
49
|
-
#
|
|
50
|
-
#
|
|
70
|
+
# Deletes a reporting level from the list of available levels. This does
|
|
71
|
+
# not affect existing instances of this class.
|
|
51
72
|
#
|
|
52
|
-
# @
|
|
73
|
+
# @param [#to_sym] level The level to delete.
|
|
53
74
|
#
|
|
54
|
-
|
|
75
|
+
def self.delete_level(level)
|
|
76
|
+
levels.delete(level.to_sym)
|
|
77
|
+
end
|
|
55
78
|
|
|
56
79
|
##
|
|
57
|
-
#
|
|
80
|
+
# Returns a list of the available reporting levels.
|
|
58
81
|
#
|
|
59
|
-
# @return [
|
|
82
|
+
# @return [Array]
|
|
60
83
|
#
|
|
61
|
-
|
|
84
|
+
def self.levels
|
|
85
|
+
return @levels ||= DEFAULT_LEVELS.dup
|
|
86
|
+
end
|
|
62
87
|
|
|
63
88
|
##
|
|
64
|
-
#
|
|
65
|
-
#
|
|
66
|
-
# @param [String] file The name/path of the file that this report belongs
|
|
67
|
-
# to.
|
|
68
|
-
# @param [Array] levels The message levels to use for this report.
|
|
89
|
+
# @param [Array] levels The reporting levels to enable for this instance.
|
|
69
90
|
#
|
|
70
|
-
def initialize(
|
|
71
|
-
@
|
|
72
|
-
@
|
|
73
|
-
@messages = {}
|
|
91
|
+
def initialize(levels = self.class.levels)
|
|
92
|
+
@levels = levels.map(&:to_sym)
|
|
93
|
+
@entries = []
|
|
74
94
|
end
|
|
75
95
|
|
|
76
96
|
##
|
|
77
|
-
# Adds a
|
|
97
|
+
# Adds a new entry to the report.
|
|
78
98
|
#
|
|
79
|
-
# @param [#to_sym] level
|
|
80
|
-
# @param [String] message
|
|
81
|
-
# @param [
|
|
82
|
-
# @param [
|
|
99
|
+
# @param [#to_sym] level
|
|
100
|
+
# @param [String] message
|
|
101
|
+
# @param [Numeric] line
|
|
102
|
+
# @param [Numeric] column
|
|
103
|
+
# @param [String] file
|
|
83
104
|
#
|
|
84
|
-
def add(level, message, line, column)
|
|
105
|
+
def add(level, message, line, column, file)
|
|
85
106
|
level = level.to_sym
|
|
86
107
|
|
|
87
|
-
|
|
108
|
+
if valid_level?(level)
|
|
109
|
+
@entries << Entry.new(level, message, line, column, file)
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
##
|
|
114
|
+
# Makes it easier to add entries to a report by calling methods such as
|
|
115
|
+
# `#info` instead of `add(:info, ...)`.
|
|
116
|
+
#
|
|
117
|
+
# @param [Symbol] name
|
|
118
|
+
# @param [Array] args
|
|
119
|
+
# @param [Proc] block
|
|
120
|
+
# @raise [NoMethodError] Raised when an invalid method was called.
|
|
121
|
+
#
|
|
122
|
+
def method_missing(name, *args, &block)
|
|
123
|
+
if valid_level?(name)
|
|
124
|
+
return add(name, *args, &block)
|
|
125
|
+
else
|
|
126
|
+
raise NoMethodError, 'undefined method "%s" for %s' % [name, inspect]
|
|
127
|
+
end
|
|
128
|
+
end
|
|
88
129
|
|
|
89
|
-
|
|
130
|
+
private
|
|
90
131
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
132
|
+
##
|
|
133
|
+
# @param [Symbol] level
|
|
134
|
+
# @return [TrueClass|FalseClass]
|
|
135
|
+
#
|
|
136
|
+
def valid_level?(level)
|
|
137
|
+
return @levels.include?(level)
|
|
96
138
|
end
|
|
97
139
|
end # Report
|
|
98
140
|
end # RubyLint
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
module RubyLint
|
|
2
|
+
class Report
|
|
3
|
+
##
|
|
4
|
+
# {RubyLint::Report::Entry} contains data about a single report entry such
|
|
5
|
+
# as the message and line number.
|
|
6
|
+
#
|
|
7
|
+
# @!attribute [r] level
|
|
8
|
+
# @return [Symbol]
|
|
9
|
+
# @!attribute [r] message
|
|
10
|
+
# @return [String]
|
|
11
|
+
# @!attribute [r] line
|
|
12
|
+
# @return [Numeric]
|
|
13
|
+
# @!attribute [r] column
|
|
14
|
+
# @return [Numeric]
|
|
15
|
+
# @!attribute [r] file
|
|
16
|
+
# @return [String]
|
|
17
|
+
#
|
|
18
|
+
class Entry
|
|
19
|
+
attr_reader :level, :message, :line, :column, :file
|
|
20
|
+
|
|
21
|
+
##
|
|
22
|
+
# @param [Symbol] level
|
|
23
|
+
# @param [String] message
|
|
24
|
+
# @param [Numeric] line
|
|
25
|
+
# @param [Numeric] column
|
|
26
|
+
# @param [String] file
|
|
27
|
+
#
|
|
28
|
+
def initialize(level, message, line, column, file)
|
|
29
|
+
@level = level
|
|
30
|
+
@message = message
|
|
31
|
+
@line = line
|
|
32
|
+
@column = column
|
|
33
|
+
@file = file
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
##
|
|
37
|
+
# @return [String]
|
|
38
|
+
#
|
|
39
|
+
def filename
|
|
40
|
+
return File.basename(file)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
##
|
|
44
|
+
# Returns a Hash containing the attributes of the entry.
|
|
45
|
+
#
|
|
46
|
+
# @return [Hash]
|
|
47
|
+
#
|
|
48
|
+
def attributes
|
|
49
|
+
return {
|
|
50
|
+
:level => level,
|
|
51
|
+
:message => message,
|
|
52
|
+
:line => line,
|
|
53
|
+
:column => column,
|
|
54
|
+
:file => file
|
|
55
|
+
}
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
##
|
|
59
|
+
# Determines the sort order of the current entry. The entry is sorted
|
|
60
|
+
# based on the filename and the reporting level.
|
|
61
|
+
#
|
|
62
|
+
# @param [RubyLint::Report::Entry] other The entry to compare with the
|
|
63
|
+
# current one.
|
|
64
|
+
# @return [Numeric]
|
|
65
|
+
#
|
|
66
|
+
def <=>(other)
|
|
67
|
+
return (filename <=> other.filename) <=> (other.level <=> level)
|
|
68
|
+
end
|
|
69
|
+
end # Entry
|
|
70
|
+
end # Report
|
|
71
|
+
end # RubyLint
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
##
|
|
2
|
+
# Constant: <%= @constant_name %>
|
|
3
|
+
# Created: <%= Time.new %>
|
|
4
|
+
# Platform: <%= RUBY_ENGINE %> <%= Rubinius::VERSION rescue RUBY_VERSION %>
|
|
5
|
+
#
|
|
6
|
+
RubyLint.global_scope.define_constant('<%= @constant_name %>') do |klass|
|
|
7
|
+
<%- if @superclass -%>
|
|
8
|
+
klass.inherits(RubyLint.global_constant('<%= @superclass %>'))
|
|
9
|
+
<%- end -%>
|
|
10
|
+
<%- @methods.each do |type, collection| -%>
|
|
11
|
+
<%- collection.each do |name, args| -%>
|
|
12
|
+
|
|
13
|
+
<%- if args.empty? -%>
|
|
14
|
+
klass.define_<%= type %>('<%= name %>')
|
|
15
|
+
<%- else -%>
|
|
16
|
+
klass.define_<%= type %>('<%= name %>') do |method|
|
|
17
|
+
<%- args.each do |arg| -%>
|
|
18
|
+
method.define_<%= arg[:method] %>('<%= arg[:name] %>')
|
|
19
|
+
<%- end -%>
|
|
20
|
+
end
|
|
21
|
+
<%- end -%>
|
|
22
|
+
<%- end -%>
|
|
23
|
+
<%- end -%>
|
|
24
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module RubyLint
|
|
2
|
+
module Template
|
|
3
|
+
##
|
|
4
|
+
# Class used for storing variables for an ERB template without polluting
|
|
5
|
+
# the namespace of the code that uses the template.
|
|
6
|
+
#
|
|
7
|
+
class Scope
|
|
8
|
+
##
|
|
9
|
+
# @param [Hash] variables
|
|
10
|
+
#
|
|
11
|
+
def initialize(variables = {})
|
|
12
|
+
variables.each do |name, value|
|
|
13
|
+
instance_variable_set("@#{name}", value)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
##
|
|
18
|
+
# @return [Binding]
|
|
19
|
+
#
|
|
20
|
+
def get_binding
|
|
21
|
+
return binding # #binding() is a private method.
|
|
22
|
+
end
|
|
23
|
+
end # Scope
|
|
24
|
+
end # Template
|
|
25
|
+
end # RubyLint
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
module RubyLint
|
|
2
|
+
##
|
|
3
|
+
# Module that provides various predicate methods for checking node/definition
|
|
4
|
+
# types.
|
|
5
|
+
#
|
|
6
|
+
module VariablePredicates
|
|
7
|
+
##
|
|
8
|
+
# Array containing the various variable types that are available in Ruby.
|
|
9
|
+
#
|
|
10
|
+
# @return [Array]
|
|
11
|
+
#
|
|
12
|
+
VARIABLE_TYPES = [
|
|
13
|
+
:local_variable,
|
|
14
|
+
:instance_variable,
|
|
15
|
+
:class_variable,
|
|
16
|
+
:global_variable
|
|
17
|
+
]
|
|
18
|
+
|
|
19
|
+
##
|
|
20
|
+
# Array containing various Ruby types that are considered to be scalar
|
|
21
|
+
# values.
|
|
22
|
+
#
|
|
23
|
+
# @return [Array]
|
|
24
|
+
#
|
|
25
|
+
SCALAR_TYPES = [:integer, :float, :string, :symbol]
|
|
26
|
+
|
|
27
|
+
##
|
|
28
|
+
# Array containing various predicate methods to create.
|
|
29
|
+
#
|
|
30
|
+
# @return [Array]
|
|
31
|
+
#
|
|
32
|
+
PREDICATE_METHODS = [
|
|
33
|
+
:aref,
|
|
34
|
+
:array,
|
|
35
|
+
:class,
|
|
36
|
+
:constant,
|
|
37
|
+
:constant_path,
|
|
38
|
+
:hash,
|
|
39
|
+
:identifier,
|
|
40
|
+
:keyword,
|
|
41
|
+
:method,
|
|
42
|
+
:method_definition,
|
|
43
|
+
:module
|
|
44
|
+
]
|
|
45
|
+
|
|
46
|
+
##
|
|
47
|
+
# Hash containing various Node types and the associated Ruby classes.
|
|
48
|
+
#
|
|
49
|
+
# @return [Hash]
|
|
50
|
+
#
|
|
51
|
+
RUBY_CLASSES = {
|
|
52
|
+
:string => 'String',
|
|
53
|
+
:symbol => 'Symbol',
|
|
54
|
+
:integer => 'Fixnum',
|
|
55
|
+
:float => 'Float',
|
|
56
|
+
:regexp => 'Regexp',
|
|
57
|
+
:array => 'Array',
|
|
58
|
+
:hash => 'Hash',
|
|
59
|
+
:range => 'Range',
|
|
60
|
+
:lambda => 'Proc'
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
(VARIABLE_TYPES + PREDICATE_METHODS).each do |type|
|
|
64
|
+
define_method("#{type}?") do
|
|
65
|
+
return @type == type
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
##
|
|
70
|
+
# Returns `true` if the current node is a variable node.
|
|
71
|
+
#
|
|
72
|
+
# @return [TrueClass|FalseClass]
|
|
73
|
+
#
|
|
74
|
+
def variable?
|
|
75
|
+
return VARIABLE_TYPES.include?(@type)
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
##
|
|
79
|
+
# @return [TrueClass|FalseClass]
|
|
80
|
+
#
|
|
81
|
+
def constant?
|
|
82
|
+
return @type == :constant || @type == :module || @type == :class
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
##
|
|
86
|
+
# Returns `true` if the object type is a Ruby scalar such as a string or
|
|
87
|
+
# integer.
|
|
88
|
+
#
|
|
89
|
+
def scalar?
|
|
90
|
+
return SCALAR_TYPES.include?(@type)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
##
|
|
94
|
+
# Indicates if the node is a collection of values.
|
|
95
|
+
#
|
|
96
|
+
# @return [TrueClass|FalseClass]
|
|
97
|
+
#
|
|
98
|
+
def collection?
|
|
99
|
+
return array? || hash?
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
##
|
|
103
|
+
# @return [String]
|
|
104
|
+
#
|
|
105
|
+
def ruby_class
|
|
106
|
+
return RUBY_CLASSES[type]
|
|
107
|
+
end
|
|
108
|
+
end # VariablePredicates
|
|
109
|
+
end # RubyLint
|