steep 1.9.3 → 1.10.0.dev.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.
- checksums.yaml +4 -4
 - data/Steepfile +5 -2
 - data/lib/steep/annotations_helper.rb +18 -0
 - data/lib/steep/ast/ignore.rb +3 -4
 - data/lib/steep/cli.rb +98 -23
 - data/lib/steep/diagnostic/lsp_formatter.rb +14 -3
 - data/lib/steep/diagnostic/ruby.rb +75 -0
 - data/lib/steep/drivers/langserver.rb +4 -1
 - data/lib/steep/drivers/worker.rb +2 -0
 - data/lib/steep/interface/builder.rb +2 -2
 - data/lib/steep/server/custom_methods.rb +12 -0
 - data/lib/steep/server/interaction_worker.rb +14 -2
 - data/lib/steep/server/master.rb +158 -52
 - data/lib/steep/server/type_check_worker.rb +48 -2
 - data/lib/steep/server/worker_process.rb +31 -20
 - data/lib/steep/services/completion_provider.rb +24 -2
 - data/lib/steep/services/signature_service.rb +1 -1
 - data/lib/steep/services/type_check_service.rb +22 -7
 - data/lib/steep/source.rb +3 -1
 - data/lib/steep/subtyping/check.rb +22 -16
 - data/lib/steep/type_construction.rb +102 -8
 - data/lib/steep/type_inference/case_when.rb +2 -0
 - data/lib/steep/type_inference/logic_type_interpreter.rb +50 -0
 - data/lib/steep/type_inference/method_call.rb +5 -3
 - data/lib/steep/version.rb +1 -1
 - data/lib/steep.rb +7 -0
 - data/manual/ruby-diagnostics.md +114 -1
 - data/sample/Steepfile +0 -2
 - data/sample/lib/conference.rb +14 -0
 - data/sample/lib/deprecated.rb +4 -0
 - data/sample/sig/deprecated.rbs +11 -0
 - data/steep.gemspec +4 -3
 - metadata +25 -8
 
| 
         @@ -155,7 +155,6 @@ module Steep 
     | 
|
| 
       155 
155 
     | 
    
         
             
                                             definition.methods[method_name]&.yield_self do |method|
         
     | 
| 
       156 
156 
     | 
    
         
             
                                               method.method_types
         
     | 
| 
       157 
157 
     | 
    
         
             
                                                 .map {|method_type| checker.factory.method_type(method_type) }
         
     | 
| 
       158 
     | 
    
         
            -
                                                 .select {|method_type| method_type.is_a?(Interface::MethodType) }
         
     | 
| 
       159 
158 
     | 
    
         
             
                                                 .inject {|t1, t2| t1 + t2}
         
     | 
| 
       160 
159 
     | 
    
         
             
                                             end
         
     | 
| 
       161 
160 
     | 
    
         
             
                                           end
         
     | 
| 
         @@ -163,6 +162,18 @@ module Steep 
     | 
|
| 
       163 
162 
     | 
    
         | 
| 
       164 
163 
     | 
    
         
             
                  method_type = annotation_method_type || definition_method_type
         
     | 
| 
       165 
164 
     | 
    
         | 
| 
      
 165 
     | 
    
         
            +
                  unless method_type
         
     | 
| 
      
 166 
     | 
    
         
            +
                    if definition
         
     | 
| 
      
 167 
     | 
    
         
            +
                      typing.add_error(
         
     | 
| 
      
 168 
     | 
    
         
            +
                        Diagnostic::Ruby::UndeclaredMethodDefinition.new(method_name: method_name, type_name: definition.type_name, node: node)
         
     | 
| 
      
 169 
     | 
    
         
            +
                      )
         
     | 
| 
      
 170 
     | 
    
         
            +
                    else
         
     | 
| 
      
 171 
     | 
    
         
            +
                      typing.add_error(
         
     | 
| 
      
 172 
     | 
    
         
            +
                        Diagnostic::Ruby::MethodDefinitionInUndeclaredModule.new(method_name: method_name, node: node)
         
     | 
| 
      
 173 
     | 
    
         
            +
                      )
         
     | 
| 
      
 174 
     | 
    
         
            +
                    end
         
     | 
| 
      
 175 
     | 
    
         
            +
                  end
         
     | 
| 
      
 176 
     | 
    
         
            +
             
     | 
| 
       166 
177 
     | 
    
         
             
                  if (annotation_return_type = annots&.return_type) && (method_type_return_type = method_type&.type&.return_type)
         
     | 
| 
       167 
178 
     | 
    
         
             
                    check_relation(sub_type: annotation_return_type, super_type: method_type_return_type).else do |result|
         
     | 
| 
       168 
179 
     | 
    
         
             
                      typing.add_error(
         
     | 
| 
         @@ -1483,6 +1494,10 @@ module Steep 
     | 
|
| 
       1483 
1494 
     | 
    
         
             
                              Diagnostic::Ruby::UnknownConstant.new(node: name_node, name: name_node.children[1]).class!
         
     | 
| 
       1484 
1495 
     | 
    
         
             
                            )
         
     | 
| 
       1485 
1496 
     | 
    
         
             
                          end
         
     | 
| 
      
 1497 
     | 
    
         
            +
             
     | 
| 
      
 1498 
     | 
    
         
            +
                          if class_name
         
     | 
| 
      
 1499 
     | 
    
         
            +
                            check_deprecation_constant(class_name, name_node, name_node.location.expression)
         
     | 
| 
      
 1500 
     | 
    
         
            +
                          end
         
     | 
| 
       1486 
1501 
     | 
    
         
             
                        else
         
     | 
| 
       1487 
1502 
     | 
    
         
             
                          _, constr = synthesize(name_node)
         
     | 
| 
       1488 
1503 
     | 
    
         
             
                        end
         
     | 
| 
         @@ -1538,6 +1553,10 @@ module Steep 
     | 
|
| 
       1538 
1553 
     | 
    
         
             
                          _, constr, module_name = synthesize_constant_decl(name_node, name_node.children[0], name_node.children[1]) do
         
     | 
| 
       1539 
1554 
     | 
    
         
             
                            typing.add_error Diagnostic::Ruby::UnknownConstant.new(node: name_node, name: name_node.children[1]).module!
         
     | 
| 
       1540 
1555 
     | 
    
         
             
                          end
         
     | 
| 
      
 1556 
     | 
    
         
            +
             
     | 
| 
      
 1557 
     | 
    
         
            +
                          if module_name
         
     | 
| 
      
 1558 
     | 
    
         
            +
                            check_deprecation_constant(module_name, name_node, name_node.location.expression)
         
     | 
| 
      
 1559 
     | 
    
         
            +
                          end
         
     | 
| 
       1541 
1560 
     | 
    
         
             
                        else
         
     | 
| 
       1542 
1561 
     | 
    
         
             
                          _, constr = synthesize(name_node)
         
     | 
| 
       1543 
1562 
     | 
    
         
             
                        end
         
     | 
| 
         @@ -1608,6 +1627,7 @@ module Steep 
     | 
|
| 
       1608 
1627 
     | 
    
         | 
| 
       1609 
1628 
     | 
    
         
             
                        if name
         
     | 
| 
       1610 
