rbs 2.6.0 → 2.7.0.pre.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (126) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/.rubocop.yml +5 -0
  4. data/CHANGELOG.md +48 -1
  5. data/Gemfile.lock +10 -9
  6. data/Rakefile +0 -5
  7. data/Steepfile +1 -0
  8. data/core/basic_object.rbs +2 -2
  9. data/core/fiber.rbs +304 -14
  10. data/core/float.rbs +2 -0
  11. data/core/io.rbs +95 -1
  12. data/core/kernel.rbs +1 -1
  13. data/core/module.rbs +1 -1
  14. data/core/regexp.rbs +1 -1
  15. data/core/string_io.rbs +1 -1
  16. data/core/warning.rbs +1 -1
  17. data/ext/rbs_extension/parser.c +36 -10
  18. data/ext/rbs_extension/ruby_objs.c +4 -2
  19. data/ext/rbs_extension/ruby_objs.h +2 -2
  20. data/lib/rbs/ancestor_graph.rb +2 -0
  21. data/lib/rbs/annotate/annotations.rb +2 -0
  22. data/lib/rbs/annotate/formatter.rb +4 -2
  23. data/lib/rbs/annotate/rdoc_annotator.rb +2 -0
  24. data/lib/rbs/annotate/rdoc_source.rb +2 -0
  25. data/lib/rbs/annotate.rb +2 -0
  26. data/lib/rbs/ast/annotation.rb +2 -0
  27. data/lib/rbs/ast/comment.rb +2 -0
  28. data/lib/rbs/ast/declarations.rb +2 -0
  29. data/lib/rbs/ast/members.rb +2 -0
  30. data/lib/rbs/ast/type_param.rb +3 -1
  31. data/lib/rbs/buffer.rb +2 -0
  32. data/lib/rbs/builtin_names.rb +2 -0
  33. data/lib/rbs/cli.rb +39 -2
  34. data/lib/rbs/collection/cleaner.rb +2 -0
  35. data/lib/rbs/collection/config/lockfile_generator.rb +8 -3
  36. data/lib/rbs/collection/config.rb +2 -0
  37. data/lib/rbs/collection/installer.rb +2 -0
  38. data/lib/rbs/collection/sources/base.rb +14 -0
  39. data/lib/rbs/collection/sources/git.rb +3 -0
  40. data/lib/rbs/collection/sources/rubygems.rb +3 -0
  41. data/lib/rbs/collection/sources/stdlib.rb +12 -7
  42. data/lib/rbs/collection/sources.rb +3 -0
  43. data/lib/rbs/collection.rb +2 -0
  44. data/lib/rbs/constant.rb +2 -0
  45. data/lib/rbs/constant_table.rb +5 -3
  46. data/lib/rbs/definition.rb +13 -1
  47. data/lib/rbs/definition_builder/ancestor_builder.rb +2 -0
  48. data/lib/rbs/definition_builder/method_builder.rb +2 -0
  49. data/lib/rbs/definition_builder.rb +75 -13
  50. data/lib/rbs/environment.rb +2 -0
  51. data/lib/rbs/environment_loader.rb +25 -5
  52. data/lib/rbs/environment_walker.rb +2 -0
  53. data/lib/rbs/errors.rb +3 -1
  54. data/lib/rbs/factory.rb +2 -0
  55. data/lib/rbs/location_aux.rb +3 -1
  56. data/lib/rbs/locator.rb +2 -0
  57. data/lib/rbs/method_type.rb +7 -5
  58. data/lib/rbs/namespace.rb +9 -5
  59. data/lib/rbs/parser_aux.rb +2 -0
  60. data/lib/rbs/parser_compat/lexer_error.rb +2 -0
  61. data/lib/rbs/parser_compat/located_value.rb +2 -0
  62. data/lib/rbs/parser_compat/semantics_error.rb +2 -0
  63. data/lib/rbs/parser_compat/syntax_error.rb +2 -0
  64. data/lib/rbs/prototype/helpers.rb +13 -8
  65. data/lib/rbs/prototype/rb.rb +2 -0
  66. data/lib/rbs/prototype/rbi.rb +11 -6
  67. data/lib/rbs/prototype/runtime.rb +13 -4
  68. data/lib/rbs/repository.rb +4 -4
  69. data/lib/rbs/resolver/constant_resolver.rb +2 -0
  70. data/lib/rbs/resolver/type_name_resolver.rb +2 -0
  71. data/lib/rbs/sorter.rb +168 -0
  72. data/lib/rbs/substitution.rb +2 -0
  73. data/lib/rbs/test/errors.rb +2 -0
  74. data/lib/rbs/test/hook.rb +2 -0
  75. data/lib/rbs/test/observer.rb +2 -0
  76. data/lib/rbs/test/setup.rb +2 -0
  77. data/lib/rbs/test/setup_helper.rb +2 -0
  78. data/lib/rbs/test/spy.rb +2 -0
  79. data/lib/rbs/test/tester.rb +2 -0
  80. data/lib/rbs/test/type_check.rb +2 -0
  81. data/lib/rbs/test.rb +2 -0
  82. data/lib/rbs/type_alias_dependency.rb +2 -0
  83. data/lib/rbs/type_alias_regularity.rb +2 -0
  84. data/lib/rbs/type_name.rb +2 -0
  85. data/lib/rbs/type_name_resolver.rb +4 -2
  86. data/lib/rbs/types.rb +68 -18
  87. data/lib/rbs/validator.rb +2 -0
  88. data/lib/rbs/variance_calculator.rb +2 -0
  89. data/lib/rbs/vendorer.rb +2 -0
  90. data/lib/rbs/version.rb +3 -1
  91. data/lib/rbs/writer.rb +3 -1
  92. data/lib/rbs.rb +4 -2
  93. data/lib/rdoc/discover.rb +20 -0
  94. data/lib/rdoc_plugin/parser.rb +163 -0
  95. data/schema/methodType.json +7 -1
  96. data/schema/types.json +13 -1
  97. data/sig/ancestor_builder.rbs +66 -7
  98. data/sig/annotation.rbs +7 -6
  99. data/sig/builtin_names.rbs +2 -0
  100. data/sig/cli.rbs +8 -0
  101. data/sig/collection/config.rbs +13 -4
  102. data/sig/collection/installer.rbs +2 -0
  103. data/sig/collection/sources.rbs +23 -4
  104. data/sig/definition.rbs +8 -0
  105. data/sig/definition_builder.rbs +64 -7
  106. data/sig/environment.rbs +4 -0
  107. data/sig/environment_loader.rbs +4 -2
  108. data/sig/location.rbs +8 -4
  109. data/sig/manifest.yaml +1 -0
  110. data/sig/members.rbs +1 -1
  111. data/sig/method_builder.rbs +10 -0
  112. data/sig/namespace.rbs +54 -31
  113. data/sig/prototype/rb.rbs +4 -0
  114. data/sig/rbs.rbs +8 -6
  115. data/sig/rdoc/rbs.rbs +63 -0
  116. data/sig/{polyfill.rbs → shims.rbs} +1 -31
  117. data/sig/sorter.rbs +23 -0
  118. data/sig/types.rbs +14 -2
  119. data/sig/vendorer.rbs +32 -25
  120. data/stdlib/bigdecimal/0/big_decimal.rbs +250 -0
  121. data/stdlib/erb/0/erb.rbs +107 -0
  122. data/stdlib/logger/0/logger.rbs +2 -2
  123. data/stdlib/rdoc/0/rdoc.rbs +758 -0
  124. data/steep/Gemfile.lock +8 -8
  125. metadata +12 -6
  126. data/stdlib/fiber/0/fiber.rbs +0 -99
