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