ruby-lint 0.0.1a → 0.0.1a1
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/.yardopts +1 -1
- data/MANIFEST +65 -62
- data/README.md +114 -13
- data/bin/ruby-lint +6 -0
- data/lib/ruby-lint.rb +36 -0
- data/lib/{rlint → ruby-lint}/analyze/coding_style.rb +32 -32
- data/lib/{rlint → ruby-lint}/analyze/definitions.rb +13 -13
- data/lib/{rlint → ruby-lint}/analyze/method_validation.rb +5 -5
- data/lib/{rlint → ruby-lint}/analyze/shadowing_variables.rb +5 -5
- data/lib/{rlint → ruby-lint}/analyze/undefined_variables.rb +7 -7
- data/lib/{rlint → ruby-lint}/analyze/unused_variables.rb +6 -6
- data/lib/{rlint → ruby-lint}/callback.rb +11 -11
- data/lib/{rlint → ruby-lint}/cli.rb +17 -17
- data/lib/{rlint → ruby-lint}/constant_importer.rb +18 -8
- data/lib/{rlint → ruby-lint}/definition.rb +10 -10
- data/lib/{rlint → ruby-lint}/formatter/text.rb +6 -6
- data/lib/{rlint → ruby-lint}/helper/definition_resolver.rb +11 -11
- data/lib/{rlint → ruby-lint}/helper/scoping.rb +14 -14
- data/lib/{rlint → ruby-lint}/iterator.rb +22 -22
- data/lib/{rlint → ruby-lint}/options.rb +9 -9
- data/lib/{rlint → ruby-lint}/parser.rb +111 -111
- data/lib/{rlint → ruby-lint}/parser_error.rb +3 -3
- data/lib/{rlint → ruby-lint}/report.rb +8 -8
- data/lib/{rlint → ruby-lint}/token/assignment_token.rb +4 -4
- data/lib/{rlint → ruby-lint}/token/begin_rescue_token.rb +7 -7
- data/lib/{rlint → ruby-lint}/token/block_token.rb +12 -3
- data/lib/{rlint → ruby-lint}/token/case_token.rb +5 -5
- data/lib/{rlint → ruby-lint}/token/class_token.rb +3 -3
- data/lib/{rlint → ruby-lint}/token/method_definition_token.rb +8 -8
- data/lib/{rlint → ruby-lint}/token/method_token.rb +9 -7
- data/lib/{rlint → ruby-lint}/token/parameters_token.rb +6 -6
- data/lib/{rlint → ruby-lint}/token/regexp_token.rb +2 -2
- data/lib/{rlint → ruby-lint}/token/statement_token.rb +6 -6
- data/lib/{rlint → ruby-lint}/token/token.rb +8 -6
- data/lib/{rlint → ruby-lint}/token/variable_token.rb +3 -3
- data/lib/ruby-lint/version.rb +3 -0
- data/ruby-lint.gemspec +5 -5
- data/spec/benchmarks/memory.rb +7 -7
- data/spec/benchmarks/parse_parser.rb +5 -5
- data/spec/fixtures/stdlib/un.rb +348 -0
- data/spec/helper.rb +3 -1
- data/spec/{rlint → ruby-lint}/analyze/coding_style.rb +30 -30
- data/spec/ruby-lint/analyze/complex/un.rb +29 -0
- data/spec/{rlint → ruby-lint}/analyze/definitions/classes.rb +25 -25
- data/spec/{rlint → ruby-lint}/analyze/definitions/methods.rb +22 -22
- data/spec/{rlint → ruby-lint}/analyze/definitions/modules.rb +42 -42
- data/spec/{rlint → ruby-lint}/analyze/definitions/variables.rb +27 -27
- data/spec/{rlint → ruby-lint}/analyze/method_validation.rb +31 -31
- data/spec/{rlint → ruby-lint}/analyze/shadowing_variables.rb +6 -6
- data/spec/{rlint → ruby-lint}/analyze/undefined_variables.rb +37 -37
- data/spec/{rlint → ruby-lint}/analyze/unused_variables.rb +21 -21
- data/spec/{rlint → ruby-lint}/callback.rb +7 -7
- data/spec/{rlint → ruby-lint}/constant_importer.rb +6 -6
- data/spec/{rlint → ruby-lint}/definition.rb +25 -25
- data/spec/{rlint → ruby-lint}/formatter/text.rb +4 -4
- data/spec/{rlint → ruby-lint}/iterator.rb +38 -38
- data/spec/{rlint → ruby-lint}/parser/arrays.rb +28 -28
- data/spec/{rlint → ruby-lint}/parser/classes.rb +23 -23
- data/spec/{rlint → ruby-lint}/parser/errors.rb +4 -4
- data/spec/{rlint → ruby-lint}/parser/hashes.rb +24 -24
- data/spec/{rlint → ruby-lint}/parser/methods.rb +50 -50
- data/spec/{rlint → ruby-lint}/parser/modules.rb +8 -8
- data/spec/{rlint → ruby-lint}/parser/objects.rb +8 -8
- data/spec/{rlint → ruby-lint}/parser/operators.rb +14 -14
- data/spec/{rlint → ruby-lint}/parser/procs.rb +26 -26
- data/spec/{rlint → ruby-lint}/parser/ranges.rb +9 -9
- data/spec/{rlint → ruby-lint}/parser/regexp.rb +5 -5
- data/spec/{rlint → ruby-lint}/parser/scalars.rb +17 -17
- data/spec/{rlint → ruby-lint}/parser/statements.rb +94 -94
- data/spec/{rlint → ruby-lint}/parser/variables.rb +37 -37
- data/spec/{rlint → ruby-lint}/report.rb +4 -4
- data/task/manifest.rake +8 -0
- data/task/test.rake +1 -1
- metadata +69 -66
- data/bin/rlint +0 -6
- data/lib/rlint.rb +0 -36
- data/lib/rlint/version.rb +0 -3
data/.yardopts
CHANGED
data/MANIFEST
CHANGED
@@ -6,74 +6,77 @@ LICENSE
|
|
6
6
|
MANIFEST
|
7
7
|
README.md
|
8
8
|
Rakefile
|
9
|
-
bin/
|
9
|
+
bin/ruby-lint
|
10
10
|
doc/.gitkeep
|
11
11
|
doc/build/.gitkeep
|
12
12
|
doc/css/.gitkeep
|
13
13
|
doc/css/common.css
|
14
|
-
lib/
|
15
|
-
lib/
|
16
|
-
lib/
|
17
|
-
lib/
|
18
|
-
lib/
|
19
|
-
lib/
|
20
|
-
lib/
|
21
|
-
lib/
|
22
|
-
lib/
|
23
|
-
lib/
|
24
|
-
lib/
|
25
|
-
lib/
|
26
|
-
lib/
|
27
|
-
lib/
|
28
|
-
lib/
|
29
|
-
lib/
|
30
|
-
lib/
|
31
|
-
lib/
|
32
|
-
lib/
|
33
|
-
lib/
|
34
|
-
lib/
|
35
|
-
lib/
|
36
|
-
lib/
|
37
|
-
lib/
|
38
|
-
lib/
|
39
|
-
lib/
|
40
|
-
lib/
|
41
|
-
lib/
|
42
|
-
lib/
|
43
|
-
lib/
|
44
|
-
lib/
|
45
|
-
lib/
|
14
|
+
lib/ruby-lint.rb
|
15
|
+
lib/ruby-lint/analyze/coding_style.rb
|
16
|
+
lib/ruby-lint/analyze/definitions.rb
|
17
|
+
lib/ruby-lint/analyze/method_validation.rb
|
18
|
+
lib/ruby-lint/analyze/shadowing_variables.rb
|
19
|
+
lib/ruby-lint/analyze/undefined_variables.rb
|
20
|
+
lib/ruby-lint/analyze/unused_variables.rb
|
21
|
+
lib/ruby-lint/callback.rb
|
22
|
+
lib/ruby-lint/cli.rb
|
23
|
+
lib/ruby-lint/constant_importer.rb
|
24
|
+
lib/ruby-lint/definition.rb
|
25
|
+
lib/ruby-lint/formatter/text.rb
|
26
|
+
lib/ruby-lint/helper/definition_resolver.rb
|
27
|
+
lib/ruby-lint/helper/scoping.rb
|
28
|
+
lib/ruby-lint/iterator.rb
|
29
|
+
lib/ruby-lint/options.rb
|
30
|
+
lib/ruby-lint/parser.rb
|
31
|
+
lib/ruby-lint/parser_error.rb
|
32
|
+
lib/ruby-lint/report.rb
|
33
|
+
lib/ruby-lint/token/assignment_token.rb
|
34
|
+
lib/ruby-lint/token/begin_rescue_token.rb
|
35
|
+
lib/ruby-lint/token/block_token.rb
|
36
|
+
lib/ruby-lint/token/case_token.rb
|
37
|
+
lib/ruby-lint/token/class_token.rb
|
38
|
+
lib/ruby-lint/token/method_definition_token.rb
|
39
|
+
lib/ruby-lint/token/method_token.rb
|
40
|
+
lib/ruby-lint/token/parameters_token.rb
|
41
|
+
lib/ruby-lint/token/regexp_token.rb
|
42
|
+
lib/ruby-lint/token/statement_token.rb
|
43
|
+
lib/ruby-lint/token/token.rb
|
44
|
+
lib/ruby-lint/token/variable_token.rb
|
45
|
+
lib/ruby-lint/version.rb
|
46
46
|
ruby-lint.gemspec
|
47
47
|
spec/benchmarks/memory.rb
|
48
48
|
spec/benchmarks/parse_parser.rb
|
49
|
+
spec/fixtures/stdlib/un.rb
|
49
50
|
spec/helper.rb
|
50
|
-
spec/
|
51
|
-
spec/
|
52
|
-
spec/
|
53
|
-
spec/
|
54
|
-
spec/
|
55
|
-
spec/
|
56
|
-
spec/
|
57
|
-
spec/
|
58
|
-
spec/
|
59
|
-
spec/
|
60
|
-
spec/
|
61
|
-
spec/
|
62
|
-
spec/
|
63
|
-
spec/
|
64
|
-
spec/
|
65
|
-
spec/
|
66
|
-
spec/
|
67
|
-
spec/
|
68
|
-
spec/
|
69
|
-
spec/
|
70
|
-
spec/
|
71
|
-
spec/
|
72
|
-
spec/
|
73
|
-
spec/
|
74
|
-
spec/
|
75
|
-
spec/
|
76
|
-
spec/
|
77
|
-
spec/
|
78
|
-
spec/
|
51
|
+
spec/ruby-lint/analyze/coding_style.rb
|
52
|
+
spec/ruby-lint/analyze/complex/un.rb
|
53
|
+
spec/ruby-lint/analyze/definitions/classes.rb
|
54
|
+
spec/ruby-lint/analyze/definitions/methods.rb
|
55
|
+
spec/ruby-lint/analyze/definitions/modules.rb
|
56
|
+
spec/ruby-lint/analyze/definitions/variables.rb
|
57
|
+
spec/ruby-lint/analyze/method_validation.rb
|
58
|
+
spec/ruby-lint/analyze/shadowing_variables.rb
|
59
|
+
spec/ruby-lint/analyze/undefined_variables.rb
|
60
|
+
spec/ruby-lint/analyze/unused_variables.rb
|
61
|
+
spec/ruby-lint/callback.rb
|
62
|
+
spec/ruby-lint/constant_importer.rb
|
63
|
+
spec/ruby-lint/definition.rb
|
64
|
+
spec/ruby-lint/formatter/text.rb
|
65
|
+
spec/ruby-lint/iterator.rb
|
66
|
+
spec/ruby-lint/parser/arrays.rb
|
67
|
+
spec/ruby-lint/parser/classes.rb
|
68
|
+
spec/ruby-lint/parser/errors.rb
|
69
|
+
spec/ruby-lint/parser/hashes.rb
|
70
|
+
spec/ruby-lint/parser/methods.rb
|
71
|
+
spec/ruby-lint/parser/modules.rb
|
72
|
+
spec/ruby-lint/parser/objects.rb
|
73
|
+
spec/ruby-lint/parser/operators.rb
|
74
|
+
spec/ruby-lint/parser/procs.rb
|
75
|
+
spec/ruby-lint/parser/ranges.rb
|
76
|
+
spec/ruby-lint/parser/regexp.rb
|
77
|
+
spec/ruby-lint/parser/scalars.rb
|
78
|
+
spec/ruby-lint/parser/statements.rb
|
79
|
+
spec/ruby-lint/parser/variables.rb
|
80
|
+
spec/ruby-lint/report.rb
|
81
|
+
task/manifest.rake
|
79
82
|
task/test.rake
|
data/README.md
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
# README
|
2
2
|
|
3
|
-
**
|
3
|
+
**RubyLint is currently alpha quality, expect things to break and change without
|
4
4
|
notice. Patches and bug reports are more than welcome.**
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
6
|
+
Ruby Lint is a linter and static code analysis tool for Ruby inspired by
|
7
|
+
similar tools such as JSHint. It makes it possible for developers to detect
|
8
|
+
errors such as undefined (or unused) variables and the use of non existing
|
9
|
+
methods.
|
10
10
|
|
11
11
|
## Requirements
|
12
12
|
|
@@ -15,32 +15,133 @@ use of non existing methods.
|
|
15
15
|
|
16
16
|
## Installation
|
17
17
|
|
18
|
-
|
18
|
+
RubyLint can be installed by running the following command:
|
19
19
|
|
20
|
-
$ gem install ruby-lint
|
20
|
+
$ gem install ruby-lint --pre
|
21
|
+
|
22
|
+
Once a stable version has been released the `--pre` switch is no longer
|
23
|
+
required.
|
21
24
|
|
22
25
|
Please note that there already is an existing gem called "rlint". This Gem is
|
23
26
|
**not** the same, it just happens to be a similar project (one that seems
|
24
27
|
abandoned) that uses the same name.
|
25
28
|
|
29
|
+
## Usage
|
30
|
+
|
31
|
+
RubyLint can be used in two different ways: using the CLI interface and by using
|
32
|
+
the Ruby code directly.
|
33
|
+
|
34
|
+
The CLI can be used using the command `rlint`, see the output of `rlint --help`
|
35
|
+
for more information on how to configure it and how to analyze Ruby files.
|
36
|
+
|
37
|
+
The Ruby code itself takes a bit more effort but gives you more flexibility. In
|
38
|
+
the future you'll also be able to customize RubyLint using a Ruby configuration
|
39
|
+
files. In order to analyze Ruby code you'll need a few things:
|
40
|
+
|
41
|
+
* An instance of `RubyLint::Iterator`
|
42
|
+
* An instance of `RubyLint::Report`
|
43
|
+
* A formatter for the report
|
44
|
+
* A block of Ruby code
|
45
|
+
* A number of analyzer classes such as `RubyLint::Analyze::UndefinedVariables`
|
46
|
+
|
47
|
+
A short example is the following:
|
48
|
+
|
49
|
+
require 'ruby-lint'
|
50
|
+
|
51
|
+
code = 'obviously your Ruby code goes in here'
|
52
|
+
tokens = RubyLint::Parser.new(code).parse
|
53
|
+
report = RubyLint::Report.new
|
54
|
+
formatter = RubyLint::Formatter.new
|
55
|
+
iterator = RubyLint::Iterator.new(report)
|
56
|
+
|
57
|
+
iterator.bind(RubyLint::Analyze::Definitions)
|
58
|
+
iterator.bind(RubyLint::Analyze::MethodValidation)
|
59
|
+
|
60
|
+
iterator.run(tokens)
|
61
|
+
|
62
|
+
puts formatter.format(report)
|
63
|
+
|
64
|
+
## Design
|
65
|
+
|
66
|
+
RubyLint's design is broken up into 5 different parts:
|
67
|
+
|
68
|
+
* A parser that turns a block of Ruby code into an AST.
|
69
|
+
* A class that iterates over this AST and executes callback methods (aptly
|
70
|
+
named `RubyLint::Iterator`).
|
71
|
+
* A set of callback classes that are used by an iterator. These callback
|
72
|
+
classes perform the actual data analysis.
|
73
|
+
* A report for storing error messages, warnings and informal messages.
|
74
|
+
* A formatter that turns a report into something useful such as plain text or
|
75
|
+
JSON.
|
76
|
+
|
77
|
+
The process of analyzing code basically looks like the following:
|
78
|
+
|
79
|
+
+------+
|
80
|
+
| Code |
|
81
|
+
+------+
|
82
|
+
|
|
83
|
+
v
|
84
|
+
+---------------+
|
85
|
+
| RubyLint::Parser |
|
86
|
+
+---------------+
|
87
|
+
|
|
88
|
+
v
|
89
|
+
+-----------------+
|
90
|
+
| RubyLint::Iterator |
|
91
|
+
+-----------------+
|
92
|
+
|
|
93
|
+
v
|
94
|
+
+---------------------------+
|
95
|
+
| RubyLint::Callback instances |
|
96
|
+
+---------------------------+
|
97
|
+
|
|
98
|
+
v
|
99
|
+
+---------------+
|
100
|
+
| RubyLint::Report |
|
101
|
+
+---------------+
|
102
|
+
|
|
103
|
+
v
|
104
|
+
+----------------------------+
|
105
|
+
| RubyLint::Formatter instances |
|
106
|
+
+----------------------------+
|
107
|
+
|
|
108
|
+
v
|
109
|
+
+------------------+
|
110
|
+
| Something useful |
|
111
|
+
+------------------+
|
112
|
+
|
113
|
+
The advantage of this setup is that different tasks are decoupled (where
|
114
|
+
possible) and that it's fairly trivial to write custom formatters that spit out
|
115
|
+
JSON, HTML, XML or something else. It also makes things easier to maintain as
|
116
|
+
there's no single giant lump of code that does everything.
|
117
|
+
|
26
118
|
## Compatibility Issues
|
27
119
|
|
28
|
-
Currently
|
120
|
+
Currently RubyLint can only be executed using MRI 1.9.3, it does not run on MRI
|
29
121
|
1.8.x due to the lack of Ripper. It also does not yet run without errors on
|
30
122
|
MRI 2.0 as the addition of named variables changes the Ripper output, something
|
31
|
-
|
123
|
+
RubyLint doesn't properly handle at the moment.
|
32
124
|
|
33
|
-
For the time being
|
125
|
+
For the time being RubyLint will stick to using Ripper which means it's also
|
34
126
|
limited to MRI 1.9.x/2.0.x. I've been looking around for alternatives so that
|
35
|
-
|
36
|
-
found a worthy alternative. For now I'd rather focus on making
|
127
|
+
RubyLint can be run on Jruby/Rubinius in the future but so far I haven't really
|
128
|
+
found a worthy alternative. For now I'd rather focus on making RubyLint work on
|
37
129
|
one implementation instead of a number of different ones.
|
38
130
|
|
39
|
-
Also keep in mind that while in theory
|
131
|
+
Also keep in mind that while in theory RubyLint should run on MRI 1.8.x I couldn't
|
40
132
|
get the "ripper" gem to install properly, thus I'm unable to confirm this. Feel
|
41
133
|
free to try it out but I won't bother with MRI 1.8.x myself if it requires more
|
42
134
|
than a few minutes worth of work.
|
43
135
|
|
136
|
+
## TODO
|
137
|
+
|
138
|
+
* Allow options to be set and libraries to be loaded using a configuration
|
139
|
+
file (`./.rlint.rb` and `~/.rlint.rb`).
|
140
|
+
* Handle named parameters in Ruby 2.0 (and other potential differences).
|
141
|
+
* Validate the parameters passed to method calls where possible.
|
142
|
+
* Better/more up to date documentation.
|
143
|
+
* Testing, testing and more testing.
|
144
|
+
|
44
145
|
## License
|
45
146
|
|
46
147
|
All source code in this repository is licensed under the MIT license unless
|
data/bin/ruby-lint
ADDED
data/lib/ruby-lint.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'ripper'
|
2
|
+
|
3
|
+
unless $:.include?(File.expand_path('../', __FILE__))
|
4
|
+
$:.unshift(File.expand_path('../', __FILE__))
|
5
|
+
end
|
6
|
+
|
7
|
+
require 'ruby-lint/version'
|
8
|
+
require 'ruby-lint/parser'
|
9
|
+
require 'ruby-lint/token/token'
|
10
|
+
require 'ruby-lint/token/variable_token'
|
11
|
+
require 'ruby-lint/token/statement_token'
|
12
|
+
require 'ruby-lint/token/begin_rescue_token'
|
13
|
+
require 'ruby-lint/token/method_definition_token'
|
14
|
+
require 'ruby-lint/token/parameters_token'
|
15
|
+
require 'ruby-lint/token/method_token'
|
16
|
+
require 'ruby-lint/token/block_token'
|
17
|
+
require 'ruby-lint/token/assignment_token'
|
18
|
+
require 'ruby-lint/token/case_token'
|
19
|
+
require 'ruby-lint/token/regexp_token'
|
20
|
+
require 'ruby-lint/token/class_token'
|
21
|
+
require 'ruby-lint/parser_error'
|
22
|
+
require 'ruby-lint/iterator'
|
23
|
+
require 'ruby-lint/callback'
|
24
|
+
require 'ruby-lint/report'
|
25
|
+
require 'ruby-lint/definition'
|
26
|
+
require 'ruby-lint/constant_importer'
|
27
|
+
require 'ruby-lint/formatter/text'
|
28
|
+
require 'ruby-lint/helper/scoping'
|
29
|
+
require 'ruby-lint/helper/definition_resolver'
|
30
|
+
require 'ruby-lint/analyze/coding_style'
|
31
|
+
require 'ruby-lint/analyze/definitions'
|
32
|
+
require 'ruby-lint/analyze/unused_variables'
|
33
|
+
require 'ruby-lint/analyze/undefined_variables'
|
34
|
+
require 'ruby-lint/analyze/shadowing_variables'
|
35
|
+
require 'ruby-lint/analyze/method_validation'
|
36
|
+
require 'ruby-lint/options'
|
@@ -1,7 +1,7 @@
|
|
1
|
-
module
|
1
|
+
module RubyLint
|
2
2
|
module Analyze
|
3
3
|
##
|
4
|
-
# {
|
4
|
+
# {RubyLint::Analyze::CodingStyle} checks if a block of code matches a given
|
5
5
|
# set of coding standards. While none of the problems found by this class
|
6
6
|
# are considered harmful they are usually frowned upon as they do not
|
7
7
|
# follow the unofficial but generally accepted Ruby coding standards.
|
@@ -21,7 +21,7 @@ module Rlint
|
|
21
21
|
# This class checks for the following:
|
22
22
|
#
|
23
23
|
# * The length of method and variable names, should be less than the value
|
24
|
-
# set in {
|
24
|
+
# set in {RubyLint::Analyze::CodingStyle::MAXIMUM\_NAME\_LENGTH}.
|
25
25
|
# * The use of class variables (it's relatively rare that you actually need
|
26
26
|
# those).
|
27
27
|
# * The use of parenthesis around various statements: these are not needed
|
@@ -32,7 +32,7 @@ module Rlint
|
|
32
32
|
# * If a particular method name should be replaced by a different one (e.g.
|
33
33
|
# "map" instead of "collect").
|
34
34
|
#
|
35
|
-
class CodingStyle <
|
35
|
+
class CodingStyle < RubyLint::Callback
|
36
36
|
##
|
37
37
|
# A short description of this class.
|
38
38
|
#
|
@@ -62,7 +62,7 @@ module Rlint
|
|
62
62
|
}
|
63
63
|
|
64
64
|
##
|
65
|
-
# @see
|
65
|
+
# @see RubyLint::Callback#initialize
|
66
66
|
#
|
67
67
|
def initialize(*args)
|
68
68
|
super
|
@@ -79,9 +79,9 @@ module Rlint
|
|
79
79
|
# * Whether or not instance variables are `snake_cased` instead of
|
80
80
|
# camelCased.
|
81
81
|
# * Whether or not the length of an instance variable is smaller than the
|
82
|
-
# value defined in {
|
82
|
+
# value defined in {RubyLint::Analyze::CodingStyle::MAXIMUM\_NAME\_LENGTH}.
|
83
83
|
#
|
84
|
-
# @param [
|
84
|
+
# @param [RubyLint::Token::VariableToken] token The token containing details
|
85
85
|
# about the variable.
|
86
86
|
#
|
87
87
|
def on_instance_variable(token)
|
@@ -92,10 +92,10 @@ module Rlint
|
|
92
92
|
# Called when a class variable is found.
|
93
93
|
#
|
94
94
|
# This method will check for the same things as
|
95
|
-
# {
|
95
|
+
# {RubyLint::Analyze::CodingStyle#on_instance_variable} along with adding an
|
96
96
|
# info message about class variables being discouraged.
|
97
97
|
#
|
98
|
-
# @see
|
98
|
+
# @see RubyLint::Analyze::CodingStyle#on_instance_variable
|
99
99
|
#
|
100
100
|
def on_class_variable(token)
|
101
101
|
validate_name(token)
|
@@ -110,7 +110,7 @@ module Rlint
|
|
110
110
|
##
|
111
111
|
# Called when a constant is found.
|
112
112
|
#
|
113
|
-
# @see
|
113
|
+
# @see RubyLint::Analyze::CodingStyle#on_instance_variable
|
114
114
|
#
|
115
115
|
def on_constant(token)
|
116
116
|
validate_name_length(token)
|
@@ -119,7 +119,7 @@ module Rlint
|
|
119
119
|
##
|
120
120
|
# Called when a global variable is found.
|
121
121
|
#
|
122
|
-
# @see
|
122
|
+
# @see RubyLint::Analyze::CodingStyle#on_instance_variable
|
123
123
|
#
|
124
124
|
def on_global_variable(token)
|
125
125
|
validate_name(token)
|
@@ -128,7 +128,7 @@ module Rlint
|
|
128
128
|
##
|
129
129
|
# Called when an instance variable is found.
|
130
130
|
#
|
131
|
-
# @see
|
131
|
+
# @see RubyLint::Analyze::CodingStyle#on_instance_variable
|
132
132
|
#
|
133
133
|
def on_local_variable(token)
|
134
134
|
validate_name(token)
|
@@ -141,8 +141,8 @@ module Rlint
|
|
141
141
|
# instance variables) as well as adding a warning when an instance
|
142
142
|
# variable is assigned.
|
143
143
|
#
|
144
|
-
# @see
|
145
|
-
# @see
|
144
|
+
# @see RubyLint::Analyze::CodingStyle#on_instance_variable
|
145
|
+
# @see RubyLint::Analyze::CodingStyle#on_class_variable
|
146
146
|
#
|
147
147
|
def on_assignment(token)
|
148
148
|
validate_name(token)
|
@@ -159,7 +159,7 @@ module Rlint
|
|
159
159
|
##
|
160
160
|
# Called when a return statement is found.
|
161
161
|
#
|
162
|
-
# @param [
|
162
|
+
# @param [RubyLint::Token::StatementToken] token The token of the return
|
163
163
|
# statement.
|
164
164
|
#
|
165
165
|
def on_return(token)
|
@@ -184,7 +184,7 @@ module Rlint
|
|
184
184
|
# to instance variables as well as checking if the method definition
|
185
185
|
# modifies a core Ruby constant.
|
186
186
|
#
|
187
|
-
# @see
|
187
|
+
# @see RubyLint::Analyze::CodingStyle#on_instance_variable
|
188
188
|
#
|
189
189
|
def on_method_definition(token)
|
190
190
|
validate_name(token)
|
@@ -200,7 +200,7 @@ module Rlint
|
|
200
200
|
# Called when a class is created. This callback adds a warning if a core
|
201
201
|
# Ruby constant is modified.
|
202
202
|
#
|
203
|
-
# @param [
|
203
|
+
# @param [RubyLint::Token::ClassToken] token Token class containing details
|
204
204
|
# about the newly created class.
|
205
205
|
#
|
206
206
|
def on_class(token)
|
@@ -211,7 +211,7 @@ module Rlint
|
|
211
211
|
# Called after a method token has been processed. This callback checks if
|
212
212
|
# a method is a predicate method and if so if the name is set correctly.
|
213
213
|
#
|
214
|
-
# @param [
|
214
|
+
# @param [RubyLint::Token::MethodDefinitionToken] token The token containing
|
215
215
|
# details about the method definition.
|
216
216
|
# @todo This method currently only performs a very limited check for
|
217
217
|
# predicate methods. Once a proper scoping system has been implemented
|
@@ -236,7 +236,7 @@ module Rlint
|
|
236
236
|
# This method checks if the used method should be named differently
|
237
237
|
# instead (e.g. "map" instead of "collect").
|
238
238
|
#
|
239
|
-
# @param [
|
239
|
+
# @param [RubyLint::Token::MethodToken] token Token containing details about
|
240
240
|
# the method.
|
241
241
|
#
|
242
242
|
def on_method(token)
|
@@ -260,7 +260,7 @@ module Rlint
|
|
260
260
|
# This method checks to see if there are any parenthesis around the
|
261
261
|
# statement and adds an info message if this is the case.
|
262
262
|
#
|
263
|
-
# @param [
|
263
|
+
# @param [RubyLint::Token::StatementToken] token The token containing
|
264
264
|
# details about the if statement.
|
265
265
|
#
|
266
266
|
def on_if(token)
|
@@ -270,7 +270,7 @@ module Rlint
|
|
270
270
|
##
|
271
271
|
# Called when an elsif statement is found.
|
272
272
|
#
|
273
|
-
# @see
|
273
|
+
# @see RubyLint::Analyze::CodingStyle#on_if
|
274
274
|
#
|
275
275
|
def on_elsif(token)
|
276
276
|
validate_parenthesis(token)
|
@@ -279,7 +279,7 @@ module Rlint
|
|
279
279
|
##
|
280
280
|
# Called when a while statement is found.
|
281
281
|
#
|
282
|
-
# @see
|
282
|
+
# @see RubyLint::Analyze::CodingStyle#on_if
|
283
283
|
#
|
284
284
|
def on_while(token)
|
285
285
|
validate_parenthesis(token)
|
@@ -288,7 +288,7 @@ module Rlint
|
|
288
288
|
##
|
289
289
|
# Called when a case statement is found.
|
290
290
|
#
|
291
|
-
# @see
|
291
|
+
# @see RubyLint::Analyze::CodingStyle#on_if
|
292
292
|
#
|
293
293
|
def on_case(token)
|
294
294
|
validate_parenthesis(token)
|
@@ -297,7 +297,7 @@ module Rlint
|
|
297
297
|
##
|
298
298
|
# Called when a when statement is found.
|
299
299
|
#
|
300
|
-
# @see
|
300
|
+
# @see RubyLint::Analyze::CodingStyle#on_if
|
301
301
|
#
|
302
302
|
def on_when(token)
|
303
303
|
validate_parenthesis(token)
|
@@ -306,7 +306,7 @@ module Rlint
|
|
306
306
|
##
|
307
307
|
# Called when an until statement is found.
|
308
308
|
#
|
309
|
-
# @see
|
309
|
+
# @see RubyLint::Analyze::CodingStyle#on_if
|
310
310
|
#
|
311
311
|
def on_until(token)
|
312
312
|
validate_parenthesis(token)
|
@@ -315,7 +315,7 @@ module Rlint
|
|
315
315
|
##
|
316
316
|
# Called when an unless statement is found.
|
317
317
|
#
|
318
|
-
# @see
|
318
|
+
# @see RubyLint::Analyze::CodingStyle#on_if
|
319
319
|
#
|
320
320
|
def on_unless(token)
|
321
321
|
validate_parenthesis(token)
|
@@ -327,7 +327,7 @@ module Rlint
|
|
327
327
|
# Validates the name of the specified token. This method will check for
|
328
328
|
# the use of camelCase as well as checking for the length of the name.
|
329
329
|
#
|
330
|
-
# @param [
|
330
|
+
# @param [RubyLint::Token::Token] token The token to validate.
|
331
331
|
#
|
332
332
|
def validate_name(token)
|
333
333
|
if !token.respond_to?(:name) or !token.name
|
@@ -348,9 +348,9 @@ module Rlint
|
|
348
348
|
##
|
349
349
|
# Checks if the name of the given token is too long or not. The maximum
|
350
350
|
# length of names is set in
|
351
|
-
# {
|
351
|
+
# {RubyLint::Analyze::CodingStyle::MAXIMUM\_NAME\_LENGTH}.
|
352
352
|
#
|
353
|
-
# @param [
|
353
|
+
# @param [RubyLint::Token::Token] token The token to validate.
|
354
354
|
#
|
355
355
|
def validate_name_length(token)
|
356
356
|
if !token.respond_to?(:name) or !token.name
|
@@ -370,7 +370,7 @@ module Rlint
|
|
370
370
|
##
|
371
371
|
# Checks if there are any parenthesis wrapped around a statement.
|
372
372
|
#
|
373
|
-
# @param [
|
373
|
+
# @param [RubyLint::Token::Token] token The token to validate.
|
374
374
|
#
|
375
375
|
def validate_parenthesis(token)
|
376
376
|
if token.code =~ /#{token.type}\s*\(/
|
@@ -385,7 +385,7 @@ module Rlint
|
|
385
385
|
##
|
386
386
|
# Adds a warning for modifying a core Ruby constant.
|
387
387
|
#
|
388
|
-
# @param [
|
388
|
+
# @param [RubyLint::Token::Token] token The token class to validate.
|
389
389
|
#
|
390
390
|
def validate_ruby_constant_modification(token)
|
391
391
|
if token.name.is_a?(Array)
|
@@ -404,4 +404,4 @@ module Rlint
|
|
404
404
|
end
|
405
405
|
end # CodingStyle
|
406
406
|
end # Analyze
|
407
|
-
end #
|
407
|
+
end # RubyLint
|