1629 
     | 
    
         
             
                          typing.source_index.add_reference(constant: name, ref: node)
         
     | 
| 
      
 1630 
     | 
    
         
            +
                          constr.check_deprecation_constant(name, node, node.location.expression)
         
     | 
| 
       1611 
1631 
     | 
    
         
             
                        end
         
     | 
| 
       1612 
1632 
     | 
    
         | 
| 
       1613 
1633 
     | 
    
         
             
                        Pair.new(type: type, constr: constr)
         
     | 
| 
         @@ -1626,6 +1646,8 @@ module Steep 
     | 
|
| 
       1626 
1646 
     | 
    
         | 
| 
       1627 
1647 
     | 
    
         
             
                        if constant_name
         
     | 
| 
       1628 
1648 
     | 
    
         
             
                          typing.source_index.add_definition(constant: constant_name, definition: node)
         
     | 
| 
      
 1649 
     | 
    
         
            +
                          location = node.location #: Parser::Source::Map & Parser::AST::_Variable
         
     | 
| 
      
 1650 
     | 
    
         
            +
                          constr.check_deprecation_constant(constant_name, node, location.name)
         
     | 
| 
       1629 
1651 
     | 
    
         
             
                        end
         
     | 
| 
       1630 
1652 
     | 
    
         | 
| 
       1631 
1653 
     | 
    
         
             
                        value_type, constr = constr.synthesize(node.children.last, hint: constant_type)
         
     | 
| 
         @@ -2015,8 +2037,8 @@ module Steep 
     | 
|
| 
       2015 
2037 
     | 
    
         
             
                            branch_result =
         
     | 
| 
       2016 
2038 
     | 
    
         
             
                              if body
         
     | 
| 
       2017 
2039 
     | 
    
         
             
                                when_clause_constr
         
     | 
| 
       2018 
     | 
    
         
            -
                                  .for_branch(body)
         
     | 
| 
       2019 
2040 
     | 
    
         
             
                                  .update_type_env {|env| env.join(*body_envs) }
         
     | 
| 
      
 2041 
     | 
    
         
            +
                                  .for_branch(body)
         
     | 
| 
       2020 
2042 
     | 
    
         
             
                                  .tap {|constr| typing.cursor_context.set_node_context(body, constr.context) }
         
     | 
| 
       2021 
2043 
     | 
    
         
             
                                  .synthesize(body, hint: hint)
         
     | 
| 
       2022 
2044 
     | 
    
         
             
                              else
         
     | 
| 
         @@ -2040,14 +2062,16 @@ module Steep 
     | 
|
| 
       2040 
2062 
     | 
    
         | 
| 
       2041 
2063 
     | 
    
         
             
                          if els
         
     | 
| 
       2042 
2064 
     | 
    
         
             
                            branch_results << condition_constr.synthesize(els, hint: hint)
         
     | 
| 
      
 2065 
     | 
    
         
            +
                          else
         
     | 
| 
      
 2066 
     | 
    
         
            +
                            branch_results << Pair.new(type: AST::Builtin.nil_type, constr: condition_constr)
         
     | 
| 
      
 2067 
     | 
    
         
            +
                          end
         
     | 
| 
      
 2068 
     | 
    
         
            +
             
     | 
| 
      
 2069 
     | 
    
         
            +
                          branch_results.reject! do |result|
         
     | 
| 
      
 2070 
     | 
    
         
            +
                            result.type.is_a?(AST::Types::Bot)
         
     | 
| 
       2043 
2071 
     | 
    
         
             
                          end
         
     | 
| 
       2044 
2072 
     | 
    
         | 
| 
       2045 
2073 
     | 
    
         
             
                          types = branch_results.map(&:type)
         
     | 
| 
       2046 
2074 
     | 
    
         
             
                          envs = branch_results.map {|result| result.constr.context.type_env }
         
     | 
| 
       2047 
     | 
    
         
            -
             
     | 
| 
       2048 
     | 
    
         
            -
                          unless els
         
     | 
| 
       2049 
     | 
    
         
            -
                            types << AST::Builtin.nil_type
         
     | 
| 
       2050 
     | 
    
         
            -
                          end
         
     | 
| 
       2051 
2075 
     | 
    
         
             
                        end
         
     | 
| 
       2052 
2076 
     | 
    
         | 
| 
       2053 
2077 
     | 
    
         
             
                        constr = constr.update_type_env do |env|
         
     | 
| 
         @@ -2387,6 +2411,9 @@ module Steep 
     | 
|
| 
       2387 
2411 
     | 
    
         
             
                        lhs_type = context.type_env[name]
         
     | 
| 
       2388 
2412 
     | 
    
         
             
                        rhs_type, constr = synthesize(rhs, hint: lhs_type).to_ary
         
     | 
| 
       2389 
2413 
     | 
    
         | 
| 
      
 2414 
     | 
    
         
            +
                        location = node.location #: Parser::Source::Map & Parser::AST::_Variable
         
     | 
| 
      
 2415 
     | 
    
         
            +
                        constr.check_deprecation_global(name, node, location.name)
         
     | 
| 
      
 2416 
     | 
    
         
            +
             
     | 
| 
       2390 
2417 
     | 
    
         
             
                        type, constr = constr.gvasgn(node, rhs_type)
         
     | 
| 
       2391 
2418 
     | 
    
         | 
| 
       2392 
2419 
     | 
    
         
             
                        constr.add_typing(node, type: type)
         
     | 
| 
         @@ -2395,6 +2422,9 @@ module Steep 
     | 
|
| 
       2395 
2422 
     | 
    
         
             
                    when :gvar
         
     | 
| 
       2396 
2423 
     | 
    
         
             
                      yield_self do
         
     | 
| 
       2397 
2424 
     | 
    
         
             
                        name = node.children.first
         
     | 
| 
      
 2425 
     | 
    
         
            +
             
     | 
| 
      
 2426 
     | 
    
         
            +
                        check_deprecation_global(name, node, node.location.expression)
         
     | 
| 
      
 2427 
     | 
    
         
            +
             
     | 
| 
       2398 
2428 
     | 
    
         
             
                        if type = context.type_env[name]
         
     | 
| 
       2399 
2429 
     | 
    
         
             
                          add_typing(node, type: type)
         
     | 
| 
       2400 
2430 
     | 
    
         
             
                        else
         
     | 
| 
         @@ -2943,7 +2973,7 @@ module Steep 
     | 
|
| 
       2943 
2973 
     | 
    
         
             
                          nil
         
     | 
| 
       2944 
2974 
     | 
    
         
             
                        ]
         
     | 
| 
       2945 
2975 
     | 
    
         
             
                      else
         
     | 
| 
       2946 
     | 
    
         
            -
                        # No  
     | 
| 
      
 2976 
     | 
    
         
            +
                        # No nesting
         
     | 
| 
       2947 
2977 
     | 
    
         
             
                        synthesize_constant(node, nil, constant_name, &block)
         
     | 
| 
       2948 
2978 
     | 
    
         
             
                      end
         
     | 
| 
       2949 
2979 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -3207,6 +3237,18 @@ module Steep 
     | 
|
| 
       3207 
3237 
     | 
    
         
             
                  end
         
     | 
| 
       3208 
3238 
     | 
    
         
             
                end
         
     | 
| 
       3209 
