yoda-language-server 0.4.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 (171) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +16 -0
  3. data/.rspec +3 -0
  4. data/.travis.yml +8 -0
  5. data/Gemfile +6 -0
  6. data/Gemfile.lock +78 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +85 -0
  9. data/Rakefile +6 -0
  10. data/bin/console +14 -0
  11. data/bin/setup +8 -0
  12. data/client/atom/main.js +27 -0
  13. data/client/vscode/.gitignore +4 -0
  14. data/client/vscode/.vscode/launch.json +28 -0
  15. data/client/vscode/.vscode/settings.json +9 -0
  16. data/client/vscode/.vscode/tasks.json +20 -0
  17. data/client/vscode/.vscodeignore +8 -0
  18. data/client/vscode/CHANGELOG.md +7 -0
  19. data/client/vscode/README.md +65 -0
  20. data/client/vscode/package-lock.json +2688 -0
  21. data/client/vscode/package.json +39 -0
  22. data/client/vscode/src/extension.ts +42 -0
  23. data/client/vscode/src/test/extension.test.ts +22 -0
  24. data/client/vscode/src/test/index.ts +22 -0
  25. data/client/vscode/tsconfig.json +16 -0
  26. data/client/vscode/vsc-extension-quickstart.md +33 -0
  27. data/exe/yoda +27 -0
  28. data/lib/yoda.rb +11 -0
  29. data/lib/yoda/evaluation.rb +9 -0
  30. data/lib/yoda/evaluation/code_completion.rb +65 -0
  31. data/lib/yoda/evaluation/code_completion/base_provider.rb +57 -0
  32. data/lib/yoda/evaluation/code_completion/const_provider.rb +90 -0
  33. data/lib/yoda/evaluation/code_completion/method_provider.rb +82 -0
  34. data/lib/yoda/evaluation/code_completion/variable_provider.rb +18 -0
  35. data/lib/yoda/evaluation/comment_completion.rb +70 -0
  36. data/lib/yoda/evaluation/comment_completion/base_provider.rb +64 -0
  37. data/lib/yoda/evaluation/comment_completion/param_provider.rb +18 -0
  38. data/lib/yoda/evaluation/comment_completion/tag_provider.rb +41 -0
  39. data/lib/yoda/evaluation/comment_completion/type_provider.rb +58 -0
  40. data/lib/yoda/evaluation/current_node_explain.rb +70 -0
  41. data/lib/yoda/evaluation/evaluator.rb +103 -0
  42. data/lib/yoda/evaluation/signature_discovery.rb +83 -0
  43. data/lib/yoda/model.rb +12 -0
  44. data/lib/yoda/model/completion_item.rb +56 -0
  45. data/lib/yoda/model/descriptions.rb +10 -0
  46. data/lib/yoda/model/descriptions/base.rb +26 -0
  47. data/lib/yoda/model/descriptions/function_description.rb +40 -0
  48. data/lib/yoda/model/descriptions/value_description.rb +33 -0
  49. data/lib/yoda/model/descriptions/word_description.rb +32 -0
  50. data/lib/yoda/model/function_signatures.rb +13 -0
  51. data/lib/yoda/model/function_signatures/base.rb +68 -0
  52. data/lib/yoda/model/function_signatures/constructor.rb +70 -0
  53. data/lib/yoda/model/function_signatures/formatter.rb +82 -0
  54. data/lib/yoda/model/function_signatures/method.rb +67 -0
  55. data/lib/yoda/model/function_signatures/overload.rb +79 -0
  56. data/lib/yoda/model/function_signatures/parameter_list.rb +108 -0
  57. data/lib/yoda/model/function_signatures/type_builder.rb +101 -0
  58. data/lib/yoda/model/node_signature.rb +28 -0
  59. data/lib/yoda/model/path.rb +96 -0
  60. data/lib/yoda/model/scoped_path.rb +44 -0
  61. data/lib/yoda/model/types.rb +84 -0
  62. data/lib/yoda/model/types/any_type.rb +32 -0
  63. data/lib/yoda/model/types/base.rb +37 -0
  64. data/lib/yoda/model/types/duck_type.rb +41 -0
  65. data/lib/yoda/model/types/function_type.rb +174 -0
  66. data/lib/yoda/model/types/generic_type.rb +66 -0
  67. data/lib/yoda/model/types/instance_type.rb +42 -0
  68. data/lib/yoda/model/types/module_type.rb +42 -0
  69. data/lib/yoda/model/types/sequence_type.rb +53 -0
  70. data/lib/yoda/model/types/union_type.rb +56 -0
  71. data/lib/yoda/model/types/unknown_type.rb +40 -0
  72. data/lib/yoda/model/types/value_type.rb +58 -0
  73. data/lib/yoda/model/values.rb +9 -0
  74. data/lib/yoda/model/values/base.rb +32 -0
  75. data/lib/yoda/model/values/instance_value.rb +65 -0
  76. data/lib/yoda/model/values/module_value.rb +72 -0
  77. data/lib/yoda/parsing.rb +15 -0
  78. data/lib/yoda/parsing/ast_traversable.rb +18 -0
  79. data/lib/yoda/parsing/comment_tokenizer.rb +59 -0
  80. data/lib/yoda/parsing/location.rb +101 -0
  81. data/lib/yoda/parsing/node_objects.rb +10 -0
  82. data/lib/yoda/parsing/node_objects/const_node.rb +52 -0
  83. data/lib/yoda/parsing/node_objects/method_definition.rb +46 -0
  84. data/lib/yoda/parsing/node_objects/namespace.rb +104 -0
  85. data/lib/yoda/parsing/node_objects/send_node.rb +72 -0
  86. data/lib/yoda/parsing/parser.rb +27 -0
  87. data/lib/yoda/parsing/query.rb +11 -0
  88. data/lib/yoda/parsing/query/current_comment_query.rb +80 -0
  89. data/lib/yoda/parsing/query/current_comment_token_query.rb +153 -0
  90. data/lib/yoda/parsing/query/current_commenting_node_query.rb +68 -0
  91. data/lib/yoda/parsing/query/current_location_node_query.rb +51 -0
  92. data/lib/yoda/parsing/query/current_node_comment_query.rb +40 -0
  93. data/lib/yoda/parsing/range.rb +41 -0
  94. data/lib/yoda/parsing/scopes.rb +15 -0
  95. data/lib/yoda/parsing/scopes/base.rb +78 -0
  96. data/lib/yoda/parsing/scopes/builder.rb +60 -0
  97. data/lib/yoda/parsing/scopes/class_definition.rb +47 -0
  98. data/lib/yoda/parsing/scopes/meta_class_definition.rb +44 -0
  99. data/lib/yoda/parsing/scopes/meta_method_definition.rb +70 -0
  100. data/lib/yoda/parsing/scopes/method_definition.rb +69 -0
  101. data/lib/yoda/parsing/scopes/module_definition.rb +36 -0
  102. data/lib/yoda/parsing/scopes/root.rb +25 -0
  103. data/lib/yoda/parsing/source_analyzer.rb +59 -0
  104. data/lib/yoda/parsing/source_cutter.rb +231 -0
  105. data/lib/yoda/parsing/type_parser.rb +141 -0
  106. data/lib/yoda/runner.rb +6 -0
  107. data/lib/yoda/runner/infer.rb +50 -0
  108. data/lib/yoda/runner/setup.rb +26 -0
  109. data/lib/yoda/server.rb +191 -0
  110. data/lib/yoda/server/client_info.rb +98 -0
  111. data/lib/yoda/server/completion_provider.rb +78 -0
  112. data/lib/yoda/server/definition_provider.rb +36 -0
  113. data/lib/yoda/server/deserializer.rb +27 -0
  114. data/lib/yoda/server/hover_provider.rb +38 -0
  115. data/lib/yoda/server/signature_provider.rb +46 -0
  116. data/lib/yoda/store.rb +13 -0
  117. data/lib/yoda/store/actions.rb +10 -0
  118. data/lib/yoda/store/actions/import_core_library.rb +30 -0
  119. data/lib/yoda/store/actions/import_gems.rb +91 -0
  120. data/lib/yoda/store/actions/read_file.rb +36 -0
  121. data/lib/yoda/store/actions/read_project_files.rb +29 -0
  122. data/lib/yoda/store/adapters.rb +14 -0
  123. data/lib/yoda/store/adapters/base.rb +58 -0
  124. data/lib/yoda/store/adapters/leveldb_adapter.rb +80 -0
  125. data/lib/yoda/store/adapters/lmdb_adapter.rb +113 -0
  126. data/lib/yoda/store/objects.rb +46 -0
  127. data/lib/yoda/store/objects/addressable.rb +25 -0
  128. data/lib/yoda/store/objects/base.rb +116 -0
  129. data/lib/yoda/store/objects/class_object.rb +51 -0
  130. data/lib/yoda/store/objects/merger.rb +94 -0
  131. data/lib/yoda/store/objects/meta_class_object.rb +41 -0
  132. data/lib/yoda/store/objects/method_object.rb +94 -0
  133. data/lib/yoda/store/objects/module_object.rb +11 -0
  134. data/lib/yoda/store/objects/namespace_object.rb +67 -0
  135. data/lib/yoda/store/objects/overload.rb +51 -0
  136. data/lib/yoda/store/objects/patch.rb +46 -0
  137. data/lib/yoda/store/objects/patch_set.rb +80 -0
  138. data/lib/yoda/store/objects/tag.rb +62 -0
  139. data/lib/yoda/store/objects/value_object.rb +45 -0
  140. data/lib/yoda/store/project.rb +159 -0
  141. data/lib/yoda/store/query.rb +12 -0
  142. data/lib/yoda/store/query/associators.rb +10 -0
  143. data/lib/yoda/store/query/associators/associate_ancestors.rb +103 -0
  144. data/lib/yoda/store/query/associators/associate_methods.rb +38 -0
  145. data/lib/yoda/store/query/base.rb +16 -0
  146. data/lib/yoda/store/query/find_constant.rb +150 -0
  147. data/lib/yoda/store/query/find_meta_class.rb +18 -0
  148. data/lib/yoda/store/query/find_method.rb +74 -0
  149. data/lib/yoda/store/query/find_signature.rb +43 -0
  150. data/lib/yoda/store/registry.rb +67 -0
  151. data/lib/yoda/store/yard_importer.rb +260 -0
  152. data/lib/yoda/typing.rb +10 -0
  153. data/lib/yoda/typing/context.rb +96 -0
  154. data/lib/yoda/typing/environment.rb +35 -0
  155. data/lib/yoda/typing/evaluator.rb +256 -0
  156. data/lib/yoda/typing/lexical_scope.rb +26 -0
  157. data/lib/yoda/typing/relation.rb +15 -0
  158. data/lib/yoda/typing/traces.rb +9 -0
  159. data/lib/yoda/typing/traces/base.rb +26 -0
  160. data/lib/yoda/typing/traces/normal.rb +22 -0
  161. data/lib/yoda/typing/traces/send.rb +26 -0
  162. data/lib/yoda/version.rb +3 -0
  163. data/lib/yoda/yard_extensions.rb +11 -0
  164. data/lib/yoda/yard_extensions/sig_directive.rb +40 -0
  165. data/lib/yoda/yard_extensions/type_tag.rb +10 -0
  166. data/package.json +76 -0
  167. data/scripts/benchmark.rb +6 -0
  168. data/scripts/build_core_index.sh +16 -0
  169. data/yarn.lock +13 -0
  170. data/yoda-language-server.gemspec +40 -0
  171. metadata +424 -0
