rubocop-sketchup 0.4.1 → 0.5.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.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +7 -1
  3. data/assets/logo.png +0 -0
  4. data/assets/output.html.erb +301 -0
  5. data/config/default.yml +141 -36
  6. data/lib/rubocop/sketchup/config.rb +28 -8
  7. data/lib/rubocop/sketchup/cop/deprecations/add_separator_to_menu.rb +4 -1
  8. data/lib/rubocop/sketchup/cop/deprecations/operation_next_transparent.rb +11 -2
  9. data/lib/rubocop/sketchup/cop/deprecations/require_all.rb +7 -2
  10. data/lib/rubocop/sketchup/cop/deprecations/set_texture_projection.rb +6 -2
  11. data/lib/rubocop/sketchup/cop/deprecations/show_ruby_panel.rb +4 -1
  12. data/lib/rubocop/sketchup/cop/deprecations/sketchup_set.rb +8 -0
  13. data/lib/rubocop/sketchup/cop/performance/openssl.rb +5 -3
  14. data/lib/rubocop/sketchup/cop/performance/operation_disable_ui.rb +10 -2
  15. data/lib/rubocop/sketchup/cop/performance/selection_bulk.rb +11 -4
  16. data/lib/rubocop/sketchup/cop/performance/type_check.rb +63 -0
  17. data/lib/rubocop/sketchup/cop/performance/typename.rb +6 -1
  18. data/lib/rubocop/sketchup/cop/requirements/api_namespace.rb +8 -2
  19. data/lib/rubocop/sketchup/cop/requirements/exit.rb +7 -3
  20. data/lib/rubocop/sketchup/cop/requirements/extension_namespace.rb +32 -2
  21. data/lib/rubocop/sketchup/cop/requirements/file_structure.rb +22 -10
  22. data/lib/rubocop/sketchup/cop/requirements/gem_install.rb +45 -0
  23. data/lib/rubocop/sketchup/cop/requirements/get_extension_license.rb +95 -0
  24. data/lib/rubocop/sketchup/cop/requirements/global_constants.rb +10 -1
  25. data/lib/rubocop/sketchup/cop/requirements/global_include.rb +9 -2
  26. data/lib/rubocop/sketchup/cop/requirements/global_methods.rb +10 -1
  27. data/lib/rubocop/sketchup/cop/requirements/global_variables.rb +13 -4
  28. data/lib/rubocop/sketchup/cop/requirements/language_handler_globals.rb +6 -4
  29. data/lib/rubocop/sketchup/cop/requirements/load_path.rb +9 -6
  30. data/lib/rubocop/sketchup/cop/requirements/minimal_registration.rb +26 -2
  31. data/lib/rubocop/sketchup/cop/requirements/observers_start_operation.rb +28 -2
  32. data/lib/rubocop/sketchup/cop/requirements/register_extension.rb +12 -2
  33. data/lib/rubocop/sketchup/cop/requirements/ruby_core_namespace.rb +14 -8
  34. data/lib/rubocop/sketchup/cop/requirements/ruby_stdlib_namespace.rb +594 -588
  35. data/lib/rubocop/sketchup/cop/requirements/shipped_extensions_namespace.rb +6 -6
  36. data/lib/rubocop/sketchup/cop/requirements/sketchup_extension.rb +28 -9
  37. data/lib/rubocop/sketchup/cop/requirements/sketchup_require.rb +163 -0
  38. data/lib/rubocop/sketchup/cop/suggestions/add_group.rb +49 -0
  39. data/lib/rubocop/sketchup/cop/suggestions/compatibility.rb +35 -6
  40. data/lib/rubocop/sketchup/cop/suggestions/dc_internals.rb +6 -3
  41. data/lib/rubocop/sketchup/cop/suggestions/file_encoding.rb +3 -0
  42. data/lib/rubocop/sketchup/cop/suggestions/model_entities.rb +9 -2
  43. data/lib/rubocop/sketchup/cop/suggestions/monkey_patched_api.rb +5 -1
  44. data/lib/rubocop/sketchup/cop/suggestions/operation_name.rb +20 -9
  45. data/lib/rubocop/sketchup/cop/suggestions/sketchup_find_support_file.rb +13 -2
  46. data/lib/rubocop/sketchup/cop/suggestions/tool_drawing_bounds.rb +44 -0
  47. data/lib/rubocop/sketchup/cop/suggestions/tool_invalidate.rb +66 -0
  48. data/lib/rubocop/sketchup/cop/suggestions/tool_user_input.rb +41 -0
  49. data/lib/rubocop/sketchup/cop/suggestions/toolbar_timer.rb +65 -0
  50. data/lib/rubocop/sketchup/cop.rb +38 -18
  51. data/lib/rubocop/sketchup/dc_globals.rb +1 -1
  52. data/lib/rubocop/sketchup/dc_methods.rb +27 -27
  53. data/lib/rubocop/sketchup/extension_project.rb +19 -2
  54. data/lib/rubocop/sketchup/formatter/extension_review.rb +35 -15
  55. data/lib/rubocop/sketchup/inject.rb +1 -1
  56. data/lib/rubocop/sketchup/namespace.rb +1 -0
  57. data/lib/rubocop/sketchup/namespace_checker.rb +4 -1
  58. data/lib/rubocop/sketchup/no_comment_disable.rb +1 -1
  59. data/lib/rubocop/sketchup/range_help.rb +52 -0
  60. data/lib/rubocop/sketchup/sketchup_version.rb +4 -2
  61. data/lib/rubocop/sketchup/tool_checker.rb +43 -0
  62. data/lib/rubocop/sketchup/version.rb +1 -1
  63. data/lib/rubocop/sketchup.rb +1 -1
  64. data/lib/rubocop-sketchup.rb +9 -0
  65. data/rubocop-sketchup.gemspec +8 -11
  66. metadata +18 -6
  67. data/lib/rubocop/sketchup/cop/suggestions/sketchup_require.rb +0 -67