3239 
     | 
    
         | 
| 
      
 3240 
     | 
    
         
            +
                def deprecated_send?(call)
         
     | 
| 
      
 3241 
     | 
    
         
            +
                  return unless call.node.type == :send || call.node.type == :csend
         
     | 
| 
      
 3242 
     | 
    
         
            +
             
     | 
| 
      
 3243 
     | 
    
         
            +
                  call.method_decls.each do |decl|
         
     | 
| 
      
 3244 
     | 
    
         
            +
                    if pair = AnnotationsHelper.deprecated_annotation?(decl.method_def.each_annotation.to_a)
         
     | 
| 
      
 3245 
     | 
    
         
            +
                      return pair
         
     | 
| 
      
 3246 
     | 
    
         
            +
                    end
         
     | 
| 
      
 3247 
     | 
    
         
            +
                  end
         
     | 
| 
      
 3248 
     | 
    
         
            +
             
     | 
| 
      
 3249 
     | 
    
         
            +
                  nil
         
     | 
| 
      
 3250 
     | 
    
         
            +
                end
         
     | 
| 
      
 3251 
     | 
    
         
            +
             
     | 
| 
       3210 
3252 
     | 
    
         
             
                def type_send_interface(node, interface:, receiver:, receiver_type:, method_name:, arguments:, block_params:, block_body:, tapp:, hint:)
         
     | 
| 
       3211 
3253 
     | 
    
         
             
                  method = interface.methods[method_name]
         
     | 
| 
       3212 
3254 
     | 
    
         | 
| 
         @@ -3260,6 +3302,20 @@ module Steep 
     | 
|
| 
       3260 
3302 
     | 
    
         
             
                            end
         
     | 
| 
       3261 
3303 
     | 
    
         
             
                          end
         
     | 
| 
       3262 
3304 
     | 
    
         
             
                        end
         
     | 
| 
      
 3305 
     | 
    
         
            +
             
     | 
| 
      
 3306 
     | 
    
         
            +
                        if (_, message = deprecated_send?(call))
         
     | 
| 
      
 3307 
     | 
    
         
            +
                          send_node, _ = deconstruct_sendish_and_block_nodes(node)
         
     | 
| 
      
 3308 
     | 
    
         
            +
                          send_node or raise
         
     | 
| 
      
 3309 
     | 
    
         
            +
                          _, _, _, loc = deconstruct_send_node!(send_node)
         
     | 
| 
      
 3310 
     | 
    
         
            +
             
     | 
| 
      
 3311 
     | 
    
         
            +
                          constr.typing.add_error(
         
     | 
| 
      
 3312 
     | 
    
         
            +
                            Diagnostic::Ruby::DeprecatedReference.new(
         
     | 
| 
      
 3313 
     | 
    
         
            +
                              node: node,
         
     | 
| 
      
 3314 
     | 
    
         
            +
                              location: loc.selector,
         
     | 
| 
      
 3315 
     | 
    
         
            +
                              message: message
         
     | 
| 
      
 3316 
     | 
    
         
            +
                            )
         
     | 
| 
      
 3317 
     | 
    
         
            +
                          )
         
     | 
| 
      
 3318 
     | 
    
         
            +
                        end
         
     | 
| 
       3263 
3319 
     | 
    
         
             
                      end
         
     | 
| 
       3264 
3320 
     | 
    
         | 
| 
       3265 
3321 
     | 
    
         
             
                      if node.type == :csend || ((node.type == :block || node.type == :numblock) && node.children[0].type == :csend)
         
     | 
| 
         @@ -4440,7 +4496,7 @@ module Steep 
     | 
|
| 
       4440 
4496 
     | 
    
         | 
| 
       4441 
4497 
     | 
    
         
             
                  param_types = param_types_hash.each.with_object({}) do |pair, hash| #$ Hash[Symbol, [AST::Types::t, AST::Types::t?]]
         
     | 
| 
       4442 
4498 
     | 
    
         
             
                    name, type = pair
         
     | 
| 
       4443 
     | 
    
         
            -
                    # skip  
     | 
| 
      
 4499 
     | 
    
         
            +
                    # skip unnamed arguments `*`, `**` and `&`
         
     | 
| 
       4444 
4500 
     | 
    
         
             
                    next if name.nil?
         
     | 
| 
       4445 
4501 
     | 
    
         
             
                    hash[name] = [type, nil]
         
     | 
| 
       4446 
4502 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -5166,5 +5222,43 @@ module Steep 
     | 
|
| 
       5166 
5222 
     | 
    
         
             
                    end
         
     | 
| 
       5167 
5223 
     | 
    
         
             
                  end
         
     | 
| 
       5168 
5224 
     | 
    
         
             
                end
         
     | 
| 
      
 5225 
     | 
    
         
            +
             
     | 
| 
      
 5226 
     | 
    
         
            +
                def check_deprecation_global(name, node, location)
         
     | 
| 
      
 5227 
     | 
    
         
            +
                  if global_entry = checker.factory.env.global_decls[name]
         
     | 
| 
      
 5228 
     | 
    
         
            +
                    if (_, message = AnnotationsHelper.deprecated_annotation?(global_entry.decl.annotations))
         
     | 
| 
      
 5229 
     | 
    
         
            +
                      typing.add_error(
         
     | 
| 
      
 5230 
     | 
    
         
            +
                        Diagnostic::Ruby::DeprecatedReference.new(
         
     | 
| 
      
 5231 
     | 
    
         
            +
                          node: node,
         
     | 
| 
      
 5232 
     | 
    
         
            +
                          location: location,
         
     | 
| 
      
 5233 
     | 
    
         
            +
                          message: message
         
     | 
| 
      
 5234 
     | 
    
         
            +
                        )
         
     | 
| 
      
 5235 
     | 
    
         
            +
                      )
         
     | 
| 
      
 5236 
     | 
    
         
            +
                    end
         
     | 
| 
      
 5237 
     | 
    
         
            +
                  end
         
     | 
| 
      
 5238 
     | 
    
         
            +
                end
         
     | 
| 
      
 5239 
     | 
    
         
            +
             
     | 
| 
      
 5240 
     | 
    
         
            +
                def check_deprecation_constant(name, node, location)
         
     | 
| 
      
 5241 
     | 
    
         
            +
                  entry = checker.builder.factory.env.constant_entry(name)
         
     | 
| 
      
 5242 
     | 
    
         
            +
             
     | 
| 
      
 5243 
     | 
    
         
            +
                  annotations =
         
     | 
| 
      
 5244 
     | 
    
         
            +
                    case entry
         
     | 
| 
      
 5245 
     | 
    
         
            +
                    when RBS::Environment::ModuleEntry, RBS::Environment::ClassEntry
         
     | 
| 
      
 5246 
     | 
    
         
            +
                      entry.decls.flat_map { _1.decl.annotations }
         
     | 
| 
      
 5247 
     | 
    
         
            +
                    when RBS::Environment::ConstantEntry, RBS::Environment::ClassAliasEntry, RBS::Environment::ModuleAliasEntry
         
     | 
| 
      
 5248 
     | 
    
         
            +
                      entry.decl.annotations
         
     | 
| 
      
 5249 
     | 
    
         
            +
                    end
         
     | 
