yoda-language-server 0.9.0 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (90) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +5 -0
  3. data/client/vscode/package-lock.json +6 -6
  4. data/client/vscode/src/check-versions.ts +5 -11
  5. data/client/vscode/src/install-tools.ts +1 -1
  6. data/lib/yoda/cli/analyze_deps.rb +46 -25
  7. data/lib/yoda/id_mask.rb +84 -0
  8. data/lib/yoda/model/descriptions/require_path_description.rb +45 -0
  9. data/lib/yoda/model/descriptions.rb +1 -0
  10. data/lib/yoda/model/node_signatures/node.rb +9 -1
  11. data/lib/yoda/model/values/literal_value.rb +3 -0
  12. data/lib/yoda/parsing/location.rb +9 -0
  13. data/lib/yoda/services/loadable_path_resolver.rb +33 -0
  14. data/lib/yoda/services.rb +1 -0
  15. data/lib/yoda/store/actions/read_project_files.rb +9 -7
  16. data/lib/yoda/store/adapters/gdbm_adapter/namespace_accessor.rb +1 -1
  17. data/lib/yoda/store/adapters/memory_adapter.rb +1 -1
  18. data/lib/yoda/store/objects/libraries_status.rb +1 -1
  19. data/lib/yoda/store/objects/library/core.rb +8 -0
  20. data/lib/yoda/store/objects/library/gem.rb +14 -3
  21. data/lib/yoda/store/objects/library/path_resolvable.rb +29 -0
  22. data/lib/yoda/store/objects/library/std.rb +9 -0
  23. data/lib/yoda/store/objects/library.rb +1 -0
  24. data/lib/yoda/store/objects/patch.rb +1 -1
  25. data/lib/yoda/store/objects/patch_set.rb +2 -2
  26. data/lib/yoda/store/project/dependency.rb +22 -4
  27. data/lib/yoda/store/project/file_finder.rb +20 -0
  28. data/lib/yoda/store/project.rb +2 -0
  29. data/lib/yoda/store/registry/cache.rb +2 -2
  30. data/lib/yoda/store/registry/composer.rb +9 -7
  31. data/lib/yoda/store/registry/index.rb +14 -10
  32. data/lib/yoda/store/registry/library_registry.rb +1 -1
  33. data/lib/yoda/store/registry.rb +1 -1
  34. data/lib/yoda/typing/constant_resolver/code_query.rb +25 -0
  35. data/lib/yoda/typing/constant_resolver/query.rb +12 -1
  36. data/lib/yoda/typing/constant_resolver.rb +13 -8
  37. data/lib/yoda/typing/inferencer/load_resolver.rb +37 -0
  38. data/lib/yoda/typing/inferencer/tracer.rb +32 -0
  39. data/lib/yoda/typing/inferencer.rb +3 -2
  40. data/lib/yoda/typing/node_info.rb +5 -0
  41. data/lib/yoda/typing/tree/{defined.rb → ask_defined.rb} +3 -2
  42. data/lib/yoda/typing/tree/base.rb +65 -20
  43. data/lib/yoda/typing/tree/begin.rb +5 -5
  44. data/lib/yoda/typing/tree/block_call.rb +26 -0
  45. data/lib/yoda/typing/tree/case.rb +8 -19
  46. data/lib/yoda/typing/tree/class_tree.rb +10 -18
  47. data/lib/yoda/typing/tree/conditional_loop.rb +15 -0
  48. data/lib/yoda/typing/tree/constant.rb +19 -0
  49. data/lib/yoda/typing/tree/constant_assignment.rb +2 -2
  50. data/lib/yoda/typing/tree/ensure.rb +17 -0
  51. data/lib/yoda/typing/tree/for.rb +7 -0
  52. data/lib/yoda/typing/tree/hash_tree.rb +32 -0
  53. data/lib/yoda/typing/tree/if.rb +10 -5
  54. data/lib/yoda/typing/tree/interpolation_text.rb +21 -0
  55. data/lib/yoda/typing/tree/literal.rb +8 -36
  56. data/lib/yoda/typing/tree/literal_inferable.rb +48 -0
  57. data/lib/yoda/typing/tree/local_exit.rb +15 -0
  58. data/lib/yoda/typing/tree/logical_assignment.rb +5 -5
  59. data/lib/yoda/typing/tree/logical_operator.rb +6 -5
  60. data/lib/yoda/typing/tree/method_def.rb +41 -0
  61. data/lib/yoda/typing/tree/method_inferable.rb +51 -0
  62. data/lib/yoda/typing/tree/module_tree.rb +7 -20
  63. data/lib/yoda/typing/tree/multiple_assignment.rb +6 -10
  64. data/lib/yoda/typing/tree/namespace_inferable.rb +20 -0
  65. data/lib/yoda/typing/tree/rescue.rb +18 -0
  66. data/lib/yoda/typing/tree/rescue_clause.rb +42 -0
  67. data/lib/yoda/typing/tree/self.rb +2 -1
  68. data/lib/yoda/typing/tree/send.rb +8 -60
  69. data/lib/yoda/typing/tree/send_inferable.rb +89 -0
  70. data/lib/yoda/typing/tree/singleton_class_tree.rb +24 -0
  71. data/lib/yoda/typing/tree/singleton_method_def.rb +41 -0
  72. data/lib/yoda/typing/tree/super.rb +9 -2
  73. data/lib/yoda/typing/tree/variable.rb +5 -10
  74. data/lib/yoda/typing/tree/variable_assignment.rb +11 -8
  75. data/lib/yoda/typing/tree/yield.rb +9 -2
  76. data/lib/yoda/typing/tree.rb +55 -22
  77. data/lib/yoda/typing.rb +1 -0
  78. data/lib/yoda/version.rb +1 -1
  79. data/lib/yoda.rb +1 -0
  80. metadata +25 -13
  81. data/lib/yoda/typing/inferencer/ast_traverser.rb +0 -408
  82. data/lib/yoda/typing/tree/block.rb +0 -12
  83. data/lib/yoda/typing/tree/const.rb +0 -12
  84. data/lib/yoda/typing/tree/escape.rb +0 -12
  85. data/lib/yoda/typing/tree/hash_body.rb +0 -36
  86. data/lib/yoda/typing/tree/literal_with_interpolation.rb +0 -21
  87. data/lib/yoda/typing/tree/method.rb +0 -43
  88. data/lib/yoda/typing/tree/rescue_body.rb +0 -12
  89. data/lib/yoda/typing/tree/singleton_method.rb +0 -47
  90. data/lib/yoda/typing/tree/while.rb +0 -12
