rubocop-sketchup 0.5.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +19 -19
  3. data/assets/output.html.erb +301 -301
  4. data/config/default.yml +355 -355
  5. data/lib/rubocop/sketchup/config.rb +63 -63
  6. data/lib/rubocop/sketchup/cop/deprecations/add_separator_to_menu.rb +25 -25
  7. data/lib/rubocop/sketchup/cop/deprecations/operation_next_transparent.rb +30 -30
  8. data/lib/rubocop/sketchup/cop/deprecations/require_all.rb +27 -27
  9. data/lib/rubocop/sketchup/cop/deprecations/set_texture_projection.rb +26 -26
  10. data/lib/rubocop/sketchup/cop/deprecations/show_ruby_panel.rb +25 -25
  11. data/lib/rubocop/sketchup/cop/deprecations/sketchup_set.rb +30 -30
  12. data/lib/rubocop/sketchup/cop/performance/openssl.rb +41 -41
  13. data/lib/rubocop/sketchup/cop/performance/operation_disable_ui.rb +33 -33
  14. data/lib/rubocop/sketchup/cop/performance/selection_bulk.rb +79 -79
  15. data/lib/rubocop/sketchup/cop/performance/type_check.rb +63 -63
  16. data/lib/rubocop/sketchup/cop/performance/typename.rb +24 -24
  17. data/lib/rubocop/sketchup/cop/requirements/api_namespace.rb +30 -30
  18. data/lib/rubocop/sketchup/cop/requirements/exit.rb +32 -32
  19. data/lib/rubocop/sketchup/cop/requirements/extension_namespace.rb +108 -108
  20. data/lib/rubocop/sketchup/cop/requirements/file_structure.rb +97 -97
  21. data/lib/rubocop/sketchup/cop/requirements/gem_install.rb +45 -45
  22. data/lib/rubocop/sketchup/cop/requirements/get_extension_license.rb +95 -95
  23. data/lib/rubocop/sketchup/cop/requirements/global_constants.rb +38 -38
  24. data/lib/rubocop/sketchup/cop/requirements/global_include.rb +42 -42
  25. data/lib/rubocop/sketchup/cop/requirements/global_methods.rb +65 -65
  26. data/lib/rubocop/sketchup/cop/requirements/global_variables.rb +95 -95
  27. data/lib/rubocop/sketchup/cop/requirements/language_handler_globals.rb +46 -46
  28. data/lib/rubocop/sketchup/cop/requirements/load_path.rb +83 -83
  29. data/lib/rubocop/sketchup/cop/requirements/minimal_registration.rb +73 -73
  30. data/lib/rubocop/sketchup/cop/requirements/observers_start_operation.rb +161 -161
  31. data/lib/rubocop/sketchup/cop/requirements/register_extension.rb +45 -45
  32. data/lib/rubocop/sketchup/cop/requirements/ruby_core_namespace.rb +291 -291
  33. data/lib/rubocop/sketchup/cop/requirements/ruby_stdlib_namespace.rb +634 -634
  34. data/lib/rubocop/sketchup/cop/requirements/shipped_extensions_namespace.rb +61 -61
  35. data/lib/rubocop/sketchup/cop/requirements/sketchup_extension.rb +119 -119
  36. data/lib/rubocop/sketchup/cop/requirements/sketchup_require.rb +163 -163
  37. data/lib/rubocop/sketchup/cop/suggestions/add_group.rb +49 -49
  38. data/lib/rubocop/sketchup/cop/suggestions/compatibility.rb +117 -117
  39. data/lib/rubocop/sketchup/cop/suggestions/dc_internals.rb +34 -34
  40. data/lib/rubocop/sketchup/cop/suggestions/file_encoding.rb +78 -78
  41. data/lib/rubocop/sketchup/cop/suggestions/model_entities.rb +58 -58
  42. data/lib/rubocop/sketchup/cop/suggestions/monkey_patched_api.rb +45 -45
  43. data/lib/rubocop/sketchup/cop/suggestions/operation_name.rb +103 -103
  44. data/lib/rubocop/sketchup/cop/suggestions/sketchup_find_support_file.rb +39 -39
  45. data/lib/rubocop/sketchup/cop/suggestions/tool_drawing_bounds.rb +44 -44
  46. data/lib/rubocop/sketchup/cop/suggestions/tool_invalidate.rb +66 -66
  47. data/lib/rubocop/sketchup/cop/suggestions/tool_user_input.rb +41 -41
  48. data/lib/rubocop/sketchup/cop/suggestions/toolbar_timer.rb +65 -65
  49. data/lib/rubocop/sketchup/cop.rb +111 -111
  50. data/lib/rubocop/sketchup/dc_globals.rb +24 -24
  51. data/lib/rubocop/sketchup/dc_methods.rb +130 -130
  52. data/lib/rubocop/sketchup/extension_project.rb +65 -65
  53. data/lib/rubocop/sketchup/features.rb +738 -738
  54. data/lib/rubocop/sketchup/formatter/extension_review.rb +259 -259
  55. data/lib/rubocop/sketchup/inject.rb +19 -19
  56. data/lib/rubocop/sketchup/namespace.rb +47 -47
  57. data/lib/rubocop/sketchup/namespace_checker.rb +46 -46
  58. data/lib/rubocop/sketchup/no_comment_disable.rb +17 -17
  59. data/lib/rubocop/sketchup/range_help.rb +52 -52
  60. data/lib/rubocop/sketchup/sketchup_version.rb +87 -87
  61. data/lib/rubocop/sketchup/tool_checker.rb +43 -43
  62. data/lib/rubocop/sketchup/version.rb +5 -5
  63. data/lib/rubocop/sketchup.rb +12 -12
  64. data/lib/rubocop-sketchup.rb +48 -48
  65. data/rubocop-sketchup.gemspec +27 -27
  66. metadata +4 -4