data/config/default.yml CHANGED
@@ -1,8 +1,24 @@
1
- ---
1
+ # Common configuration.
2
+
2
3
  AllCops:
3
4
  SketchUp:
5
+ # The path to the extension source. This needs to be correct in order to
6
+ # correctly validate file structure.
4
7
  SourcePath: src
8
+ # Set target SketchUp version. Compatibility checks can then warn if you
9
+ # use features that belong to older SketchUp versions. Refer to the manual
10
+ # for list of valid versions.
5
11
  TargetSketchUpVersion: 2016
12
+ # Indicate if you plan to scramble/encrypt this extension using the .RBS or
13
+ # .RBE format. It changes the technical requirements for requiring files.
14
+ EncryptedExtension: false
15
+ # Binary Ruby C Extension must always be loaded using Ruby's own `require`.
16
+ # If you enable `AllCops/SketchUp/EncryptedExtension` you need to list
17
+ # the require paths for your Ruby C Extensions if you have any.
18
+ ExtensionBinaries: []
19
+ # You can set up exclude pattens for all SketchUp departments.
20
+ Exclude: []
21
+ # Alternativly you can set up department wide exclusion.
6
22
  SketchupDeprecations:
7
23
  Exclude: []
8
24
  SketchupPerformance:
@@ -12,77 +28,94 @@ AllCops:
12
28
  SketchupSuggestions:
13
29
  Exclude: []
14
30
 
31
+
15
32
  SketchupDeprecations/AddSeparatorToMenu:
16
33
  Description: The method `add_separator_to_menu` is deprecated.
17
34
  Details: >-
18
- Avoid adding separators to top level menus. If you require
19
- grouping use a sub-menu instead.
35
+ Avoid adding separators to top level menus. If you require
36
+ grouping use a sub-menu instead.
37
+ Reference: https://github.com/SketchUp/rubocop-sketchup/tree/master/manual/cops_deprecations.md#addseparatortomenu
20
38
  Enabled: true
21
39
 
22
40
  SketchupDeprecations/OperationNextTransparent:
23
41
  Description: Third argument in `model.start_operation` is deprecated.
24
42
  Details: >-
25
- It is not possible to predict what operation will come next. Avoid
26
- making the next operation transparent.
43
+ It is not possible to predict what operation will come next. Avoid
44
+ making the next operation transparent.
45
+ Reference: https://github.com/SketchUp/rubocop-sketchup/tree/master/manual/cops_deprecations.md#operationnexttransparent
27
46
  Enabled: true
28
47
 
29
48
  SketchupDeprecations/RequireAll:
30
49
  Description: The method `require_all` is deprecated.
31
50
  Details: >-
32
- This method adds the path given to `$LOAD_PATH` which can affect
33
- other extensions.
51
+ This method adds the path given to `$LOAD_PATH` which can affect
52
+ other extensions.
53
+ Reference: https://github.com/SketchUp/rubocop-sketchup/tree/master/manual/cops_deprecations.md#requireall
34
54
  Enabled: true
35
55
 
36
56
  SketchupDeprecations/SetTextureProjection:
37
57
  Description: The method `Sketchup::Face#set_texture_projection` is deprecated.
38
58
  Details: >-
