solargraph 0.51.2 → 0.54.2

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 (183) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/plugins.yml +40 -0
  3. data/.github/workflows/rspec.yml +1 -3
  4. data/.github/workflows/typecheck.yml +34 -0
  5. data/.yardopts +2 -2
  6. data/CHANGELOG.md +127 -5
  7. data/README.md +13 -16
  8. data/SPONSORS.md +1 -7
  9. data/lib/solargraph/api_map/cache.rb +50 -20
  10. data/lib/solargraph/api_map/source_to_yard.rb +17 -10
  11. data/lib/solargraph/api_map/store.rb +60 -15
  12. data/lib/solargraph/api_map.rb +282 -123
  13. data/lib/solargraph/bench.rb +3 -2
  14. data/lib/solargraph/cache.rb +29 -5
  15. data/lib/solargraph/complex_type/type_methods.rb +122 -39
  16. data/lib/solargraph/complex_type/unique_type.rb +310 -76
  17. data/lib/solargraph/complex_type.rb +166 -44
  18. data/lib/solargraph/convention.rb +0 -1
  19. data/lib/solargraph/converters/dd.rb +5 -0
  20. data/lib/solargraph/converters/dl.rb +3 -0
  21. data/lib/solargraph/converters/dt.rb +3 -0
  22. data/lib/solargraph/diagnostics/rubocop.rb +8 -7
  23. data/lib/solargraph/diagnostics/rubocop_helpers.rb +1 -0
  24. data/lib/solargraph/diagnostics/type_check.rb +1 -0
  25. data/lib/solargraph/diagnostics.rb +2 -2
  26. data/lib/solargraph/doc_map.rb +187 -0
  27. data/lib/solargraph/gem_pins.rb +72 -0
  28. data/lib/solargraph/language_server/host/diagnoser.rb +2 -2
  29. data/lib/solargraph/language_server/host/dispatch.rb +22 -5
  30. data/lib/solargraph/language_server/host/message_worker.rb +49 -5
  31. data/lib/solargraph/language_server/host/sources.rb +8 -65
  32. data/lib/solargraph/language_server/host.rb +65 -84
  33. data/lib/solargraph/language_server/message/base.rb +19 -12
  34. data/lib/solargraph/language_server/message/completion_item/resolve.rb +3 -1
  35. data/lib/solargraph/language_server/message/extended/check_gem_version.rb +13 -1
  36. data/lib/solargraph/language_server/message/initialize.rb +19 -2
  37. data/lib/solargraph/language_server/message/text_document/completion.rb +0 -3
  38. data/lib/solargraph/language_server/message/text_document/definition.rb +3 -3
  39. data/lib/solargraph/language_server/message/text_document/document_symbol.rb +3 -3
  40. data/lib/solargraph/language_server/message/text_document/formatting.rb +1 -0
  41. data/lib/solargraph/language_server/message/text_document/hover.rb +3 -1
  42. data/lib/solargraph/language_server/message/text_document/type_definition.rb +3 -3
  43. data/lib/solargraph/language_server/message/text_document.rb +0 -1
  44. data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +5 -0
  45. data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +2 -2
  46. data/lib/solargraph/language_server/progress.rb +135 -0
  47. data/lib/solargraph/language_server/transport/adapter.rb +16 -1
  48. data/lib/solargraph/language_server/transport/data_reader.rb +2 -0
  49. data/lib/solargraph/language_server.rb +1 -0
  50. data/lib/solargraph/library.rb +207 -111
  51. data/lib/solargraph/location.rb +15 -1
  52. data/lib/solargraph/page.rb +6 -0
  53. data/lib/solargraph/parser/comment_ripper.rb +4 -0
  54. data/lib/solargraph/parser/node_methods.rb +47 -7
  55. data/lib/solargraph/parser/node_processor/base.rb +11 -1
  56. data/lib/solargraph/parser/node_processor.rb +1 -0
  57. data/lib/solargraph/parser/{legacy → parser_gem}/class_methods.rb +31 -9
  58. data/lib/solargraph/parser/{legacy → parser_gem}/flawed_builder.rb +3 -1
  59. data/lib/solargraph/parser/{legacy → parser_gem}/node_chainer.rb +62 -43
  60. data/lib/solargraph/parser/parser_gem/node_methods.rb +495 -0
  61. data/lib/solargraph/parser/{rubyvm → parser_gem}/node_processors/alias_node.rb +1 -1
  62. data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +57 -0
  63. data/lib/solargraph/parser/{rubyvm → parser_gem}/node_processors/begin_node.rb +1 -1
  64. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/block_node.rb +3 -2
  65. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/casgn_node.rb +2 -2
  66. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/cvasgn_node.rb +1 -1
  67. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/def_node.rb +7 -20
  68. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/defs_node.rb +2 -2
  69. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/gvasgn_node.rb +1 -1
  70. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/ivasgn_node.rb +2 -2
  71. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/lvasgn_node.rb +4 -4
  72. data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +53 -0
  73. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/namespace_node.rb +2 -2
  74. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/orasgn_node.rb +1 -1
  75. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/resbody_node.rb +3 -3
  76. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/sclass_node.rb +1 -1
  77. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/send_node.rb +8 -6
  78. data/lib/solargraph/parser/{rubyvm → parser_gem}/node_processors/sym_node.rb +1 -1
  79. data/lib/solargraph/parser/parser_gem/node_processors.rb +56 -0
  80. data/lib/solargraph/parser/parser_gem.rb +12 -0
  81. data/lib/solargraph/parser/region.rb +1 -1
  82. data/lib/solargraph/parser/snippet.rb +2 -0
  83. data/lib/solargraph/parser.rb +8 -12
  84. data/lib/solargraph/pin/base.rb +78 -10
  85. data/lib/solargraph/pin/base_variable.rb +40 -7
  86. data/lib/solargraph/pin/block.rb +69 -46
  87. data/lib/solargraph/pin/callable.rb +147 -0
  88. data/lib/solargraph/pin/closure.rb +23 -3
  89. data/lib/solargraph/pin/common.rb +6 -6
  90. data/lib/solargraph/pin/conversions.rb +36 -5
  91. data/lib/solargraph/pin/delegated_method.rb +6 -2
  92. data/lib/solargraph/pin/documenting.rb +25 -32
  93. data/lib/solargraph/pin/instance_variable.rb +6 -2
  94. data/lib/solargraph/pin/local_variable.rb +13 -1
  95. data/lib/solargraph/pin/method.rb +205 -32
  96. data/lib/solargraph/pin/namespace.rb +20 -7
  97. data/lib/solargraph/pin/parameter.rb +41 -36
  98. data/lib/solargraph/pin/proxy_type.rb +1 -1
  99. data/lib/solargraph/pin/reference/override.rb +2 -2
  100. data/lib/solargraph/pin/reference.rb +8 -0
  101. data/lib/solargraph/pin/search.rb +3 -3
  102. data/lib/solargraph/pin/signature.rb +8 -14
  103. data/lib/solargraph/pin.rb +4 -2
  104. data/lib/solargraph/range.rb +4 -6
  105. data/lib/solargraph/rbs_map/conversions.rb +326 -76
  106. data/lib/solargraph/rbs_map/core_fills.rb +16 -33
  107. data/lib/solargraph/rbs_map/core_map.rb +3 -13
  108. data/lib/solargraph/rbs_map/stdlib_map.rb +2 -8
  109. data/lib/solargraph/rbs_map.rb +32 -13
  110. data/lib/solargraph/shell.rb +95 -72
  111. data/lib/solargraph/source/chain/array.rb +33 -0
  112. data/lib/solargraph/source/chain/block_symbol.rb +13 -0
  113. data/lib/solargraph/source/chain/block_variable.rb +1 -1
  114. data/lib/solargraph/source/chain/call.rb +152 -69
  115. data/lib/solargraph/source/chain/constant.rb +15 -1
  116. data/lib/solargraph/source/chain/if.rb +23 -0
  117. data/lib/solargraph/source/chain/link.rb +17 -2
  118. data/lib/solargraph/source/chain/or.rb +2 -2
  119. data/lib/solargraph/source/chain/z_super.rb +3 -3
  120. data/lib/solargraph/source/chain.rb +85 -26
  121. data/lib/solargraph/source/change.rb +3 -0
  122. data/lib/solargraph/source/cursor.rb +16 -2
  123. data/lib/solargraph/source/source_chainer.rb +8 -5
  124. data/lib/solargraph/source/updater.rb +1 -0
  125. data/lib/solargraph/source.rb +120 -148
  126. data/lib/solargraph/source_map/clip.rb +16 -27
  127. data/lib/solargraph/source_map/data.rb +30 -0
  128. data/lib/solargraph/source_map/mapper.rb +15 -3
  129. data/lib/solargraph/source_map.rb +48 -24
  130. data/lib/solargraph/type_checker/checks.rb +10 -2
  131. data/lib/solargraph/type_checker/rules.rb +6 -1
  132. data/lib/solargraph/type_checker.rb +150 -39
  133. data/lib/solargraph/version.rb +1 -1
  134. data/lib/solargraph/views/environment.erb +3 -5
  135. data/lib/solargraph/workspace/config.rb +9 -6
  136. data/lib/solargraph/workspace.rb +30 -3
  137. data/lib/solargraph/yard_map/cache.rb +6 -0
  138. data/lib/solargraph/yard_map/helpers.rb +1 -1
  139. data/lib/solargraph/yard_map/mapper/to_method.rb +16 -3
  140. data/lib/solargraph/yard_map/mapper.rb +1 -1
  141. data/lib/solargraph/yard_map/to_method.rb +11 -4
  142. data/lib/solargraph/yard_map.rb +1 -292
  143. data/lib/solargraph/yard_tags.rb +20 -0
  144. data/lib/solargraph/yardoc.rb +52 -0
  145. data/lib/solargraph.rb +6 -4
  146. data/solargraph.gemspec +7 -6
  147. metadata +71 -82
  148. data/lib/solargraph/api_map/bundler_methods.rb +0 -22
  149. data/lib/solargraph/documentor.rb +0 -76
  150. data/lib/solargraph/language_server/host/cataloger.rb +0 -56
  151. data/lib/solargraph/parser/legacy/node_methods.rb +0 -325
  152. data/lib/solargraph/parser/legacy/node_processors/alias_node.rb +0 -23
  153. data/lib/solargraph/parser/legacy/node_processors/args_node.rb +0 -50
  154. data/lib/solargraph/parser/legacy/node_processors/begin_node.rb +0 -15
  155. data/lib/solargraph/parser/legacy/node_processors/sym_node.rb +0 -18
  156. data/lib/solargraph/parser/legacy/node_processors.rb +0 -55
  157. data/lib/solargraph/parser/legacy.rb +0 -12
  158. data/lib/solargraph/parser/rubyvm/class_methods.rb +0 -153
  159. data/lib/solargraph/parser/rubyvm/node_chainer.rb +0 -160
  160. data/lib/solargraph/parser/rubyvm/node_methods.rb +0 -317
  161. data/lib/solargraph/parser/rubyvm/node_processors/args_node.rb +0 -85
  162. data/lib/solargraph/parser/rubyvm/node_processors/block_node.rb +0 -42
  163. data/lib/solargraph/parser/rubyvm/node_processors/casgn_node.rb +0 -33
  164. data/lib/solargraph/parser/rubyvm/node_processors/cvasgn_node.rb +0 -23
  165. data/lib/solargraph/parser/rubyvm/node_processors/def_node.rb +0 -75
  166. data/lib/solargraph/parser/rubyvm/node_processors/defs_node.rb +0 -68
  167. data/lib/solargraph/parser/rubyvm/node_processors/gvasgn_node.rb +0 -23
  168. data/lib/solargraph/parser/rubyvm/node_processors/ivasgn_node.rb +0 -38
  169. data/lib/solargraph/parser/rubyvm/node_processors/kw_arg_node.rb +0 -39
  170. data/lib/solargraph/parser/rubyvm/node_processors/lit_node.rb +0 -20
  171. data/lib/solargraph/parser/rubyvm/node_processors/lvasgn_node.rb +0 -27
  172. data/lib/solargraph/parser/rubyvm/node_processors/namespace_node.rb +0 -39
  173. data/lib/solargraph/parser/rubyvm/node_processors/opt_arg_node.rb +0 -26
  174. data/lib/solargraph/parser/rubyvm/node_processors/orasgn_node.rb +0 -15
  175. data/lib/solargraph/parser/rubyvm/node_processors/resbody_node.rb +0 -51
  176. data/lib/solargraph/parser/rubyvm/node_processors/sclass_node.rb +0 -32
  177. data/lib/solargraph/parser/rubyvm/node_processors/scope_node.rb +0 -15
  178. data/lib/solargraph/parser/rubyvm/node_processors/send_node.rb +0 -279
  179. data/lib/solargraph/parser/rubyvm/node_processors.rb +0 -64
  180. data/lib/solargraph/parser/rubyvm/node_wrapper.rb +0 -47
  181. data/lib/solargraph/parser/rubyvm.rb +0 -40
  182. data/lib/solargraph/rbs_map/core_signs.rb +0 -33
  183. data/lib/yard-solargraph.rb +0 -33
