orthoses-yard 0.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6417c32f741a5dfc134166c945908278cbd986d2a2004a8fa4cdede7155e63d0
4
- data.tar.gz: 45d9288f5ddfe277dd5592cc65103d3961aa195df8af80a3707f1309ee0d8344
3
+ metadata.gz: d80e8c5e354b7be1e8d3e160e30093ab485a42f2a0d70460473721f93528bfa2
4
+ data.tar.gz: 19af1c287147f7da97338dbea77d17bc857a3154bab3770a09d4939c2abbaf4c
5
5
  SHA512:
6
- metadata.gz: c929d6d2754ba40898f13213289da72cf66a4977a04626c3670a3dbb85717007f93c254654fbd50d86f0b91c1a179ed47c180496b5210b22182ad6008fb8f358
7
- data.tar.gz: e918f5642b21d48b95c3b47c774c71537481310829206a73ab6e1f4844ed4a66cec81b1243bed6734993d5cecddd46fb9a9777053fbf18cd8e416f8ca3920d1b
6
+ metadata.gz: 11f717bb93e085083f79ac23e169d8dd02f4996faed4073d53cdb1895af039fdcc707a68326ef6459fd6e2943e622097faf5624884cfe55aaef7f5ced1ac9224
7
+ data.tar.gz: 5b6c127a6789659eff70f25fe21131dc5c7d0b3490cff6337675d60ae824f973a30252f98933f9aae2cfde76ec12b5b8daa7136616575141d81bc6ecff2537ac
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Orthoses
4
4
  class YARD
5
- VERSION = "0.4.0"
5
+ VERSION = "0.6.0"
6
6
  end
7
7
  end
@@ -35,7 +35,7 @@ module Orthoses
35
35
  # @return [void]
36
36
  def run
37
37
  Orthoses.logger.info("YARD will generate about #{yardoc.inspect}")
38
- block.call(yardoc.path, yardoc.docstring.all, nil)
38
+ emit(yardoc.path, yardoc.docstring.all, nil, false)
39
39
  yardoc.children.each do |child|
40
40
  case child.type
41
41
  when :module, :class
@@ -70,6 +70,10 @@ module Orthoses
70
70
 
71
71
  private
72
72
 
73
+ def emit(namespace, docstring, rbs, skippable)
74
+ block.call(namespace, docstring, rbs, skippable)
75
+ end
76
+
73
77
  def class_of(mod)
74
78
  Kernel.instance_method(:class).bind_call(mod)
75
79
  end
@@ -82,15 +86,18 @@ module Orthoses
82
86
  if class_attributes[:read] && class_attributes[:write]
83
87
  visibility = class_attributes[:read].visibility == :private ? 'private ' : ''
84
88
  type = tag_types_to_rbs_type(class_attributes[:read].tags('return').flat_map(&:types))
85
- block.call(yardoc.path, class_attributes[:read].docstring.all, "#{visibility}attr_accessor #{prefix}#{name}: #{type}")
89
+ skippable = class_attributes[:read].tags('return').empty?
90
+ emit(yardoc.path, class_attributes[:read].docstring.all, "#{visibility}attr_accessor #{prefix}#{name}: #{type}", skippable)
86
91
  elsif class_attributes[:read]
87
92
  visibility = class_attributes[:read].visibility == :private ? 'private ' : ''
88
93
  type = tag_types_to_rbs_type(class_attributes[:read].tags('return').flat_map(&:types))
89
- block.call(yardoc.path, class_attributes[:read].docstring.all, "#{visibility}attr_reader #{prefix}#{name}: #{type}")
94
+ skippable = class_attributes[:read].tags('return').empty?
95
+ emit(yardoc.path, class_attributes[:read].docstring.all, "#{visibility}attr_reader #{prefix}#{name}: #{type}", skippable)
90
96
  elsif class_attributes[:write]
91
97
  visibility = class_attributes[:write].visibility == :private ? 'private ' : ''