39
- This method never worked right. It's not possible to control the
40
- position and orientation of the texture.
59
+ This method never worked right. It's not possible to control the
60
+ position and orientation of the texture.
61
+ Reference: https://github.com/SketchUp/rubocop-sketchup/tree/master/manual/cops_deprecations.md#settextureprojection
41
62
  Enabled: true
42
63
 
43
64
  SketchupDeprecations/ShowRubyPanel:
44
65
  Description: The method `show_ruby_panel` is deprecated.
45
- Details: >-
46
- Use `SKETCHUP_CONSOLE.show` instead.
66
+ Details: Use `SKETCHUP_CONSOLE.show` instead.
67
+ Reference: https://github.com/SketchUp/rubocop-sketchup/tree/master/manual/cops_deprecations.md#showrubypanel
47
68
  Enabled: true
48
69
 
49
70
  SketchupDeprecations/SketchupSet:
50
71
  Description: The class `Sketchup::Set` is deprecated.
51
72
  Details: >-
52
- It's slow and with limited functionality. Use the `Set` class in
53
- the Ruby StdLib instead.
73
+ It's slow and with limited functionality. Use the `Set` class in
74
+ the Ruby StdLib instead.
75
+ Reference: https://github.com/SketchUp/rubocop-sketchup/tree/master/manual/cops_deprecations.md#sketchupset
54
76
  Enabled: true
55
77
 
78
+
56
79
  SketchupPerformance/OpenSSL:
57
80
  Description: Avoid using Ruby's OpenSSL within SketchUp.
58
81
  Details: >-
59
- A flaw in how it obtain random bits under Windows can severely
60
- affect performance, freezing SketchUp for many minutes.
61
- This also affects SecureRandom and anything else that depend on
62
- OpenSSL. Net::HTTP is affected if connecting via HTTPS. Connecting
63
- via plain HTTP is unaffected.
82
+ A flaw in how it obtain random bits under Windows can severely
83
+ affect performance, freezing SketchUp for many minutes. This also
84
+ affects SecureRandom and anything else that depend on OpenSSL.
85
+ Net::HTTP is affected if connecting via HTTPS. Connecting via
86
+ plain HTTP is unaffected.
87
+ Reference: https://github.com/SketchUp/rubocop-sketchup/tree/master/manual/cops_performance.md#openssl
64
88
  Enabled: true
65
89
 
66
90
  SketchupPerformance/OperationDisableUI:
67
91
  Description: Operations should disable the UI for performance gain.
92
+ Reference: https://github.com/SketchUp/rubocop-sketchup/tree/master/manual/cops_performance.md#operationdisableui
68
93
  Enabled: true
69
94
 
70
95
  SketchupPerformance/SelectionBulkChanges:
71
96
  Description: >-
72
97
  Avoid modifying the selection set within loops. It's much
73
98
  faster to change the selection in bulk.
99
+ Reference: https://github.com/SketchUp/rubocop-sketchup/tree/master/manual/cops_performance.md#selectionbulkchanges
100
+ Enabled: true
101
+
102
+ SketchupPerformance/TypeCheck:
103
+ Description: String comparisons for type checks are very slow.
104
+ Reference: https://github.com/SketchUp/rubocop-sketchup/tree/master/manual/cops_performance.md#typecheck
74
105
  Enabled: true
75
106
 
76
107
  SketchupPerformance/Typename:
77
108
  Description: Using `.typename` is very slow, prefer `.is_a?` instead.
109
+ Reference: https://github.com/SketchUp/rubocop-sketchup/tree/master/manual/cops_performance.md#typename
78
110
  Enabled: true
79
111
 
80
112
 
81
113
  SketchupRequirements/ApiNamespace:
82
114
  Description: Don't modify the SketchUp API namespace.
83
115
  Details: >-
84
- Modifying the API namespace could affect other extensions - making
85
- it hard for other developers to determine what is going on.
116
+ Modifying the API namespace could affect other extensions - making
117
+ it hard for other developers to determine what is going on.
118
+ Reference: https://github.com/SketchUp/rubocop-sketchup/tree/master/manual/cops_requirements.md#apinamespace
86
119
  Enabled: true
87
120
 
88
121
  SketchupRequirements/Exit:
@@ -90,8 +123,9 @@ SketchupRequirements/Exit:
90
123
  Details: >-
91
124
  SketchUp will trap `exit` and prevent that, with a message in the
92
125
  console. But `exit!` is not trapped and with terminate SketchUp
93
- without shutting down cleanly.
94
- Use `return`, `next` or `break` instead.
126
+ without shutting down cleanly. Use `return`, `next` or `break`
127
+ instead.
128
+ Reference: https://github.com/SketchUp/rubocop-sketchup/tree/master/manual/cops_requirements.md#exit
95
129
  Enabled: true