data/lib/rbs/sorter.rb ADDED
@@ -0,0 +1,168 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ class Sorter
5
+ include RBS::AST
6
+
7
+ attr_reader :path, :stdout
8
+
9
+ def initialize(path, stdout: $stdout)
10
+ @path = path
11
+ @stdout = stdout
12
+ end
13
+
14
+ def run
15
+ stdout.puts "Opening #{path}..."
16
+
17
+ buffer = Buffer.new(name: path, content: path.read)
18
+ sigs = Parser.parse_signature(buffer)
19
+
20
+ sigs.each do |m|
21
+ sort_decl! m
22
+ end
23
+
24
+ stdout.puts "Writing #{path}..."
25
+ path.open('w') do |out|
26
+ writer = RBS::Writer.new(out: out)
27
+ writer.write sigs
28
+ end
29
+ end
30
+
31
+ def group(member)
32
+ case member
33
+ when Declarations::Alias
34
+ -3
35
+ when Declarations::Constant
36
+ -2
37
+ when Declarations::Class, Declarations::Module
38
+ -1
39
+ when Members::Include
40
+ 0.0
41
+ when Members::Prepend
42
+ 0.2
43
+ when Members::Extend
44
+ 0.4
45
+ when Members::ClassVariable
46
+ 1
47
+ when Members::ClassInstanceVariable
48
+ 2
49
+ when Members::InstanceVariable
50
+ 3
51
+ when Members::AttrAccessor, Members::AttrWriter, Members::AttrReader
52
+ if member.kind == :singleton
53
+ 5.0
54
+ else
55
+ 6.0
56
+ end
57
+ when Members::MethodDefinition
58
+ case member.kind
59
+ when :singleton_instance
60
+ 4
61
+ when :singleton
62
+ if member.name == :new
63
+ 5.2
64
+ elsif member.visibility == :public
65
+ 5.4
66
+ else
67
+ 5.6
68
+ end
69
+ else
70
+ if member.name == :initialize
71
+ 6.2
72
+ elsif member.visibility == :public
73
+ 6.4
74
+ else
75
+ 6.6
76
+ end
77
+ end
78
+ when Members::Alias
79
+ if member.singleton?
80
+ 5.4
81
+ else
82
+ 6.4
83
+ end
84
+ else
85
+ raise
86
+ end
87
+ end
88
+
89
+ def key(member)
90
+ case member
91
+ when Members::Include, Members::Extend, Members::Prepend
92
+ member.name.to_s
93
+ when Members::ClassVariable, Members::ClassInstanceVariable, Members::InstanceVariable
94
+ member.name.to_s
95
+ when Members::AttrAccessor, Members::AttrWriter, Members::AttrReader
96
+ member.name.to_s
97
+ when Members::MethodDefinition
98
+ member.name.to_s
99
+ when Members::Alias
100
+ member.new_name.to_s
101
+ when Declarations::Constant
102
+ member.name.to_s
103
+ when Declarations::Alias
104
+ member.name.to_s
105
+ when Declarations::Class, Declarations::Module
106
+ member.name.to_s
107
+ else
108
+ raise
109
+ end
110
+ end
111
+
112
+ def sort_decl!(decl)
113
+ case decl
114
+ when Declarations::Class, Declarations::Module, Declarations::Interface
115
+ decl.members.each { |m| sort_decl! m }
116
+
117
+ current_visibility = :public
118
+ decl.members.map! do |m|
119
+ case m
120
+ when Members::Public
121
+ current_visibility = :public
122
+ nil
123
+ when Members::Private
124
+ current_visibility = :private
125
+ nil
126
+ when Members::MethodDefinition, Members::AttrReader, Members::AttrWriter, Members::AttrAccessor
127
+ m.update(visibility: m.visibility || current_visibility)
128
+ else
129
+ m
130
+ end
131
+ end
132
+ decl.members.compact!
133
+
134
+ decl.members.sort! do |m1, m2|
135
+ group1 = group(m1)
136
+ group2 = group(m2)
137
+
138
+ if group1 == group2
139
+ key(m1) <=> key(m2)
140
+ else
141
+ group1 <=> group2
142
+ end
143
+ end
144
+
145
+ current_visibility = :public
146
+ decl.members.map! do |m|
147
+ case m
148
+ when Members::MethodDefinition, Members::AttrReader, Members::AttrWriter, Members::AttrAccessor
149
+ new = m.update(visibility: nil)
150
+ cur = current_visibility
151
+ current_visibility = m.visibility
152
+ if cur != m.visibility
153
+ [
154
+ m.visibility == :public ? Members::Public.new(location: nil) : Members::Private.new(location: nil),
155
+ new
156
+ ]
157
+ else
158
+ new
159
+ end
160
+ else
161
+ m
162
+ end
163
+ end
164
+ decl.members.flatten!
165
+ end
166
+ end
167
+ end
168
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RBS
2
4
  class Substitution
