rubocop-sketchup 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +19 -19
- data/assets/output.html.erb +301 -301
- data/config/default.yml +355 -355
- data/lib/rubocop/sketchup/config.rb +63 -63
- data/lib/rubocop/sketchup/cop/deprecations/add_separator_to_menu.rb +25 -25
- data/lib/rubocop/sketchup/cop/deprecations/operation_next_transparent.rb +30 -30
- data/lib/rubocop/sketchup/cop/deprecations/require_all.rb +27 -27
- data/lib/rubocop/sketchup/cop/deprecations/set_texture_projection.rb +26 -26
- data/lib/rubocop/sketchup/cop/deprecations/show_ruby_panel.rb +25 -25
- data/lib/rubocop/sketchup/cop/deprecations/sketchup_set.rb +30 -30
- data/lib/rubocop/sketchup/cop/performance/openssl.rb +41 -41
- data/lib/rubocop/sketchup/cop/performance/operation_disable_ui.rb +33 -33
- data/lib/rubocop/sketchup/cop/performance/selection_bulk.rb +79 -79
- data/lib/rubocop/sketchup/cop/performance/type_check.rb +63 -63
- data/lib/rubocop/sketchup/cop/performance/typename.rb +24 -24
- data/lib/rubocop/sketchup/cop/requirements/api_namespace.rb +30 -30
- data/lib/rubocop/sketchup/cop/requirements/exit.rb +32 -32
- data/lib/rubocop/sketchup/cop/requirements/extension_namespace.rb +108 -108
- data/lib/rubocop/sketchup/cop/requirements/file_structure.rb +97 -97
- data/lib/rubocop/sketchup/cop/requirements/gem_install.rb +45 -45
- data/lib/rubocop/sketchup/cop/requirements/get_extension_license.rb +95 -95
- data/lib/rubocop/sketchup/cop/requirements/global_constants.rb +38 -38
- data/lib/rubocop/sketchup/cop/requirements/global_include.rb +42 -42
- data/lib/rubocop/sketchup/cop/requirements/global_methods.rb +65 -65
- data/lib/rubocop/sketchup/cop/requirements/global_variables.rb +95 -95
- data/lib/rubocop/sketchup/cop/requirements/language_handler_globals.rb +46 -46
- data/lib/rubocop/sketchup/cop/requirements/load_path.rb +83 -83
- data/lib/rubocop/sketchup/cop/requirements/minimal_registration.rb +73 -73
- data/lib/rubocop/sketchup/cop/requirements/observers_start_operation.rb +161 -161
- data/lib/rubocop/sketchup/cop/requirements/register_extension.rb +45 -45
- data/lib/rubocop/sketchup/cop/requirements/ruby_core_namespace.rb +291 -291
- data/lib/rubocop/sketchup/cop/requirements/ruby_stdlib_namespace.rb +634 -634
- data/lib/rubocop/sketchup/cop/requirements/shipped_extensions_namespace.rb +61 -61
- data/lib/rubocop/sketchup/cop/requirements/sketchup_extension.rb +119 -119
- data/lib/rubocop/sketchup/cop/requirements/sketchup_require.rb +163 -163
- data/lib/rubocop/sketchup/cop/suggestions/add_group.rb +49 -49
- data/lib/rubocop/sketchup/cop/suggestions/compatibility.rb +117 -117
- data/lib/rubocop/sketchup/cop/suggestions/dc_internals.rb +34 -34
- data/lib/rubocop/sketchup/cop/suggestions/file_encoding.rb +78 -78
- data/lib/rubocop/sketchup/cop/suggestions/model_entities.rb +58 -58
- data/lib/rubocop/sketchup/cop/suggestions/monkey_patched_api.rb +45 -45
- data/lib/rubocop/sketchup/cop/suggestions/operation_name.rb +103 -103
- data/lib/rubocop/sketchup/cop/suggestions/sketchup_find_support_file.rb +39 -39
- data/lib/rubocop/sketchup/cop/suggestions/tool_drawing_bounds.rb +44 -44
- data/lib/rubocop/sketchup/cop/suggestions/tool_invalidate.rb +66 -66
- data/lib/rubocop/sketchup/cop/suggestions/tool_user_input.rb +41 -41
- data/lib/rubocop/sketchup/cop/suggestions/toolbar_timer.rb +65 -65
- data/lib/rubocop/sketchup/cop.rb +111 -111
- data/lib/rubocop/sketchup/dc_globals.rb +24 -24
- data/lib/rubocop/sketchup/dc_methods.rb +130 -130
- data/lib/rubocop/sketchup/extension_project.rb +65 -65
- data/lib/rubocop/sketchup/features.rb +738 -738
- data/lib/rubocop/sketchup/formatter/extension_review.rb +259 -259
- data/lib/rubocop/sketchup/inject.rb +19 -19
- data/lib/rubocop/sketchup/namespace.rb +47 -47
- data/lib/rubocop/sketchup/namespace_checker.rb +46 -46
- data/lib/rubocop/sketchup/no_comment_disable.rb +17 -17
- data/lib/rubocop/sketchup/range_help.rb +52 -52
- data/lib/rubocop/sketchup/sketchup_version.rb +87 -87
- data/lib/rubocop/sketchup/tool_checker.rb +43 -43
- data/lib/rubocop/sketchup/version.rb +5 -5
- data/lib/rubocop/sketchup.rb +12 -12
- data/lib/rubocop-sketchup.rb +48 -48
- data/rubocop-sketchup.gemspec +27 -27
- metadata +4 -4
@@ -1,95 +1,95 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RuboCop
|
4
|
-
module Cop
|
5
|
-
module SketchupRequirements
|
6
|
-
# Don't attempt to kill the Ruby interpreter by calling `exit` or `exit!`.
|
7
|
-
# SketchUp will trap `exit` and prevent that, with a message in the
|
8
|
-
# console. But `exit!` is not trapped and with terminate SketchUp without
|
9
|
-
# shutting down cleanly.
|
10
|
-
#
|
11
|
-
# Use `return`, `next`, `break` or `raise` instead.
|
12
|
-
class GetExtensionLicense < SketchUp::Cop
|
13
|
-
|
14
|
-
include RangeHelp
|
15
|
-
include SketchUp::NoCommentDisable
|
16
|
-
|
17
|
-
MSG_INVALID = 'Invalid extension GUID'.freeze
|
18
|
-
|
19
|
-
MSG_WRONG_TYPE = 'Only pass in extension GUID from local string '\
|
20
|
-
'literals.'.freeze
|
21
|
-
|
22
|
-
MSG_TRAILING_SPACE = 'Extra space in extension GUID'.freeze
|
23
|
-
|
24
|
-
def_node_matcher :get_extension_license, <<-PATTERN
|
25
|
-
(send
|
26
|
-
(const
|
27
|
-
(const nil? :Sketchup) :Licensing) :get_extension_license
|
28
|
-
$_)
|
29
|
-
PATTERN
|
30
|
-
|
31
|
-
# rubocop:disable Metrics/LineLength
|
32
|
-
EXTENSION_ID_PATTERN = /^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}
|
33
|
-
# rubocop:enable Metrics/LineLength
|
34
|
-
|
35
|
-
def on_send(node)
|
36
|
-
argument = get_extension_license(node)
|
37
|
-
return unless argument
|
38
|
-
|
39
|
-
if argument.lvar_type?
|
40
|
-
variable_name = argument.children.first
|
41
|
-
assignment_node = find_assignment(node, variable_name)
|
42
|
-
argument = assignment_node.children.last
|
43
|
-
end
|
44
|
-
|
45
|
-
if argument.str_type?
|
46
|
-
validate_extension_id(argument)
|
47
|
-
else
|
48
|
-
location = argument.loc.expression
|
49
|
-
add_offense(node, location: location, message: MSG_WRONG_TYPE)
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
private
|
54
|
-
|
55
|
-
def find_assignment(node, variable_name)
|
56
|
-
scope = node
|
57
|
-
until scope.parent.nil?
|
58
|
-
scope = scope.parent
|
59
|
-
scope.each_child_node { |child|
|
60
|
-
# next unless child.is_a?(RuboCop::AST::Node)
|
61
|
-
next unless child.lvasgn_type?
|
62
|
-
next unless child.children.first == variable_name
|
63
|
-
|
64
|
-
return child
|
65
|
-
}
|
66
|
-
end
|
67
|
-
nil
|
68
|
-
end
|
69
|
-
|
70
|
-
def validate_extension_id(node)
|
71
|
-
extension_id = node.str_content
|
72
|
-
|
73
|
-
# Trailing spaces
|
74
|
-
if extension_id.rstrip.size < extension_id.size
|
75
|
-
end_pos = node.loc.end.begin_pos
|
76
|
-
begin_pos = node.loc.begin.end_pos + extension_id.rstrip.size
|
77
|
-
range = range_between(begin_pos, end_pos)
|
78
|
-
add_offense(node, location: range, message: MSG_TRAILING_SPACE)
|
79
|
-
return false
|
80
|
-
end
|
81
|
-
|
82
|
-
# Invalid format.
|
83
|
-
if extension_id !~ EXTENSION_ID_PATTERN
|
84
|
-
range = string_contents_range(node)
|
85
|
-
add_offense(node, location: range, message: MSG_INVALID)
|
86
|
-
return false
|
87
|
-
end
|
88
|
-
|
89
|
-
true
|
90
|
-
end
|
91
|
-
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
95
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module SketchupRequirements
|
6
|
+
# Don't attempt to kill the Ruby interpreter by calling `exit` or `exit!`.
|
7
|
+
# SketchUp will trap `exit` and prevent that, with a message in the
|
8
|
+
# console. But `exit!` is not trapped and with terminate SketchUp without
|
9
|
+
# shutting down cleanly.
|
10
|
+
#
|
11
|
+
# Use `return`, `next`, `break` or `raise` instead.
|
12
|
+
class GetExtensionLicense < SketchUp::Cop
|
13
|
+
|
14
|
+
include RangeHelp
|
15
|
+
include SketchUp::NoCommentDisable
|
16
|
+
|
17
|
+
MSG_INVALID = 'Invalid extension GUID'.freeze
|
18
|
+
|
19
|
+
MSG_WRONG_TYPE = 'Only pass in extension GUID from local string '\
|
20
|
+
'literals.'.freeze
|
21
|
+
|
22
|
+
MSG_TRAILING_SPACE = 'Extra space in extension GUID'.freeze
|
23
|
+
|
24
|
+
def_node_matcher :get_extension_license, <<-PATTERN
|
25
|
+
(send
|
26
|
+
(const
|
27
|
+
(const nil? :Sketchup) :Licensing) :get_extension_license
|
28
|
+
$_)
|
29
|
+
PATTERN
|
30
|
+
|
31
|
+
# rubocop:disable Metrics/LineLength
|
32
|
+
EXTENSION_ID_PATTERN = /^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/.freeze
|
33
|
+
# rubocop:enable Metrics/LineLength
|
34
|
+
|
35
|
+
def on_send(node)
|
36
|
+
argument = get_extension_license(node)
|
37
|
+
return unless argument
|
38
|
+
|
39
|
+
if argument.lvar_type?
|
40
|
+
variable_name = argument.children.first
|
41
|
+
assignment_node = find_assignment(node, variable_name)
|
42
|
+
argument = assignment_node.children.last
|
43
|
+
end
|
44
|
+
|
45
|
+
if argument.str_type?
|
46
|
+
validate_extension_id(argument)
|
47
|
+
else
|
48
|
+
location = argument.loc.expression
|
49
|
+
add_offense(node, location: location, message: MSG_WRONG_TYPE)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def find_assignment(node, variable_name)
|
56
|
+
scope = node
|
57
|
+
until scope.parent.nil?
|
58
|
+
scope = scope.parent
|
59
|
+
scope.each_child_node { |child|
|
60
|
+
# next unless child.is_a?(RuboCop::AST::Node)
|
61
|
+
next unless child.lvasgn_type?
|
62
|
+
next unless child.children.first == variable_name
|
63
|
+
|
64
|
+
return child
|
65
|
+
}
|
66
|
+
end
|
67
|
+
nil
|
68
|
+
end
|
69
|
+
|
70
|
+
def validate_extension_id(node)
|
71
|
+
extension_id = node.str_content
|
72
|
+
|
73
|
+
# Trailing spaces
|
74
|
+
if extension_id.rstrip.size < extension_id.size
|
75
|
+
end_pos = node.loc.end.begin_pos
|
76
|
+
begin_pos = node.loc.begin.end_pos + extension_id.rstrip.size
|
77
|
+
range = range_between(begin_pos, end_pos)
|
78
|
+
add_offense(node, location: range, message: MSG_TRAILING_SPACE)
|
79
|
+
return false
|
80
|
+
end
|
81
|
+
|
82
|
+
# Invalid format.
|
83
|
+
if extension_id !~ EXTENSION_ID_PATTERN
|
84
|
+
range = string_contents_range(node)
|
85
|
+
add_offense(node, location: range, message: MSG_INVALID)
|
86
|
+
return false
|
87
|
+
end
|
88
|
+
|
89
|
+
true
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
@@ -1,38 +1,38 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RuboCop
|
4
|
-
module Cop
|
5
|
-
module SketchupRequirements
|
6
|
-
# Extensions in SketchUp all share the same Ruby environment on the user's
|
7
|
-
# machine. Because of this it's important that each extension isolate
|
8
|
-
# itself to avoid clashing with other extensions.
|
9
|
-
#
|
10
|
-
# Extensions submitted to Extension Warehouse is expected to not define
|
11
|
-
# global constants.
|
12
|
-
class GlobalConstants < SketchUp::Cop
|
13
|
-
|
14
|
-
include SketchUp::NoCommentDisable
|
15
|
-
include SketchUp
|
16
|
-
|
17
|
-
MSG = 'Do not introduce global constants.'.freeze
|
18
|
-
|
19
|
-
def_node_matcher :namespaced_constant?, <<-PATTERN
|
20
|
-
(casgn
|
21
|
-
(const _ _) ...
|
22
|
-
)
|
23
|
-
PATTERN
|
24
|
-
|
25
|
-
# Constant assignment.
|
26
|
-
def on_casgn(node)
|
27
|
-
return if namespaced_constant?(node)
|
28
|
-
|
29
|
-
namespace = Namespace.new(node.parent_module_name)
|
30
|
-
return unless namespace.top_level?
|
31
|
-
|
32
|
-
add_offense(node, location: :name)
|
33
|
-
end
|
34
|
-
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module SketchupRequirements
|
6
|
+
# Extensions in SketchUp all share the same Ruby environment on the user's
|
7
|
+
# machine. Because of this it's important that each extension isolate
|
8
|
+
# itself to avoid clashing with other extensions.
|
9
|
+
#
|
10
|
+
# Extensions submitted to Extension Warehouse is expected to not define
|
11
|
+
# global constants.
|
12
|
+
class GlobalConstants < SketchUp::Cop
|
13
|
+
|
14
|
+
include SketchUp::NoCommentDisable
|
15
|
+
include SketchUp
|
16
|
+
|
17
|
+
MSG = 'Do not introduce global constants.'.freeze
|
18
|
+
|
19
|
+
def_node_matcher :namespaced_constant?, <<-PATTERN
|
20
|
+
(casgn
|
21
|
+
(const _ _) ...
|
22
|
+
)
|
23
|
+
PATTERN
|
24
|
+
|
25
|
+
# Constant assignment.
|
26
|
+
def on_casgn(node)
|
27
|
+
return if namespaced_constant?(node)
|
28
|
+
|
29
|
+
namespace = Namespace.new(node.parent_module_name)
|
30
|
+
return unless namespace.top_level?
|
31
|
+
|
32
|
+
add_offense(node, location: :name)
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -1,42 +1,42 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RuboCop
|
4
|
-
module Cop
|
5
|
-
module SketchupRequirements
|
6
|
-
# Extensions in SketchUp all share the same Ruby environment on the user's
|
7
|
-
# machine. Because of this it's important that each extension isolate
|
8
|
-
# itself to avoid clashing with other extensions.
|
9
|
-
#
|
10
|
-
# Extensions submitted to Extension Warehouse is expected to not pollute
|
11
|
-
# the global namespace by including mix-in modules.
|
12
|
-
class GlobalInclude < SketchUp::Cop
|
13
|
-
|
14
|
-
include SketchUp::NoCommentDisable
|
15
|
-
include SketchUp
|
16
|
-
|
17
|
-
MSG = 'Do not include into global namespace.'.freeze
|
18
|
-
|
19
|
-
def_node_matcher :is_include?, <<-PATTERN
|
20
|
-
(send nil? :include ...)
|
21
|
-
PATTERN
|
22
|
-
|
23
|
-
def on_send(node)
|
24
|
-
return unless global_include?(node)
|
25
|
-
|
26
|
-
add_offense(node, location: :selector)
|
27
|
-
end
|
28
|
-
|
29
|
-
private
|
30
|
-
|
31
|
-
def global_include?(node)
|
32
|
-
is_include?(node) && global_namespace?(node)
|
33
|
-
end
|
34
|
-
|
35
|
-
def global_namespace?(node)
|
36
|
-
%w[Kernel Object].include?(node.parent_module_name)
|
37
|
-
end
|
38
|
-
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module SketchupRequirements
|
6
|
+
# Extensions in SketchUp all share the same Ruby environment on the user's
|
7
|
+
# machine. Because of this it's important that each extension isolate
|
8
|
+
# itself to avoid clashing with other extensions.
|
9
|
+
#
|
10
|
+
# Extensions submitted to Extension Warehouse is expected to not pollute
|
11
|
+
# the global namespace by including mix-in modules.
|
12
|
+
class GlobalInclude < SketchUp::Cop
|
13
|
+
|
14
|
+
include SketchUp::NoCommentDisable
|
15
|
+
include SketchUp
|
16
|
+
|
17
|
+
MSG = 'Do not include into global namespace.'.freeze
|
18
|
+
|
19
|
+
def_node_matcher :is_include?, <<-PATTERN
|
20
|
+
(send nil? :include ...)
|
21
|
+
PATTERN
|
22
|
+
|
23
|
+
def on_send(node)
|
24
|
+
return unless global_include?(node)
|
25
|
+
|
26
|
+
add_offense(node, location: :selector)
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def global_include?(node)
|
32
|
+
is_include?(node) && global_namespace?(node)
|
33
|
+
end
|
34
|
+
|
35
|
+
def global_namespace?(node)
|
36
|
+
%w[Kernel Object].include?(node.parent_module_name)
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -1,65 +1,65 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RuboCop
|
4
|
-
module Cop
|
5
|
-
module SketchupRequirements
|
6
|
-
# Extensions in SketchUp all share the same Ruby environment on the user's
|
7
|
-
# machine. Because of this it's important that each extension isolate
|
8
|
-
# itself to avoid clashing with other extensions.
|
9
|
-
#
|
10
|
-
# Extensions submitted to Extension Warehouse is expected to not define
|
11
|
-
# global methods.
|
12
|
-
class GlobalMethods < SketchUp::Cop
|
13
|
-
|
14
|
-
include SketchUp::NoCommentDisable
|
15
|
-
include SketchUp
|
16
|
-
|
17
|
-
MSG = 'Do not introduce global methods.'.freeze
|
18
|
-
|
19
|
-
# Reference: http://www.rubydoc.info/gems/rubocop/RuboCop/NodePattern
|
20
|
-
#
|
21
|
-
# Matchers for methods defined with this syntax:
|
22
|
-
#
|
23
|
-
# def Example.foo
|
24
|
-
# end
|
25
|
-
#
|
26
|
-
# def (Example::Foo).bar
|
27
|
-
# end
|
28
|
-
|
29
|
-
def_node_matcher :class_method?, <<-PATTERN
|
30
|
-
(defs
|
31
|
-
(const _ _) ...
|
32
|
-
)
|
33
|
-
PATTERN
|
34
|
-
|
35
|
-
def_node_matcher :class_method, <<-PATTERN
|
36
|
-
(defs
|
37
|
-
{
|
38
|
-
(const nil? $_)
|
39
|
-
(const (const nil? $_) ...)
|
40
|
-
}
|
41
|
-
...
|
42
|
-
)
|
43
|
-
PATTERN
|
44
|
-
|
45
|
-
def on_def(node)
|
46
|
-
if class_method?(node)
|
47
|
-
class_method_parent = class_method(node)
|
48
|
-
namespace = Namespace.new(class_method_parent.to_s)
|
49
|
-
else
|
50
|
-
# If a method is defined inside a block then parent_module_name
|
51
|
-
# will return nil.
|
52
|
-
return if node.parent_module_name.nil?
|
53
|
-
|
54
|
-
namespace = Namespace.new(node.parent_module_name)
|
55
|
-
end
|
56
|
-
return unless namespace.top_level?
|
57
|
-
|
58
|
-
add_offense(node, location: :name)
|
59
|
-
end
|
60
|
-
alias on_defs on_def
|
61
|
-
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module SketchupRequirements
|
6
|
+
# Extensions in SketchUp all share the same Ruby environment on the user's
|
7
|
+
# machine. Because of this it's important that each extension isolate
|
8
|
+
# itself to avoid clashing with other extensions.
|
9
|
+
#
|
10
|
+
# Extensions submitted to Extension Warehouse is expected to not define
|
11
|
+
# global methods.
|
12
|
+
class GlobalMethods < SketchUp::Cop
|
13
|
+
|
14
|
+
include SketchUp::NoCommentDisable
|
15
|
+
include SketchUp
|
16
|
+
|
17
|
+
MSG = 'Do not introduce global methods.'.freeze
|
18
|
+
|
19
|
+
# Reference: http://www.rubydoc.info/gems/rubocop/RuboCop/NodePattern
|
20
|
+
#
|
21
|
+
# Matchers for methods defined with this syntax:
|
22
|
+
#
|
23
|
+
# def Example.foo
|
24
|
+
# end
|
25
|
+
#
|
26
|
+
# def (Example::Foo).bar
|
27
|
+
# end
|
28
|
+
|
29
|
+
def_node_matcher :class_method?, <<-PATTERN
|
30
|
+
(defs
|
31
|
+
(const _ _) ...
|
32
|
+
)
|
33
|
+
PATTERN
|
34
|
+
|
35
|
+
def_node_matcher :class_method, <<-PATTERN
|
36
|
+
(defs
|
37
|
+
{
|
38
|
+
(const nil? $_)
|
39
|
+
(const (const nil? $_) ...)
|
40
|
+
}
|
41
|
+
...
|
42
|
+
)
|
43
|
+
PATTERN
|
44
|
+
|
45
|
+
def on_def(node)
|
46
|
+
if class_method?(node)
|
47
|
+
class_method_parent = class_method(node)
|
48
|
+
namespace = Namespace.new(class_method_parent.to_s)
|
49
|
+
else
|
50
|
+
# If a method is defined inside a block then parent_module_name
|
51
|
+
# will return nil.
|
52
|
+
return if node.parent_module_name.nil?
|
53
|
+
|
54
|
+
namespace = Namespace.new(node.parent_module_name)
|
55
|
+
end
|
56
|
+
return unless namespace.top_level?
|
57
|
+
|
58
|
+
add_offense(node, location: :name)
|
59
|
+
end
|
60
|
+
alias on_defs on_def
|
61
|
+
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -1,95 +1,95 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RuboCop
|
4
|
-
module Cop
|
5
|
-
module SketchupRequirements
|
6
|
-
# Extensions in SketchUp all share the same Ruby environment on the user's
|
7
|
-
# machine. Because of this it's important that each extension isolate
|
8
|
-
# itself to avoid clashing with other extensions.
|
9
|
-
#
|
10
|
-
# Extensions submitted to Extension Warehouse is expected to not define
|
11
|
-
# global variables.
|
12
|
-
#
|
13
|
-
# This cops looks for uses of global variables.
|
14
|
-
# It does not report offenses for built-in global variables.
|
15
|
-
# Built-in global variables are allowed by default. Additionally
|
16
|
-
# users can allow additional variables via the AllowedVariables option.
|
17
|
-
#
|
18
|
-
# Note that backreferences like `$1`, `$2`, etc are not global variables.
|
19
|
-
class GlobalVariables < SketchUp::Cop
|
20
|
-
|
21
|
-
include SketchUp::NoCommentDisable
|
22
|
-
include SketchUp::DynamicComponentGlobals
|
23
|
-
|
24
|
-
MSG = 'Do not introduce global variables.'.freeze
|
25
|
-
|
26
|
-
# predefined global variables their English aliases
|
27
|
-
# http://www.zenspider.com/Languages/Ruby/QuickRef.html
|
28
|
-
BUILT_IN_VARS = %i[
|
29
|
-
$: $LOAD_PATH
|
30
|
-
$" $LOADED_FEATURES
|
31
|
-
$0 $PROGRAM_NAME
|
32
|
-
$! $ERROR_INFO
|
33
|
-
$@ $ERROR_POSITION
|
34
|
-
$; $FS $FIELD_SEPARATOR
|
35
|
-
$, $OFS $OUTPUT_FIELD_SEPARATOR
|
36
|
-
$/ $RS $INPUT_RECORD_SEPARATOR
|
37
|
-
$\\ $ORS $OUTPUT_RECORD_SEPARATOR
|
38
|
-
$. $NR $INPUT_LINE_NUMBER
|
39
|
-
$_ $LAST_READ_LINE
|
40
|
-
$> $DEFAULT_OUTPUT
|
41
|
-
$< $DEFAULT_INPUT
|
42
|
-
$$ $PID $PROCESS_ID
|
43
|
-
$? $CHILD_STATUS
|
44
|
-
$~ $LAST_MATCH_INFO
|
45
|
-
$= $IGNORECASE
|
46
|
-
$* $ARGV
|
47
|
-
$& $MATCH
|
48
|
-
$` $PREMATCH
|
49
|
-
$' $POSTMATCH
|
50
|
-
$+ $LAST_PAREN_MATCH
|
51
|
-
$stdin $stdout $stderr
|
52
|
-
$DEBUG $FILENAME $VERBOSE $SAFE
|
53
|
-
$-0 $-a $-d $-F $-i $-I $-l $-p $-v $-w
|
54
|
-
$CLASSPATH $JRUBY_VERSION $JRUBY_REVISION $ENV_JAVA
|
55
|
-
].freeze
|
56
|
-
|
57
|
-
SKETCHUP_VARS = %i[
|
58
|
-
$loaded_files
|
59
|
-
].freeze
|
60
|
-
|
61
|
-
# Some globals, like DC's, are being read from so often that it's better
|
62
|
-
# to ignore these to reduce noise.
|
63
|
-
READ_ONLY_VARS = DC_GLOBALS
|
64
|
-
|
65
|
-
ALLOWED_VARS = BUILT_IN_VARS | SKETCHUP_VARS
|
66
|
-
|
67
|
-
|
68
|
-
def allowed_var?(global_var)
|
69
|
-
ALLOWED_VARS.include?(global_var)
|
70
|
-
end
|
71
|
-
|
72
|
-
def read_allowed?(global_var)
|
73
|
-
READ_ONLY_VARS.include?(global_var)
|
74
|
-
end
|
75
|
-
|
76
|
-
def on_gvar(node)
|
77
|
-
global_var, = *node
|
78
|
-
check(node) unless read_allowed?(global_var)
|
79
|
-
end
|
80
|
-
|
81
|
-
def on_gvasgn(node)
|
82
|
-
check(node)
|
83
|
-
end
|
84
|
-
|
85
|
-
def check(node)
|
86
|
-
global_var, = *node
|
87
|
-
|
88
|
-
return if allowed_var?(global_var)
|
89
|
-
|
90
|
-
add_offense(node, location: :name)
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
95
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module SketchupRequirements
|
6
|
+
# Extensions in SketchUp all share the same Ruby environment on the user's
|
7
|
+
# machine. Because of this it's important that each extension isolate
|
8
|
+
# itself to avoid clashing with other extensions.
|
9
|
+
#
|
10
|
+
# Extensions submitted to Extension Warehouse is expected to not define
|
11
|
+
# global variables.
|
12
|
+
#
|
13
|
+
# This cops looks for uses of global variables.
|
14
|
+
# It does not report offenses for built-in global variables.
|
15
|
+
# Built-in global variables are allowed by default. Additionally
|
16
|
+
# users can allow additional variables via the AllowedVariables option.
|
17
|
+
#
|
18
|
+
# Note that backreferences like `$1`, `$2`, etc are not global variables.
|
19
|
+
class GlobalVariables < SketchUp::Cop
|
20
|
+
|
21
|
+
include SketchUp::NoCommentDisable
|
22
|
+
include SketchUp::DynamicComponentGlobals
|
23
|
+
|
24
|
+
MSG = 'Do not introduce global variables.'.freeze
|
25
|
+
|
26
|
+
# predefined global variables their English aliases
|
27
|
+
# http://www.zenspider.com/Languages/Ruby/QuickRef.html
|
28
|
+
BUILT_IN_VARS = %i[
|
29
|
+
$: $LOAD_PATH
|
30
|
+
$" $LOADED_FEATURES
|
31
|
+
$0 $PROGRAM_NAME
|
32
|
+
$! $ERROR_INFO
|
33
|
+
$@ $ERROR_POSITION
|
34
|
+
$; $FS $FIELD_SEPARATOR
|
35
|
+
$, $OFS $OUTPUT_FIELD_SEPARATOR
|
36
|
+
$/ $RS $INPUT_RECORD_SEPARATOR
|
37
|
+
$\\ $ORS $OUTPUT_RECORD_SEPARATOR
|
38
|
+
$. $NR $INPUT_LINE_NUMBER
|
39
|
+
$_ $LAST_READ_LINE
|
40
|
+
$> $DEFAULT_OUTPUT
|
41
|
+
$< $DEFAULT_INPUT
|
42
|
+
$$ $PID $PROCESS_ID
|
43
|
+
$? $CHILD_STATUS
|
44
|
+
$~ $LAST_MATCH_INFO
|
45
|
+
$= $IGNORECASE
|
46
|
+
$* $ARGV
|
47
|
+
$& $MATCH
|
48
|
+
$` $PREMATCH
|
49
|
+
$' $POSTMATCH
|
50
|
+
$+ $LAST_PAREN_MATCH
|
51
|
+
$stdin $stdout $stderr
|
52
|
+
$DEBUG $FILENAME $VERBOSE $SAFE
|
53
|
+
$-0 $-a $-d $-F $-i $-I $-l $-p $-v $-w
|
54
|
+
$CLASSPATH $JRUBY_VERSION $JRUBY_REVISION $ENV_JAVA
|
55
|
+
].freeze
|
56
|
+
|
57
|
+
SKETCHUP_VARS = %i[
|
58
|
+
$loaded_files
|
59
|
+
].freeze
|
60
|
+
|
61
|
+
# Some globals, like DC's, are being read from so often that it's better
|
62
|
+
# to ignore these to reduce noise.
|
63
|
+
READ_ONLY_VARS = DC_GLOBALS
|
64
|
+
|
65
|
+
ALLOWED_VARS = BUILT_IN_VARS | SKETCHUP_VARS
|
66
|
+
|
67
|
+
|
68
|
+
def allowed_var?(global_var)
|
69
|
+
ALLOWED_VARS.include?(global_var)
|
70
|
+
end
|
71
|
+
|
72
|
+
def read_allowed?(global_var)
|
73
|
+
READ_ONLY_VARS.include?(global_var)
|
74
|
+
end
|
75
|
+
|
76
|
+
def on_gvar(node)
|
77
|
+
global_var, = *node
|
78
|
+
check(node) unless read_allowed?(global_var)
|
79
|
+
end
|
80
|
+
|
81
|
+
def on_gvasgn(node)
|
82
|
+
check(node)
|
83
|
+
end
|
84
|
+
|
85
|
+
def check(node)
|
86
|
+
global_var, = *node
|
87
|
+
|
88
|
+
return if allowed_var?(global_var)
|
89
|
+
|
90
|
+
add_offense(node, location: :name)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|