96
130
 
97
131
  SketchupRequirements/ExtensionNamespace:
@@ -99,38 +133,57 @@ SketchupRequirements/ExtensionNamespace:
99
133
  Details: >-
100
134
  To avoid clashing with other extensions a single root namespace
101
135
  should all the extension's code.
102
- Enabled: true
136
+ Reference: https://github.com/SketchUp/rubocop-sketchup/tree/master/manual/cops_requirements.md#extensionnamespace
103
137
  Exceptions: []
138
+ Enabled: true
104
139
 
105
140
  SketchupRequirements/FileStructure:
106
141
  Description: Expected extension file structure not found.
107
142
  Details: >-
108
143
  Check that the extension conform to expected file structure with a
109
144
  single root .rb file and a support folder with matching name.
145
+ Reference: https://github.com/SketchUp/rubocop-sketchup/tree/master/manual/cops_requirements.md#filestructure
146
+ Enabled: true
147
+
148
+ SketchupRequirements/GemInstall:
149
+ Description: >-
150
+ Gem.install is unreliable in SketchUp, and can cause
151
+ extensions to clash.
152
+ Reference: https://github.com/SketchUp/rubocop-sketchup/tree/master/manual/cops_requirements.md#geminstall
153
+ Enabled: true
154
+
155
+ SketchupRequirements/GetExtensionLicense:
156
+ Description: Pass in valid extension ID from local string literals.
157
+ Reference: https://github.com/SketchUp/rubocop-sketchup/tree/master/manual/cops_requirements.md#getextensionlicense
110
158
  Enabled: true
111
159
 
112
160
  SketchupRequirements/GlobalConstants:
113
161
  Description: Do not introduce global constants.
162
+ Reference: https://github.com/SketchUp/rubocop-sketchup/tree/master/manual/cops_requirements.md#globalconstants
114
163
  Enabled: true
115
164
 
116
165
  SketchupRequirements/GlobalInclude:
117
166
  Description: Do not include modules into global namespace.
167
+ Reference: https://github.com/SketchUp/rubocop-sketchup/tree/master/manual/cops_requirements.md#globalinclude
118
168
  Enabled: true
119
169
 
120
170
  SketchupRequirements/GlobalMethods:
121
171
  Description: Extensions should not define global methods.
172
+ Reference: https://github.com/SketchUp/rubocop-sketchup/tree/master/manual/cops_requirements.md#globalmethods
122
173
  Enabled: true
123
174
 
124
175
  SketchupRequirements/GlobalVariables:
125
176
  Description: Do not introduce global variables.
177
+ Reference: https://github.com/SketchUp/rubocop-sketchup/tree/master/manual/cops_requirements.md#globalvariables
126
178
  Enabled: true
127
179
 
128
180
  SketchupRequirements/LanguageHandlerGlobals:
129
181
  Description: Don't use other known global variables.
130
182
  Details: >-
131
- Avoid using globals in general, but especially these which are
132
- known to be in use by other extensions made by SketchUp.
133
- They are still in use due to compatibility reasons.
183
+ Avoid using globals in general, but especially these which are
184
+ known to be in use by other extensions made by SketchUp. They are
185
+ still in use due to compatibility reasons.
186
+ Reference: https://github.com/SketchUp/rubocop-sketchup/tree/master/manual/cops_requirements.md#languagehandlerglobals
134
187
  Enabled: true
135
188
 
136
189
  SketchupRequirements/LoadPath:
@@ -138,6 +191,7 @@ SketchupRequirements/LoadPath:
138
191
  Details: >-
139
192
  This can cause other extensions from not loading correctly. Always
140
193
  load files relative to the installation path for the extension.
194
+ Reference: https://github.com/SketchUp/rubocop-sketchup/tree/master/manual/cops_requirements.md#loadpath
141
195
  Enabled: true
142
196
 
143
197
  SketchupRequirements/MinimalRegistration:
@@ -145,6 +199,7 @@ SketchupRequirements/MinimalRegistration:
145
199
  Don't load extension files in the root file registering the
146
200
  extension. Extensions should not load additional files when
147
201
  it's disabled.
202
+ Reference: https://github.com/SketchUp/rubocop-sketchup/tree/master/manual/cops_requirements.md#minimalregistration
148
203
  Enabled: true
149
204
 
150
205
  SketchupRequirements/ObserversStartOperation:
@@ -152,12 +207,14 @@ SketchupRequirements/ObserversStartOperation:
152
207
  Details: >-
153
208
  When making model changes within an observer event, start a
154
209
  transparent operation to ensure a clean undo-stack.