3
5
  attr_reader :mapping
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RBS
2
4
  module Test
3
5
  module Errors
data/lib/rbs/test/hook.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "rbs"
2
4
  require "pp"
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RBS
2
4
  module Test
3
5
  module Observer
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "rbs"
2
4
  require "rbs/test"
3
5
  require "optparse"
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RBS
2
4
  module Test
3
5
  module SetupHelper
data/lib/rbs/test/spy.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RBS
2
4
  module Test
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RBS
2
4
  module Test
3
5
  class Tester
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RBS
2
4
  module Test
3
5
  class TypeCheck
data/lib/rbs/test.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "securerandom"
2
4
  require "rbs/test/observer"
3
5
  require "rbs/test/spy"
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RBS
2
4
  class TypeAliasDependency
3
5
  attr_reader :env
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RBS
2
4
  class TypeAliasRegularity
3
5
  class Diagnostic
data/lib/rbs/type_name.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RBS
2
4
  class TypeName
3
5
  attr_reader :namespace
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RBS
2
4
  class TypeNameResolver
3
5
  Query = _ = Struct.new(:type_name, :context, keyword_init: true)
@@ -35,11 +37,11 @@ module RBS
35
37
 
36
38
  query = Query.new(type_name: type_name, context: context)
37
39
  try_cache(query) do