@@ -1,4 +1,5 @@
1
1
  require 'fileutils'
2
+ require 'rbs'
2
3
 
3
4
  module Solargraph
4
5
  module Cache
@@ -14,7 +15,7 @@ module Solargraph
14
15
  File.join(Dir.home, '.cache', 'solargraph')
15
16
  end
16
17
 
17
- # The working directory for the current Ruby and Solargraph versions.
18
+ # The working directory for the current Ruby, RBS, and Solargraph versions.
18
19
  #
19
20
  # @return [String]
20
21
  def work_dir
@@ -23,9 +24,21 @@ module Solargraph
23
24
  File.join(base_dir, "ruby-#{RUBY_VERSION}", "rbs-#{RBS::VERSION}", "solargraph-#{Solargraph::VERSION}")
24
25
  end
25
26
 
27
+ # Append the given path to the current cache directory (`work_dir`).
28
+ #
29
+ # @example
30
+ # Cache.join('date-3.4.1.ser')
31
+ #
32
+ # @param path [Array<String>]
33
+ # @return [String]
34
+ def join *path
35
+ File.join(work_dir, *path)
36
+ end
37
+
38
+ # @param path [Array<String>]
26
39
  # @return [Array<Solargraph::Pin::Base>, nil]
27
40
  def load *path