210
+ Reference: https://github.com/SketchUp/rubocop-sketchup/tree/master/manual/cops_requirements.md#observersstartoperation
155
211
  Enabled: true
156
212
 
157
213
  SketchupRequirements/RegisterExtension:
158
214
  Description: >-
159
215
  Always register extensions to load by default. Otherwise it
160
216
  might confuse users to think the extension isn't working.
217
+ Reference: https://github.com/SketchUp/rubocop-sketchup/tree/master/manual/cops_requirements.md#registerextension
161
218
  Enabled: true
162
219
 
163
220
  SketchupRequirements/RequireToolsRubyFiles:
@@ -166,18 +223,29 @@ SketchupRequirements/RequireToolsRubyFiles:
166
223
  has been loaded, files from SketchUp's Tools folder should be
167
224
  required in using `require` and with their file extension to
168
225
  avoid duplicate loading.
226
+ Reference: https://github.com/SketchUp/rubocop-sketchup/tree/master/manual/cops_requirements.md#requiretoolsrubyfiles
169
227
  Enabled: true
170
228
 
171
229
  SketchupRequirements/RubyCoreNamespace:
172
230
  Description: Do not modify Ruby core functionality.
231
+ Reference: https://github.com/SketchUp/rubocop-sketchup/tree/master/manual/cops_requirements.md#rubycorenamespace
173
232
  Enabled: true
174
233
 
175
234
  SketchupRequirements/RubyStdLibNamespace:
176
235
  Description: Do not modify Ruby stdlib functionality.
236
+ Reference: https://github.com/SketchUp/rubocop-sketchup/tree/master/manual/cops_requirements.md#rubystdlibnamespace
237
+ Enabled: true
238
+
239
+ SketchupRequirements/SketchupRequire:
240
+ Description: >-
241
+ Omit file extensions when using `Sketchup.require` to allow
242
+ encrypted files to be loaded.
243
+ Reference: https://github.com/SketchUp/rubocop-sketchup/tree/master/manual/cops_requirements.md#sketchuprequire
177
244
  Enabled: true
178
245
 
179
246
  SketchupRequirements/ShippedExtensionsNamespace:
180
247
  Description: Don't use the namespace of SketchUp's shipped extensions.
248
+ Reference: https://github.com/SketchUp/rubocop-sketchup/tree/master/manual/cops_requirements.md#shippedextensionsnamespace
181
249
  Enabled: true
182
250
 
183
251
  SketchupRequirements/SketchupExtension:
@@ -185,33 +253,47 @@ SketchupRequirements/SketchupExtension:
185
253
  Register a single instance of SketchupExtension per extension.
186
254
  This should be done by the root .rb file in the extension
187
255
  package.
256
+ Reference: https://github.com/SketchUp/rubocop-sketchup/tree/master/manual/cops_requirements.md#sketchupextension
188
257
  Enabled: true
189
258
 
190
259
 
260
+ SketchupSuggestions/AddGroup:
261
+ Description: Avoid creating groups out of existing entities.
262
+ Reference: https://github.com/SketchUp/rubocop-sketchup/tree/master/manual/cops_suggestions.md#addgroup
263
+ Enabled: true
264
+
265
+ SketchupSuggestions/Compatibility:
266
+ Description: Incompatible feature with target SketchUp version.
267
+ Reference: https://github.com/SketchUp/rubocop-sketchup/tree/master/manual/cops_suggestions.md#compatibility
268
+ Enabled: true
269
+
191
270
  SketchupSuggestions/DynamicComponentInternals:
192
271
  Description: >-
193
272
  Avoid relying on internal logic of Dynamic Components. It's
194
273
  behavior might change between versions.
274
+ Reference: https://github.com/SketchUp/rubocop-sketchup/tree/master/manual/cops_suggestions.md#dynamiccomponentinternals
195
275
  Enabled: true
196
276
 
197
277
  SketchupSuggestions/FileEncoding:
198
278
  Description: Beware encoding bug in Ruby when using `__FILE__` and `__dir__`.
199
279
  Details: >-
200
- When using `__FILE__` and `__dir__`, beware that Ruby doesn't apply
201
- the correct encoding to the strings under Windows. When they
280
+ When using `__FILE__` and `__dir__`, beware that Ruby doesn't
281
+ apply the correct encoding to the strings under Windows. When they
202
282
  contain non-english characters it will lead to exceptions being
203
283
  raised when the strings are used. Force encoding to work around
204
284
  this.
285
+ Reference: https://github.com/SketchUp/rubocop-sketchup/tree/master/manual/cops_suggestions.md#fileencoding
205
286
  Enabled: true
206
287
 
207
288
  SketchupSuggestions/ModelEntities:
