tapioca 0.18.0 → 0.19.1

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 (76) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/lib/tapioca/cli.rb +1 -1
  4. data/lib/tapioca/commands/abstract_dsl.rb +1 -1
  5. data/lib/tapioca/commands/check_shims.rb +3 -0
  6. data/lib/tapioca/commands/configure.rb +1 -0
  7. data/lib/tapioca/commands/todo.rb +8 -2
  8. data/lib/tapioca/dsl/compiler.rb +18 -13
  9. data/lib/tapioca/dsl/compilers/aasm.rb +5 -2
  10. data/lib/tapioca/dsl/compilers/action_controller_helpers.rb +2 -2
  11. data/lib/tapioca/dsl/compilers/action_mailer.rb +1 -1
  12. data/lib/tapioca/dsl/compilers/action_text.rb +1 -1
  13. data/lib/tapioca/dsl/compilers/active_job.rb +1 -1
  14. data/lib/tapioca/dsl/compilers/active_model_attributes.rb +1 -1
  15. data/lib/tapioca/dsl/compilers/active_model_secure_password.rb +1 -1
  16. data/lib/tapioca/dsl/compilers/active_model_validations_confirmation.rb +1 -1
  17. data/lib/tapioca/dsl/compilers/active_record_associations.rb +1 -1
  18. data/lib/tapioca/dsl/compilers/active_record_columns.rb +1 -1
  19. data/lib/tapioca/dsl/compilers/active_record_delegated_types.rb +1 -1
  20. data/lib/tapioca/dsl/compilers/active_record_enum.rb +1 -1
  21. data/lib/tapioca/dsl/compilers/active_record_fixtures.rb +1 -1
  22. data/lib/tapioca/dsl/compilers/active_record_relations.rb +1 -1
  23. data/lib/tapioca/dsl/compilers/active_record_scope.rb +1 -1
  24. data/lib/tapioca/dsl/compilers/active_record_secure_token.rb +1 -1
  25. data/lib/tapioca/dsl/compilers/active_record_store.rb +1 -1
  26. data/lib/tapioca/dsl/compilers/active_record_typed_store.rb +1 -1
  27. data/lib/tapioca/dsl/compilers/active_resource.rb +1 -1
  28. data/lib/tapioca/dsl/compilers/active_storage.rb +2 -2
  29. data/lib/tapioca/dsl/compilers/active_support_concern.rb +6 -6
  30. data/lib/tapioca/dsl/compilers/active_support_current_attributes.rb +1 -1
  31. data/lib/tapioca/dsl/compilers/active_support_environment_inquirer.rb +1 -1
  32. data/lib/tapioca/dsl/compilers/active_support_time_ext.rb +1 -1
  33. data/lib/tapioca/dsl/compilers/config.rb +2 -2
  34. data/lib/tapioca/dsl/compilers/frozen_record.rb +1 -1
  35. data/lib/tapioca/dsl/compilers/graphql_input_object.rb +1 -1
  36. data/lib/tapioca/dsl/compilers/graphql_mutation.rb +1 -1
  37. data/lib/tapioca/dsl/compilers/identity_cache.rb +2 -2
  38. data/lib/tapioca/dsl/compilers/json_api_client_resource.rb +1 -1
  39. data/lib/tapioca/dsl/compilers/kredis.rb +1 -1
  40. data/lib/tapioca/dsl/compilers/mixed_in_class_attributes.rb +2 -2
  41. data/lib/tapioca/dsl/compilers/protobuf.rb +1 -1
  42. data/lib/tapioca/dsl/compilers/rails_generators.rb +1 -1
  43. data/lib/tapioca/dsl/compilers/sidekiq_worker.rb +1 -1
  44. data/lib/tapioca/dsl/compilers/smart_properties.rb +1 -1
  45. data/lib/tapioca/dsl/compilers/state_machines.rb +2 -2
  46. data/lib/tapioca/dsl/compilers/url_helpers.rb +7 -7
  47. data/lib/tapioca/dsl/helpers/graphql_type_helper.rb +1 -1
  48. data/lib/tapioca/dsl/pipeline.rb +10 -10
  49. data/lib/tapioca/gem/events.rb +7 -7
  50. data/lib/tapioca/gem/listeners/documentation.rb +94 -0
  51. data/lib/tapioca/gem/listeners/methods.rb +8 -8
  52. data/lib/tapioca/gem/listeners/mixins.rb +3 -3
  53. data/lib/tapioca/gem/listeners/sorbet_signatures.rb +5 -7
  54. data/lib/tapioca/gem/listeners/sorbet_type_variables.rb +1 -1
  55. data/lib/tapioca/gem/listeners.rb +1 -1
  56. data/lib/tapioca/gem/pipeline.rb +20 -19
  57. data/lib/tapioca/gemfile.rb +0 -16
  58. data/lib/tapioca/helpers/rbi_helper.rb +7 -0
  59. data/lib/tapioca/helpers/sorbet_helper.rb +19 -0
  60. data/lib/tapioca/helpers/test/dsl_compiler.rb +2 -9
  61. data/lib/tapioca/internal.rb +2 -1
  62. data/lib/tapioca/rbi_ext/model.rb +6 -2
  63. data/lib/tapioca/runtime/dynamic_mixin_compiler.rb +6 -6
  64. data/lib/tapioca/runtime/generic_type_registry.rb +8 -8
  65. data/lib/tapioca/runtime/reflection.rb +28 -21
  66. data/lib/tapioca/runtime/trackers/constant_definition.rb +3 -3
  67. data/lib/tapioca/runtime/trackers/method_definition.rb +4 -4
  68. data/lib/tapioca/runtime/trackers/mixin.rb +5 -5
  69. data/lib/tapioca/runtime/trackers/required_ancestor.rb +2 -2
  70. data/lib/tapioca/runtime/trackers/tracker.rb +1 -1
  71. data/lib/tapioca/sorbet_ext/generic_name_patch.rb +1 -1
  72. data/lib/tapioca/sorbet_ext/void_patch.rb +29 -0
  73. data/lib/tapioca/static/symbol_loader.rb +32 -6
  74. data/lib/tapioca/version.rb +1 -1
  75. metadata +13 -12
  76. data/lib/tapioca/gem/listeners/yard_doc.rb +0 -110