28
- file = File.join(work_dir, *path)
41
+ file = join(*path)
29
42
  return nil unless File.file?(file)
30
43
  Marshal.load(File.read(file, mode: 'rb'))
31
44
  rescue StandardError => e
@@ -34,17 +47,28 @@ module Solargraph
34
47
  nil
35
48
  end
36
49
 
37
- # @return [Boolean]
50
+ def exist? *path
51
+ File.file? join(*path)
52
+ end
53
+
54
+ # @param path [Array<String>]
55
+ # @param pins [Array<Pin::Base>]
56
+ # @return [void]
38
57
  def save *path, pins
39
- return false if pins.empty?
40
58
  file = File.join(work_dir, *path)
41
59
  base = File.dirname(file)
42
60
  FileUtils.mkdir_p base unless File.directory?(base)
43
61
  ser = Marshal.dump(pins)
44
62
  File.write file, ser, mode: 'wb'
45
- true
46
63
  end
47
64
 
65
+ # @return [void]
66
+ # @param path [Array<String>]
67
+ def uncache *path
68
+ FileUtils.rm_rf File.join(work_dir, *path), secure: true
69
+ end
70
+
71
+ # @return [void]
48
72
  def clear
49
73
  FileUtils.rm_rf base_dir, secure: true
50
74
  end