| 
      
 5250 
     | 
    
         
            +
             
     | 
| 
      
 5251 
     | 
    
         
            +
                  if annotations
         
     | 
| 
      
 5252 
     | 
    
         
            +
                    if (_, message = AnnotationsHelper.deprecated_annotation?(annotations))
         
     | 
| 
      
 5253 
     | 
    
         
            +
                      typing.add_error(
         
     | 
| 
      
 5254 
     | 
    
         
            +
                        Diagnostic::Ruby::DeprecatedReference.new(
         
     | 
| 
      
 5255 
     | 
    
         
            +
                          node: node,
         
     | 
| 
      
 5256 
     | 
    
         
            +
                          location: location,
         
     | 
| 
      
 5257 
     | 
    
         
            +
                          message: message
         
     | 
| 
      
 5258 
     | 
    
         
            +
                        )
         
     | 
| 
      
 5259 
     | 
    
         
            +
                      )
         
     | 
| 
      
 5260 
     | 
    
         
            +
                    end
         
     | 
| 
      
 5261 
     | 
    
         
            +
                  end
         
     | 
| 
      
 5262 
     | 
    
         
            +
                end
         
     | 
| 
       5169 
5263 
     | 
    
         
             
              end
         
     | 
| 
       5170 
5264 
     | 
    
         
             
            end
         
     | 
| 
         @@ -169,6 +169,14 @@ module Steep 
     | 
|
| 
       169 
169 
     | 
    
         
             
                          return [truthy_result, falsy_result]
         
     | 
| 
       170 
170 
     | 
    
         
             
                        end
         
     | 
| 
       171 
171 
     | 
    
         
             
                      else
         
     | 
| 
      
 172 
     | 
    
         
            +
                        receiver, *_ = node.children
         
     | 
| 
      
 173 
     | 
    
         
            +
                        receiver_type = typing.type_of(node: receiver) if receiver
         
     | 
| 
      
 174 
     | 
    
         
            +
             
     | 
| 
      
 175 
     | 
    
         
            +
                        if env[receiver] && receiver_type.is_a?(AST::Types::Union)
         
     | 
| 
      
 176 
     | 
    
         
            +
                          result = evaluate_union_method_call(node: node, env: env, receiver: receiver, receiver_type: receiver_type)
         
     | 
| 
      
 177 
     | 
    
         
            +
                          return result if result
         
     | 
| 
      
 178 
     | 
    
         
            +
                        end
         
     | 
| 
      
 179 
     | 
    
         
            +
             
     | 
| 
       172 
180 
     | 
    
         
             
                        if env[node]
         
     | 
| 
       173 
181 
     | 
    
         
             
                          truthy_type, falsy_type = factory.partition_union(type)
         
     | 
| 
       174 
182 
     | 
    
         | 
| 
         @@ -408,6 +416,48 @@ module Steep 
     | 
|
| 
       408 
416 
     | 
    
         
             
                    end
         
     | 
| 
       409 
417 
     | 
    
         
             
                  end
         
     | 
| 
       410 
418 
     | 
    
         | 
| 
      
 419 
     | 
    
         
            +
                  def evaluate_union_method_call(node:, env:, receiver:, receiver_type:)
         
     | 
| 
      
 420 
     | 
    
         
            +
                    call_type = typing.call_of(node: node) rescue nil
         
     | 
| 
      
 421 
     | 
    
         
            +
                    return unless call_type.is_a?(Steep::TypeInference::MethodCall::Typed)
         
     | 
| 
      
 422 
     | 
    
         
            +
             
     | 
| 
      
 423 
     | 
    
         
            +
                    truthy_types = [] #: Array[AST::Types::t]
         
     | 
| 
      
 424 
     | 
    
         
            +
                    falsy_types = [] #: Array[AST::Types::t]
         
     | 
| 
      
 425 
     | 
    
         
            +
             
     | 
| 
      
 426 
     | 
    
         
            +
                    receiver_type.types.each do |type|
         
     | 
| 
      
 427 
     | 
    
         
            +
                      if shape = subtyping.builder.shape(type, config)
         
     | 
| 
      
 428 
     | 
    
         
            +
                        method = shape.methods[call_type.method_name] or raise
         
     | 
| 
      
 429 
     | 
    
         
            +
                        method_type = method.method_types.find do |method_type|
         
     | 
| 
      
 430 
     | 
    
         
            +
                          call_type.method_decls.any? {|decl| factory.method_type(decl.method_type) == method_type }
         
     | 
| 
      
 431 
     | 
    
         
            +
                        end
         
     | 
| 
      
 432 
     | 
    
         
            +
                        if method_type
         
     | 
| 
      
 433 
     | 
    
         
            +
                          return_type = method_type.type.return_type
         
     | 
| 
      
 434 
     | 
    
         
            +
                          truthy, falsy = factory.partition_union(return_type)
         
     | 
| 
      
 435 
     | 
    
         
            +
                          truthy_types << type if truthy
         
     | 
| 
      
 436 
     | 
    
         
            +
                          falsy_types << type if falsy
         
     | 
| 
      
 437 
     | 
    
         
            +
                          next
         
     | 
| 
      
 438 
     | 
    
         
            +
                        end
         
     | 
| 
      
 439 
     | 
    
         
            +
                      end
         
     | 
| 
      
 440 
     | 
    
         
            +
             
     | 
| 
      
 441 
     | 
    
         
            +
                      truthy_types << type
         
     | 
| 
      
 442 
     | 
    
         
            +
                      falsy_types << type
         
     | 
| 
      
 443 
     | 
    
         
            +
                    end
         
     | 
| 
      
 444 
     | 
    
         
            +
             
     | 
| 
      
 445 
     | 
    
         
            +
                    truthy_type = truthy_types.empty? ? BOT : AST::Types::Union.build(types: truthy_types)
         
     | 
| 
      
 446 
     | 
    
         
            +
                    falsy_type = falsy_types.empty? ? BOT : AST::Types::Union.build(types: falsy_types)
         
     | 
| 
      
 447 
     | 
    
         
            +
             
     | 
| 
      
 448 
     | 
    
         
            +
                    truthy_env, falsy_env = refine_node_type(
         
     | 
| 
      
 449 
     | 
    
         
            +
                      env: env,
         
     | 
| 
      
 450 
     | 
    
         
            +
                      node: receiver,
         
     | 
| 
      
 451 
     | 
    
         
            +
                      truthy_type: truthy_type,
         
     | 
| 
      
 452 
     | 
    
         
            +
                      falsy_type: falsy_type
         
     | 
| 
      
 453 
     | 
    
         
            +
                    )
         
     | 
| 
      
 454 
     | 
    
         
            +
             
     | 
| 
      
 455 
     | 
    
         
            +
                    return [
         
     | 
| 
      
 456 
     | 
    
         
            +
                      Result.new(type: truthy_type, env: truthy_env, unreachable: truthy_type.nil?),
         
     | 
| 
      
 457 
     | 
    
         
            +
                      Result.new(type: falsy_type, env: falsy_env, unreachable: falsy_type.nil?)
         
     | 
| 
      
 458 
     | 
    
         
            +
                    ]
         
     | 
| 
      
 459 
     | 
    
         
            +
                  end
         
     | 
| 
      
 460 
     | 
    
         
            +
             
     | 