@@ -1,69 +1,17 @@
1
+ require 'yoda/typing/tree/send_inferable'
2
+
1
3
  module Yoda
2
4
  module Typing
3
5
  module Tree
4
6
  class Send < Base
5
- def receiver
6
- @receiver ||= node.children[0] && build_child(node.children[0])
7
- end
8
-
9
- # @return [Symbol]
10
- def method_name
11
- @method_name ||= node.children[1]
12
- end
13
-
14
- # @return [Symbol]
15
- def arguments
16
- @arguments ||= node.children.slice(2..-1).map(&method(:build_child))
17
- end
18
-
19
- # @param block_param_node [::AST::Node, nil]
20
- # @param block_node [::AST::Node, nil]
21
- # @return [Types::Base]
22
- def infer_send_node(block_param_node = nil, block_node = nil)
23
- if block_node
24
- new_context = method_resolver.generate_block_context(context: context, block_param_node: block_param_node)
25
- derive(context: new_context).infer(block_node)
26
- end
27
-
28
- tracer.bind_send(node: node, method_candidates: method_resolver.method_candidates, receiver_candidates: method_resolver.receiver_candidates)
29
- method_resolver.return_type
30
- end
31
-
32
- def method_resolver
33
- @method_resolver ||= MethodResolver.new(
34
- registry: context.registry,
35
- receiver_type: receiver_type,
36
- name: method_name.to_s,
37
- argument_types: argument_types,
38
- generator: generator,
39
- implicit_receiver: receiver.nil?,
40
- )
41
- end
42
-
43
- def receiver_type
44
- @receiver_type ||= receiver ? receiver.type : context.receiver
45
- end
46
-
47
- def block_context
48
- @block_context ||= method_resolver.generate_block_context(context: context, block_param_node: block_param_node)
49
- end
7
+ include SendInferable
50
8
 