38
- path_head, *path_tail = type_name.to_namespace.path
40
+ path_head, *path_tail = type_name.split
39
41
  raise unless path_head
40
42
 
41
43
  name_head = TypeName.new(name: path_head, namespace: Namespace.empty)
42
-
44
+
43
45
  absolute_head = context.find do |namespace|
44
46
  # @type break: TypeName
45
47
  full_name = name_head.with_prefix(namespace)
data/lib/rbs/types.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RBS
2
4
  module Types
3
5
  module NoFreeVariables
@@ -843,12 +845,12 @@ module RBS
843
845
  def map_type(&block)
844
846
  if block
845
847
  Function.new(
846
- required_positionals: required_positionals.map {|param| param.map_type(&block) },
847
- optional_positionals: optional_positionals.map {|param| param.map_type(&block) },
848
+ required_positionals: amap(required_positionals) {|param| param.map_type(&block) },
849
+ optional_positionals: amap(optional_positionals) {|param| param.map_type(&block) },
848
850
  rest_positionals: rest_positionals&.yield_self {|param| param.map_type(&block) },
849
- trailing_positionals: trailing_positionals.map {|param| param.map_type(&block) },
850
- required_keywords: required_keywords.transform_values {|param| param.map_type(&block) },
851
- optional_keywords: optional_keywords.transform_values {|param| param.map_type(&block) },
851
+ trailing_positionals: amap(trailing_positionals) {|param| param.map_type(&block) },
852
+ required_keywords: hmapv(required_keywords) {|param| param.map_type(&block) },
853
+ optional_keywords: hmapv(optional_keywords) {|param| param.map_type(&block) },
852
854
  rest_keywords: rest_keywords&.yield_self {|param| param.map_type(&block) },
853
855
  return_type: yield(return_type)
854
856
  )
@@ -857,6 +859,22 @@ module RBS
857
859
  end
858
860
  end
859
861
 
862
+ def amap(array, &block)
863
+ if array.empty?
864
+ _ = array
865
+ else
866
+ array.map(&block)
867
+ end
868
+ end
869
+
870
+ def hmapv(hash, &block)
871
+ if hash.empty?
872
+ _ = hash
873
+ else
874
+ hash.transform_values(&block)
875
+ end
876
+ end
877
+
860
878
  def map_type_name(&block)