| 
       411 
461 
     | 
    
         
             
                  def decompose_value(node)
         
     | 
| 
       412 
462 
     | 
    
         
             
                    case node.type
         
     | 
| 
       413 
463 
     | 
    
         
             
                    when :lvar
         
     | 
| 
         @@ -124,12 +124,14 @@ module Steep 
     | 
|
| 
       124 
124 
     | 
    
         | 
| 
       125 
125 
     | 
    
         
             
                    def pure?
         
     | 
| 
       126 
126 
     | 
    
         
             
                      method_decls.all? do |method_decl|
         
     | 
| 
       127 
     | 
    
         
            -
                        case  
     | 
| 
       128 
     | 
    
         
            -
                        when RBS::AST::Members::MethodDefinition
         
     | 
| 
       129 
     | 
    
         
            -
                          member.annotations.any? {|annotation| annotation.string == "pure" }
         
     | 
| 
      
 127 
     | 
    
         
            +
                        case method_decl.method_def.member
         
     | 
| 
       130 
128 
     | 
    
         
             
                        when RBS::AST::Members::Attribute
         
     | 
| 
       131 
129 
     | 
    
         
             
                          # The attribute writer is not pure
         
     | 
| 
       132 
130 
     | 
    
         
             
                          !method_decl.method_name.method_name.end_with?("=")
         
     | 
| 
      
 131 
     | 
    
         
            +
                        else
         
     | 
| 
      
 132 
     | 
    
         
            +
                          method_decl.method_def.each_annotation.any? do |annotation|
         
     | 
| 
      
 133 
     | 
    
         
            +
                            annotation.string == "pure"
         
     | 
| 
      
 134 
     | 
    
         
            +
                          end
         
     | 
| 
       133 
135 
     | 
    
         
             
                        end
         
     | 
| 
       134 
136 
     | 
    
         
             
                      end
         
     | 
| 
       135 
137 
     | 
    
         
             
                    end
         
     | 
    
        data/lib/steep/version.rb
    CHANGED
    
    
    
        data/lib/steep.rb
    CHANGED
    
    | 
         @@ -17,6 +17,7 @@ require "yaml" 
     | 
|
| 
       17 
17 
     | 
    
         
             
            require "securerandom"
         
     | 
| 
       18 
18 
     | 
    
         
             
            require "base64"
         
     | 
| 
       19 
19 
     | 
    
         
             
            require "time"
         
     | 
| 
      
 20 
     | 
    
         
            +
            require 'socket'
         
     | 
| 
       20 
21 
     | 
    
         | 
| 
       21 
22 
     | 
    
         
             
            require "concurrent/utility/processor_counter"
         
     | 
| 
       22 
23 
     | 
    
         
             
            require "terminal-table"
         
     | 
| 
         @@ -151,6 +152,8 @@ require "steep/drivers/vendor" 
     | 
|
| 
       151 
152 
     | 
    
         
             
            require "steep/drivers/worker"
         
     | 
| 
       152 
153 
     | 
    
         
             
            require "steep/drivers/diagnostic_printer"
         
     | 
| 
       153 
154 
     | 
    
         | 
| 
      
 155 
     | 
    
         
            +
            require "steep/annotations_helper"
         
     | 
| 
      
 156 
     | 
    
         
            +
             
     | 
| 
       154 
157 
     | 
    
         
             
            if ENV["NO_COLOR"]
         
     | 
| 
       155 
158 
     | 
    
         
             
              Rainbow.enabled = false
         
     | 
| 
       156 
159 
     | 
    
         
             
            end
         
     | 
| 
         @@ -226,6 +229,10 @@ module Steep 
     | 
|
| 
       226 
229 
     | 
    
         
             
                end
         
     | 
| 
       227 
230 
     | 
    
         
             
              end
         
     | 
| 
       228 
231 
     | 
    
         | 
| 
      
 232 
     | 
    
         
            +
              def self.can_fork?
         
     | 
| 
      
 233 
     | 
    
         
            +
                defined?(fork)
         
     | 
| 
      
 234 
     | 
    
         
            +
              end
         
     | 
| 
      
 235 
     | 
    
         
            +
             
     | 
| 
       229 
236 
     | 
    
         
             
              class Sampler
         
     | 
| 
       230 
237 
     | 
    
         
             
                def initialize()
         
     | 
| 
       231 
238 
     | 
    
         
             
                  @samples = []
         
     | 
    
        data/manual/ruby-diagnostics.md
    CHANGED
    
    | 
         @@ -40,7 +40,7 @@ A type annotation has a syntax error. 
     | 
|
| 
       40 
40 
     | 
    
         
             
            ### Ruby code
         
     | 
| 
       41 
41 
     | 
    
         | 
| 
       42 
42 
     | 
    
         
             
            ```ruby
         
     | 
| 
       43 
     | 
    
         
            -
            # @type var foo: () -> 
     | 
| 
      
 43 
     | 
    
         
            +
            # @type var foo: () ->
         
     | 
| 
       44 
44 
     | 
    
         
             
            ```
         
     | 
| 
       45 
45 
     | 
    
         | 
| 
       46 
46 
     | 
    
         
             
            ### Diagnostic
         
     | 
| 
         @@ -237,6 +237,52 @@ test.rb:4:6: [error] ::Kernel is declared as a module in RBS 
     | 
|
| 
       237 
237 
     | 
    
         
             
            | - | - | - | - | - |
         
     | 
| 
       238 
238 
     | 
    
         
             
            | error | error | error | - | - |
         
     | 
| 
       239 
239 
     | 
    
         | 
| 
      
 240 
     | 
    
         
            +
            <a name='Ruby::DeprecatedReference'></a>
         
     | 
| 
      
 241 
     | 
    
         
            +
            ## Ruby::DeprecatedReference
         
     | 
| 
      
 242 
     | 
    
         
            +
             
     | 
| 
      
 243 
     | 
    
         
            +
            Method call or constant reference is deprecated.
         
     | 
| 
      
 244 
     | 
    
         
            +
             
     | 
| 
      
 245 
     | 
    
         
            +
            ### RBS
         
     | 
| 
      
 246 
     | 
    
         
            +
             
     | 
| 
      
 247 
     | 
    
         
            +
            ```rbs
         
     | 
| 
      
 248 
     | 
    
         
            +
            %a{deprecated} class Foo end
         
     | 
| 
      
 249 
     | 
    
         
            +
             
     | 
| 
      
 250 
     | 
    
         
            +
            class Bar
         
     | 
| 
      
 251 
     | 
    
         
            +
              %a{deprecated: since v0.9} def self.bar: () -> void
         
     | 
| 
      
 252 
     | 
    
         
            +
            end
         
     | 
| 
      
 253 
     | 
    
         
            +
            ```
         
     | 
| 
      
 254 
     | 
    
         
            +
             
     | 
| 
      
 255 
     | 
    
         
            +
            ### Ruby code
         
     | 
| 
      
 256 
     | 
    
         
            +
             
     | 
| 
      
 257 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 258 
     | 
    
         
            +
            Foo
         
     | 
| 
      
 259 
     | 
    
         
            +
             
     | 
| 
      
 260 
     | 
    
         
            +
            Bar.bar()
         
     | 
