yoda-language-server 0.9.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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