51
- private
9
+ # @!method node
10
+ # @return [AST::SendNode]
52
11
 
53
- # @return [{Symbol => Types::Base}]
54
- def argument_types
55
- @argument_types ||= argument_nodes.each_with_object({}) do |node, obj|
56
- case node.type
57
- when :splat
58
- # TODO
59
- node.type
60
- when :blockarg
61
- obj[:block_argument] = infer(node.children.first)
62
- else
63
- obj[:arguments] ||= []
64
- obj[:arguments].push(node.type)
65
- end
66
- end
12
+ # @return [Types::Type]
13
+ def infer_type
14
+ infer_send(node)
67
15
  end
68
16
  end
69
17
  end
@@ -0,0 +1,89 @@
1
+ module Yoda
2
+ module Typing
3
+ module Tree
4
+ module SendInferable
5
+ private
6
+
7
+ # @param send_node [AST::SendNode]
8
+ # @param block_param_node [AST::ParametersNode, nil]
9
+ # @param block_node [AST::Vnode, nil]
10
+ # @return [Types::Type]
11
+ def infer_send(send_node, block_param_node = nil, block_node = nil)
12
+ receiver_type = send_node.implicit_receiver? ? context.receiver : infer_child(send_node.receiver)
13
+ argument_map = infer_argument_nodes(send_node.arguments)
14
+ value_resolve_context = generator.value_resolve_context(self_type: receiver_type)
15
+
16
+ visibility = send_node.implicit_receiver? ? %i(private protected public) : %i(public)
17
+ # TODO: Support overloads
18
+ method_candidates = receiver_type.value.select_method(send_node.selector_name, visibility: visibility)
19
+ method_types = method_candidates.map(&:rbs_type).map { |type| value_resolve_context.wrap(type) }
20
+
21
+ if block_node
22
+ # TODO: Resolve type variables by matching argument_types with arguments
23
+ binds = Inferencer::ArgumentsBinder.new(generator: generator).bind(types: method_types, arguments: block_param_node.parameter)
24
+ new_context = context.derive_block_context(binds: binds)
25
+ infer_child(block_node, context: new_context)
26
+ end
27
+
28
+ Logger.trace("method_candidates: [#{method_candidates.join(', ')}]")
29
+ Logger.trace("receiver_type: #{receiver_type}")
30
+
31
+ bind_send(node: node, method_candidates: method_candidates, receiver_type: receiver_type)
32
+ resolve_require(method_candidates, argument_map)
33
+
34
+ if method_types.empty?
35
+ generator.unknown_type(reason: "method not found")
36
+ else
37
+ generator.union_type(*method_types.map { |method_type| value_resolve_context.wrap(method_type.type.return_type) })
38
+ end
39
+ end
40
+
41
+ # @param method_candidates [Array<Model::FunctionSignatures::Wrapper>]
42
+ # @param argument_map [{Symbol => Tree}]
43
+ def resolve_require(method_candidates, argument_map)
44
+ return unless method_candidates.any? { |method_candidate| method_candidate.name.to_s == "require" && method_candidate.namespace_path.to_s == "Kernel" }
45
+
46
+ first_argument_tree = argument_map[:arguments]&.first
47
+ return unless first_argument_tree
48
+
49
+ first_argument_type = first_argument_tree.type
50
+ strings = gather_literals(first_argument_type.value).select { |literal| literal.is_a?(String) }
51
+
52
+ require_paths = strings.map { |path| Inferencer::LoadResolver.new(context.environment.registry.project).resolve(path) }.compact
53
+ bind_require_paths(node: first_argument_tree.node, require_paths: require_paths)
54
+ end
55
+
56
+ # @param arguments [Array<AST::Vnode>]
57
+ # @return [{Symbol => Tree}]
58
+ def infer_argument_nodes(arguments)
59
+ arguments.each_with_object({}) do |node, obj|
60
+ case node.type
61
+ when :splat
62
+ # TODO
63
+ infer_child(node)
64
+ when :block_pass
65
+ obj[:block_argument] = build_child(node.children.first).tap(&:type)
66
+ else
67
+ obj[:arguments] ||= []
68
+ obj[:arguments].push(build_child(node).tap(&:type))
69
+ end
70
+ end
71
+ end
72
+
73
+ # @param value [Model::Values::Base]
74
+ # @return [Array<Object>]
75
+ def gather_literals(value)
76
+ if value.respond_to?(:literal)
77
+ [value.literal]
78
+ elsif value.respond_to?(:values)
79
+ value.values.flat_map { |v| gather_literals(v) }
80
+ elsif value.respond_to?(:value)
81
+ gather_literals(value.value)
82
+ else
83
+ []
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,24 @@
1
+ require 'yoda/typing/tree/namespace_inferable'
2
+
3
+ module Yoda
4
+ module Typing
5
+ module Tree
6
+ class SingletonClassTree < Base
7
+ include NamespaceInferable
8
+
9
+ # @!method node
10
+ # @return [AST::SingletonClassNode]
11
+
12
+ # @return [Types::Type]
13
+ def infer_type
14
+ receiver_type = infer_child(node.receiver)
15
+
16
+ new_context = context.derive_class_context(class_type: receiver_type.singleton_type)
17
+ infer_child(node.body, context: new_context)
18
+
19
+ generator.nil_type
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,41 @@
1
+ require 'yoda/typing/tree/method_inferable'
2
+
3
+ module Yoda
4
+ module Typing
5
+ module Tree
6
+ class SingletonMethodDef < Base
7
+ include MethodInferable
8
+
9
+ # @!method node
10
+ # @return [AST::DefSingletonNode]
11
+
12
+ # @return [Types::Base]
13
+ def infer_type
14
+ infer_method_type(receiver_type: receiver_type)
15
+ end
16
+
17
+ # @return [Symbol]
18
+ def node_name
19
+ node.name
20
+ end
21
+
22
+ # @return [AST::ParametersNode]
23
+ def parameters_node
24
+ node.parameters
25
+ end
26
+
27
+ # @return [Types::Type]
28
+ def body_node
29
+ node.body
30
+ end
31
+
32
+ # @return [Types::Type]
33
+ def receiver_type
34
+ @receiver_type ||= begin
35
+ infer_child(node.receiver)
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -1,10 +1,17 @@
1
+ require 'yoda/typing/tree/literal_inferable'
2
+
1
3
  module Yoda