| 
      
 261 
     | 
    
         
            +
            ```
         
     | 
| 
      
 262 
     | 
    
         
            +
             
     | 
| 
      
 263 
     | 
    
         
            +
            ### Diagnostic
         
     | 
| 
      
 264 
     | 
    
         
            +
             
     | 
| 
      
 265 
     | 
    
         
            +
            ```
         
     | 
| 
      
 266 
     | 
    
         
            +
            lib/deprecated.rb:1:0: [warning] The constant is deprecated
         
     | 
| 
      
 267 
     | 
    
         
            +
            │ Diagnostic ID: Ruby::DeprecatedReference
         
     | 
| 
      
 268 
     | 
    
         
            +
            │
         
     | 
| 
      
 269 
     | 
    
         
            +
            └ Foo
         
     | 
| 
      
 270 
     | 
    
         
            +
              ~~~
         
     | 
| 
      
 271 
     | 
    
         
            +
             
     | 
| 
      
 272 
     | 
    
         
            +
            lib/deprecated.rb:3:4: [warning] The method is deprecated: since v0.9
         
     | 
| 
      
 273 
     | 
    
         
            +
            │ Diagnostic ID: Ruby::DeprecatedReference
         
     | 
| 
      
 274 
     | 
    
         
            +
            │
         
     | 
| 
      
 275 
     | 
    
         
            +
            └ Bar.bar()
         
     | 
| 
      
 276 
     | 
    
         
            +
                  ~~~
         
     | 
| 
      
 277 
     | 
    
         
            +
            ```
         
     | 
| 
      
 278 
     | 
    
         
            +
             
     | 
| 
      
 279 
     | 
    
         
            +
             
     | 
| 
      
 280 
     | 
    
         
            +
            ### Severity
         
     | 
| 
      
 281 
     | 
    
         
            +
             
     | 
| 
      
 282 
     | 
    
         
            +
            | all_error | strict | default | lenient | silent |
         
     | 
| 
      
 283 
     | 
    
         
            +
            | - | - | - | - | - |
         
     | 
| 
      
 284 
     | 
    
         
            +
            | error | warning | warning | warning | - |
         
     | 
| 
      
 285 
     | 
    
         
            +
             
     | 
| 
       240 
286 
     | 
    
         
             
            <a name='Ruby::DifferentMethodParameterKind'></a>
         
     | 
| 
       241 
287 
     | 
    
         
             
            ## Ruby::DifferentMethodParameterKind
         
     | 
| 
       242 
288 
     | 
    
         | 
| 
         @@ -703,6 +749,36 @@ test.rb:2:6: [error] Cannot allow method body have type `::Integer` because decl 
     | 
|
| 
       703 
749 
     | 
    
         
             
            | - | - | - | - | - |
         
     | 
| 
       704 
750 
     | 
    
         
             
            | error | error | error | warning | - |
         
     | 
| 
       705 
751 
     | 
    
         | 
| 
      
 752 
     | 
    
         
            +
            <a name='Ruby::MethodDefinitionInUndeclaredModule'></a>
         
     | 
| 
      
 753 
     | 
    
         
            +
            ## Ruby::MethodDefinitionInUndeclaredModule
         
     | 
| 
      
 754 
     | 
    
         
            +
             
     | 
| 
      
 755 
     | 
    
         
            +
            A `def` syntax doesn't have method type because the module/class is undefined in RBS.
         
     | 
| 
      
 756 
     | 
    
         
            +
             
     | 
| 
      
 757 
     | 
    
         
            +
            ### Ruby code
         
     | 
| 
      
 758 
     | 
    
         
            +
             
     | 
| 
      
 759 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 760 
     | 
    
         
            +
            class UndeclaredClass
         
     | 
| 
      
 761 
     | 
    
         
            +
              def to_s = 123
         
     | 
| 
      
 762 
     | 
    
         
            +
            end
         
     | 
| 
      
 763 
     | 
    
         
            +
            ```
         
     | 
| 
      
 764 
     | 
    
         
            +
             
     | 
| 
      
 765 
     | 
    
         
            +
            ### Diagnostic
         
     | 
| 
      
 766 
     | 
    
         
            +
             
     | 
| 
      
 767 
     | 
    
         
            +
            ```
         
     | 
| 
      
 768 
     | 
    
         
            +
            test.rb:2:6: [error] Method `to_s` is defined in undeclared module
         
     | 
| 
      
 769 
     | 
    
         
            +
            │ Diagnostic ID: Ruby::MethodDefinitionInUndeclaredModule
         
     | 
| 
      
 770 
     | 
    
         
            +
            │
         
     | 
| 
      
 771 
     | 
    
         
            +
            └   def to_s = 123
         
     | 
| 
      
 772 
     | 
    
         
            +
                    ~~~~
         
     | 
| 
      
 773 
     | 
    
         
            +
            ```
         
     | 
| 
      
 774 
     | 
    
         
            +
             
     | 
| 
      
 775 
     | 
    
         
            +
             
     | 
| 
      
 776 
     | 
    
         
            +
            ### Severity
         
     | 
| 
      
 777 
     | 
    
         
            +
             
     | 
| 
      
 778 
     | 
    
         
            +
            | all_error | strict | default | lenient | silent |
         
     | 
| 
      
 779 
     | 
    
         
            +
            | - | - | - | - | - |
         
     | 
| 
      
 780 
     | 
    
         
            +
            | error | warning | information | hint | - |
         
     | 
| 
      
 781 
     | 
    
         
            +
             
     | 
| 
       706 
782 
     | 
    
         
             
            <a name='Ruby::MethodDefinitionMissing'></a>
         
     | 
| 
       707 
783 
     | 
    
         
             
            ## Ruby::MethodDefinitionMissing
         
     | 
| 
       708 
784 
     | 
    
         | 
| 
         @@ -1235,6 +1311,43 @@ test.rb:2:4: [error] Empty hash doesn't have type annotation 
     | 
|
| 
       1235 
1311 
     | 
    
         
             
            | - | - | - | - | - |
         
     | 
| 
       1236 
1312 
     | 
    
         
             
            | error | error | warning | hint | - |
         
     | 
| 
       1237 
1313 
     | 
    
         | 
| 
      
 1314 
     | 
    
         
            +
            <a name='Ruby::UndeclaredMethodDefinition'></a>
         
     | 
| 
      
 1315 
     | 
    
         
            +
            ## Ruby::UndeclaredMethodDefinition
         
     | 
| 
      
 1316 
     | 
    
         
            +
             
     | 
| 
      
 1317 
     | 
    
         
            +
            A `def` syntax doesn't have corresponding RBS method definition.
         
     | 
| 
      
 1318 
     | 
    
         
            +
             
     | 
| 
      
 1319 
     | 
    
         
            +
            ### RBS
         
     | 
| 
      
 1320 
     | 
    
         
            +
             
     | 
| 
      
 1321 
     | 
    
         
            +
            ```rbs
         
     | 
| 
      
 1322 
     | 
    
         
            +
            class Foo
         
     | 
| 
      
 1323 
     | 
    
         
            +
            end
         
     | 
| 
      
 1324 
     | 
    
         
            +
            ```
         
     | 
| 
      
 1325 
     | 
    
         
            +
             
     | 
