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,61 +1,61 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RuboCop
|
4
|
-
module Cop
|
5
|
-
module SketchupRequirements
|
6
|
-
# Don't modify SketchUp's shipped extensions.
|
7
|
-
class ShippedExtensionsNamespace < SketchUp::Cop
|
8
|
-
|
9
|
-
include SketchUp::NoCommentDisable
|
10
|
-
include SketchUp::NamespaceChecker
|
11
|
-
|
12
|
-
MSG = 'Do not modify shipped extensions.'.freeze
|
13
|
-
|
14
|
-
# We check only against the top level namespaces. The core define more
|
15
|
-
# objects, but they are under one of the top level namespaces listed.
|
16
|
-
|
17
|
-
NAMESPACES_ADVANCED_CAMERA_TOOLS = %w[
|
18
|
-
ACTUtil
|
19
|
-
CameraAppObserver
|
20
|
-
CameraEntityObserver
|
21
|
-
CameraFrameChangeObserver
|
22
|
-
CameraRep
|
23
|
-
CameraToolModelObserver
|
24
|
-
CameraToolPagesObserver
|
25
|
-
CameraToolViewObserver
|
26
|
-
FilmCameraTool
|
27
|
-
FSCameraData
|
28
|
-
FSGeomUtils
|
29
|
-
FSValidate
|
30
|
-
PageNameChangeObserver
|
31
|
-
].freeze
|
32
|
-
|
33
|
-
NAMESPACES_DYNAMIC_COMPONENTS = %w[
|
34
|
-
DCConverter
|
35
|
-
DCDownloader
|
36
|
-
DCFunctionsV1
|
37
|
-
DCInteractTool
|
38
|
-
DCObservers
|
39
|
-
DCProgressBar
|
40
|
-
DynamicComponents
|
41
|
-
DynamicComponentsV1
|
42
|
-
].freeze
|
43
|
-
|
44
|
-
NAMESPACES_TRIMBLE_CONNECT = %w[
|
45
|
-
Trimble
|
46
|
-
].freeze
|
47
|
-
|
48
|
-
NAMESPACES = (
|
49
|
-
NAMESPACES_ADVANCED_CAMERA_TOOLS |
|
50
|
-
NAMESPACES_DYNAMIC_COMPONENTS |
|
51
|
-
NAMESPACES_TRIMBLE_CONNECT
|
52
|
-
).freeze
|
53
|
-
|
54
|
-
def namespaces
|
55
|
-
NAMESPACES
|
56
|
-
end
|
57
|
-
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module SketchupRequirements
|
6
|
+
# Don't modify SketchUp's shipped extensions.
|
7
|
+
class ShippedExtensionsNamespace < SketchUp::Cop
|
8
|
+
|
9
|
+
include SketchUp::NoCommentDisable
|
10
|
+
include SketchUp::NamespaceChecker
|
11
|
+
|
12
|
+
MSG = 'Do not modify shipped extensions.'.freeze
|
13
|
+
|
14
|
+
# We check only against the top level namespaces. The core define more
|
15
|
+
# objects, but they are under one of the top level namespaces listed.
|
16
|
+
|
17
|
+
NAMESPACES_ADVANCED_CAMERA_TOOLS = %w[
|
18
|
+
ACTUtil
|
19
|
+
CameraAppObserver
|
20
|
+
CameraEntityObserver
|
21
|
+
CameraFrameChangeObserver
|
22
|
+
CameraRep
|
23
|
+
CameraToolModelObserver
|
24
|
+
CameraToolPagesObserver
|
25
|
+
CameraToolViewObserver
|
26
|
+
FilmCameraTool
|
27
|
+
FSCameraData
|
28
|
+
FSGeomUtils
|
29
|
+
FSValidate
|
30
|
+
PageNameChangeObserver
|
31
|
+
].freeze
|
32
|
+
|
33
|
+
NAMESPACES_DYNAMIC_COMPONENTS = %w[
|
34
|
+
DCConverter
|
35
|
+
DCDownloader
|
36
|
+
DCFunctionsV1
|
37
|
+
DCInteractTool
|
38
|
+
DCObservers
|
39
|
+
DCProgressBar
|
40
|
+
DynamicComponents
|
41
|
+
DynamicComponentsV1
|
42
|
+
].freeze
|
43
|
+
|
44
|
+
NAMESPACES_TRIMBLE_CONNECT = %w[
|
45
|
+
Trimble
|
46
|
+
].freeze
|
47
|
+
|
48
|
+
NAMESPACES = (
|
49
|
+
NAMESPACES_ADVANCED_CAMERA_TOOLS |
|
50
|
+
NAMESPACES_DYNAMIC_COMPONENTS |
|
51
|
+
NAMESPACES_TRIMBLE_CONNECT
|
52
|
+
).freeze
|
53
|
+
|
54
|
+
def namespaces
|
55
|
+
NAMESPACES
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -1,119 +1,119 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RuboCop
|
4
|
-
module Cop
|
5
|
-
module SketchupRequirements
|
6
|
-
# Register a single instance of SketchupExtension per extension.
|
7
|
-
# This should be done by the root .rb file in the extension package.
|
8
|
-
#
|
9
|
-
# @example Good - a single SketchupExtension is registered.
|
10
|
-
# module Example
|
11
|
-
# unless file_loaded?(__FILE__)
|
12
|
-
# extension = SketchupExtension.new('Hello World', 'example/main')
|
13
|
-
# Sketchup.register_extension(extension, true)
|
14
|
-
# file_loaded(__FILE__)
|
15
|
-
# end
|
16
|
-
# end
|
17
|
-
class SketchupExtension < SketchUp::Cop
|
18
|
-
|
19
|
-
include SketchUp::NoCommentDisable
|
20
|
-
include SketchUp::ExtensionProject
|
21
|
-
include RangeHelp
|
22
|
-
|
23
|
-
# rubocop:disable Metrics/LineLength
|
24
|
-
MSG = 'Create and register one SketchupExtension instance per extension.'.freeze
|
25
|
-
MSG_CREATE_ONE = 'Create only SketchupExtension instance per extension.'.freeze
|
26
|
-
MSG_CREATE_MISSING = 'SketchupExtension.new not found.'.freeze
|
27
|
-
MSG_REGISTER_ONE = 'Only register one SketchupExtension instance per extension.'.freeze
|
28
|
-
MSG_REGISTER_MISSING = 'Registration of SketchupExtension not found. Expected %s'.freeze
|
29
|
-
# rubocop:enable Metrics/LineLength
|
30
|
-
|
31
|
-
# Reference: http://rubocop.readthedocs.io/en/latest/node_pattern/
|
32
|
-
def_node_search :sketchup_extension_new, <<-PATTERN
|
33
|
-
(send
|
34
|
-
(const nil? :SketchupExtension) :new ...)
|
35
|
-
PATTERN
|
36
|
-
|
37
|
-
def_node_search :sketchup_register_extension, <<-PATTERN
|
38
|
-
(send
|
39
|
-
(const nil? :Sketchup) :register_extension
|
40
|
-
{({lvar ivar cvar gvar} $_)(const nil? $_)}
|
41
|
-
_)
|
42
|
-
PATTERN
|
43
|
-
|
44
|
-
def investigate(processed_source)
|
45
|
-
return unless root_file?(processed_source)
|
46
|
-
|
47
|
-
source_node = processed_source.ast
|
48
|
-
# Using range similar to RuboCop::Cop::Naming::Filename (file_name.rb)
|
49
|
-
range = source_range(processed_source.buffer, 1, 0)
|
50
|
-
|
51
|
-
# Look for SketchupExtension.new.
|
52
|
-
extension_nodes = sketchup_extension_new(source_node).to_a
|
53
|
-
|
54
|
-
# Threat instances not assigned to anything as non-existing.
|
55
|
-
extension_nodes.select! { |node|
|
56
|
-
node.parent && node.parent.assignment?
|
57
|
-
}
|
58
|
-
|
59
|
-
# There should not be multiple instances.
|
60
|
-
if extension_nodes.size > 1
|
61
|
-
add_offense(nil,
|
62
|
-
location: range,
|
63
|
-
message: MSG_CREATE_ONE)
|
64
|
-
return
|
65
|
-
end
|
66
|
-
|
67
|
-
# There should be exactly one.
|
68
|
-
extension_node = extension_nodes.first
|
69
|
-
if extension_node.nil?
|
70
|
-
add_offense(nil,
|
71
|
-
location: range,
|
72
|
-
message: MSG_CREATE_MISSING)
|
73
|
-
return
|
74
|
-
end
|
75
|
-
|
76
|
-
# Ensure it have two arguments.
|
77
|
-
if extension_node.arguments.size < 2
|
78
|
-
message = if extension_node.arguments.size == 1
|
79
|
-
'Missing second argument for the path'
|
80
|
-
else
|
81
|
-
'Missing required name arguments'
|
82
|
-
end
|
83
|
-
add_offense(extension_node,
|
84
|
-
message: message)
|
85
|
-
return
|
86
|
-
end
|
87
|
-
|
88
|
-
# Find the name of the value SketchupExtension.new was assigned to.
|
89
|
-
assignment_node = extension_node.parent
|
90
|
-
if assignment_node.casgn_type?
|
91
|
-
extension_var = assignment_node.to_a[1]
|
92
|
-
else
|
93
|
-
extension_var = assignment_node.to_a[0]
|
94
|
-
end
|
95
|
-
|
96
|
-
# Look for Sketchup.register and make sure it register the extension
|
97
|
-
# object detected earlier.
|
98
|
-
registered_vars = sketchup_register_extension(source_node).to_a
|
99
|
-
|
100
|
-
# Make sure there is only one call to `register_extension`.
|
101
|
-
if registered_vars.size > 1
|
102
|
-
add_offense(registered_vars[1],
|
103
|
-
message: MSG_REGISTER_ONE)
|
104
|
-
return
|
105
|
-
end
|
106
|
-
|
107
|
-
registered_var = sketchup_register_extension(source_node).first
|
108
|
-
unless registered_var == extension_var
|
109
|
-
msg = MSG_REGISTER_MISSING % extension_var.to_s
|
110
|
-
add_offense(nil,
|
111
|
-
location: range,
|
112
|
-
message: msg)
|
113
|
-
end
|
114
|
-
end
|
115
|
-
|
116
|
-
end
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module SketchupRequirements
|
6
|
+
# Register a single instance of SketchupExtension per extension.
|
7
|
+
# This should be done by the root .rb file in the extension package.
|
8
|
+
#
|
9
|
+
# @example Good - a single SketchupExtension is registered.
|
10
|
+
# module Example
|
11
|
+
# unless file_loaded?(__FILE__)
|
12
|
+
# extension = SketchupExtension.new('Hello World', 'example/main')
|
13
|
+
# Sketchup.register_extension(extension, true)
|
14
|
+
# file_loaded(__FILE__)
|
15
|
+
# end
|
16
|
+
# end
|
17
|
+
class SketchupExtension < SketchUp::Cop
|
18
|
+
|
19
|
+
include SketchUp::NoCommentDisable
|
20
|
+
include SketchUp::ExtensionProject
|
21
|
+
include RangeHelp
|
22
|
+
|
23
|
+
# rubocop:disable Metrics/LineLength
|
24
|
+
MSG = 'Create and register one SketchupExtension instance per extension.'.freeze
|
25
|
+
MSG_CREATE_ONE = 'Create only SketchupExtension instance per extension.'.freeze
|
26
|
+
MSG_CREATE_MISSING = 'SketchupExtension.new not found.'.freeze
|
27
|
+
MSG_REGISTER_ONE = 'Only register one SketchupExtension instance per extension.'.freeze
|
28
|
+
MSG_REGISTER_MISSING = 'Registration of SketchupExtension not found. Expected %s'.freeze
|
29
|
+
# rubocop:enable Metrics/LineLength
|
30
|
+
|
31
|
+
# Reference: http://rubocop.readthedocs.io/en/latest/node_pattern/
|
32
|
+
def_node_search :sketchup_extension_new, <<-PATTERN
|
33
|
+
(send
|
34
|
+
(const nil? :SketchupExtension) :new ...)
|
35
|
+
PATTERN
|
36
|
+
|
37
|
+
def_node_search :sketchup_register_extension, <<-PATTERN
|
38
|
+
(send
|
39
|
+
(const nil? :Sketchup) :register_extension
|
40
|
+
{({lvar ivar cvar gvar} $_)(const nil? $_)}
|
41
|
+
_)
|
42
|
+
PATTERN
|
43
|
+
|
44
|
+
def investigate(processed_source)
|
45
|
+
return unless root_file?(processed_source)
|
46
|
+
|
47
|
+
source_node = processed_source.ast
|
48
|
+
# Using range similar to RuboCop::Cop::Naming::Filename (file_name.rb)
|
49
|
+
range = source_range(processed_source.buffer, 1, 0)
|
50
|
+
|
51
|
+
# Look for SketchupExtension.new.
|
52
|
+
extension_nodes = sketchup_extension_new(source_node).to_a
|
53
|
+
|
54
|
+
# Threat instances not assigned to anything as non-existing.
|
55
|
+
extension_nodes.select! { |node|
|
56
|
+
node.parent && node.parent.assignment?
|
57
|
+
}
|
58
|
+
|
59
|
+
# There should not be multiple instances.
|
60
|
+
if extension_nodes.size > 1
|
61
|
+
add_offense(nil,
|
62
|
+
location: range,
|
63
|
+
message: MSG_CREATE_ONE)
|
64
|
+
return
|
65
|
+
end
|
66
|
+
|
67
|
+
# There should be exactly one.
|
68
|
+
extension_node = extension_nodes.first
|
69
|
+
if extension_node.nil?
|
70
|
+
add_offense(nil,
|
71
|
+
location: range,
|
72
|
+
message: MSG_CREATE_MISSING)
|
73
|
+
return
|
74
|
+
end
|
75
|
+
|
76
|
+
# Ensure it have two arguments.
|
77
|
+
if extension_node.arguments.size < 2
|
78
|
+
message = if extension_node.arguments.size == 1
|
79
|
+
'Missing second argument for the path'
|
80
|
+
else
|
81
|
+
'Missing required name arguments'
|
82
|
+
end
|
83
|
+
add_offense(extension_node,
|
84
|
+
message: message)
|
85
|
+
return
|
86
|
+
end
|
87
|
+
|
88
|
+
# Find the name of the value SketchupExtension.new was assigned to.
|
89
|
+
assignment_node = extension_node.parent
|
90
|
+
if assignment_node.casgn_type?
|
91
|
+
extension_var = assignment_node.to_a[1]
|
92
|
+
else
|
93
|
+
extension_var = assignment_node.to_a[0]
|
94
|
+
end
|
95
|
+
|
96
|
+
# Look for Sketchup.register and make sure it register the extension
|
97
|
+
# object detected earlier.
|
98
|
+
registered_vars = sketchup_register_extension(source_node).to_a
|
99
|
+
|
100
|
+
# Make sure there is only one call to `register_extension`.
|
101
|
+
if registered_vars.size > 1
|
102
|
+
add_offense(registered_vars[1],
|
103
|
+
message: MSG_REGISTER_ONE)
|
104
|
+
return
|
105
|
+
end
|
106
|
+
|
107
|
+
registered_var = sketchup_register_extension(source_node).first
|
108
|
+
unless registered_var == extension_var
|
109
|
+
msg = MSG_REGISTER_MISSING % extension_var.to_s
|
110
|
+
add_offense(nil,
|
111
|
+
location: range,
|
112
|
+
message: msg)
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|