2
4
  module Typing
3
5
  module Tree
4
6
  class Super < Base
5
- def type
7
+ include LiteralInferable
8
+
9
+ # @!method node
10
+ # @return [AST::SpecialCallNode]
11
+
12
+ def infer_type
6
13
  # TODO
7
- generator.any_type
14
+ infer_literal(node)
8
15
  end
9
16
  end
10
17
  end
@@ -2,17 +2,12 @@ module Yoda
2
2
  module Typing
3
3
  module Tree
4
4
  class Variable < Base
5
- def type
6
- context.environment.resolve(node.children.first) || generator.any_type
7
- end
5
+ # @!method node
6
+ # @return [AST::VariableNode]
8
7
 
9
- # @param var [Symbol]
10
- # @param body_node [::AST::Node]
11
- # @return [Store::Types::Base]
12
- def process_bind(var, body_node)
13
- body_type = infer(body_node)
14
- context.environment.bind(var, body_type)
15
- body_type
8
+ # @return [Types::Type]
9
+ def infer_type
10
+ context.type_binding.resolve(node.name) || generator.any_type
16
11
  end
17
12
  end
18
13
  end
@@ -2,18 +2,21 @@ module Yoda
2
2
  module Typing
3
3
  module Tree
4
4
  class VariableAssignment < Base
5
- def process
6
- process_bind(node.children[0], node.children[1])
7
- end
5
+ # @!method node
6
+ # @return [AST::AssignmentNode]
8
7
 
9
- # @param var [Symbol]
10
- # @param body_node [::AST::Node]
11
8
  # @return [Store::Types::Base]
12
- def process_bind(var, body_node)
13
- body_type = infer(body_node)
14
- context.environment.bind(var, body_type)
9
+ def infer_type
10
+ context.type_binding.bind(node.assignee.name, body_type)
15
11
  body_type
16
12
  end