861
879
  map_type do |type|
862
880
  type.map_type_name(&block)
@@ -1020,64 +1038,85 @@ module RBS
1020
1038
  class Block
1021
1039
  attr_reader :type
1022
1040
  attr_reader :required
1041
+ attr_reader :self_type
1023
1042
 
1024
- def initialize(type:, required:)
1043
+ def initialize(type:, required:, self_type: nil)
1025
1044
  @type = type
1026
1045
  @required = required ? true : false
1046
+ @self_type = self_type
1027
1047
  end
1028
1048
 
1029
1049
  def ==(other)
1030
1050
  other.is_a?(Block) &&
1031
1051
  other.type == type &&
1032
- other.required == required
1052
+ other.required == required &&
1053
+ other.self_type == self_type
1033
1054
  end
1034
1055
 
1035
1056
  def to_json(state = _ = nil)
1036
1057
  {
1037
1058
  type: type,
1038
- required: required
1059
+ required: required,
1060
+ self_type: self_type
1039
1061
  }.to_json(state)
1040
1062
  end
1041
1063
 
1042
1064
  def sub(s)
1043
1065
  self.class.new(
1044
1066
  type: type.sub(s),
1045
- required: required
1067
+ required: required,
1068
+ self_type: self_type&.sub(s)
1046
1069
  )
1047
1070
  end
1048
1071
 
1049
1072
  def map_type(&block)
1050
1073
  Block.new(
1051
1074
  required: required,
1052
- type: type.map_type(&block)
1075
+ type: type.map_type(&block),
1076
+ self_type: self_type ? yield(self_type) : nil
1053
1077
  )
1054
1078
  end
1055
1079
  end
1056
1080
 
1081
+ module SelfTypeBindingHelper
1082
+ module_function
1083
+
1084
+ def self_type_binding_to_s(t)
1085
+ if t
1086
+ "[self: #{t}] "
1087
+ else
1088
+ ""
1089
+ end
1090
+ end
1091
+ end
1092
+
1057
1093
  class Proc
1058
1094
  attr_reader :type
1059
1095
  attr_reader :block
1096
+ attr_reader :self_type
1060
1097
  attr_reader :location
1061
1098
 
1062
- def initialize(location:, type:, block:)
1099
+ def initialize(location:, type:, block:, self_type: nil)
1063
1100
  @type = type
1064
1101
  @block = block
1065
1102
  @location = location
1103
+ @self_type = self_type
1066
1104
  end
1067
1105
 
1068
1106
  def ==(other)
1069
- other.is_a?(Proc) && other.type == type && other.block == block
1107
+ other.is_a?(Proc) && other.type == type && other.block == block && other.self_type == self_type
1070
1108
  end
1071
1109
 
1072
1110
  alias eql? ==
1073
1111
 
1074
1112
  def hash
1075
- self.class.hash ^ type.hash ^ block.hash
1113
+ self.class.hash ^ type.hash ^ block.hash ^ self_type.hash
1076
1114
  end
1077
1115
 
1078
1116
  def free_variables(set = Set[])
1079
1117
  type.free_variables(set)
1080
1118
  block&.type&.free_variables(set)
1119
+ self_type&.free_variables(set)
1081
1120
  set
1082
1121
  end
1083
1122
 
@@ -1086,24 +1125,33 @@ module RBS
1086
1125
  class: :proc,
1087
1126
  type: type,
1088
1127
  block: block,
1089
- location: location
1128
+ location: location,
1129
+ self_type: self_type
1090
1130
  }.to_json(state)
1091
1131
  end
1092
1132
 
1093
1133
  def sub(s)
1094
- self.class.new(type: type.sub(s), block: block&.sub(s), location: location)
1134
+ self.class.new(
1135
+ type: type.sub(s),
1136
+ block: block&.sub(s),
1137
+ self_type: self_type&.sub(s),
1138
+ location: location
1139
+ )
1095
1140
  end
1096
1141
 
1097
1142
  def to_s(level = 0)