@@ -1,110 +0,0 @@
1
- # typed: strict
2
- # frozen_string_literal: true
3
-
4
- module Tapioca
5
- module Gem
6
- module Listeners
7
- class YardDoc < Base
8
- IGNORED_COMMENTS = [
9
- ":doc:",
10
- ":nodoc:",
11
- "typed:",
12
- "frozen_string_literal:",
13
- "encoding:",
14
- "warn_indent:",
15
- "shareable_constant_value:",
16
- "rubocop:",
17
- "@requires_ancestor:",
18
- ] #: Array[String]
19
-
20
- IGNORED_SIG_TAGS = ["param", "return"] #: Array[String]
21
-
22
- #: (Pipeline pipeline) -> void
23
- def initialize(pipeline)
24
- YARD::Registry.clear
25
- super(pipeline)
26
- pipeline.gem.parse_yard_docs
27
- end
28
-
29
- private
30
-
31
- #: (String line) -> bool
32
- def rbs_comment?(line)
33
- line.start_with?(": ", "| ")
34
- end
35
-
36
- # @override
37
- #: (ConstNodeAdded event) -> void
38
- def on_const(event)
39
- event.node.comments = documentation_comments(event.symbol)
40
- end
41
-
42
- # @override
43
- #: (ScopeNodeAdded event) -> void
44
- def on_scope(event)
45
- event.node.comments = documentation_comments(event.symbol)
46
- end
47
-
48
- # @override
49
- #: (MethodNodeAdded event) -> void
50
- def on_method(event)
51
- separator = event.constant.singleton_class? ? "." : "#"
52
- event.node.comments = documentation_comments(
53
- "#{event.symbol}#{separator}#{event.node.name}",
54
- sigs: event.node.sigs,
55
- )
56
- end
57
-
58
- #: (String name, ?sigs: Array[RBI::Sig]) -> Array[RBI::Comment]
59
- def documentation_comments(name, sigs: [])
60
- yard_docs = YARD::Registry.at(name)
61
- return [] unless yard_docs
62
-
63
- docstring = yard_docs.docstring
64
- return [] if /(copyright|license)/i.match?(docstring)
65
-
66
- comments = docstring.lines
67
- .reject { |line| IGNORED_COMMENTS.any? { |comment| line.include?(comment) } || rbs_comment?(line) }
68
- .map! { |line| RBI::Comment.new(line) }
69
-
70
- tags = yard_docs.tags
71
- tags.reject! { |tag| IGNORED_SIG_TAGS.include?(tag.tag_name) } unless sigs.empty?
72
-
73
- comments << RBI::Comment.new("") if comments.any? && tags.any?
74
-
75
- tags.sort_by { |tag| [tag.tag_name, tag.name.to_s] }.each do |tag|
76
- line = +"@#{tag.tag_name}"
77
-
78
- tag_name = tag.name
79
- line << " #{tag_name}" if tag_name
80
-
81
- tag_types = tag.types
82
- line << " [#{tag_types.join(", ")}]" if tag_types&.any?
83
-
84
- tag_text = tag.text
85
- if tag_text && !tag_text.empty?
86
- text_lines = tag_text.lines
87
-
88
- # Example are a special case because we want the text to start on the next line
89
- line << " #{text_lines.shift&.strip}" unless tag.tag_name == "example"
90
-
91
- text_lines.each do |text_line|
92
- line << "\n #{text_line.strip}"
93
- end
94
- end
95
-
96
- comments << RBI::Comment.new(line)
97
- end
98
-
99
- comments
100
- end
101
-
102
- # @override
103
- #: (NodeAdded event) -> bool
104
- def ignore?(event)
105
- event.is_a?(Tapioca::Gem::ForeignScopeNodeAdded)
106
- end
107
- end
108
- end
109
- end
110
- end