92
98
  type = tag_types_to_rbs_type(class_attributes[:write].tags('return').flat_map(&:types))
93
- block.call(yardoc.path, class_attributes[:write].docstring.all, "#{visibility}attr_writer #{prefix}#{name}: #{type}")
99
+ skippable = class_attributes[:write].tags('return').empty?
100
+ emit(yardoc.path, class_attributes[:write].docstring.all, "#{visibility}attr_writer #{prefix}#{name}: #{type}", skippable)
94
101
  else
95
102
  raise "bug"
96
103
  end
@@ -106,8 +113,8 @@ module Orthoses
106
113
  # skip attribute methods because of generate_for_attributes
107
114
  next if meth.attr_info
108
115
 
109
- # skip no tags methods
110
- next if meth.tags.empty?
116
+ # skip no type tags methods
117
+ skippable = meth.docstring.all.empty?
111
118
 
112
119
  namespace = meth.namespace
113
120
  method_name = meth.name
@@ -131,8 +138,7 @@ module Orthoses
131
138
 
132
139
  if meth.is_alias?
133
140
  orig_key = yardoc.aliases[meth]
134
- block.call(yardoc.to_s, "", "alias #{prefix}#{meth.name} #{prefix}#{orig_key}")
135
- next
141
+ emit(yardoc.to_s, "", "alias #{prefix}#{meth.name} #{prefix}#{orig_key}", false)
136
142
  end
137
143
 
138
144
  required_positionals = []
@@ -226,7 +232,7 @@ module Orthoses
226
232
  )
227
233
 
228
234
  visibility = meth.visibility == :private ? 'private ' : ''
229
- block.call(yardoc.to_s, meth.docstring.all, "#{visibility}def #{prefix}#{method_name}: #{method_type}")
235
+ emit(yardoc.to_s, meth.docstring.all, "#{visibility}def #{prefix}#{method_name}: #{method_type}", skippable)
230
236
  end
231
237
  end
232
238
 
@@ -234,8 +240,9 @@ module Orthoses
234
240
  def generate_for_constants
235
241
  yardoc.constants(inherited: false).each do |const|
236
242
  return_tags = const.tags('return')
237
- return_type = return_tags.empty? ? untyped : tag_types_to_rbs_type(return_tags.flat_map(&:types))
238
- block.call(const.namespace.to_s, const.docstring.all, "#{const.name}: #{return_type}")
243
+ return_type = tag_types_to_rbs_type(return_tags.flat_map(&:types))
244
+ skippable = return_tags.empty?
245
+ emit(const.namespace.to_s, const.docstring.all, "#{const.name}: #{return_type}", skippable)
239
246
  end
240
247
  end
241
248
 
@@ -243,8 +250,9 @@ module Orthoses
243
250
  def generate_for_classvariable
244
251
  yardoc.cvars.each do |cvar|
245
252
  return_tags = cvar.tags('return')
246
- return_type = return_tags.empty? ? untyped : tag_types_to_rbs_type(return_tags.flat_map(&:types))
247
- block.call(cvar.namespace.to_s, cvar.docstring.all, "#{cvar.name}: #{return_type}")
253
+ return_type = tag_types_to_rbs_type(return_tags.flat_map(&:types))
254
+ skippable = return_tags.empty?
255
+ emit(cvar.namespace.to_s, cvar.docstring.all, "#{cvar.name}: #{return_type}", skippable)
248
256
  end
249
257
  end
250
258
 
@@ -269,12 +277,21 @@ module Orthoses
269
277
  )
270
278
  end
271
279
  else