@@ -2,20 +2,46 @@
2
2
 
3
3
  module Solargraph
4
4
  class ComplexType
5
- # Methods for accessing type data.
5
+ # Methods for accessing type data available from
6
+ # both ComplexType and UniqueType.
6
7
  #
8
+ # @abstract This mixin relies on these -
9
+ # instance variables:
10
+ # @name: String
11
+ # @subtypes: Array<ComplexType>
12
+ # @rooted: boolish
13
+ # methods:
14
+ # transform()
15
+ # all_params()
16
+ # rooted?()
17
+ # can_root_name?()
7
18
  module TypeMethods
19
+ # @!method transform(new_name = nil, &transform_type)
20
+ # @param new_name [String, nil]
21
+ # @yieldparam t [UniqueType]
22
+ # @yieldreturn [UniqueType]
23
+ # @return [UniqueType, nil]
24
+ # @!method all_params
25
+ # @return [Array<ComplexType>]
26
+ # @!method rooted?
27
+ # @!method can_root_name?(name_to_check = nil)
28
+ # @param name_to_check [String, nil]
29
+
8
30
  # @return [String]
9
31
  attr_reader :name
10
32
 
11
- # @return [String]
12
- attr_reader :substring
33
+ # @return [Array<ComplexType>]
34
+ attr_reader :subtypes
13
35
 