13
+
14
+ # @return [Types::Type]
15
+ def body_type
16
+ @body_type ||= begin
17
+ infer_child(node.content)
18
+ end
19
+ end
17
20
  end
18
21
  end
19
22
  end
@@ -1,10 +1,17 @@
1
+ require 'yoda/typing/tree/literal_inferable'
2
+
1
3
  module Yoda
2
4
  module Typing
3
5
  module Tree
4
6
  class Yield < Base
5
- def type
7
+ include LiteralInferable
8
+
9
+ # @!method node
10
+ # @return [AST::SpecialCallNode]
11
+
12
+ def infer_type
6
13
  # TODO
7
- generator.any_type
14
+ infer_literal(node)
8
15
  end
9
16
  end
10
17
  end
@@ -1,14 +1,41 @@
1
1
  module Yoda
2
2
  module Typing
3
3
  module Tree
4
- require 'yoda/typing/inferencer/arguments_binder'
5
- require 'yoda/typing/inferencer/contexts'
6
- require 'yoda/typing/inferencer/environment'
7
- require 'yoda/typing/inferencer/constant_resolver'
8
- require 'yoda/typing/inferencer/method_resolver'
9
- require 'yoda/typing/inferencer/method_definition_resolver'
10
- require 'yoda/typing/inferencer/object_resolver'
11
- require 'yoda/typing/inferencer/tracer'
4
+ require 'yoda/typing/tree/base'
5
+
6
+ require 'yoda/typing/tree/ask_defined'
7
+ require 'yoda/typing/tree/begin'
8
+ require 'yoda/typing/tree/block_call'
9
+ require 'yoda/typing/tree/case'
10
+ require 'yoda/typing/tree/class_tree'
11
+ require 'yoda/typing/tree/conditional_loop'
12
+ require 'yoda/typing/tree/constant_assignment'
13
+ require 'yoda/typing/tree/constant'
14
+ require 'yoda/typing/tree/ensure'
15
+ require 'yoda/typing/tree/for'
16
+ require 'yoda/typing/tree/hash_tree'
17
+ require 'yoda/typing/tree/if'
18
+ require 'yoda/typing/tree/interpolation_text'
19
+ require 'yoda/typing/tree/literal_inferable'
20
+ require 'yoda/typing/tree/literal'
21
+ require 'yoda/typing/tree/local_exit'
22
+ require 'yoda/typing/tree/logical_assignment'
23
+ require 'yoda/typing/tree/logical_operator'
24
+ require 'yoda/typing/tree/method_def'
25
+ require 'yoda/typing/tree/method_inferable'
26
+ require 'yoda/typing/tree/module_tree'
27
+ require 'yoda/typing/tree/multiple_assignment'
28
+ require 'yoda/typing/tree/namespace_inferable'
29
+ require 'yoda/typing/tree/rescue_clause'
30
+ require 'yoda/typing/tree/rescue'
31
+ require 'yoda/typing/tree/self'
32
+ require 'yoda/typing/tree/send'
33
+ require 'yoda/typing/tree/singleton_class_tree'
34
+ require 'yoda/typing/tree/singleton_method_def'
35
+ require 'yoda/typing/tree/super'
36
+ require 'yoda/typing/tree/variable_assignment'
37
+ require 'yoda/typing/tree/variable'
38
+ require 'yoda/typing/tree/yield'
12
39
 
13
40
  class << self
14
41
  # @param node [::AST::Node]
@@ -34,7 +61,7 @@ module Yoda
34
61
  when :if
35
62
  If
36
63
  when :while, :until, :while_post, :until_post
37
- While
64
+ ConditionalLoop
38
65
  when :for
39
66
  For
40
67
  when :case
@@ -44,35 +71,41 @@ module Yoda
44
71
  when :yield
45
72
  Yield
46
73
  when :return, :break, :next
47
- Escape
74
+ LocalExit
75
+ when :ensure
76
+ Ensure
77
+ when :rescue
78
+ Rescue
48
79
  when :resbody
49
- RescueBody
80
+ RescueClause
50
81
  when :csend, :send
51
82
  Send
52
83
  when :block
53
- Block
84
+ BlockCall
54
85
  when :const