280
+ name = TypeName(types_explainer_type.name)
281
+ type_params = temporary_type_params(name.to_s)
282
+ args = if 2 <= type_params.length
283
+ Orthoses.logger.warn("Cannot convert to rbs since generics mismatch. `#{name}` has #{type_params.length} generics in RBS. But YARD tag type is `#{types_explainer_type.to_s}`. Use `#{name}[#{type_params.join(', ')}]` instead.")
284
+ type_params
285
+ else
286
+ [type]
287
+ end
288
+
272
289
  ::RBS::Types::ClassInstance.new(
273
- name: TypeName(types_explainer_type.name),
274
- args: [type],
290
+ name: name,
291
+ args: args,
275
292
  location: nil
276
293
  )
277
- end
294
+ end
278
295
  when ::YARD::Tags::TypesExplainer::HashCollectionType
279
296
  ::RBS::Types::ClassInstance.new(
280
297
  name: TypeName(types_explainer_type.name),
data/lib/orthoses/yard.rb CHANGED
@@ -10,11 +10,13 @@ module Orthoses
10
10
  # @param [<String>, String] parse Target files
11
11
  # @param [Boolean] use_cache Use cache .yardoc
12
12
  # @param [Symbol, nil] log_level Set YARD log level
13
- def initialize(loader, parse:, use_cache: true, log_level: nil)
13
+ # @param [Boolean] allow_empty_doc Generate RBS also from empty doc
14
+ def initialize(loader, parse:, use_cache: true, log_level: nil, allow_empty_doc: false)
14
15
  @loader = loader
15
16
  @parse = Array(parse)
16
17
  @use_cache = use_cache
17
18
  @log_level = log_level
19
+ @allow_empty_doc = allow_empty_doc
18
20
  end
19
21
 
20
22
  # @return [void]
@@ -36,13 +38,14 @@ module Orthoses
36
38
 
37
39
  case yardoc.type
38
40
  when :class, :module
39
- YARD2RBS.run(yardoc: yardoc) do |namespace, docstring, rbs|
40
- comment = docstring.each_line.map { |line| "# #{line}" }.join
41
+ YARD2RBS.run(yardoc: yardoc) do |namespace, docstring, rbs, skippable|
42
+ next if skippable && !@allow_empty_doc
43
+ comment = docstring.empty? ? '' : "# #{docstring.gsub("\n", "\n# ")}"
41
44
  if rbs.nil? && comment && !store.has_key?(namespace)
42
45
  store[namespace].comment = comment
43
46
  else
44
47
  Orthoses.logger.debug("#{namespace} << #{rbs}")
45
- store[namespace] << "#{comment}\n#{rbs}"
48
+ store[namespace] << "#{comment.chomp}\n#{rbs}"
46
49
  end
47
50
  end
48
51
  end
data/sig/orthoses.rbs CHANGED
@@ -6,10 +6,10 @@ class Orthoses::YARD
6
6
  # @param [<String>, String] parse Target files
7
7
  # @param [Boolean] use_cache Use cache .yardoc
8
8
  # @param [Symbol, nil] log_level Set YARD log level
9
- def initialize: (untyped loader, parse: Array[String] | String, ?use_cache: bool, ?log_level: Symbol?) -> void
9
+ # @param [Boolean] allow_empty_doc Generate RBS also from empty doc
10
+ def initialize: (untyped loader, parse: Array[String] | String, ?use_cache: bool, ?log_level: Symbol?, ?allow_empty_doc: bool) -> void
10
11
  # @return [void]
11
12
  def call: () -> void
12
- VERSION: untyped
13
13
  end
14
14
 
15
15
  class Orthoses::YARD::YARD2RBS
@@ -23,7 +23,6 @@ class Orthoses::YARD::YARD2RBS
23
23
  attr_reader void: RBS::Types::Bases::Void
24
24
  # @return [RBS::Types::Bases::Bool]
25
25
  attr_reader bool: RBS::Types::Bases::Bool
26
- def initialize: (yardoc: untyped, block: untyped) -> void
27
26
  # @return [void]
28
27
  def run: () -> void
29
28
  # @return [RBS::Types::t]
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: orthoses-yard
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ksss
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-09-19 00:00:00.000000000 Z
11
+ date: 2023-10-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: orthoses