208
289
  Description: >-
209
- Typically one should use `model.active_entities` instead
210
- of `model.entities`.
290
+ Typically one should use `model.active_entities` instead of
291
+ `model.entities`.
211
292
  Details: >-
212
293
  In SketchUp the norm is that editing is performed in the opened
213
294
  instance (`model.active_entities`). `model.entities` refer to the
214
295
  model root.
296
+ Reference: https://github.com/SketchUp/rubocop-sketchup/tree/master/manual/cops_suggestions.md#modelentities
215
297
  Enabled: true
216
298
 
217
299
  SketchupSuggestions/MonkeyPatchedApi:
@@ -221,6 +303,7 @@ SketchupSuggestions/MonkeyPatchedApi:
221
303
  Details: >-
222
304
  These methods stops working when the extensions are disabled and
223
305
  may change or be removed.
306
+ Reference: https://github.com/SketchUp/rubocop-sketchup/tree/master/manual/cops_suggestions.md#monkeypatchedapi
224
307
  Enabled: true
225
308
 
226
309
  SketchupSuggestions/OperationName:
@@ -228,10 +311,11 @@ SketchupSuggestions/OperationName:
228
311
  Check that operation names are human friendly and consistent
229
312
  with SketchUp.
230
313
  Details: >-
231
- This check is very naive and might produce false positives. Use
232
- as guidance only.
233
- Enabled: true
314
+ This check is very naive and might produce false positives. Use as
315
+ guidance only.
316
+ Reference: https://github.com/SketchUp/rubocop-sketchup/tree/master/manual/cops_suggestions.md#operationname
234
317
  Max: 25
318
+ Enabled: true
235
319
 
236
320
  SketchupSuggestions/SketchupFindSupportFile:
237
321
  Description: >-
@@ -241,10 +325,31 @@ SketchupSuggestions/SketchupFindSupportFile:
241
325
  Extensions might be installed outside the SketchUp Plugins folder.
242
326
  Use `__FILE__` and `__dir__` to locate your files relative to the
243
327
  executing file.
328
+ Reference: https://github.com/SketchUp/rubocop-sketchup/tree/master/manual/cops_suggestions.md#sketchupfindsupportfile
244
329
  Enabled: true
245
330
 
246
- SketchupSuggestions/SketchupRequire:
331
+ SketchupSuggestions/ToolDrawingBounds:
247
332
  Description: >-
248
- Omit file extensions when using `Sketchup.require` to allow
249
- encrypted files to be loaded.
333
+ When drawing to the viewport implement `getExtents` so drawn
334
+ geometry is not clipped.
335
+ Reference: https://github.com/SketchUp/rubocop-sketchup/tree/master/manual/cops_suggestions.md#tooldrawingbounds
336
+ Enabled: true
337
+
338
+ SketchupSuggestions/ToolInvalidate:
339
+ Description: >-
340
+ When drawing to the viewport, make sure tools invalidate when
341
+ tool becomes inactive.
342
+ Reference: https://github.com/SketchUp/rubocop-sketchup/tree/master/manual/cops_suggestions.md#toolinvalidate
343
+ Enabled: true
344
+
345
+ SketchupSuggestions/ToolUserInput:
346
+ Description: >-
347
+ When a tool is accepting user input, make sure to define
348
+ enableVCB?.
349
+ Reference: https://github.com/SketchUp/rubocop-sketchup/tree/master/manual/cops_suggestions.md#tooluserinput
350
+ Enabled: true
351
+
352
+ SketchupSuggestions/ToolbarTimer:
353
+ Description: Wrapping `toolbar.restore` in `UI.start_timer` is redundant.
354
+ Reference: https://github.com/SketchUp/rubocop-sketchup/tree/master/manual/cops_suggestions.md#toolbartimer
250
355
  Enabled: true
@@ -5,7 +5,7 @@ module RuboCop
5
5
  module Config
6
6
 
7
7
  DEFAULT_CONFIGURATION =
8
- SketchUp::CONFIG.fetch('AllCops').fetch('SketchUp')
8
+ SketchUp::CONFIG.fetch('AllCops').fetch('SketchUp')
9
9
 
10
10
  private
11
11
 
@@ -18,19 +18,15 @@ module RuboCop
18
18
  end
19
19
 
20
20
 
21
- def sketchup_source_path_config?
21
+ def sketchup_config_key?(key)
22
22
  return unless all_cops_config.key?('SketchUp')
23
- all_cops_config.fetch('SketchUp').key?('SourcePath')
24
- end
25
23
 
26
- def sketchup_source_path_config
27
- sketchup_cops_config.fetch('SourcePath')
24
+ all_cops_config.fetch('SketchUp').key?(key)
28
25
  end