55
- Const
86
+ Constant
56
87
  when :lvar, :cvar, :ivar, :gvar
57
88
  Variable
58
- when :begin, :kwbegin
89
+ when :begin, :kwbegin, :block
59
90
  Begin
60
91
  when :dstr, :dsym, :xstr
61
- LiteralWithInterpolation
92
+ InterpolationText
62
93
  when :def
63
- Method
94
+ MethodDef
64
95
  when :defs
65
- SingletonMethod
96
+ SingletonMethodDef
66
97
  when :hash
67
- HashBody
98
+ HashTree
68
99
  when :self
69
100
  Self
70
- when :defined
71
- Defined
72
- when :module
73
- ModuleTree
101
+ when :defined?
102
+ AskDefined
74
103
  when :class
75
104
  ClassTree
105
+ when :module
106
+ ModuleTree
107
+ when :sclass
108
+ SingletonClassTree
76
109
  else
77
110
  Literal
78
111
  end
data/lib/yoda/typing.rb CHANGED
@@ -7,6 +7,7 @@ module Yoda
7
7
  require 'yoda/typing/traces'
8
8
  require 'yoda/typing/lexical_scope'
9
9
  require 'yoda/typing/types'
10
+ require 'yoda/typing/tree'
10
11
  require 'yoda/typing/inferencer'
11
12
  require 'yoda/typing/node_info'
12
13
  end
data/lib/yoda/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Yoda
2
- VERSION = "0.9.0"
2
+ VERSION = "0.10.0"
3
3
  end
data/lib/yoda.rb CHANGED
@@ -8,6 +8,7 @@ module Yoda
8
8
  require "yoda/ast"
9
9
  require "yoda/cli"
10
10
  require "yoda/errors"
11
+ require "yoda/id_mask"
11
12
  require "yoda/services"
12
13
  require "yoda/model"
13
14
  require "yoda/store"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yoda-language-server
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tomoya Chiba
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-03-21 00:00:00.000000000 Z
11
+ date: 2022-03-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: yard
@@ -389,6 +389,7 @@ files:
389
389
  - lib/yoda/cli/infer.rb
390
390
  - lib/yoda/errors.rb
391
391
  - lib/yoda/has_services.rb
392
+ - lib/yoda/id_mask.rb
392
393
  - lib/yoda/instrument.rb
393
394
  - lib/yoda/logger.rb
394
395
  - lib/yoda/missing_delegatable.rb
@@ -399,6 +400,7 @@ files:
399
400
  - lib/yoda/model/descriptions/comment_token_description.rb
400
401
  - lib/yoda/model/descriptions/function_description.rb
401
402
  - lib/yoda/model/descriptions/node_description.rb
403
+ - lib/yoda/model/descriptions/require_path_description.rb
402
404
  - lib/yoda/model/descriptions/value_description.rb
403
405
  - lib/yoda/model/descriptions/variable_description.rb
404
406
  - lib/yoda/model/descriptions/word_description.rb
@@ -538,6 +540,7 @@ files:
538
540
  - lib/yoda/services/current_node_explain.rb
539
541
  - lib/yoda/services/current_node_explain/comment_signature.rb
540
542
  - lib/yoda/services/evaluator.rb
543
+ - lib/yoda/services/loadable_path_resolver.rb
541
544
  - lib/yoda/services/signature_discovery.rb
542
545
  - lib/yoda/store.rb
543
546
  - lib/yoda/store/actions.rb
@@ -565,6 +568,7 @@ files:
565
568
  - lib/yoda/store/objects/library.rb
566
569
  - lib/yoda/store/objects/library/core.rb
567
570
  - lib/yoda/store/objects/library/gem.rb
571
+ - lib/yoda/store/objects/library/path_resolvable.rb
568
572
  - lib/yoda/store/objects/library/std.rb
569
573
  - lib/yoda/store/objects/library/with_registry.rb
570
574
  - lib/yoda/store/objects/map.rb
@@ -614,6 +618,7 @@ files:
614
618
  - lib/yoda/typing.rb
615
619
  - lib/yoda/typing/constant_resolver.rb
616
620
  - lib/yoda/typing/constant_resolver/cbase_query.rb