@@ -0,0 +1,66 @@
1
+ module Yoda
2
+ module Model
3
+ module Types
4
+ class GenericType < Base
5
+ # @return [Base]
6
+ attr_reader :base_type
7
+
8
+ # @return [Array<Base>]
9
+ attr_reader :type_arguments
10
+
11
+ # @param base_type [Base]
12
+ # @param key_type [Base]
13
+ # @param value_type [Base]
14
+ def self.from_key_value(base_type, key_type, value_type)
15
+ new(base_type, [key_type, value_type])
16
+ end
17
+
18
+ # @param paths [Array<Path>]
19
+ # @return [self]
20
+ def change_root(paths)
21
+ self.class.new(base_type.change_root(paths), type_arguments.map { |type| type.change_root(paths) })
22
+ end
23
+
24
+ # @param base_type [Types::Base]
25
+ # @param type_arguments [Array<Base>]
26
+ def initialize(base_type, type_arguments)
27
+ @base_type = base_type
28
+ @type_arguments = type_arguments
29
+ end
30
+
31
+ # @param another [Object]
32
+ def eql?(another)
33
+ another.is_a?(GenericType) &&
34
+ base_type == another.base_type &&
35
+ type_arguments == another.type_arguments
36
+ end
37
+
38
+ def hash
39
+ [self.class.name, base_type, type_arguments].hash
40
+ end
41
+
42
+ # @param namespace [YARD::CodeObjects::Base]
43
+ # @return [GenericType]
44
+ def change_root(namespace)
45
+ self.class.new(base_type.change_root(namespace), type_arguments.map { |type| type.change_root(namespace) })
46
+ end
47
+
48
+ # @param registry [Registry]
49
+ # @return [Array<YARD::CodeObjects::Base, YARD::CodeObjects::Proxy>]
50
+ def resolve(registry)
51
+ base_type.resolve(registry)
52
+ end
53
+
54
+ # @return [String]
55
+ def to_s
56
+ "#{base_type}<#{type_arguments.map(&:to_s).join(', ')}>"
57
+ end
58
+
59
+ # @return [self]
60
+ def map(&block)
61
+ self.class.new(base_type.map(&block), type_arguments.map(&block))
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,42 @@
1
+ module Yoda
2
+ module Model
3
+ module Types
4
+ class InstanceType < Base
5
+ # @return [ScopedPath]
6
+ attr_reader :path
7
+
8
+ # @param value [String, Path, ScopedPath]
9
+ def initialize(path)
10
+ @path = ScopedPath.build(path)
11
+ end
12
+
13
+ # @param another [Object]
14
+ def eql?(another)
15
+ another.is_a?(InstanceType) &&
16
+ path == another.path
17
+ end
18
+
19
+ def hash
20
+ [self.class.name, path].hash
21
+ end
22
+
23
+ # @param paths [Array<Path>]
24
+ # @return [self]
25
+ def change_root(paths)
26
+ self.class.new(path.change_scope(paths))
27
+ end
28
+
29
+ # @param registry [Registry]
30
+ # @return [Array<Store::Objects::Base>]
31
+ def resolve(registry)
32
+ [Store::Query::FindConstant.new(registry).find(path)].compact
33
+ end
34
+
35
+ # @return [String]
36
+ def to_s
37
+ path.path.to_s
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,42 @@
1
+ module Yoda
2
+ module Model
3
+ module Types
4
+ class ModuleType < Base
5
+ # @return [ScopedPath]
6
+ attr_reader :path
7
+
8
+ # @param value [String, Path, ScopedPath]
9
+ def initialize(path)
10
+ @path = ScopedPath.build(path)
11
+ end
12
+
13
+ # @param another [Object]
14
+ def eql?(another)
15
+ another.is_a?(ModuleType) &&
16
+ path == another.path
17
+ end
18
+
19
+ def hash
20
+ [self.class.name, path].hash
21
+ end
22
+
23
+ # @param paths [Array<Path>]
24
+ # @return [self]
25
+ def change_root(paths)
26
+ self.class.new(path.change_scope(paths))
27
+ end
28
+
29
+ # @param registry [Registry]
30
+ # @return [Array<YARD::CodeObjects::Base>]
31
+ def resolve(registry)
32
+ [Store::Query::FindMetaClass.new(registry).find(path)].compact
33
+ end
34
+
35
+ # @return [String]
36
+ def to_s
37
+ "#{path.path.to_s}.module"
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,53 @@
1
+ module Yoda
2
+ module Model
3
+ module Types
4
+ class SequenceType < Base
5
+ attr_reader :base_type, :types
6
+
7
+ # @param base_type [Base]
8
+ # @param types [Array<Base>]
9
+ def initialize(base_type, types)
10
+ @base_type = base_type
11
+ @types = types
12
+ end
13
+
14
+ def name
15
+ base_type.name
16
+ end
17
+
18
+ # @param another [Object]
19
+ def eql?(another)
20
+ another.is_a?(SequenceType) &&
21
+ base_type == another.base_type &&
22
+ types == another.types
23
+ end
24
+
25
+ def hash
26
+ [self.class.name, base_type, types].hash
27
+ end
28
+
29
+ # @param paths [Array<Path>]
30
+ # @return [self]
31
+ def change_root(paths)
32
+ self.class.new(base_type.change_root(paths), types.map { |type| type.change_root(paths) })
33
+ end
34
+
35
+ # @param registry [Registry]
36
+ # @return [Array<Store::Objects::Base>]
37
+ def resolve(registry)
38
+ base_type.resolve(registry)
39
+ end
40
+
41
+ # @return [String]
42
+ def to_s
43
+ "#{base_type}(#{types.map(&:to_s).join(', ')})"
44
+ end
45
+
46
+ # @return [self]
47
+ def map(&block)
48
+ self.class.new(base_type.map(&block), types.map(&block))
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,56 @@
1
+ require 'set'
2
+
3
+ module Yoda
4
+ module Model
5
+ module Types
6
+ class UnionType < Base
7
+ attr_reader :types
8
+
9
+ # @param types [Array<Base>]
10
+ # @return [Base]
11
+ def self.new(types)
12
+ reduced_types = types.reject { |type| type.is_a?(AnyType) || type.is_a?(UnknownType) }.uniq
13
+ return (types.first || AnyType.new) if reduced_types.length == 0
14
+ return reduced_types.first if reduced_types.length == 1
15
+ super(reduced_types)
16
+ end
17
+
18
+ # @param types [Array<Base>]
19
+ def initialize(types)
20
+ @types = types
21
+ end
22
+
23
+ def eql?(another)
24
+ another.is_a?(UnionType) &&
25
+ Set.new(types) == Set.new(another.types)
26
+ end
27
+
28
+ def hash
29
+ [self.class.name, Set.new(types)].hash
30
+ end
31
+
32
+ # @param paths [Array<Path>]
33
+ # @return [self]
34
+ def change_root(paths)
35
+ self.class.new(types.map { |type| type.change_root(paths) })
36
+ end
37
+
38
+ # @param registry [Registry]
39
+ # @return [Array<Store::Objects::Base>]
40
+ def resolve(registry)
41
+ types.map { |type| type.resolve(registry) }.flatten.compact
42
+ end
43
+
44
+ # @return [String]
45
+ def to_s
46
+ types.map(&:to_s).join(' | ')
47
+ end
48
+
49
+ # @return [self]
50
+ def map(&block)
51
+ self.class.new(types.map(&block))
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,40 @@
1
+ module Yoda
2
+ module Model
3
+ module Types
4
+ class UnknownType < Base
5
+ attr_reader :name
6
+
7
+ # @param name [String]
8
+ def initialize(name = 'unknown')
9
+ @name = name
10
+ end
11
+
12
+ # @param another [Object]
13
+ def eql?(another)
14
+ another.is_a?(UnknownType)
15
+ end
16
+
17
+ def hash
18
+ [self.class.name, name].hash
19
+ end
20
+
21
+ # @param path [Path]
22
+ # @return [self]
23
+ def change_root(path)
24
+ self
25
+ end
26
+
27
+ # @param registry [Registry]
28
+ # @return [Array<YARD::CodeObjects::Base>]
29
+ def resolve(registry)
30
+ []
31
+ end
32
+
33
+ # @return [String]
34
+ def to_s
35
+ 'any'
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,58 @@
1
+ module Yoda
2
+ module Model
3
+ module Types
4
+ class ValueType < Base
5
+ attr_reader :value
6
+
7
+ VALUE_REGEXP = /\A[0-9a-z]/
8
+
9
+ # @param value [String]
10
+ def initialize(value)
11
+ @value = value
12
+ end
13
+
14
+ # @param another [Object]
15
+ def eql?(another)
16
+ another.is_a?(ValueType) &&
17
+ value == another.value
18
+ end
19
+
20
+ def hash
21
+ [self.class.name, value].hash
22
+ end
23
+
24
+ # @param paths [Array<Path>]
25
+ # @return [self]
26
+ def change_root(paths)
27
+ self
28
+ end
29
+
30
+ # @param registry [Registry]
31
+ # @return [Array<YARD::CodeObjects::Base>]
32
+ def resolve(registry)
33
+ [Store::Query::FindConstant.new(registry).find(value_class)].compact
34
+ end
35
+
36
+ def value_class
37
+ case value
38
+ when 'true'
39
+ '::TrueClass'
40
+ when 'false'
41
+ '::FalseClass'
42
+ when 'nil'
43
+ '::NilClass'
44
+ when /\A\d+\Z/
45
+ '::Numeric'
46
+ else
47
+ nil
48
+ end
49
+ end
50
+
51
+ # @return [String]
52
+ def to_s
53
+ value
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,9 @@
1
+ module Yoda
2
+ module Model
3
+ module Values
4
+ require 'yoda/model/values/base'
5
+ require 'yoda/model/values/instance_value'
6
+ require 'yoda/model/values/module_value'
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,32 @@
1
+ module Yoda
2
+ module Model
3
+ module Values
4
+ # @abstract
5
+ class Base
6
+ # @abstract
7
+ # @return [Array<Functions::Base>]
8
+ def methods
9
+ fail NotImplementedError
10
+ end
11
+
12
+ # @abstract
13
+ # @return [String]
14
+ def path
15
+ fail NotImplementedError
16
+ end
17
+
18
+ # @abstract
19
+ # @return [String]
20
+ def docstring
21
+ fail NotImplementedError
22
+ end
23
+
24
+ # @abstract
25
+ # @return [Array<[String, Integer]>]
26
+ def defined_files
27
+ fail NotImplementedError
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,65 @@
1
+ module Yoda
2
+ module Model
3
+ module Values
4
+ class InstanceValue < Base
5
+ # @type Registry
6
+ attr_reader :registry
7
+
8
+ # @type ::YARD::CodeObjects::ClassObject | ::YARD::CodeObjects::Proxy
9
+ attr_reader :class_object
10
+
11
+ # @param registry [Registry]
12
+ # @param class_object [::YARD::CodeObjects::ClassObject, ::YARD::CodeObjects::Proxy]
13
+ def initialize(registry, class_object)
14
+ fail ArgumentError, registry unless registry.is_a?(Registry)
15
+ fail ArgumentError, class_object unless class_object.is_a?(::YARD::CodeObjects::NamespaceObject) || class_object.is_a?(::YARD::CodeObjects::Proxy)
16
+ @registry = registry
17
+ @class_object = class_object
18
+ end
19
+
20
+ # @return [Array<Functions::Base>]
21
+ def methods(visibility: nil)
22
+ return [] if class_object.type == :proxy
23
+ opts = { scope: :instance, visibility: visibility }.compact
24
+ class_object.meths(opts).map { |meth| Functions::Method.new(meth) } + object_methods(visibility: visibility)
25
+ end
26
+
27
+ # @return [String]
28
+ def path
29
+ namespace.path
30
+ end
31
+
32
+ def namespace
33
+ class_object
34
+ end
35
+
36
+ # @param [String]
37
+ def docstring
38
+ class_object.docstring
39
+ end
40
+
41
+ # @return [Array<[String, Integer]>]
42
+ def defined_files
43
+ namespace.files
44
+ end
45
+
46
+ private
47
+
48
+ # @return [Array<Functions::Base>]
49
+ def object_methods(visibility: nil)
50
+ return [] if class_object.type == :proxy
51
+ opts = { scope: :instance, visibility: visibility }.compact
52
+ method_names = Set.new(class_object.meths(opts).map(&:name))
53
+ if object = registry.find('::Object')
54
+ object.meths(opts)
55
+ .reject { |o| ![visibility].flatten.include?(:private) && o.namespace.name == :Kernel }
56
+ .reject { |o| method_names.include?(o.name) }
57
+ .map { |meth| Functions::Method.new(meth) }
58
+ else
59
+ []
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end