29
26
 
30
27
 
31
28
  def sketchup_target_version?
32
- return unless all_cops_config.key?('SketchUp')
33
- all_cops_config.fetch('SketchUp').key?('TargetSketchUpVersion')
29
+ sketchup_config_key?('TargetSketchUpVersion')
34
30
  end
35
31
 
36
32
  def sketchup_target_version
@@ -38,6 +34,30 @@ module RuboCop
38
34
  version ? SketchUpVersion.new(version) : nil
39
35
  end
40
36
 
37
+
38
+ def extension_source_path_config?
39
+ sketchup_config_key?('SourcePath')
40
+ end
41
+
42
+ def extension_source_path_config
43
+ sketchup_cops_config.fetch('SourcePath')
44
+ end
45
+
46
+
47
+ def encrypted_extension?
48
+ sketchup_config_key?('EncryptedExtension') &&
49
+ sketchup_cops_config.fetch('EncryptedExtension')
50
+ end
51
+
52
+
53
+ def extension_binaries?
54
+ sketchup_config_key?('ExtensionBinaries')
55
+ end
56
+
57
+ def extension_binaries
58
+ sketchup_cops_config.fetch('ExtensionBinaries')
59
+ end
60
+
41
61
  end
42
62
  end
43
63
  end
@@ -3,6 +3,8 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module SketchupDeprecations
6
+ # Avoid adding separators to top level menus. If you require grouping use
7
+ # a sub-menu instead.
6
8
  class AddSeparatorToMenu < SketchUp::Cop
7
9
 
8
10
  MSG = 'Method is deprecated.'.freeze
@@ -13,7 +15,8 @@ module RuboCop
13
15
 
14
16
  def on_send(node)
15
17
  return unless add_separator_to_menu?(node)
16
- add_offense(node, location: :expression)
18
+
19
+ add_offense(node, location: :selector)
17
20
  end
18
21
 
19
22
  end
@@ -3,7 +3,15 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module SketchupDeprecations
6
- # Weak warning. (Question?)
6
+ # If set to true, then whatever operation comes after this one will be
7
+ # appended into one combined operation, allowing the user the undo both
8
+ # actions with a single undo command.
9
+ #
10
+ # This flag is a highly difficult one, since there are so many ways that a
11
+ # SketchUp user can interrupt a given operation with one of their own.
12
+ #
13
+ # Only use this flag if you have no other option, for instance to work
14
+ # around bug in how `Sketchup::Model#place_component` starts operations.
7
15
  class OperationNextTransparent < SketchUp::Cop
8
16
  MSG = 'Third argument is deprecated.'.freeze
9
17
 
@@ -11,8 +19,9 @@ module RuboCop
11
19
  _, method_name, *args = *node
12
20
  return unless method_name == :start_operation
13
21
  return if args.size < 3
22
+
14
23
  argument = args[2]
15
- next_transparent = argument.type == :true
24
+ next_transparent = (argument.type == :true)
16
25
  add_offense(argument, location: :expression) if next_transparent
17
26
  end
18
27
  end
@@ -3,9 +3,13 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module SketchupDeprecations
6
+ # Method is deprecated because it adds the given path to `$LOAD_PATH`.
7
+ # Modifying `$LOAD_PATH` is bad practice because it can cause extensions
8
+ # to inadvertently load the wrong file.
6
9
  class RequireAll < SketchUp::Cop
7
10
 
8
- MSG = 'Method is deprecated because it adds the given path to $LOAD_PATH.'.freeze
11
+ MSG = 'Method is deprecated because it adds the given path '\
12
+ 'to $LOAD_PATH.'.freeze
9
13
 
10
14
  def_node_matcher :require_all?, <<-PATTERN
11
15
  (send nil? :require_all _)
@@ -13,7 +17,8 @@ module RuboCop
13
17
 
14
18
  def on_send(node)
15
19
  return unless require_all?(node)
16
- add_offense(node, location: :expression)
20
+
21
+ add_offense(node, location: :selector)
17
22
  end
18
23
 
19
24
  end
@@ -3,9 +3,12 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module SketchupDeprecations
6
+ # Method is deprecated because it creates invalid UV mapping. Saving the
7
+ # model will display a dialog indicating that the model needs to be
8
+ # repaired. Once repaired the UV mapping will visually change.
6
9
  class SetTextureProjection < SketchUp::Cop
7
10
 
8
- MSG = 'Method is deprecated. It creates invalid UV mapping.'.freeze
11
+ MSG = 'Method is deprecated. It can create invalid UV mapping.'.freeze
9
12
 