@@ -1,79 +1,79 @@
1
- # frozen_string_literal: true
2
-
3
- module RuboCop
4
- module Cop
5
- module SketchupPerformance
6
- # Prefer changing selection in bulk instead of modifying selection within
7
- # loops. It's much faster to change the selection in bulk. UI updates are
8
- # triggered when you update the selection, so reduce the amount of calls.
9
- #
10
- # @example Poor performance
11
- # model = Sketchup.active_model
12
- # model.active_entities.each { |entity|
13
- # model.selection.add(entity) if entity.is_a?(Sketchup::Face)
14
- # }
15
- #
16
- # @example Better performance
17
- # model = Sketchup.active_model
18
- # faces = model.active_entities.map { |entity|
19
- # entity.is_a?(Sketchup::Face)
20
- # }
21
- # model.selection.add(faces)
22
- #
23
- # @example Better performance and simpler
24
- # model = Sketchup.active_model
25
- # faces = model.active_entities.grep(Sketchup::Face)
26
- # model.selection.add(faces)
27
- class SelectionBulkChanges < SketchUp::Cop
28
-
29
- include RangeHelp
30
-
31
- MSG = 'Prefer changing selection in bulk instead of modifying '\
32
- 'selection within loops.'.freeze
33
-
34
- # http://www.rubydoc.info/gems/rubocop/RuboCop/NodePattern
35
- # https://rubocop.readthedocs.io/en/latest/node_pattern/
36
- def_node_matcher :selection?, <<-PATTERN
37
- (send
38
- (send _ {:selection :sel}) {:add :remove :toggle}
39
- ...)
40
- PATTERN
41
-
42
- def_node_matcher :block_loop?, <<-PATTERN
43
- (block
44
- (send
45
- (send _ _) {
46
- :each :each_with_index :each_with_object
47
- :each_entry :each_index :each_slice
48
- :each_key :each_pair :each_value
49
- :grep
50
- } ...)
51
- ...)
52
- PATTERN
53
-
54
- def_node_matcher :numeric_loop?, <<-PATTERN
55
- (block
56
- (send
57
- ({int float} _) {:times :upto :downto} ...)
58
- ...)
59
- PATTERN
60
-
61
- def iterator?(node)
62
- node.is_a?(RuboCop::AST::ForNode) ||
63
- node.is_a?(RuboCop::AST::UntilNode) ||
64
- node.is_a?(RuboCop::AST::WhileNode) ||
65
- block_loop?(node) ||
66
- numeric_loop?(node)
67
- end
68
-
69
- def on_send(node)
70
- return unless selection?(node)
71
- return unless node.ancestors.any?(&method(:iterator?))
72
-
73
- add_offense(node, location: range_with_receiver(node))
74
- end
75
-
76
- end
77
- end
78
- end
79
- end
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module SketchupPerformance
6
+ # Prefer changing selection in bulk instead of modifying selection within
7
+ # loops. It's much faster to change the selection in bulk. UI updates are
8
+ # triggered when you update the selection, so reduce the amount of calls.
9
+ #
10
+ # @example Poor performance
11
+ # model = Sketchup.active_model
12
+ # model.active_entities.each { |entity|
13
+ # model.selection.add(entity) if entity.is_a?(Sketchup::Face)
14
+ # }
15
+ #
16
+ # @example Better performance
17
+ # model = Sketchup.active_model
18
+ # faces = model.active_entities.map { |entity|
19
+ # entity.is_a?(Sketchup::Face)
20
+ # }
21
+ # model.selection.add(faces)
22
+ #
23
+ # @example Better performance and simpler
24
+ # model = Sketchup.active_model
25
+ # faces = model.active_entities.grep(Sketchup::Face)
26
+ # model.selection.add(faces)
27
+ class SelectionBulkChanges < SketchUp::Cop
28
+
29
+ include RangeHelp
30
+
31
+ MSG = 'Prefer changing selection in bulk instead of modifying '\
32
+ 'selection within loops.'.freeze
33
+
34
+ # http://www.rubydoc.info/gems/rubocop/RuboCop/NodePattern
35
+ # https://rubocop.readthedocs.io/en/latest/node_pattern/
36
+ def_node_matcher :selection?, <<-PATTERN
37
+ (send
38
+ (send _ {:selection :sel}) {:add :remove :toggle}
39
+ ...)
40
+ PATTERN
41
+
42
+ def_node_matcher :block_loop?, <<-PATTERN
43
+ (block
44
+ (send
45
+ (send _ _) {
46
+ :each :each_with_index :each_with_object
47
+ :each_entry :each_index :each_slice
48
+ :each_key :each_pair :each_value
49
+ :grep
50
+ } ...)
51
+ ...)
52
+ PATTERN
53
+
54
+ def_node_matcher :numeric_loop?, <<-PATTERN
55
+ (block
56
+ (send
57
+ ({int float} _) {:times :upto :downto} ...)
58
+ ...)
59
+ PATTERN
60
+
61
+ def iterator?(node)
62
+ node.is_a?(RuboCop::AST::ForNode) ||
63
+ node.is_a?(RuboCop::AST::UntilNode) ||
64
+ node.is_a?(RuboCop::AST::WhileNode) ||
65
+ block_loop?(node) ||
66
+ numeric_loop?(node)
67
+ end
68
+
69
+ def on_send(node)
70
+ return unless selection?(node)
71
+ return unless node.ancestors.any?(&method(:iterator?))
72
+
73
+ add_offense(node, location: range_with_receiver(node))
74
+ end
75
+
76
+ end
77
+ end
78
+ end
79
+ end
@@ -1,63 +1,63 @@
1
- # frozen_string_literal: true
2
-
3
- module RuboCop
4
- module Cop
5
- module SketchupPerformance
6
- # String comparisons for type checks are very slow.
7
- #
8
- # `entity.class.name == 'Sketchup::Face'` is slow because it performs a
9
- # string comparison. `is_a?` is much faster because it's a simple type
10
- # check.
11
- #
12
- # If you know you need a strict type check, compare the classes directly:
13
- # `entity.class == Sketchup::Face`.
14
- #
15
- # @example Poor performance
16
- # entity.class.name == 'Sketchup::Face'
17
- #
18
- # @example Good performance
19
- # entity.class == Sketchup::Face
20
- #
21
- # @example Good performance and idiomatic Ruby convention
22
- # entity.is_a?(Sketchup::Face)
23
- class TypeCheck < SketchUp::Cop
24
-
25
- # TODO(thomthom): It probably makes sense to eventually merge the
26
- # Typename cop into this cop. But until this cop have been
27
- # battle tested they remain separate. .typename is no prevalent in
28
- # use (wrongly) that it's better to err in the name of caution, making
29
- # sure we don't miss any scenarios.
30
-
31
- include RangeHelp
32
-
33
- MSG = 'String comparisons are very slow, prefer `.is_a?` '\
34
- 'instead.'.freeze
35
-
36
- def_node_matcher :string_class_compare?, <<-PATTERN
37
- (send
38
- (send
39
- (send
40
- _ :class) :name) {:== :=== :!=}
41
- (str _))
42
- PATTERN
43
-
44
- def on_send(node)
45
- return unless string_class_compare?(node)
46
-
47
- add_offense(node, location: comparison_range(node))
48
- end
49
-
50
- private
51
-
52
- def comparison_range(node)
53
- lhs = node.receiver
54
- rhs = node.arguments.first
55
-
56
- loc_begin = lhs.receiver.loc.selector.begin_pos
57
- loc_end = rhs.loc.expression.end_pos
58
- range_between(loc_begin, loc_end)
59
- end
60
- end
61
- end
62
- end
63
- end
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module SketchupPerformance
6
+ # String comparisons for type checks are very slow.
7
+ #
8
+ # `entity.class.name == 'Sketchup::Face'` is slow because it performs a
9
+ # string comparison. `is_a?` is much faster because it's a simple type
10
+ # check.
11
+ #
12
+ # If you know you need a strict type check, compare the classes directly:
13
+ # `entity.class == Sketchup::Face`.
14
+ #
15
+ # @example Poor performance
16
+ # entity.class.name == 'Sketchup::Face'
17
+ #
18
+ # @example Good performance
19
+ # entity.class == Sketchup::Face
20
+ #
21
+ # @example Good performance and idiomatic Ruby convention
22
+ # entity.is_a?(Sketchup::Face)
23
+ class TypeCheck < SketchUp::Cop
24
+
25
+ # TODO(thomthom): It probably makes sense to eventually merge the
26
+ # Typename cop into this cop. But until this cop have been
27
+ # battle tested they remain separate. .typename is no prevalent in
28
+ # use (wrongly) that it's better to err in the name of caution, making
29
+ # sure we don't miss any scenarios.
30
+
31
+ include RangeHelp
32
+
33
+ MSG = 'String comparisons are very slow, prefer `.is_a?` '\
34
+ 'instead.'.freeze
35
+
36
+ def_node_matcher :string_class_compare?, <<-PATTERN
37
+ (send
38
+ (send
39
+ (send
40
+ _ :class) :name) {:== :=== :!=}
41
+ (str _))
42
+ PATTERN
43
+
44
+ def on_send(node)
45
+ return unless string_class_compare?(node)
46
+
47
+ add_offense(node, location: comparison_range(node))
48
+ end
49
+
50
+ private
51
+
52
+ def comparison_range(node)
53
+ lhs = node.receiver
54
+ rhs = node.arguments.first
55
+
56
+ loc_begin = lhs.receiver.loc.selector.begin_pos
57
+ loc_end = rhs.loc.expression.end_pos
58
+ range_between(loc_begin, loc_end)
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -1,24 +1,24 @@
1
- # frozen_string_literal: true
2
-
3
- module RuboCop
4
- module Cop
5
- module SketchupPerformance
6
- # `.typename` is very slow, prefer `.is_a?` instead.
7
- #
8
- # `entity.typename == 'Face'` is slow because it performs a string
9
- # comparison. `is_a?` is much faster because it's a simple type check.
10
- class Typename < SketchUp::Cop
11
- MSG = '`.typename` is very slow, prefer `.is_a?` instead.'.freeze
12
-
13
- def on_send(node)
14
- _, method_name = *node
15
- return unless method_name == :typename
16
-
17
- # TODO(thomthom): Should we try to detect use of #typename
18
- # in context of comparing against a string?
19
- add_offense(node, location: :selector)
20
- end
21
- end
22
- end
23
- end
24
- end
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module SketchupPerformance
6
+ # `.typename` is very slow, prefer `.is_a?` instead.
7
+ #
8
+ # `entity.typename == 'Face'` is slow because it performs a string
9
+ # comparison. `is_a?` is much faster because it's a simple type check.
10
+ class Typename < SketchUp::Cop
11
+ MSG = '`.typename` is very slow, prefer `.is_a?` instead.'.freeze
12
+
13
+ def on_send(node)
14
+ _, method_name = *node
15
+ return unless method_name == :typename
16
+
17
+ # TODO(thomthom): Should we try to detect use of #typename
18
+ # in context of comparing against a string?
19
+ add_offense(node, location: :selector)
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -1,30 +1,30 @@
1
- # frozen_string_literal: true
2
-
3
- module RuboCop
4
- module Cop
5
- module SketchupRequirements
6
- # Do not modify the Sketch API. This will affect other extensions and
7
- # very likely cause them to fail.
8
- #
9
- # This requirement also include adding things into the SketchUp API
10
- # namespace. The API namespace is reserved for future additions to the
11
- # API.
12
- class ApiNamespace < SketchUp::Cop
13
-
14
- include SketchUp::NoCommentDisable
15
- include SketchUp::NamespaceChecker
16
-
17
- MSG = 'Do not modify the SketchUp API.'.freeze
18
-
19
- NAMESPACES = %w[
20
- Geom Layout Sketchup SketchupExtension UI
21
- ].freeze
22
-
23
- def namespaces
24
- NAMESPACES
25
- end
26
-
27
- end
28
- end
29
- end
30
- end
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module SketchupRequirements
6
+ # Do not modify the Sketch API. This will affect other extensions and
7
+ # very likely cause them to fail.
8
+ #
9
+ # This requirement also include adding things into the SketchUp API
10
+ # namespace. The API namespace is reserved for future additions to the
11
+ # API.
12
+ class ApiNamespace < SketchUp::Cop
13
+
14
+ include SketchUp::NoCommentDisable
15
+ include SketchUp::NamespaceChecker
16
+
17
+ MSG = 'Do not modify the SketchUp API.'.freeze
18
+
19
+ NAMESPACES = %w[
20
+ Geom Layout Sketchup SketchupExtension UI
21
+ ].freeze
22
+
23
+ def namespaces
24
+ NAMESPACES
25
+ end
26
+
27
+ end
28
+ end
29
+ end
30
+ end
@@ -1,32 +1,32 @@
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 Exit < SketchUp::Cop
13
-
14
- include SketchUp::NoCommentDisable
15
-
16
- MSG = '`exit` attempts to kill the Ruby interpreter. Use `return`, '\
17
- '`next`, `break` or `raise` instead.'.freeze
18
-
19
- # Reference: http://rubocop.readthedocs.io/en/latest/development/
20
- def_node_matcher :exit?, <<-PATTERN
21
- (send {(const nil? :Kernel) nil?} {:exit :exit!} ...)
22
- PATTERN
23
-
24
- def on_send(node)
25
- return unless exit?(node)
26
-
27
- add_offense(node, location: :selector)
28
- end
29
- end
30
- end
31
- end
32
- 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 Exit < SketchUp::Cop
13
+
14
+ include SketchUp::NoCommentDisable
15
+
16
+ MSG = '`exit` attempts to kill the Ruby interpreter. Use `return`, '\
17
+ '`next`, `break` or `raise` instead.'.freeze
18
+
19
+ # Reference: http://rubocop.readthedocs.io/en/latest/development/
20
+ def_node_matcher :exit?, <<-PATTERN
21
+ (send {(const nil? :Kernel) nil?} {:exit :exit!} ...)
22
+ PATTERN
23
+
24
+ def on_send(node)
25
+ return unless exit?(node)
26
+
27
+ add_offense(node, location: :selector)
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end