| 
      
 1326 
     | 
    
         
            +
            ### Ruby code
         
     | 
| 
      
 1327 
     | 
    
         
            +
             
     | 
| 
      
 1328 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 1329 
     | 
    
         
            +
            class Foo
         
     | 
| 
      
 1330 
     | 
    
         
            +
              def undeclared = nil
         
     | 
| 
      
 1331 
     | 
    
         
            +
            end
         
     | 
| 
      
 1332 
     | 
    
         
            +
            ```
         
     | 
| 
      
 1333 
     | 
    
         
            +
             
     | 
| 
      
 1334 
     | 
    
         
            +
            ### Diagnostic
         
     | 
| 
      
 1335 
     | 
    
         
            +
             
     | 
| 
      
 1336 
     | 
    
         
            +
            ```
         
     | 
| 
      
 1337 
     | 
    
         
            +
            test.rb:2:6: [error] Method `::Foo#undeclared` is not declared in RBS
         
     | 
| 
      
 1338 
     | 
    
         
            +
            │ Diagnostic ID: Ruby::UndeclaredMethodDefinition
         
     | 
| 
      
 1339 
     | 
    
         
            +
            │
         
     | 
| 
      
 1340 
     | 
    
         
            +
            └   def undeclared = nil
         
     | 
| 
      
 1341 
     | 
    
         
            +
                    ~~~~~~~~~~
         
     | 