14
36
  # @return [String]
15
- attr_reader :tag
37
+ def tag
38
+ @tag ||= "#{name}#{substring}"
39
+ end
16
40
 
17
- # @return [Array<ComplexType>]
18
- attr_reader :subtypes
41
+ # @return [String]
42
+ def rooted_tag
43
+ @rooted_tag ||= rooted_name + rooted_substring
44
+ end
19
45
 
20
46
  # @return [Boolean]
21
47
  def duck_type?
@@ -24,13 +50,11 @@ module Solargraph
24
50
 
25
51
  # @return [Boolean]
26
52
  def nil_type?
27
- @nil_type = (name.casecmp('nil') == 0) if @nil_type.nil?
28
- @nil_type
53
+ @nil_type ||= (name.casecmp('nil') == 0)
29
54
  end
30
55
 
31
- # @return [Boolean]
32
- def parameters?
33
- !substring.empty?
56
+ def tuple?
57
+ @tuple_type ||= (name == 'Tuple') || (name == 'Array' && subtypes.length >= 1 && fixed_parameters?)
34
58
  end
35
59
 
36
60
  def void?
@@ -45,19 +69,44 @@ module Solargraph
45
69
  name == 'undefined'
46
70
  end
47
71
 
72
+ # @param generics_to_erase [Enumerable<String>]
73
+ # @return [self]
74
+ def erase_generics(generics_to_erase)
75
+ transform do |type|
76
+ if type.name == ComplexType::GENERIC_TAG_NAME
77
+ if type.all_params.length == 1 && generics_to_erase.include?(type.all_params.first.to_s)
78
+ ComplexType::UNDEFINED
79
+ else
80
+ type
81
+ end
82
+ else
83
+ type
84
+ end
85
+ end
86
+ end
87
+
88
+ # @return [Symbol, nil]
89
+ attr_reader :parameters_type
90
+
91
+ PARAMETERS_TYPE_BY_STARTING_TAG = {
92
+ '{' => :hash,
93
+ '(' => :fixed,
94
+ '<' => :list
95
+ }.freeze
96
+
48
97
  # @return [Boolean]
49
98
  def list_parameters?
50
- substring.start_with?('<')
99
+ parameters_type == :list
51
100
  end
52
101
 
53
102
  # @return [Boolean]
54
103
  def fixed_parameters?
55
- substring.start_with?('(')
104
+ parameters_type == :fixed
56
105
  end
57
106
 
58
107
  # @return [Boolean]
59
108
  def hash_parameters?
60
- substring.start_with?('{')
109
+ parameters_type == :hash
61
110
  end
62
111
 
63
112
  # @return [Array<ComplexType>]
@@ -80,46 +129,80 @@ module Solargraph
80
129
  end.call
81
130
  end
82
131
 
