sabat-rubocop 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +50 -0
- data/.rspec +1 -0
- data/.rubocop.yml +7 -0
- data/.travis.yml +7 -0
- data/.yardopts +2 -0
- data/CHANGELOG.md +268 -0
- data/CONTRIBUTING.md +16 -0
- data/Gemfile +7 -0
- data/LICENSE.txt +20 -0
- data/README.md +324 -0
- data/Rakefile +29 -0
- data/bin/rubocop +22 -0
- data/config/default.yml +58 -0
- data/config/disabled.yml +5 -0
- data/config/enabled.yml +403 -0
- data/lib/rubocop.rb +116 -0
- data/lib/rubocop/cli.rb +407 -0
- data/lib/rubocop/config.rb +250 -0
- data/lib/rubocop/config_store.rb +39 -0
- data/lib/rubocop/cop/cop.rb +138 -0
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +54 -0
- data/lib/rubocop/cop/lint/end_alignment.rb +189 -0
- data/lib/rubocop/cop/lint/end_in_method.rb +30 -0
- data/lib/rubocop/cop/lint/ensure_return.rb +22 -0
- data/lib/rubocop/cop/lint/eval.rb +22 -0
- data/lib/rubocop/cop/lint/handle_exceptions.rb +20 -0
- data/lib/rubocop/cop/lint/literal_in_condition.rb +81 -0
- data/lib/rubocop/cop/lint/loop.rb +29 -0
- data/lib/rubocop/cop/lint/rescue_exception.rb +29 -0
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +34 -0
- data/lib/rubocop/cop/lint/unreachable_code.rb +35 -0
- data/lib/rubocop/cop/lint/unused_local_variable.rb +32 -0
- data/lib/rubocop/cop/lint/void.rb +58 -0
- data/lib/rubocop/cop/offence.rb +136 -0
- data/lib/rubocop/cop/rails/validation.rb +30 -0
- data/lib/rubocop/cop/style/access_control.rb +58 -0
- data/lib/rubocop/cop/style/alias.rb +28 -0
- data/lib/rubocop/cop/style/align_parameters.rb +39 -0
- data/lib/rubocop/cop/style/and_or.rb +45 -0
- data/lib/rubocop/cop/style/ascii_comments.rb +21 -0
- data/lib/rubocop/cop/style/ascii_identifiers.rb +22 -0
- data/lib/rubocop/cop/style/attr.rb +20 -0
- data/lib/rubocop/cop/style/avoid_class_vars.rb +20 -0
- data/lib/rubocop/cop/style/avoid_for.rb +18 -0
- data/lib/rubocop/cop/style/avoid_global_vars.rb +65 -0
- data/lib/rubocop/cop/style/avoid_perl_backrefs.rb +21 -0
- data/lib/rubocop/cop/style/avoid_perlisms.rb +50 -0
- data/lib/rubocop/cop/style/begin_block.rb +18 -0
- data/lib/rubocop/cop/style/block_comments.rb +20 -0
- data/lib/rubocop/cop/style/block_nesting.rb +47 -0
- data/lib/rubocop/cop/style/blocks.rb +27 -0
- data/lib/rubocop/cop/style/case_equality.rb +22 -0
- data/lib/rubocop/cop/style/case_indentation.rb +28 -0
- data/lib/rubocop/cop/style/character_literal.rb +37 -0
- data/lib/rubocop/cop/style/class_and_module_camel_case.rb +33 -0
- data/lib/rubocop/cop/style/class_methods.rb +22 -0
- data/lib/rubocop/cop/style/collection_methods.rb +56 -0
- data/lib/rubocop/cop/style/colon_method_call.rb +29 -0
- data/lib/rubocop/cop/style/constant_name.rb +31 -0
- data/lib/rubocop/cop/style/def_parentheses.rb +70 -0
- data/lib/rubocop/cop/style/documentation.rb +58 -0
- data/lib/rubocop/cop/style/dot_position.rb +25 -0
- data/lib/rubocop/cop/style/empty_line_between_defs.rb +26 -0
- data/lib/rubocop/cop/style/empty_lines.rb +40 -0
- data/lib/rubocop/cop/style/empty_literal.rb +53 -0
- data/lib/rubocop/cop/style/encoding.rb +29 -0
- data/lib/rubocop/cop/style/end_block.rb +18 -0
- data/lib/rubocop/cop/style/end_of_line.rb +23 -0
- data/lib/rubocop/cop/style/favor_join.rb +29 -0
- data/lib/rubocop/cop/style/favor_modifier.rb +118 -0
- data/lib/rubocop/cop/style/favor_sprintf.rb +28 -0
- data/lib/rubocop/cop/style/favor_unless_over_negated_if.rb +54 -0
- data/lib/rubocop/cop/style/hash_syntax.rb +47 -0
- data/lib/rubocop/cop/style/if_then_else.rb +29 -0
- data/lib/rubocop/cop/style/if_with_semicolon.rb +20 -0
- data/lib/rubocop/cop/style/lambda.rb +47 -0
- data/lib/rubocop/cop/style/leading_comment_space.rb +25 -0
- data/lib/rubocop/cop/style/line_continuation.rb +26 -0
- data/lib/rubocop/cop/style/line_length.rb +30 -0
- data/lib/rubocop/cop/style/method_and_variable_snake_case.rb +61 -0
- data/lib/rubocop/cop/style/method_call_parentheses.rb +22 -0
- data/lib/rubocop/cop/style/method_length.rb +57 -0
- data/lib/rubocop/cop/style/multiline_if_then.rb +47 -0
- data/lib/rubocop/cop/style/not.rb +24 -0
- data/lib/rubocop/cop/style/numeric_literals.rb +25 -0
- data/lib/rubocop/cop/style/one_line_conditional.rb +20 -0
- data/lib/rubocop/cop/style/op_method.rb +29 -0
- data/lib/rubocop/cop/style/parameter_lists.rb +42 -0
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +42 -0
- data/lib/rubocop/cop/style/proc.rb +30 -0
- data/lib/rubocop/cop/style/reduce_arguments.rb +34 -0
- data/lib/rubocop/cop/style/regexp_literal.rb +39 -0
- data/lib/rubocop/cop/style/rescue_modifier.rb +55 -0
- data/lib/rubocop/cop/style/semicolon.rb +51 -0
- data/lib/rubocop/cop/style/single_line_methods.rb +48 -0
- data/lib/rubocop/cop/style/space_after_comma_etc.rb +69 -0
- data/lib/rubocop/cop/style/space_after_control_keyword.rb +32 -0
- data/lib/rubocop/cop/style/string_literals.rb +36 -0
- data/lib/rubocop/cop/style/surrounding_space.rb +314 -0
- data/lib/rubocop/cop/style/symbol_array.rb +31 -0
- data/lib/rubocop/cop/style/symbol_name.rb +27 -0
- data/lib/rubocop/cop/style/tab.rb +25 -0
- data/lib/rubocop/cop/style/ternary_operator.rb +49 -0
- data/lib/rubocop/cop/style/trailing_whitespace.rb +24 -0
- data/lib/rubocop/cop/style/trivial_accessors.rb +32 -0
- data/lib/rubocop/cop/style/unless_else.rb +26 -0
- data/lib/rubocop/cop/style/variable_interpolation.rb +32 -0
- data/lib/rubocop/cop/style/when_then.rb +25 -0
- data/lib/rubocop/cop/style/while_until_do.rb +45 -0
- data/lib/rubocop/cop/style/word_array.rb +44 -0
- data/lib/rubocop/cop/util.rb +27 -0
- data/lib/rubocop/cop/variable_inspector.rb +280 -0
- data/lib/rubocop/formatter/base_formatter.rb +119 -0
- data/lib/rubocop/formatter/clang_style_formatter.rb +21 -0
- data/lib/rubocop/formatter/emacs_style_formatter.rb +17 -0
- data/lib/rubocop/formatter/formatter_set.rb +77 -0
- data/lib/rubocop/formatter/json_formatter.rb +76 -0
- data/lib/rubocop/formatter/progress_formatter.rb +63 -0
- data/lib/rubocop/formatter/simple_text_formatter.rb +62 -0
- data/lib/rubocop/version.rb +21 -0
- data/rubocop.gemspec +36 -0
- data/spec/.rubocop.yml +5 -0
- data/spec/project_spec.rb +24 -0
- data/spec/rubocop/cli_spec.rb +906 -0
- data/spec/rubocop/config_spec.rb +470 -0
- data/spec/rubocop/config_store_spec.rb +66 -0
- data/spec/rubocop/cops/cop_spec.rb +38 -0
- data/spec/rubocop/cops/lint/assignment_in_condition_spec.rb +111 -0
- data/spec/rubocop/cops/lint/end_alignment_spec.rb +333 -0
- data/spec/rubocop/cops/lint/end_in_method_spec.rb +35 -0
- data/spec/rubocop/cops/lint/ensure_return_spec.rb +37 -0
- data/spec/rubocop/cops/lint/eval_spec.rb +41 -0
- data/spec/rubocop/cops/lint/handle_exceptions_spec.rb +36 -0
- data/spec/rubocop/cops/lint/literal_in_condition_spec.rb +42 -0
- data/spec/rubocop/cops/lint/loop_spec.rb +33 -0
- data/spec/rubocop/cops/lint/rescue_exception_spec.rb +127 -0
- data/spec/rubocop/cops/lint/shadowing_outer_local_variable_spec.rb +243 -0
- data/spec/rubocop/cops/lint/unreachable_code_spec.rb +69 -0
- data/spec/rubocop/cops/lint/unused_local_variable_spec.rb +497 -0
- data/spec/rubocop/cops/lint/void_spec.rb +63 -0
- data/spec/rubocop/cops/offence_spec.rb +133 -0
- data/spec/rubocop/cops/rails/validation_spec.rb +27 -0
- data/spec/rubocop/cops/style/access_control_spec.rb +142 -0
- data/spec/rubocop/cops/style/alias_spec.rb +47 -0
- data/spec/rubocop/cops/style/align_parameters_spec.rb +199 -0
- data/spec/rubocop/cops/style/and_or_spec.rb +39 -0
- data/spec/rubocop/cops/style/ascii_comments_spec.rb +28 -0
- data/spec/rubocop/cops/style/ascii_identifiers_spec.rb +28 -0
- data/spec/rubocop/cops/style/attr_spec.rb +20 -0
- data/spec/rubocop/cops/style/avoid_class_vars_spec.rb +27 -0
- data/spec/rubocop/cops/style/avoid_for_spec.rb +37 -0
- data/spec/rubocop/cops/style/avoid_global_vars_spec.rb +34 -0
- data/spec/rubocop/cops/style/avoid_perl_backrefs_spec.rb +20 -0
- data/spec/rubocop/cops/style/avoid_perlisms_spec.rb +47 -0
- data/spec/rubocop/cops/style/begin_block_spec.rb +19 -0
- data/spec/rubocop/cops/style/block_comments_spec.rb +27 -0
- data/spec/rubocop/cops/style/block_nesting_spec.rb +159 -0
- data/spec/rubocop/cops/style/blocks_spec.rb +35 -0
- data/spec/rubocop/cops/style/case_equality_spec.rb +18 -0
- data/spec/rubocop/cops/style/case_indentation_spec.rb +88 -0
- data/spec/rubocop/cops/style/character_literal_spec.rb +28 -0
- data/spec/rubocop/cops/style/class_and_module_camel_case_spec.rb +46 -0
- data/spec/rubocop/cops/style/class_methods_spec.rb +51 -0
- data/spec/rubocop/cops/style/collection_methods_spec.rb +41 -0
- data/spec/rubocop/cops/style/colon_method_call_spec.rb +55 -0
- data/spec/rubocop/cops/style/constant_name_spec.rb +56 -0
- data/spec/rubocop/cops/style/def_with_parentheses_spec.rb +40 -0
- data/spec/rubocop/cops/style/def_without_parentheses_spec.rb +34 -0
- data/spec/rubocop/cops/style/documentation_spec.rb +79 -0
- data/spec/rubocop/cops/style/dot_position_spec.rb +30 -0
- data/spec/rubocop/cops/style/empty_line_between_defs_spec.rb +85 -0
- data/spec/rubocop/cops/style/empty_lines_spec.rb +40 -0
- data/spec/rubocop/cops/style/empty_literal_spec.rb +91 -0
- data/spec/rubocop/cops/style/encoding_spec.rb +49 -0
- data/spec/rubocop/cops/style/end_block_spec.rb +19 -0
- data/spec/rubocop/cops/style/end_of_line_spec.rb +25 -0
- data/spec/rubocop/cops/style/favor_join_spec.rb +37 -0
- data/spec/rubocop/cops/style/favor_modifier_spec.rb +160 -0
- data/spec/rubocop/cops/style/favor_sprintf_spec.rb +53 -0
- data/spec/rubocop/cops/style/favor_unless_over_negated_if_spec.rb +64 -0
- data/spec/rubocop/cops/style/favor_until_over_negated_while_spec.rb +47 -0
- data/spec/rubocop/cops/style/hash_syntax_spec.rb +51 -0
- data/spec/rubocop/cops/style/if_with_semicolon_spec.rb +25 -0
- data/spec/rubocop/cops/style/lambda_spec.rb +45 -0
- data/spec/rubocop/cops/style/leading_comment_space_spec.rb +65 -0
- data/spec/rubocop/cops/style/line_continuation_spec.rb +26 -0
- data/spec/rubocop/cops/style/line_length_spec.rb +25 -0
- data/spec/rubocop/cops/style/method_and_variable_snake_case_spec.rb +95 -0
- data/spec/rubocop/cops/style/method_call_parentheses_spec.rb +25 -0
- data/spec/rubocop/cops/style/method_length_spec.rb +151 -0
- data/spec/rubocop/cops/style/multiline_if_then_spec.rb +97 -0
- data/spec/rubocop/cops/style/not_spec.rb +28 -0
- data/spec/rubocop/cops/style/numeric_literals_spec.rb +51 -0
- data/spec/rubocop/cops/style/one_line_conditional_spec.rb +18 -0
- data/spec/rubocop/cops/style/op_method_spec.rb +80 -0
- data/spec/rubocop/cops/style/parameter_lists_spec.rb +49 -0
- data/spec/rubocop/cops/style/parentheses_around_condition_spec.rb +59 -0
- data/spec/rubocop/cops/style/proc_spec.rb +28 -0
- data/spec/rubocop/cops/style/reduce_arguments_spec.rb +59 -0
- data/spec/rubocop/cops/style/regexp_literal_spec.rb +83 -0
- data/spec/rubocop/cops/style/rescue_modifier_spec.rb +122 -0
- data/spec/rubocop/cops/style/semicolon_spec.rb +95 -0
- data/spec/rubocop/cops/style/single_line_methods_spec.rb +54 -0
- data/spec/rubocop/cops/style/space_after_colon_spec.rb +29 -0
- data/spec/rubocop/cops/style/space_after_comma_spec.rb +31 -0
- data/spec/rubocop/cops/style/space_after_control_keyword_spec.rb +69 -0
- data/spec/rubocop/cops/style/space_after_semicolon_spec.rb +24 -0
- data/spec/rubocop/cops/style/space_around_braces_spec.rb +49 -0
- data/spec/rubocop/cops/style/space_around_equals_in_default_parameter_spec.rb +34 -0
- data/spec/rubocop/cops/style/space_around_operators_spec.rb +216 -0
- data/spec/rubocop/cops/style/space_inside_brackets_spec.rb +51 -0
- data/spec/rubocop/cops/style/space_inside_hash_literal_braces_spec.rb +99 -0
- data/spec/rubocop/cops/style/space_inside_parens_spec.rb +33 -0
- data/spec/rubocop/cops/style/string_literals_spec.rb +62 -0
- data/spec/rubocop/cops/style/symbol_array_spec.rb +45 -0
- data/spec/rubocop/cops/style/symbol_name_spec.rb +122 -0
- data/spec/rubocop/cops/style/tab_spec.rb +23 -0
- data/spec/rubocop/cops/style/ternary_operator_spec.rb +42 -0
- data/spec/rubocop/cops/style/trailing_whitespace_spec.rb +29 -0
- data/spec/rubocop/cops/style/trivial_accessors_spec.rb +338 -0
- data/spec/rubocop/cops/style/unless_else_spec.rb +31 -0
- data/spec/rubocop/cops/style/variable_interpolation_spec.rb +53 -0
- data/spec/rubocop/cops/style/when_then_spec.rb +40 -0
- data/spec/rubocop/cops/style/while_until_do_spec.rb +47 -0
- data/spec/rubocop/cops/style/word_array_spec.rb +61 -0
- data/spec/rubocop/cops/variable_inspector_spec.rb +374 -0
- data/spec/rubocop/formatter/base_formatter_spec.rb +190 -0
- data/spec/rubocop/formatter/clang_style_formatter_spec.rb +70 -0
- data/spec/rubocop/formatter/emacs_style_formatter_spec.rb +32 -0
- data/spec/rubocop/formatter/formatter_set_spec.rb +132 -0
- data/spec/rubocop/formatter/json_formatter_spec.rb +142 -0
- data/spec/rubocop/formatter/progress_formatter_spec.rb +196 -0
- data/spec/rubocop/formatter/simple_text_formatter_spec.rb +74 -0
- data/spec/spec_helper.rb +92 -0
- data/spec/support/file_helper.rb +21 -0
- data/spec/support/isolated_environment.rb +27 -0
- data/spec/support/mri_syntax_checker.rb +69 -0
- data/spec/support/shared_examples.rb +33 -0
- metadata +517 -0
@@ -0,0 +1,21 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Rubocop
|
4
|
+
module Cop
|
5
|
+
module Style
|
6
|
+
# This cop checks for non-ascii (non-English) characters
|
7
|
+
# in comments.
|
8
|
+
class AsciiComments < Cop
|
9
|
+
MSG = 'Use only ascii symbols in comments.'
|
10
|
+
|
11
|
+
def inspect(source_buffer, source, tokens, ast, comments)
|
12
|
+
comments.each do |comment|
|
13
|
+
if comment.text =~ /[^\x00-\x7f]/
|
14
|
+
add_offence(:convention, comment.loc, MSG)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# rubocop:disable SymbolName
|
4
|
+
|
5
|
+
module Rubocop
|
6
|
+
module Cop
|
7
|
+
module Style
|
8
|
+
# This cop checks for non-ascii characters in indentifier names.
|
9
|
+
class AsciiIdentifiers < Cop
|
10
|
+
MSG = 'Use only ascii symbols in identifiers.'
|
11
|
+
|
12
|
+
def inspect(source_buffer, source, tokens, ast, comments)
|
13
|
+
tokens.each do |t|
|
14
|
+
if t.type == :tIDENTIFIER && t.text =~ /[^\x00-\x7f]/
|
15
|
+
add_offence(:convention, t.pos, MSG)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Rubocop
|
4
|
+
module Cop
|
5
|
+
module Style
|
6
|
+
# This cop checks for uses of Module#attr.
|
7
|
+
class Attr < Cop
|
8
|
+
MSG = 'Do not use `attr`. Use `attr_reader` instead.'
|
9
|
+
|
10
|
+
def on_send(node)
|
11
|
+
if command?(:attr, node)
|
12
|
+
add_offence(:convention, node.loc.selector, MSG)
|
13
|
+
end
|
14
|
+
|
15
|
+
super
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Rubocop
|
4
|
+
module Cop
|
5
|
+
module Style
|
6
|
+
# This cop checks for uses of class variables. Offences
|
7
|
+
# are signaled only on assignment to class variables to
|
8
|
+
# reduced the number of offences that would be reported.
|
9
|
+
class AvoidClassVars < Cop
|
10
|
+
MSG = 'Replace class var %s with a class instance var.'
|
11
|
+
|
12
|
+
def on_cvasgn(node)
|
13
|
+
class_var, = *node
|
14
|
+
add_offence(:convention, node.loc.name, sprintf(MSG, class_var))
|
15
|
+
super
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Rubocop
|
4
|
+
module Cop
|
5
|
+
module Style
|
6
|
+
# This cop looks for uses of the *for* keyword.
|
7
|
+
class AvoidFor < Cop
|
8
|
+
MSG = 'Prefer *each* over *for*.'
|
9
|
+
|
10
|
+
def on_for(node)
|
11
|
+
add_offence(:convention, node.loc.keyword, MSG)
|
12
|
+
|
13
|
+
super
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Rubocop
|
4
|
+
module Cop
|
5
|
+
module Style
|
6
|
+
# This cops looks for uses of global variables.
|
7
|
+
# It does not report offences for built-in global variables.
|
8
|
+
class AvoidGlobalVars < Cop
|
9
|
+
MSG = 'Do not introduce global variables.'
|
10
|
+
|
11
|
+
# predefined global variables their English aliases
|
12
|
+
# http://www.zenspider.com/Languages/Ruby/QuickRef.html
|
13
|
+
BUILT_IN_VARS = %w(
|
14
|
+
$: $LOAD_PATH
|
15
|
+
$" $LOADED_FEATURES
|
16
|
+
$0 $PROGRAM_NAME
|
17
|
+
$! $ERROR_INFO
|
18
|
+
$@ $ERROR_POSITION
|
19
|
+
$; $FS $FIELD_SEPARATOR
|
20
|
+
$, $OFS $OUTPUT_FIELD_SEPARATOR
|
21
|
+
$/ $RS $INPUT_RECORD_SEPARATOR
|
22
|
+
$\\ $ORS $OUTPUT_RECORD_SEPARATOR
|
23
|
+
$. $NR $INPUT_LINE_NUMBER
|
24
|
+
$_ $LAST_READ_LINE
|
25
|
+
$> $DEFAULT_OUTPUT
|
26
|
+
$< $DEFAULT_INPUT
|
27
|
+
$$ $PID $PROCESS_ID
|
28
|
+
$? $CHILD_STATUS
|
29
|
+
$~ $LAST_MATCH_INFO
|
30
|
+
$= $IGNORECASE
|
31
|
+
$* $ARGV
|
32
|
+
$& $MATCH
|
33
|
+
$` $PREMATCH
|
34
|
+
$' $POSTMATCH
|
35
|
+
$+ $LAST_PAREN_MATCH
|
36
|
+
$stdin $stdout $stderr
|
37
|
+
$DEBUG $FILENAME $VERBOSE
|
38
|
+
$-0 $-a $-d $-F $-i $-I $-l $-p $-v $-w
|
39
|
+
)
|
40
|
+
|
41
|
+
def on_gvar(node)
|
42
|
+
check(node)
|
43
|
+
|
44
|
+
super
|
45
|
+
end
|
46
|
+
|
47
|
+
def on_gvasgn(node)
|
48
|
+
check(node)
|
49
|
+
|
50
|
+
super
|
51
|
+
end
|
52
|
+
|
53
|
+
def check(node)
|
54
|
+
global_var, = *node
|
55
|
+
|
56
|
+
unless BUILT_IN_VARS.include?(global_var.to_s)
|
57
|
+
add_offence(:convention,
|
58
|
+
node.loc.name,
|
59
|
+
MSG)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Rubocop
|
4
|
+
module Cop
|
5
|
+
module Style
|
6
|
+
# This cop looks for uses of Perl-style regexp match
|
7
|
+
# backreferences like $1, $2, etc.
|
8
|
+
class AvoidPerlBackrefs < Cop
|
9
|
+
def on_nth_ref(node)
|
10
|
+
backref, = *node
|
11
|
+
|
12
|
+
add_offence(:convention,
|
13
|
+
node.loc.expression,
|
14
|
+
"Prefer the use of MatchData over $#{backref}.")
|
15
|
+
|
16
|
+
super
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Rubocop
|
4
|
+
module Cop
|
5
|
+
module Style
|
6
|
+
# This cop looks for uses of Perl-style global variables.
|
7
|
+
class AvoidPerlisms < Cop
|
8
|
+
PREFERRED_VARS = {
|
9
|
+
'$:' => '$LOAD_PATH',
|
10
|
+
'$"' => '$LOADED_FEATURES',
|
11
|
+
'$0' => '$PROGRAM_NAME',
|
12
|
+
'$!' => '$ERROR_INFO from English library',
|
13
|
+
'$@' => '$ERROR_POSITION from English library',
|
14
|
+
'$;' => '$FS or $FIELD_SEPARATOR from English library',
|
15
|
+
'$,' => '$OFS or $OUTPUT_FIELD_SEPARATOR from English library',
|
16
|
+
'$/' => '$RS or $INPUT_RECORD_SEPARATOR from English library',
|
17
|
+
'$\\' => '$ORS or $OUTPUT_RECORD_SEPARATOR from English library',
|
18
|
+
'$.' => '$NR or $INPUT_LINE_NUMBER from English library',
|
19
|
+
'$_' => '$LAST_READ_LINE from English library',
|
20
|
+
'$>' => '$DEFAULT_OUTPUT from English library',
|
21
|
+
'$<' => '$DEFAULT_INPUT from English library',
|
22
|
+
'$$' => '$PID or $PROCESS_ID from English library',
|
23
|
+
'$?' => '$CHILD_STATUS from English library',
|
24
|
+
'$~' => '$LAST_MATCH_INFO from English library',
|
25
|
+
'$=' => '$IGNORECASE from English library',
|
26
|
+
'$*' => '$ARGV from English library or ARGV constant',
|
27
|
+
'$&' => '$MATCH from English library',
|
28
|
+
'$`' => '$PREMATCH from English library',
|
29
|
+
'$\'' => '$POSTMATCH from English library',
|
30
|
+
'$+' => '$LAST_PAREN_MATCH from English library'
|
31
|
+
}
|
32
|
+
|
33
|
+
def on_gvar(node)
|
34
|
+
global_var, = *node
|
35
|
+
global_var = global_var.to_s
|
36
|
+
|
37
|
+
if PREFERRED_VARS[global_var]
|
38
|
+
add_offence(
|
39
|
+
:convention,
|
40
|
+
node.loc.expression,
|
41
|
+
"Prefer #{PREFERRED_VARS[global_var]} over #{global_var}."
|
42
|
+
)
|
43
|
+
end
|
44
|
+
|
45
|
+
super
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Rubocop
|
4
|
+
module Cop
|
5
|
+
module Style
|
6
|
+
# This cop checks for BEGIN blocks.
|
7
|
+
class BeginBlock < Cop
|
8
|
+
MSG = 'Avoid the use of BEGIN blocks.'
|
9
|
+
|
10
|
+
def on_preexe(node)
|
11
|
+
add_offence(:convention, node.loc.keyword, MSG)
|
12
|
+
|
13
|
+
super
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Rubocop
|
4
|
+
module Cop
|
5
|
+
module Style
|
6
|
+
# This cop looks for uses of block comments (=begin...=end).
|
7
|
+
class BlockComments < Cop
|
8
|
+
MSG = 'Do not use block comments.'
|
9
|
+
|
10
|
+
def inspect(source_buffer, source, tokens, ast, comments)
|
11
|
+
comments.each do |comment|
|
12
|
+
if comment.text.start_with?('=begin')
|
13
|
+
add_offence(:convention, comment.loc, MSG)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Rubocop
|
4
|
+
module Cop
|
5
|
+
module Style
|
6
|
+
# This cop checks for excessive nesting of conditional and looping
|
7
|
+
# constructs. Despite the cop's name, blocks are not considered as a
|
8
|
+
# extra level of nesting.
|
9
|
+
#
|
10
|
+
# The maximum level of nesting allowed is configurable.
|
11
|
+
class BlockNesting < Cop
|
12
|
+
NESTING_BLOCKS = [:case, :if, :while, :while_post, :until, :until_post,
|
13
|
+
:for, :resbody]
|
14
|
+
|
15
|
+
def inspect(source_buffer, source, tokens, ast, comments)
|
16
|
+
return unless ast
|
17
|
+
max = BlockNesting.config['Max']
|
18
|
+
check_nesting_level(ast, max, 0)
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def check_nesting_level(node, max, current_level)
|
24
|
+
if NESTING_BLOCKS.include?(node.type)
|
25
|
+
unless node.loc.respond_to?(:keyword) &&
|
26
|
+
node.loc.keyword.is?('elsif')
|
27
|
+
current_level += 1
|
28
|
+
end
|
29
|
+
if current_level == max + 1
|
30
|
+
add_offence(:convention, node.location.expression, message(max))
|
31
|
+
return
|
32
|
+
end
|
33
|
+
end
|
34
|
+
node.children.each do |child|
|
35
|
+
if child.is_a?(Parser::AST::Node)
|
36
|
+
check_nesting_level(child, max, current_level)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def message(max)
|
42
|
+
"Avoid more than #{max} levels of block nesting."
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Rubocop
|
4
|
+
module Cop
|
5
|
+
module Style
|
6
|
+
# Check for uses of braces or do/end around single line or
|
7
|
+
# multi-line blocks.
|
8
|
+
class Blocks < Cop
|
9
|
+
MULTI_LINE_MSG = 'Avoid using {...} for multi-line blocks.'
|
10
|
+
SINGLE_LINE_MSG = 'Prefer {...} over do...end for single-line blocks.'
|
11
|
+
|
12
|
+
def on_block(node)
|
13
|
+
block_length = Util.block_length(node)
|
14
|
+
block_begin = node.loc.begin.source
|
15
|
+
|
16
|
+
if block_length > 0 && block_begin == '{'
|
17
|
+
add_offence(:convention, node.loc.begin, MULTI_LINE_MSG)
|
18
|
+
elsif block_length == 0 && block_begin != '{'
|
19
|
+
add_offence(:convention, node.loc.begin, SINGLE_LINE_MSG)
|
20
|
+
end
|
21
|
+
|
22
|
+
super
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Rubocop
|
4
|
+
module Cop
|
5
|
+
module Style
|
6
|
+
# This cop checks for uses of the case equality operator(===).
|
7
|
+
class CaseEquality < Cop
|
8
|
+
MSG = 'Avoid the use of the case equality operator(===).'
|
9
|
+
|
10
|
+
def on_send(node)
|
11
|
+
_receiver, method_name, *_args = *node
|
12
|
+
|
13
|
+
if method_name == :===
|
14
|
+
add_offence(:convention, node.loc.selector, MSG)
|
15
|
+
end
|
16
|
+
|
17
|
+
super
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Rubocop
|
4
|
+
module Cop
|
5
|
+
module Style
|
6
|
+
# This cop checks whether the *when*s of a *case* expression
|
7
|
+
# are indented as deep as its *case* keyword.
|
8
|
+
#
|
9
|
+
# It will register a separate offence for each misaligned *when*.
|
10
|
+
class CaseIndentation < Cop
|
11
|
+
MSG = 'Indent when as deep as case.'
|
12
|
+
|
13
|
+
def on_case(case_node)
|
14
|
+
_condition, *whens, _else = *case_node
|
15
|
+
|
16
|
+
case_column = case_node.location.keyword.column
|
17
|
+
|
18
|
+
whens.each do |when_node|
|
19
|
+
pos = when_node.loc.keyword
|
20
|
+
add_offence(:convention, pos, MSG) if pos.column != case_column
|
21
|
+
end
|
22
|
+
|
23
|
+
super
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Rubocop
|
4
|
+
module Cop
|
5
|
+
module Style
|
6
|
+
# Checks for uses of the character literal ?x.
|
7
|
+
class CharacterLiteral < Cop
|
8
|
+
MSG = 'Do not use the character literal - use string literal instead.'
|
9
|
+
|
10
|
+
def on_str(node)
|
11
|
+
# Constants like __FILE__ are handled as strings,
|
12
|
+
# but don't respond to begin.
|
13
|
+
return unless node.loc.respond_to?(:begin)
|
14
|
+
|
15
|
+
# we don't register an offence for things like ?\C-\M-d
|
16
|
+
if node.loc.begin.is?('?') && node.loc.expression.source.size < 4
|
17
|
+
add_offence(:convention, node.loc.expression, MSG)
|
18
|
+
do_autocorrect(node)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
alias_method :on_dstr, :ignore_node
|
23
|
+
alias_method :on_regexp, :ignore_node
|
24
|
+
|
25
|
+
def autocorrect_action(node)
|
26
|
+
string = node.loc.expression.source[1..-1]
|
27
|
+
|
28
|
+
if string.length == 1 # normal character
|
29
|
+
replace(node.loc.expression, "'#{string}'")
|
30
|
+
elsif string.length == 2 # special character like \n
|
31
|
+
replace(node.loc.expression, %Q("#{string}"))
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|