| 
      
 1342 
     | 
    
         
            +
            ```
         
     | 
| 
      
 1343 
     | 
    
         
            +
             
     | 
| 
      
 1344 
     | 
    
         
            +
             
     | 
| 
      
 1345 
     | 
    
         
            +
            ### Severity
         
     | 
| 
      
 1346 
     | 
    
         
            +
             
     | 
| 
      
 1347 
     | 
    
         
            +
            | all_error | strict | default | lenient | silent |
         
     | 
| 
      
 1348 
     | 
    
         
            +
            | - | - | - | - | - |
         
     | 
| 
      
 1349 
     | 
    
         
            +
            | error | warning | warning | information | - |
         
     | 
| 
      
 1350 
     | 
    
         
            +
             
     | 
| 
       1238 
1351 
     | 
    
         
             
            <a name='Ruby::UnexpectedBlockGiven'></a>
         
     | 
| 
       1239 
1352 
     | 
    
         
             
            ## Ruby::UnexpectedBlockGiven
         
     | 
| 
       1240 
1353 
     | 
    
         | 
    
        data/sample/Steepfile
    CHANGED
    
    | 
         @@ -5,8 +5,6 @@ target :lib do 
     | 
|
| 
       5 
5 
     | 
    
         | 
| 
       6 
6 
     | 
    
         
             
              check "lib"                       # Directory name
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
     | 
    
         
            -
              library "rbs"
         
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
8 
     | 
    
         
             
              # configure_code_diagnostics(D::Ruby.strict)       # `strict` diagnostics setting
         
     | 
| 
       11 
9 
     | 
    
         
             
              # configure_code_diagnostics(D::Ruby.lenient)      # `lenient` diagnostics setting
         
     | 
| 
       12 
10 
     | 
    
         
             
              # configure_code_diagnostics(D::Ruby.silent)       # `silent` diagnostics setting
         
     | 
    
        data/sample/lib/conference.rb
    CHANGED
    
    | 
         @@ -7,19 +7,33 @@ class Conference 
     | 
|
| 
       7 
7 
     | 
    
         
             
                @title = title
         
     | 
| 
       8 
8 
     | 
    
         
             
                @year = year
         
     | 
| 
       9 
9 
     | 
    
         
             
              end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
              def hello_world
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              end
         
     | 
| 
       10 
14 
     | 
    
         
             
            end
         
     | 
| 
       11 
15 
     | 
    
         | 
| 
       12 
16 
     | 
    
         
             
            Conference.new()
         
     | 
| 
       13 
17 
     | 
    
         | 
| 
       14 
18 
     | 
    
         
             
            Konference.new()
         
     | 
| 
       15 
19 
     | 
    
         | 
| 
      
 20 
     | 
    
         
            +
            class Hogehogehoge
         
     | 
| 
      
 21 
     | 
    
         
            +
              def to_s = 123
         
     | 
| 
       16 
22 
     | 
    
         | 
| 
      
 23 
     | 
    
         
            +
              def foo = 23
         
     | 
| 
      
 24 
     | 
    
         
            +
            end
         
     | 
| 
       17 
25 
     | 
    
         | 
| 
       18 
26 
     | 
    
         
             
            # @type var foo: Konference
         
     | 
| 
       19 
27 
     | 
    
         | 
| 
       20 
28 
     | 
    
         
             
            foo = Conference.new
         
     | 
| 
       21 
29 
     | 
    
         | 
| 
      
 30 
     | 
    
         
            +
            class Conference
         
     | 
| 
      
 31 
     | 
    
         
            +
              def hello = 123
         
     | 
| 
      
 32 
     | 
    
         
            +
            end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
       22 
34 
     | 
    
         
             
            class Conference12
         
     | 
| 
      
 35 
     | 
    
         
            +
              def hello = 123
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
       23 
37 
     | 
    
         
             
              class Integer
         
     | 
| 
       24 
38 
     | 
    
         
             
              end
         
     | 
| 
       25 
39 
     | 
    
         
             
            end
         
     | 
    
        data/steep.gemspec
    CHANGED
    
    | 
         @@ -41,10 +41,10 @@ Gem::Specification.new do |spec| 
     | 
|
| 
       41 
41 
     | 
    
         
             
              spec.add_runtime_dependency "activesupport", ">= 5.1"
         
     | 
| 
       42 
42 
     | 
    
         
             
              spec.add_runtime_dependency "rainbow", ">= 2.2.2", "< 4.0"
         
     | 
| 
       43 
43 
     | 
    
         
             
              spec.add_runtime_dependency "listen", "~> 3.0"
         
     | 
| 
       44 
     | 
    
         
            -
              spec.add_runtime_dependency "language_server-protocol", ">= 3. 
     | 
| 
       45 
     | 
    
         
            -
              spec.add_runtime_dependency "rbs", "~> 3. 
     | 
| 
      
 44 
     | 
    
         
            +
              spec.add_runtime_dependency "language_server-protocol", ">= 3.17.0.4", "< 4.0"
         
     | 
| 
      
 45 
     | 
    
         
            +
              spec.add_runtime_dependency "rbs", "~> 3.9.dev"
         
     | 
| 
       46 
46 
     | 
    
         
             
              spec.add_runtime_dependency "concurrent-ruby", ">= 1.1.10"
         
     | 
| 
       47 
     | 
    
         
            -
              spec.add_runtime_dependency "terminal-table", ">= 2", "<  
     | 
| 
      
 47 
     | 
    
         
            +
              spec.add_runtime_dependency "terminal-table", ">= 2", "< 5"
         
     | 
| 
       48 
48 
     | 
    
         
             
              spec.add_runtime_dependency "securerandom", ">= 0.1"
         
     | 
| 
       49 
49 
     | 
    
         
             
              spec.add_runtime_dependency "json", ">= 2.1.0"
         
     | 
| 
       50 
50 
     | 
    
         
             
              spec.add_runtime_dependency "logger", ">= 1.3.0"
         
     | 
| 
         @@ -52,4 +52,5 @@ Gem::Specification.new do |spec| 
     | 
|
| 
       52 
52 
     | 
    
         
             
              spec.add_runtime_dependency "strscan", ">= 1.0.0"
         
     | 
| 
       53 
53 
     | 
    
         
             
              spec.add_runtime_dependency "csv", ">= 3.0.9"
         
     | 
| 
       54 
54 
     | 
    
         
             
              spec.add_runtime_dependency "uri", ">= 0.12.0"
         
     | 
| 
      
 55 
     | 
    
         
            +
              spec.add_runtime_dependency "mutex_m", ">= 0.3.0"
         
     | 
| 
       55 
56 
     | 
    
         
             
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,13 +1,13 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: steep
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 1. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 1.10.0.dev.1
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Soutaro Matsumoto
         
     | 
| 
       8 
8 
     | 
    
         
             
            bindir: exe
         
     | 
| 
       9 
9 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       10 
     | 
    
         
            -
            date:  
     | 
| 
      
 10 
     | 
    
         
            +
            date: 2025-03-07 00:00:00.000000000 Z
         
     | 
| 
       11 
11 
     | 
    
         
             
            dependencies:
         
     | 
| 
       12 
12 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       13 
13 
     | 
    
         
             
              name: parser
         
     | 
| 
         @@ -77,7 +77,7 @@ dependencies: 
     | 
|
| 
       77 
77 
     | 
    
         
             
                requirements:
         
     | 
| 
       78 
78 
     | 
    
         
             
                - - ">="
         
     | 
| 
       79 
79 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       80 
     | 
    
         
            -
                    version:  
     | 
| 
      
 80 
     | 
    
         
            +
                    version: 3.17.0.4
         
     | 
| 
       81 
81 
     | 
    
         
             
                - - "<"
         
     | 
| 
       82 
82 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       83 
83 
     | 
    
         
             
                    version: '4.0'
         
     | 
| 
         @@ -87,7 +87,7 @@ dependencies: 
     | 
|
| 
       87 
87 
     | 
    
         
             
                requirements:
         
     | 
| 
       88 
88 
     | 
    
         
             
                - - ">="
         
     | 
| 
       89 
89 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       90 
     | 
    
         
            -
                    version:  
     | 
| 
      
 90 
     | 
    
         
            +
                    version: 3.17.0.4
         
     | 
| 
       91 
91 
     | 
    
         
             
                - - "<"
         
     | 
| 
       92 
92 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       93 
93 
     | 
    
         
             
                    version: '4.0'
         
     | 
| 
         @@ -97,14 +97,14 @@ dependencies: 
     | 
|
| 
       97 
97 
     | 
    
         
             
                requirements:
         
     | 
| 
       98 
98 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       99 
99 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       100 
     | 
    
         
            -
                    version:  
     | 
| 
      
 100 
     | 
    
         
            +
                    version: 3.9.dev
         
     | 
| 
       101 
101 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       102 
102 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       103 
103 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       104 
104 
     | 
    
         
             
                requirements:
         
     | 
| 
       105 
105 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       106 
106 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       107 
     | 
    
         
            -
                    version:  
     | 
| 
      
 107 
     | 
    
         
            +
                    version: 3.9.dev
         
     | 
| 
       108 
108 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       109 
109 
     | 
    
         
             
              name: concurrent-ruby
         
     | 
| 
       110 
110 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -128,7 +128,7 @@ dependencies: 
     | 
|
| 
       128 
128 
     | 
    
         
             
                    version: '2'
         
     | 
| 
       129 
129 
     | 
    
         
             
                - - "<"
         
     | 
| 
       130 
130 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       131 
     | 
    
         
            -
                    version: ' 
     | 
| 
      
 131 
     | 
    
         
            +
                    version: '5'
         
     | 
| 
       132 
132 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       133 
133 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       134 
134 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -138,7 +138,7 @@ dependencies: 
     | 
|
| 
       138 
138 
     | 
    
         
             
                    version: '2'
         
     | 
| 
       139 
139 
     | 
    
         
             
                - - "<"
         
     | 
| 
       140 
140 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       141 
     | 
    
         
            -
                    version: ' 
     | 
| 
      
 141 
     | 
    
         
            +
                    version: '5'
         
     | 
| 
       142 
142 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       143 
143 
     | 
    
         
             
              name: securerandom
         
     | 
| 
       144 
144 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -237,6 +237,20 @@ dependencies: 
     | 
|
| 
       237 
237 
     | 
    
         
             
                - - ">="
         
     | 
| 
       238 
238 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       239 
239 
     | 
    
         
             
                    version: 0.12.0
         
     | 
| 
      
 240 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 241 
     | 
    
         
            +
              name: mutex_m
         
     | 
| 
      
 242 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 243 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 244 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 245 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 246 
     | 
    
         
            +
                    version: 0.3.0
         
     | 
| 
      
 247 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 248 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 249 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 250 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 251 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 252 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 253 
     | 
    
         
            +
                    version: 0.3.0
         
     | 
| 
       240 
254 
     | 
    
         
             
            description: Gradual Typing for Ruby
         
     | 
| 
       241 
255 
     | 
    
         
             
            email:
         
     | 
| 
       242 
256 
     | 
    
         
             
            - matsumoto@soutaro.com
         
     | 
| 
         @@ -274,6 +288,7 @@ files: 
     | 
|
| 
       274 
288 
     | 
    
         
             
            - guides/src/nil-optional/nil-optional.md
         
     | 
| 
       275 
289 
     | 
    
         
             
            - lib/steep.rb
         
     | 
| 
       276 
290 
     | 
    
         
             
            - lib/steep/annotation_parser.rb
         
     | 
| 
      
 291 
     | 
    
         
            +
            - lib/steep/annotations_helper.rb
         
     | 
| 
       277 
292 
     | 
    
         
             
            - lib/steep/ast/annotation.rb
         
     | 
| 
       278 
293 
     | 
    
         
             
            - lib/steep/ast/annotation/collection.rb
         
     | 
| 
       279 
294 
     | 
    
         
             
            - lib/steep/ast/builtin.rb
         
     | 
| 
         @@ -402,8 +417,10 @@ files: 
     | 
|
| 
       402 
417 
     | 
    
         
             
            - manual/ruby-diagnostics.md
         
     | 
| 
       403 
418 
     | 
    
         
             
            - sample/Steepfile
         
     | 
| 
       404 
419 
     | 
    
         
             
            - sample/lib/conference.rb
         
     | 
| 
      
 420 
     | 
    
         
            +
            - sample/lib/deprecated.rb
         
     | 
| 
       405 
421 
     | 
    
         
             
            - sample/lib/length.rb
         
     | 
| 
       406 
422 
     | 
    
         
             
            - sample/sig/conference.rbs
         
     | 
| 
      
 423 
     | 
    
         
            +
            - sample/sig/deprecated.rbs
         
     | 
| 
       407 
424 
     | 
    
         
             
            - sample/sig/generics.rbs
         
     | 
| 
       408 
425 
     | 
    
         
             
            - sample/sig/length.rbs
         
     | 
| 
       409 
426 
     | 
    
         
             
            - steep.gemspec
         
     |