83
- # @return [Symbol] :class or :instance
132
+ def namespace_type
133
+ return ComplexType.parse('::Object') if duck_type?
134
+ return ComplexType.parse('::NilClass') if nil_type?
135
+ return subtypes.first if (name == 'Class' || name == 'Module') && !subtypes.empty?
136
+ self
137
+ end
138
+
139
+ # @return [String]
140
+ def rooted_namespace
141
+ return namespace unless rooted? && can_root_name?(namespace)
142
+ "::#{namespace}"
143
+ end
144
+
145
+ # @return [String]
146
+ def rooted_name
147
+ return name unless @rooted && can_root_name?
148
+ "::#{name}"
149
+ end
150
+
151
+ # @return [String]
152
+ def substring
153
+ @substring ||= generate_substring_from(&:tags)
154
+ end
155
+
156
+ # @return [String]
157
+ def rooted_substring
158
+ @rooted_substring = generate_substring_from(&:rooted_tags)
159
+ end
160
+
161
+ # @return [String]
162
+ def generate_substring_from(&to_str)
163
+ key_types_str = key_types.map(&to_str).join(', ')
164
+ subtypes_str = subtypes.map(&to_str).join(', ')
165
+ if key_types.none?(&:defined?) && subtypes.none?(&:defined?)
166
+ ''
167
+ elsif key_types.empty? && subtypes.empty?
168
+ ''
169
+ elsif hash_parameters?
170
+ "{#{key_types_str} => #{subtypes_str}}"
171
+ elsif fixed_parameters?
172
+ "(#{subtypes_str})"
173
+ else
174
+ "<#{subtypes_str}>"
175
+ end
176
+ end
177
+
178
+ # @return [::Symbol] :class or :instance
84
179
  def scope
85
180
  @scope ||= :instance if duck_type? || nil_type?
86
181
  @scope ||= (name == 'Class' || name == 'Module') && !subtypes.empty? ? :class : :instance
87
182
  end
88
183
 
184
+ # @param other [Object]
89
185
  def == other
90
186
  return false unless self.class == other.class
91
187
  tag == other.tag
92
188
  end
93
189
 
94
- def rooted?
95
- @rooted
96
- end
97
-
98
190
  # Generate a ComplexType that fully qualifies this type's namespaces.
99
191
  #
100
192
  # @param api_map [ApiMap] The ApiMap that performs qualification
101
193
  # @param context [String] The namespace from which to resolve names
102
- # @return [ComplexType] The generated ComplexType
194
+ # @return [self, ComplexType, UniqueType] The generated ComplexType
103
195
  def qualify api_map, context = ''
104
- return self if name == 'param'
105
- return ComplexType.new([self]) if duck_type? || void? || undefined?
106
- recon = (rooted? ? '' : context)
107
- fqns = api_map.qualify(name, recon)
108
- if fqns.nil?
109
- return UniqueType::BOOLEAN if tag == 'Boolean'
110
- return UniqueType::UNDEFINED
111
- end
112
- fqns = "::#{fqns}" # Ensure the resulting complex type is rooted
113
- ltypes = key_types.map { |t| t.qualify api_map, context }.uniq
114
- rtypes = value_types.map { |t| t.qualify api_map, context }.uniq
115
- if list_parameters?
116
- Solargraph::ComplexType.parse("#{fqns}<#{rtypes.map(&:tag).join(', ')}>")
117
- elsif fixed_parameters?
118
- Solargraph::ComplexType.parse("#{fqns}(#{rtypes.map(&:tag).join(', ')})")
119
- elsif hash_parameters?
120
- Solargraph::ComplexType.parse("#{fqns}{#{ltypes.map(&:tag).join(', ')} => #{rtypes.map(&:tag).join(', ')}}")
121
- else
122
- Solargraph::ComplexType.parse(fqns)
196
+ transform do |t|
197
+ next t if t.name == GENERIC_TAG_NAME
198
+ next t if t.duck_type? || t.void? || t.undefined?
199
+ recon = (t.rooted? ? '' : context)
200
+ fqns = api_map.qualify(t.name, recon)
201
+ if fqns.nil?
202
+ next UniqueType::BOOLEAN if t.tag == 'Boolean'
203
+ next UniqueType::UNDEFINED
204
+ end
205
+ t.recreate(new_name: fqns, make_rooted: true)
123
206
  end
124
207
  end
125
208