10
13
  def_node_matcher :set_texture_projection?, <<-PATTERN
11
14
  (send _ :set_texture_projection ...)
@@ -13,7 +16,8 @@ module RuboCop
13
16
 
14
17
  def on_send(node)
15
18
  return unless set_texture_projection?(node)
16
- add_offense(node, location: :expression)
19
+
20
+ add_offense(node, location: :selector)
17
21
  end
18
22
 
19
23
  end
@@ -3,9 +3,11 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module SketchupDeprecations
6
+ # Method is deprecated. Use `SKETCHUP_CONSOLE.show` instead.
6
7
  class ShowRubyPanel < SketchUp::Cop
7
8
 
8
- MSG = 'Method is deprecated. Use `SKETCHUP_CONSOLE.show` instead.'.freeze
9
+ MSG = 'Method is deprecated. Use `SKETCHUP_CONSOLE.show` '\
10
+ 'instead.'.freeze
9
11
 
10
12
  def_node_matcher :show_ruby_panel?, <<-PATTERN
11
13
  (send nil? :show_ruby_panel)
@@ -13,6 +15,7 @@ module RuboCop
13
15
 
14
16
  def on_send(node)
15
17
  return unless show_ruby_panel?(node)
18
+
16
19
  add_offense(node, location: :expression)
17
20
  end
18
21
 
@@ -3,6 +3,13 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module SketchupDeprecations
6
+ # From SketchUp 6 until SketchUp 2013 the SketchUp API shipped with a
7
+ # `Set` class. When SketchUp started shipping with the Ruby StdLib in
8
+ # SketchUp 2014 the class was changed from `Set` to `Sketchup::Set` in
9
+ # order to avoid conflict with the Ruby Standard Library.
10
+ #
11
+ # The `Sketchup::Set` class is much slower than Ruby's own `Set` class
12
+ # and less versatile.
6
13
  class SketchupSet < SketchUp::Cop
7
14
 
8
15
  MSG = 'Class is deprecated.'.freeze
@@ -13,6 +20,7 @@ module RuboCop
13
20
 
14
21
  def on_const(node)
15
22
  return unless sketchup_set?(node)
23
+
16
24
  add_offense(node, location: :expression)
17
25
  end
18
26
 
@@ -12,10 +12,11 @@ module RuboCop
12
12
  #
13
13
  # `SecureRandom` is also affected by this, as it uses OpenSSL to seed.
14
14
  #
15
- # It also affects Net::HTTP if making HTTPS connections.
15
+ # It also affects `Net::HTTP` if making HTTPS connections.
16
16
  class OpenSSL < SketchUp::Cop
17
17
 
18
- MSG = 'Avoid use of OpenSSL within SketchUp due to severe performance issues.'.freeze
18
+ MSG = 'Avoid use of OpenSSL within SketchUp due to severe performance '\
19
+ 'issues.'.freeze
19
20
 
20
21
  # http://www.rubydoc.info/gems/rubocop/RuboCop/NodePattern
21
22
  # https://rubocop.readthedocs.io/en/latest/node_pattern/
@@ -25,12 +26,13 @@ module RuboCop
25
26
  )
26
27
  PATTERN
27
28
 
28
- OPEN_SSL_USAGE = %w[openssl securerandom net/https net/http]
29
+ OPEN_SSL_USAGE = %w[openssl securerandom net/https net/http].freeze
29
30
 
30
31
  def on_send(node)
31
32
  filename = require(node)
32
33
  return if filename.nil?
33
34
  return unless OPEN_SSL_USAGE.include?(filename.downcase)
35
+
34
36
  add_offense(node, location: :expression)
35
37
  end
36
38
  end
@@ -3,20 +3,28 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module SketchupPerformance
6
- # Weak warning. (Question?)
6
+ # Operations should disable the UI for performance gain.
7
+ #
8
+ # @example
9
+ # model = Sketchup.active_model
10
+ # model.start_operation('Operation Name', true)
11
+ # # <model changes>
12
+ # model.commit_operation
7
13
  class OperationDisableUI < SketchUp::Cop
8
14
  MSG = 'Operations should disable the UI for performance gain.'.freeze
9
15
 
10
16
  def on_send(node)
11
17
  _, method_name, *args = *node
12
18
  return unless method_name == :start_operation
19
+
13
20
  if args.size < 2
14
- add_offense(node, location: :expression)
21
+ add_offense(node, location: :selector)
15
22
  return
16
23
  end
17
24
  argument = args[1]
18
25
  disable_ui = argument.truthy_literal?
19
26
  return if disable_ui
27
+
20
28
  add_offense(argument, location: :expression)
21
29
  end
22
30
  end