1143
+ self_binding = SelfTypeBindingHelper.self_type_binding_to_s(self_type)
1144
+ block_self_binding = SelfTypeBindingHelper.self_type_binding_to_s(block&.self_type)
1145
+
1098
1146
  case
1099
1147
  when b = block
1100
1148
  if b.required
1101
- "^(#{type.param_to_s}) { (#{b.type.param_to_s}) -> #{b.type.return_to_s} } -> #{type.return_to_s}"
1149
+ "^(#{type.param_to_s}) #{self_binding}{ (#{b.type.param_to_s}) #{block_self_binding}-> #{b.type.return_to_s} } -> #{type.return_to_s}"
1102
1150
  else
1103
- "^(#{type.param_to_s}) ?{ (#{b.type.param_to_s}) -> #{b.type.return_to_s} } -> #{type.return_to_s}"
1151
+ "^(#{type.param_to_s}) #{self_binding}?{ (#{b.type.param_to_s}) #{block_self_binding}-> #{b.type.return_to_s} } -> #{type.return_to_s}"
1104
1152
  end
1105
1153
  else
1106
- "^(#{type.param_to_s}) -> #{type.return_to_s}"
1154
+ "^(#{type.param_to_s}) #{self_binding}-> #{type.return_to_s}"
1107
1155
  end
1108
1156
  end
1109
1157
 
@@ -1120,6 +1168,7 @@ module RBS
1120
1168
  Proc.new(
1121
1169
  type: type.map_type_name(&block),
1122
1170
  block: self.block&.map_type {|type| type.map_type_name(&block) },
1171
+ self_type: self_type&.map_type_name(&block),
1123
1172
  location: location
1124
1173
  )
1125
1174
  end
@@ -1129,6 +1178,7 @@ module RBS
1129
1178
  Proc.new(
1130
1179
  type: type.map_type(&block),
1131
1180
  block: self.block&.map_type(&block),
1181
+ self_type: self_type ? yield(self_type) : nil,
1132
1182
  location: location
1133
1183
  )
1134
1184
  else
data/lib/rbs/validator.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RBS
2
4
  class Validator
3
5
  attr_reader :env
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RBS
2
4
  class VarianceCalculator
3
5
  class Result
data/lib/rbs/vendorer.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RBS
2
4
  class Vendorer
3
5
  attr_reader :vendor_dir
data/lib/rbs/version.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RBS
2
- VERSION = "2.6.0"
4
+ VERSION = "2.7.0.pre.1"
3
5
  end
data/lib/rbs/writer.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RBS
2
4
  class Writer
3
5
  attr_reader :out
@@ -280,7 +282,7 @@ module RBS
280
282
  "self.#{method_name(member.name)}"
281
283
  end
282
284
 
283
- string = ""
285
+ string = +""
284
286
 
285
287
  prefix = "#{visibility}def #{name}:"
286
288
  padding = " " * (prefix.size-1)
data/lib/rbs.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "rbs/version"
2
4
 
3
5
  require "set"
@@ -59,12 +61,12 @@ module RBS
59
61
  attr_reader :logger_output
60
62
 
61
63
  def logger
62
- @logger ||= Logger.new(logger_output || STDERR, level: logger_level || "warn", progname: "rbs")
64
+ @logger ||= Logger.new(logger_output || STDERR, level: logger_level || Logger::WARN, progname: "rbs")
63
65
  end
64
66
 
65
67
  def logger_output=(val)
66
- @logger_output = val
67
68
  @logger = nil
69
+ @logger_output = val
68
70
  end
69
71
 
70
72
  def logger_level=(level)
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ begin
4
+ gem 'rdoc', '~> 6.4.0'
5
+ require 'rdoc_plugin/parser'
6
+ module RDoc
7
+ class Parser
8
+ class RBS < Parser
9
+ parse_files_matching(/\.rbs$/)
10
+ def scan
11
+ ::RBS::RDocPlugin::Parser.new(@top_level, @content).scan
12
+ end
13
+ end
14
+ end
15
+ end
16
+ rescue Gem::LoadError
17
+ # Error :sad:
18
+ rescue Exception
19
+ # Exception :sad:
20
+ end