621
+ - lib/yoda/typing/constant_resolver/code_query.rb
617
622
  - lib/yoda/typing/constant_resolver/member_query.rb
618
623
  - lib/yoda/typing/constant_resolver/node_tracer.rb
619
624
  - lib/yoda/typing/constant_resolver/query.rb
@@ -629,7 +634,7 @@ files:
629
634
  - lib/yoda/typing/inferencer.rb
630
635
  - lib/yoda/typing/inferencer/arguments.rb
631
636
  - lib/yoda/typing/inferencer/arguments_binder.rb
632
- - lib/yoda/typing/inferencer/ast_traverser.rb
637
+ - lib/yoda/typing/inferencer/load_resolver.rb
633
638
  - lib/yoda/typing/inferencer/method_resolver.rb
634
639
  - lib/yoda/typing/inferencer/object_resolver.rb
635
640
  - lib/yoda/typing/inferencer/parameter_binder.rb
@@ -643,33 +648,40 @@ files:
643
648
  - lib/yoda/typing/traces/normal.rb
644
649
  - lib/yoda/typing/traces/send.rb
645
650
  - lib/yoda/typing/tree.rb
651
+ - lib/yoda/typing/tree/ask_defined.rb
646
652
  - lib/yoda/typing/tree/base.rb
647
653
  - lib/yoda/typing/tree/begin.rb
648
- - lib/yoda/typing/tree/block.rb
654
+ - lib/yoda/typing/tree/block_call.rb
649
655
  - lib/yoda/typing/tree/case.rb
650
656
  - lib/yoda/typing/tree/class_tree.rb
651
- - lib/yoda/typing/tree/const.rb
657
+ - lib/yoda/typing/tree/conditional_loop.rb
658
+ - lib/yoda/typing/tree/constant.rb
652
659
  - lib/yoda/typing/tree/constant_assignment.rb
653
- - lib/yoda/typing/tree/defined.rb
654
- - lib/yoda/typing/tree/escape.rb
660
+ - lib/yoda/typing/tree/ensure.rb
655
661
  - lib/yoda/typing/tree/for.rb
656
- - lib/yoda/typing/tree/hash_body.rb
662
+ - lib/yoda/typing/tree/hash_tree.rb
657
663
  - lib/yoda/typing/tree/if.rb
664
+ - lib/yoda/typing/tree/interpolation_text.rb
658
665
  - lib/yoda/typing/tree/literal.rb
659
- - lib/yoda/typing/tree/literal_with_interpolation.rb
666
+ - lib/yoda/typing/tree/literal_inferable.rb
667
+ - lib/yoda/typing/tree/local_exit.rb
660
668
  - lib/yoda/typing/tree/logical_assignment.rb
661
669
  - lib/yoda/typing/tree/logical_operator.rb
662
- - lib/yoda/typing/tree/method.rb
670
+ - lib/yoda/typing/tree/method_def.rb
671
+ - lib/yoda/typing/tree/method_inferable.rb
663
672
  - lib/yoda/typing/tree/module_tree.rb
664
673
  - lib/yoda/typing/tree/multiple_assignment.rb
665
- - lib/yoda/typing/tree/rescue_body.rb
674
+ - lib/yoda/typing/tree/namespace_inferable.rb
675
+ - lib/yoda/typing/tree/rescue.rb
676
+ - lib/yoda/typing/tree/rescue_clause.rb
666
677
  - lib/yoda/typing/tree/self.rb
667
678
  - lib/yoda/typing/tree/send.rb
668
- - lib/yoda/typing/tree/singleton_method.rb
679
+ - lib/yoda/typing/tree/send_inferable.rb
680
+ - lib/yoda/typing/tree/singleton_class_tree.rb
681
+ - lib/yoda/typing/tree/singleton_method_def.rb
669
682
  - lib/yoda/typing/tree/super.rb
670
683
  - lib/yoda/typing/tree/variable.rb
671
684
  - lib/yoda/typing/tree/variable_assignment.rb
672
- - lib/yoda/typing/tree/while.rb
673
685
  - lib/yoda/typing/tree/yield.rb
674
686
  - lib/yoda/typing/types.rb
675
687
  - lib/yoda/typing/types/any.rb