yoda-language-server 0.7.2 → 0.8.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 (387) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +23 -0
  3. data/.gitignore +1 -1
  4. data/.rspec +1 -0
  5. data/Gemfile +2 -0
  6. data/README.md +23 -11
  7. data/Rakefile +32 -0
  8. data/bin/bench +12 -0
  9. data/bin/local +7 -0
  10. data/client/atom/.gitignore +1 -0
  11. data/{package.json → client/atom/package.json} +1 -1
  12. data/{yarn.lock → client/atom/yarn.lock} +0 -0
  13. data/client/vscode/.gitignore +1 -1
  14. data/client/vscode/.vscode/launch.json +0 -11
  15. data/client/vscode/.vscode/settings.json +5 -1
  16. data/client/vscode/LICENSE.txt +21 -0
  17. data/client/vscode/README.md +4 -55
  18. data/client/vscode/package-lock.json +4195 -1360
  19. data/client/vscode/package.json +30 -15
  20. data/client/vscode/src/config.ts +13 -0
  21. data/client/vscode/src/extension.ts +11 -27
  22. data/client/vscode/src/install-tools.ts +69 -0
  23. data/client/vscode/src/language-server.ts +54 -0
  24. data/client/vscode/src/status.ts +3 -0
  25. data/client/vscode/src/test/runTest.ts +30 -0
  26. data/client/vscode/src/test/{completion.test.ts → suite/completion.test.ts} +2 -1
  27. data/client/vscode/src/test/suite/hover.test.ts +43 -0
  28. data/client/vscode/src/test/suite/index.ts +27 -0
  29. data/client/vscode/tsconfig.json +4 -1
  30. data/exe/yoda +1 -1
  31. data/lib/yoda/ast/array_node.rb +10 -0
  32. data/lib/yoda/ast/assignment_node.rb +15 -0
  33. data/lib/yoda/ast/block_call_node.rb +20 -0
  34. data/lib/yoda/ast/block_node.rb +10 -0
  35. data/lib/yoda/ast/case_node.rb +20 -0
  36. data/lib/yoda/ast/center_operator_node.rb +20 -0
  37. data/lib/yoda/ast/class_node.rb +22 -0
  38. data/lib/yoda/ast/comment_block/base_part.rb +12 -0
  39. data/lib/yoda/ast/comment_block/range_calculation.rb +58 -0
  40. data/lib/yoda/ast/comment_block/tag_part.rb +88 -0
  41. data/lib/yoda/ast/comment_block/tag_text_name_part.rb +35 -0
  42. data/lib/yoda/ast/comment_block/tag_text_type_part.rb +52 -0
  43. data/lib/yoda/ast/comment_block/text_part.rb +28 -0
  44. data/lib/yoda/ast/comment_block/token.rb +44 -0
  45. data/lib/yoda/ast/comment_block.rb +119 -0
  46. data/lib/yoda/ast/conditional_loop_node.rb +15 -0
  47. data/lib/yoda/ast/constant_assignment_node.rb +20 -0
  48. data/lib/yoda/ast/constant_base_node.rb +42 -0
  49. data/lib/yoda/ast/constant_node.rb +53 -0
  50. data/lib/yoda/ast/def_node.rb +27 -0
  51. data/lib/yoda/ast/def_singleton_node.rb +32 -0
  52. data/lib/yoda/ast/empty_vnode.rb +24 -0
  53. data/lib/yoda/ast/ensure_node.rb +15 -0
  54. data/lib/yoda/ast/for_node.rb +20 -0
  55. data/lib/yoda/ast/hash_node.rb +10 -0
  56. data/lib/yoda/ast/if_node.rb +20 -0
  57. data/lib/yoda/ast/interpolation_text_node.rb +10 -0
  58. data/lib/yoda/ast/kwsplat_node.rb +10 -0
  59. data/lib/yoda/ast/left_operator_node.rb +15 -0
  60. data/lib/yoda/ast/literal_node.rb +18 -0
  61. data/lib/yoda/ast/method_traversable.rb +22 -0
  62. data/lib/yoda/ast/module_node.rb +17 -0
  63. data/lib/yoda/ast/multiple_left_hand_side_node.rb +31 -0
  64. data/lib/yoda/ast/name_vnode.rb +28 -0
  65. data/lib/yoda/ast/namespace.rb +36 -0
  66. data/lib/yoda/ast/namespace_traversable.rb +39 -0
  67. data/lib/yoda/ast/node.rb +52 -0
  68. data/lib/yoda/ast/optional_parameter_node.rb +20 -0
  69. data/lib/yoda/ast/pair_node.rb +15 -0
  70. data/lib/yoda/ast/parameter_node.rb +25 -0
  71. data/lib/yoda/ast/parameters_node.rb +62 -0
  72. data/lib/yoda/ast/rescue_clause_node.rb +20 -0
  73. data/lib/yoda/ast/rescue_node.rb +20 -0
  74. data/lib/yoda/ast/root_vnode.rb +48 -0
  75. data/lib/yoda/ast/send_node.rb +100 -0
  76. data/lib/yoda/ast/singleton_class_node.rb +17 -0
  77. data/lib/yoda/ast/special_call_node.rb +10 -0
  78. data/lib/yoda/ast/traversable.rb +34 -0
  79. data/lib/yoda/ast/value_vnode.rb +28 -0
  80. data/lib/yoda/ast/variable_node.rb +15 -0
  81. data/lib/yoda/ast/vnode.rb +170 -0
  82. data/lib/yoda/ast/when_node.rb +15 -0
  83. data/lib/yoda/ast.rb +140 -0
  84. data/lib/yoda/cli/analyze_deps.rb +102 -0
  85. data/lib/yoda/{commands → cli}/base.rb +1 -1
  86. data/lib/yoda/{commands → cli}/complete.rb +12 -9
  87. data/lib/yoda/cli/console.rb +17 -0
  88. data/lib/yoda/{commands → cli}/file_cursor_parsable.rb +1 -1
  89. data/lib/yoda/{commands → cli}/infer.rb +4 -4
  90. data/lib/yoda/cli.rb +117 -0
  91. data/lib/yoda/has_services.rb +40 -0
  92. data/lib/yoda/instrument.rb +14 -5
  93. data/lib/yoda/logger.rb +4 -2
  94. data/lib/yoda/missing_delegatable.rb +34 -0
  95. data/lib/yoda/model/completion_item.rb +43 -11
  96. data/lib/yoda/model/descriptions/base.rb +11 -0
  97. data/lib/yoda/model/descriptions/comment_token_description.rb +46 -0
  98. data/lib/yoda/model/descriptions/function_description.rb +19 -2
  99. data/lib/yoda/model/descriptions/node_description.rb +19 -8
  100. data/lib/yoda/model/descriptions/variable_description.rb +41 -0
  101. data/lib/yoda/model/descriptions.rb +2 -0
  102. data/lib/yoda/model/environment/accessor_interface.rb +43 -0
  103. data/lib/yoda/model/environment/instance_accessor.rb +121 -0
  104. data/lib/yoda/model/environment/namespace_members.rb +104 -0
  105. data/lib/yoda/model/environment/singleton_accessor.rb +66 -0
  106. data/lib/yoda/model/environment/value_factory.rb +151 -0
  107. data/lib/yoda/model/environment/value_resolve_context.rb +62 -0
  108. data/lib/yoda/model/environment/with_cache.rb +14 -0
  109. data/lib/yoda/model/environment.rb +122 -0
  110. data/lib/yoda/model/function_signatures/base.rb +22 -2
  111. data/lib/yoda/model/function_signatures/constructor.rb +17 -1
  112. data/lib/yoda/model/function_signatures/method.rb +18 -2
  113. data/lib/yoda/model/function_signatures/overload.rb +17 -1
  114. data/lib/yoda/model/function_signatures/parameter_list.rb +17 -0
  115. data/lib/yoda/model/function_signatures/rbs_method.rb +91 -0
  116. data/lib/yoda/model/function_signatures/type_builder.rb +63 -31
  117. data/lib/yoda/model/function_signatures/wrapper.rb +46 -0
  118. data/lib/yoda/model/function_signatures.rb +2 -0
  119. data/lib/yoda/model/lexical_context.rb +40 -0
  120. data/lib/yoda/model/node_signatures/base.rb +42 -0
  121. data/lib/yoda/model/node_signatures/const.rb +20 -0
  122. data/lib/yoda/model/node_signatures/method_definition.rb +20 -0
  123. data/lib/yoda/model/node_signatures/node.rb +11 -0
  124. data/lib/yoda/model/node_signatures/send.rb +20 -0
  125. data/lib/yoda/model/node_signatures.rb +35 -0
  126. data/lib/yoda/model/parameters/base.rb +14 -0
  127. data/lib/yoda/model/parameters/binder.rb +148 -0
  128. data/lib/yoda/model/parameters/multiple.rb +36 -0
  129. data/lib/yoda/model/parameters/named.rb +20 -0
  130. data/lib/yoda/model/parameters/unnamed.rb +12 -0
  131. data/lib/yoda/model/parameters.rb +11 -0
  132. data/lib/yoda/model/path.rb +16 -0
  133. data/lib/yoda/model/primary_source_inferencer.rb +34 -0
  134. data/lib/yoda/model/scoped_path.rb +13 -2
  135. data/lib/yoda/model/{types → type_expressions}/any_type.rb +7 -3
  136. data/lib/yoda/model/{types → type_expressions}/base.rb +10 -3
  137. data/lib/yoda/model/{types → type_expressions}/duck_type.rb +8 -2
  138. data/lib/yoda/model/type_expressions/function_type/parameter.rb +95 -0
  139. data/lib/yoda/model/{types → type_expressions}/function_type.rb +61 -70
  140. data/lib/yoda/model/type_expressions/generator.rb +28 -0
  141. data/lib/yoda/model/{types → type_expressions}/generic_type.rb +17 -2
  142. data/lib/yoda/model/{types → type_expressions}/instance_type.rb +10 -2
  143. data/lib/yoda/model/{types → type_expressions}/module_type.rb +7 -1
  144. data/lib/yoda/model/type_expressions/self_type.rb +38 -0
  145. data/lib/yoda/model/{types → type_expressions}/sequence_type.rb +6 -1
  146. data/lib/yoda/model/{types → type_expressions}/union_type.rb +7 -3
  147. data/lib/yoda/model/{types → type_expressions}/unknown_type.rb +6 -1
  148. data/lib/yoda/model/{types → type_expressions}/value_type.rb +17 -1
  149. data/lib/yoda/model/type_expressions/void_type.rb +37 -0
  150. data/lib/yoda/model/type_expressions.rb +40 -0
  151. data/lib/yoda/model/values/base.rb +23 -8
  152. data/lib/yoda/model/values/empty_value.rb +39 -0
  153. data/lib/yoda/model/values/instance_value.rb +24 -43
  154. data/lib/yoda/model/values/intersection_value.rb +48 -0
  155. data/lib/yoda/model/values/literal_value.rb +23 -0
  156. data/lib/yoda/model/values/union_value.rb +50 -0
  157. data/lib/yoda/model/values.rb +5 -1
  158. data/lib/yoda/model/yard_type_parser.rb +35 -0
  159. data/lib/yoda/model.rb +7 -2
  160. data/lib/yoda/parsing/comment_tokenizer.rb +21 -4
  161. data/lib/yoda/parsing/node_objects/args_node.rb +85 -0
  162. data/lib/yoda/parsing/node_objects/const_node.rb +3 -3
  163. data/lib/yoda/parsing/node_objects/mlhs_node.rb +31 -0
  164. data/lib/yoda/parsing/node_objects.rb +2 -0
  165. data/lib/yoda/parsing/parser.rb +44 -5
  166. data/lib/yoda/parsing/query/current_comment_token_query.rb +4 -3
  167. data/lib/yoda/parsing/query/current_commenting_node_query.rb +7 -7
  168. data/lib/yoda/parsing/scopes/base.rb +1 -1
  169. data/lib/yoda/parsing/scopes/builder.rb +1 -1
  170. data/lib/yoda/parsing/source_cutter.rb +6 -2
  171. data/lib/yoda/parsing/traverser/matcher.rb +65 -0
  172. data/lib/yoda/parsing/traverser/query_interface.rb +68 -0
  173. data/lib/yoda/parsing/traverser/result_set.rb +37 -0
  174. data/lib/yoda/parsing/traverser.rb +29 -0
  175. data/lib/yoda/parsing/type_parser.rb +24 -20
  176. data/lib/yoda/parsing.rb +27 -1
  177. data/lib/yoda/presentation/code_completion/constant.rb +27 -0
  178. data/lib/yoda/server/lifecycle_handler.rb +81 -4
  179. data/lib/yoda/server/notifier.rb +131 -0
  180. data/lib/yoda/server/providers/completion.rb +31 -17
  181. data/lib/yoda/server/providers/definition.rb +38 -10
  182. data/lib/yoda/server/providers/hover.rb +26 -10
  183. data/lib/yoda/server/providers/reportable_progress.rb +75 -0
  184. data/lib/yoda/server/providers/signature.rb +20 -7
  185. data/lib/yoda/server/providers/text_document_did_change.rb +1 -1
  186. data/lib/yoda/server/providers/text_document_did_open.rb +1 -1
  187. data/lib/yoda/server/providers/with_timeout.rb +36 -0
  188. data/lib/yoda/server/providers/workspace_did_change_workspace_folders.rb +33 -0
  189. data/lib/yoda/server/providers/workspace_did_create_files.rb +21 -0
  190. data/lib/yoda/server/providers/workspace_did_delete_files.rb +21 -0
  191. data/lib/yoda/server/providers/workspace_did_rename_files.rb +22 -0
  192. data/lib/yoda/server/providers/workspace_symbol.rb +82 -0
  193. data/lib/yoda/server/providers.rb +12 -0
  194. data/lib/yoda/server/root_handler.rb +27 -23
  195. data/lib/yoda/server/rootless_workspace.rb +62 -0
  196. data/lib/yoda/server/scheduler.rb +50 -0
  197. data/lib/yoda/server/session.rb +71 -25
  198. data/lib/yoda/server/uri_decoder.rb +16 -0
  199. data/lib/yoda/server/workspace.rb +117 -0
  200. data/lib/yoda/server.rb +9 -2
  201. data/lib/yoda/services/code_completion/base_provider.rb +52 -0
  202. data/lib/yoda/{evaluation → services}/code_completion/const_provider.rb +35 -25
  203. data/lib/yoda/services/code_completion/keyword_provider.rb +67 -0
  204. data/lib/yoda/services/code_completion/local_variable_provider.rb +51 -0
  205. data/lib/yoda/{evaluation → services}/code_completion/method_provider.rb +14 -32
  206. data/lib/yoda/services/code_completion.rb +74 -0
  207. data/lib/yoda/{evaluation → services}/comment_completion/base_provider.rb +11 -6
  208. data/lib/yoda/{evaluation → services}/comment_completion/param_provider.rb +1 -1
  209. data/lib/yoda/{evaluation → services}/comment_completion/tag_provider.rb +1 -1
  210. data/lib/yoda/{evaluation → services}/comment_completion/type_provider.rb +6 -5
  211. data/lib/yoda/{evaluation → services}/comment_completion.rb +13 -13
  212. data/lib/yoda/services/current_node_explain/comment_signature.rb +77 -0
  213. data/lib/yoda/services/current_node_explain.rb +72 -0
  214. data/lib/yoda/services/evaluator.rb +44 -0
  215. data/lib/yoda/services/signature_discovery.rb +74 -0
  216. data/lib/yoda/services.rb +9 -0
  217. data/lib/yoda/store/actions/build_core_index.rb +38 -9
  218. data/lib/yoda/store/actions/import_core_library.rb +14 -19
  219. data/lib/yoda/store/actions/import_gem.rb +65 -33
  220. data/lib/yoda/store/actions/import_project_dependencies.rb +47 -0
  221. data/lib/yoda/store/actions/import_std_library.rb +13 -18
  222. data/lib/yoda/store/actions/read_file.rb +21 -6
  223. data/lib/yoda/store/actions/read_project_files.rb +7 -1
  224. data/lib/yoda/store/actions.rb +1 -0
  225. data/lib/yoda/store/adapters/base.rb +39 -0
  226. data/lib/yoda/store/adapters/gdbm_adapter/namespace_accessor.rb +152 -0
  227. data/lib/yoda/store/adapters/gdbm_adapter.rb +56 -0
  228. data/lib/yoda/store/adapters/lazy_adapter.rb +34 -0
  229. data/lib/yoda/store/adapters/memory_adapter.rb +21 -0
  230. data/lib/yoda/store/adapters.rb +12 -4
  231. data/lib/yoda/store/config.rb +43 -0
  232. data/lib/yoda/store/file_tree.rb +131 -0
  233. data/lib/yoda/store/objects/base.rb +73 -4
  234. data/lib/yoda/store/objects/class_object.rb +10 -1
  235. data/lib/yoda/store/objects/connected_delegation.rb +25 -0
  236. data/lib/yoda/store/objects/libraries_status.rb +67 -0
  237. data/lib/yoda/store/objects/library/core.rb +72 -0
  238. data/lib/yoda/store/objects/library/gem.rb +141 -0
  239. data/lib/yoda/store/objects/library/std.rb +72 -0
  240. data/lib/yoda/store/objects/library/with_registry.rb +28 -0
  241. data/lib/yoda/store/objects/library.rb +24 -0
  242. data/lib/yoda/store/objects/map.rb +61 -0
  243. data/lib/yoda/store/objects/merger.rb +6 -5
  244. data/lib/yoda/store/objects/meta_class_object.rb +28 -1
  245. data/lib/yoda/store/objects/method_object.rb +39 -6
  246. data/lib/yoda/store/objects/module_object.rb +3 -0
  247. data/lib/yoda/store/objects/namespace_object.rb +38 -1
  248. data/lib/yoda/store/objects/overload.rb +1 -1
  249. data/lib/yoda/store/objects/patch.rb +53 -10
  250. data/lib/yoda/store/objects/serializable.rb +17 -2
  251. data/lib/yoda/store/objects/serializable_set.rb +23 -0
  252. data/lib/yoda/store/objects/tag.rb +1 -1
  253. data/lib/yoda/store/objects/value_object.rb +5 -1
  254. data/lib/yoda/store/objects.rb +5 -1
  255. data/lib/yoda/store/project/dependency.rb +83 -0
  256. data/lib/yoda/store/project/file_finder.rb +101 -0
  257. data/lib/yoda/store/project/rbs_loader.rb +41 -0
  258. data/lib/yoda/store/project/setuper.rb +68 -0
  259. data/lib/yoda/store/project.rb +99 -41
  260. data/lib/yoda/store/query/ancestor_tree.rb +126 -0
  261. data/lib/yoda/store/query/associators/associate_ancestors.rb +2 -83
  262. data/lib/yoda/store/query/associators/associate_methods.rb +2 -2
  263. data/lib/yoda/store/query/constant_member_set.rb +33 -0
  264. data/lib/yoda/store/query/find_constant.rb +22 -4
  265. data/lib/yoda/store/query/find_meta_class.rb +1 -1
  266. data/lib/yoda/store/query/find_method.rb +9 -2
  267. data/lib/yoda/store/query/find_signature.rb +11 -3
  268. data/lib/yoda/store/query/find_workspace_objects.rb +36 -0
  269. data/lib/yoda/store/query/method_member_set.rb +50 -0
  270. data/lib/yoda/store/query.rb +4 -0
  271. data/lib/yoda/store/{registry_cache.rb → registry/cache.rb} +26 -1
  272. data/lib/yoda/store/registry/composer.rb +47 -0
  273. data/lib/yoda/store/registry/index.rb +116 -0
  274. data/lib/yoda/store/registry/library_registry.rb +69 -0
  275. data/lib/yoda/store/registry/library_registry_set.rb +133 -0
  276. data/lib/yoda/store/registry/local_store.rb +38 -0
  277. data/lib/yoda/store/registry/project_registry.rb +72 -0
  278. data/lib/yoda/store/registry.rb +25 -97
  279. data/lib/yoda/store/transformers/core_visibility.rb +61 -0
  280. data/lib/yoda/store/transformers.rb +7 -0
  281. data/lib/yoda/store/version_store.rb +71 -0
  282. data/lib/yoda/store/yard_importer.rb +13 -13
  283. data/lib/yoda/store.rb +15 -2
  284. data/lib/yoda/typing/constant_resolver/cbase_query.rb +14 -0
  285. data/lib/yoda/typing/constant_resolver/member_query.rb +27 -0
  286. data/lib/yoda/typing/constant_resolver/node_tracer.rb +36 -0
  287. data/lib/yoda/typing/constant_resolver/query.rb +59 -0
  288. data/lib/yoda/typing/constant_resolver/relative_base_query.rb +14 -0
  289. data/lib/yoda/typing/constant_resolver.rb +105 -0
  290. data/lib/yoda/typing/contexts/base_context.rb +83 -0
  291. data/lib/yoda/typing/contexts/block_context.rb +14 -0
  292. data/lib/yoda/typing/contexts/context_derivation.rb +59 -0
  293. data/lib/yoda/typing/contexts/method_context.rb +14 -0
  294. data/lib/yoda/typing/contexts/namespace_block_context.rb +29 -0
  295. data/lib/yoda/typing/contexts/namespace_context.rb +14 -0
  296. data/lib/yoda/typing/contexts.rb +25 -0
  297. data/lib/yoda/typing/environment.rb +1 -1
  298. data/lib/yoda/typing/inferencer/arguments.rb +38 -0
  299. data/lib/yoda/typing/inferencer/arguments_binder.rb +24 -0
  300. data/lib/yoda/typing/inferencer/ast_traverser.rb +408 -0
  301. data/lib/yoda/typing/inferencer/method_resolver.rb +81 -0
  302. data/lib/yoda/typing/inferencer/object_resolver.rb +55 -0
  303. data/lib/yoda/typing/inferencer/parameter_binder.rb +176 -0
  304. data/lib/yoda/typing/inferencer/tracer.rb +177 -0
  305. data/lib/yoda/typing/inferencer/type_binding.rb +46 -0
  306. data/lib/yoda/typing/inferencer.rb +52 -0
  307. data/lib/yoda/typing/node_info.rb +78 -0
  308. data/lib/yoda/typing/relation.rb +2 -2
  309. data/lib/yoda/typing/traces/base.rb +2 -2
  310. data/lib/yoda/typing/traces/normal.rb +3 -3
  311. data/lib/yoda/typing/traces/send.rb +4 -4
  312. data/lib/yoda/typing/tree/base.rb +46 -0
  313. data/lib/yoda/typing/tree/begin.rb +15 -0
  314. data/lib/yoda/typing/tree/block.rb +12 -0
  315. data/lib/yoda/typing/tree/case.rb +29 -0
  316. data/lib/yoda/typing/tree/class_tree.rb +31 -0
  317. data/lib/yoda/typing/tree/const.rb +12 -0
  318. data/lib/yoda/typing/tree/constant_assignment.rb +12 -0
  319. data/lib/yoda/typing/tree/defined.rb +11 -0
  320. data/lib/yoda/typing/tree/escape.rb +12 -0
  321. data/lib/yoda/typing/tree/for.rb +8 -0
  322. data/lib/yoda/typing/tree/hash_body.rb +36 -0
  323. data/lib/yoda/typing/tree/if.rb +17 -0
  324. data/lib/yoda/typing/tree/literal.rb +46 -0
  325. data/lib/yoda/typing/tree/literal_with_interpolation.rb +21 -0
  326. data/lib/yoda/typing/tree/logical_assignment.rb +16 -0
  327. data/lib/yoda/typing/tree/logical_operator.rb +15 -0
  328. data/lib/yoda/typing/tree/method.rb +43 -0
  329. data/lib/yoda/typing/tree/module_tree.rb +31 -0
  330. data/lib/yoda/typing/tree/multiple_assignment.rb +20 -0
  331. data/lib/yoda/typing/tree/rescue_body.rb +12 -0
  332. data/lib/yoda/typing/tree/self.rb +11 -0
  333. data/lib/yoda/typing/tree/send.rb +71 -0
  334. data/lib/yoda/typing/tree/singleton_method.rb +47 -0
  335. data/lib/yoda/typing/tree/super.rb +12 -0
  336. data/lib/yoda/typing/tree/variable.rb +20 -0
  337. data/lib/yoda/typing/tree/variable_assignment.rb +20 -0
  338. data/lib/yoda/typing/tree/while.rb +12 -0
  339. data/lib/yoda/typing/tree/yield.rb +12 -0
  340. data/lib/yoda/typing/tree.rb +96 -0
  341. data/lib/yoda/typing/types/any.rb +15 -0
  342. data/lib/yoda/typing/types/associative_array.rb +28 -0
  343. data/lib/yoda/typing/types/base.rb +25 -0
  344. data/lib/yoda/typing/types/converter.rb +67 -0
  345. data/lib/yoda/typing/types/function.rb +68 -0
  346. data/lib/yoda/typing/types/generator.rb +306 -0
  347. data/lib/yoda/typing/types/generic.rb +29 -0
  348. data/lib/yoda/typing/types/instance.rb +30 -0
  349. data/lib/yoda/typing/types/instance_type.rb +74 -0
  350. data/lib/yoda/typing/types/method.rb +39 -0
  351. data/lib/yoda/typing/types/rbs_type_wrapper_interface.rb +44 -0
  352. data/lib/yoda/typing/types/singleton_type.rb +75 -0
  353. data/lib/yoda/typing/types/tuple.rb +24 -0
  354. data/lib/yoda/typing/types/type.rb +60 -0
  355. data/lib/yoda/typing/types/union.rb +38 -0
  356. data/lib/yoda/typing/types/var.rb +38 -0
  357. data/lib/yoda/typing/types.rb +24 -0
  358. data/lib/yoda/typing.rb +5 -2
  359. data/lib/yoda/version.rb +1 -1
  360. data/lib/yoda.rb +6 -2
  361. data/scripts/benchmark.rb +1 -1
  362. data/yoda-language-server.gemspec +16 -15
  363. metadata +334 -111
  364. data/.travis.yml +0 -8
  365. data/client/vscode/src/test/index.ts +0 -24
  366. data/lib/yoda/commands/setup.rb +0 -51
  367. data/lib/yoda/commands.rb +0 -69
  368. data/lib/yoda/evaluation/code_completion/base_provider.rb +0 -57
  369. data/lib/yoda/evaluation/code_completion/variable_provider.rb +0 -18
  370. data/lib/yoda/evaluation/code_completion.rb +0 -65
  371. data/lib/yoda/evaluation/current_node_explain.rb +0 -71
  372. data/lib/yoda/evaluation/evaluator.rb +0 -105
  373. data/lib/yoda/evaluation/signature_discovery.rb +0 -85
  374. data/lib/yoda/evaluation.rb +0 -9
  375. data/lib/yoda/model/node_signature.rb +0 -43
  376. data/lib/yoda/model/types.rb +0 -84
  377. data/lib/yoda/model/values/module_value.rb +0 -72
  378. data/lib/yoda/parsing/source_analyzer.rb +0 -59
  379. data/lib/yoda/server/file_store.rb +0 -57
  380. data/lib/yoda/store/adapters/leveldb_adapter.rb +0 -80
  381. data/lib/yoda/store/adapters/lmdb_adapter.rb +0 -113
  382. data/lib/yoda/store/objects/project_status.rb +0 -169
  383. data/lib/yoda/store/project/cache.rb +0 -78
  384. data/lib/yoda/store/project/library_doc_loader.rb +0 -114
  385. data/lib/yoda/typing/context.rb +0 -96
  386. data/lib/yoda/typing/evaluator.rb +0 -259
  387. data/scripts/build_core_index.sh +0 -16
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 715586351d4d461d35dd89cd858dcc1f886508e7b8ed1f8ba82c071130ecb7d7
4
- data.tar.gz: 932d126f234752431363cabdc461c8c2abfc7546293134074986e08678427914
3
+ metadata.gz: 18cb55e5cd8509c2745109f37bd32b94347a2f6740bf982dbcc7d2d436070410
4
+ data.tar.gz: cd748b6986f9f673646c50b69806c8459023e2ed398fe3ced988b2e0b6c654eb
5
5
  SHA512:
6
- metadata.gz: 57e1304da036c27fc3f945c92cfe4bb7ac7d9c0d22f30cf4b6664bf647e833f62c6df31cb5618094c63824b58769648739bcd7771ffb7163310c017f9fbb9604
7
- data.tar.gz: 6c76098551ddcd5be50d022ba649acc527bc0c173fbc49322add37914e91cc12fc479c928fabb43d7f2954dd94fab0c7d3660fdf2ce485f6d863fe9af7619ba5
6
+ metadata.gz: 4a66918e474a09349c98587414d01f71efcd232724ce9a9854634eeb79ed0ca83a4f848a9bd2250f99540b3b80a5649512610ed16f3a85f2be7de748a2bdf827
7
+ data.tar.gz: 7b3021e01a8b3415154f7746a6009d1043065f094070119c588c203e4b839340fbf0950bfe7e2aa7cba3d9b7c4ea12951efed6f9efeab729dde08673513768e0
@@ -0,0 +1,23 @@
1
+ name: Test
2
+
3
+ on:
4
+ push:
5
+
6
+ jobs:
7
+ test:
8
+ strategy:
9
+ fail-fast: false
10
+ matrix:
11
+ ruby: ["2.6", "2.7", "3.0", "3.1"]
12
+ runs-on: ubuntu-latest
13
+ steps:
14
+ - uses: actions/checkout@v2
15
+ - name: Install dependency packages
16
+ run: |
17
+ sudo apt update --quiet --yes
18
+ sudo apt install libgdbm6 libgdbm-dev
19
+ - uses: ruby/setup-ruby@v1
20
+ with:
21
+ ruby-version: ${{ matrix.ruby }}
22
+ bundler-cache: true
23
+ - run: bundle exec rake
data/.gitignore CHANGED
@@ -14,4 +14,4 @@
14
14
  /yarn-error.log
15
15
 
16
16
  /core/
17
- Gemfile.lock
17
+ /Gemfile.lock
data/.rspec CHANGED
@@ -1,3 +1,4 @@
1
1
  --format documentation
2
2
  --color
3
3
  --require spec_helper
4
+ --exclude-pattern "spec/support/sample_projects/**/*_spec.rb"
data/Gemfile CHANGED
@@ -4,3 +4,5 @@ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
4
 
5
5
  # Specify your gem's dependencies in yoda.gemspec
6
6
  gemspec
7
+
8
+ gem 'simplecov', require: false, group: :test
data/README.md CHANGED
@@ -1,11 +1,21 @@
1
1
  # Yoda [![Build Status](https://travis-ci.org/tomoasleep/yoda.svg?branch=master)](https://travis-ci.org/tomoasleep/yoda)
2
2
 
3
- Yoda is a Language Server (http://langserver.org/) for Ruby and provides autocompletion and code analysis (go-to-definition, code information, etc...).
3
+ Yoda is a Language Server (http://langserver.org/) for Ruby.
4
+ Yoda infers signatures of your Ruby program and its dependencies from various data sources (RBS and YARD documentation) and provides autocompletion and code analysis (go-to-definition, code information, etc...).
4
5
 
5
6
  **Note: Yoda is alpha version. Please use with caution. Contributions are welcome!**
6
7
 
7
8
  ## Instation and Usage
8
9
 
10
+ ## Getting Started
11
+
12
+ ```bash
13
+ rake install # Install language server
14
+ rake vscode:install # Install vscode plugin
15
+ ```
16
+
17
+ ### Install language server
18
+
9
19
  Yoda is hosted on RubyGems.
10
20
 
11
21
  ```
@@ -23,9 +33,9 @@ $ yoda infer path-to-your-code:line_num:char_num # Show information of the code
23
33
  $ yoda complete <path-to-your-code>:<line-num>:<char-num> # Show completion at the specified position.
24
34
  ```
25
35
 
26
- ## Installation of Editor Plugin
36
+ ### Installation of Editor Plugin
27
37
 
28
- ### Atom
38
+ #### Atom
29
39
 
30
40
  ```
31
41
  apm install tomoasleep/yoda
@@ -33,9 +43,11 @@ apm install tomoasleep/yoda
33
43
 
34
44
  ### VSCode
35
45
 
36
- TBW
46
+ ```
47
+ rake vscode:install
48
+ ```
37
49
 
38
- ### Vim/NeoVim
50
+ #### Vim/NeoVim
39
51
 
40
52
  Please use language server client such as [LanguageClient-neovim](https://github.com/autozimu/LanguageClient-neovim).
41
53
  Here is a configuration example for LanguageClient-neovim.
@@ -46,7 +58,7 @@ let g:LanguageClient_serverCommands = {
46
58
  \ }
47
59
  ```
48
60
 
49
- ### Emacs
61
+ #### Emacs
50
62
 
51
63
  TBW
52
64
 
@@ -68,16 +80,16 @@ Your project codes are parsed at startup but does not stored in indexes.
68
80
  - autocompletion
69
81
  - [x] method completion
70
82
  - [x] constant completion
71
- - [ ] (local, class, instance) variable completion
72
- - :small_red_triangle: comment completion
83
+ - [x] (local, class, instance) variable completion
84
+ - comment completion
73
85
  - [x] YARD tag completion
74
86
  - [x] YARD type literal completion
75
- - [ ] parameter completion
87
+ - [x] parameter completion
76
88
  - [x] jump to definition
77
89
  - [x] hover
78
90
  - [x] signature help
79
- - [ ] find references
80
- - [ ] workspace symbols
91
+ - [x] find references
92
+ - [x] workspace symbols
81
93
  - [ ] diagnostics
82
94
 
83
95
  ## Development
data/Rakefile CHANGED
@@ -4,3 +4,35 @@ require "rspec/core/rake_task"
4
4
  RSpec::Core::RakeTask.new(:spec)
5
5
 
6
6
  task :default => :spec
7
+
8
+ namespace :vscode do
9
+ desc "Install dependencies of vscode extension"
10
+ task :deps do
11
+ Dir.chdir(File.expand_path("./client/vscode", __dir__)) do
12
+ sh "npm ci"
13
+ end
14
+ end
15
+
16
+ desc "Build vscode extension"
17
+ task build: :deps do
18
+ Dir.chdir(File.expand_path("./client/vscode", __dir__)) do
19
+ # See: https://code.visualstudio.com/api/working-with-extensions/publishing-extension
20
+ sh "npm run package"
21
+ end
22
+ end
23
+
24
+ desc "Test vscode extension"
25
+ task test: :deps do
26
+ Dir.chdir(File.expand_path("./client/vscode", __dir__)) do
27
+ sh "npm test"
28
+ end
29
+ end
30
+
31
+ desc "Install vscode extension"
32
+ task install: :build do
33
+ Dir.chdir(File.expand_path("./client/vscode", __dir__)) do
34
+ # See: https://code.visualstudio.com/docs/editor/extension-marketplace#_install-from-a-vsix
35
+ sh "code --install-extension yoda-*.vsix"
36
+ end
37
+ end
38
+ end
data/bin/bench ADDED
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ if Dir.exist?(File.join(__dir__, "..", ".git"))
4
+ $LOAD_PATH.unshift(File.expand_path('../lib', __dir__))
5
+ end
6
+
7
+ require 'yoda'
8
+ require 'stackprof'
9
+
10
+ StackProf.run(mode: :cpu, raw: true, out: 'tmp/stackprof-yoda.dump') do
11
+ Yoda::Runner::Setup.run(File.expand_path('~/src/github.com/increments/Qiita'))
12
+ end
data/bin/local ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ if Dir.exist?(File.join(__dir__, "..", ".git"))
4
+ $LOAD_PATH.unshift(File.expand_path('../lib', __dir__))
5
+ end
6
+
7
+ exec(ARGV.join(' '))
@@ -0,0 +1 @@
1
+ node_modules/
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "yoda",
3
- "main": "./client/atom/main.js",
3
+ "main": "./main.js",
4
4
  "version": "0.0.0",
5
5
  "description": "Ruby completion engine",
6
6
  "keywords": [],
File without changes
@@ -1,4 +1,4 @@
1
1
  out
2
2
  node_modules
3
3
  .vscode-test/
4
- .vsix
4
+ *.vsix
@@ -2,17 +2,6 @@
2
2
  {
3
3
  "version": "0.1.0",
4
4
  "configurations": [
5
- {
6
- "name": "Extension",
7
- "type": "extensionHost",
8
- "request": "launch",
9
- "runtimeExecutable": "${execPath}",
10
- "args": ["--extensionDevelopmentPath=${workspaceRoot}" ],
11
- "stopOnEntry": false,
12
- "sourceMaps": true,
13
- "outFiles": [ "${workspaceRoot}/out/**/*.js" ],
14
- "preLaunchTask": "npm: watch"
15
- },
16
5
  {
17
6
  "name": "Language Server E2E Test",
18
7
  "type": "extensionHost",
@@ -5,5 +5,9 @@
5
5
  },
6
6
  "search.exclude": {
7
7
  "out": true // set this to false to include "out" folder in search results
8
+ },
9
+ "yoda.trace.server": {
10
+ "format": "message",
11
+ "verbosity": "verbose"
8
12
  }
9
- }
13
+ }
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2017 Tomoya Chiba
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -1,65 +1,14 @@
1
- # yoda README
2
-
3
- This is the README for your extension "yoda". After writing up a brief description, we recommend including the following sections.
1
+ # yoda
4
2
 
5
3
  ## Features
6
4
 
7
- Describe specific features of your extension including screenshots of your extension in action. Image paths are relative to this README file.
8
-
9
- For example if there is an image subfolder under your extension project workspace:
10
-
11
- \!\[feature X\]\(images/feature-x.png\)
12
-
13
- > Tip: Many popular extensions utilize animations. This is an excellent way to show off your extension! We recommend short, focused animations that are easy to follow.
14
5
 
15
6
  ## Requirements
16
7
 
17
- If you have any requirements or dependencies, add a section describing those and how to install and configure them.
18
-
19
- ## Extension Settings
20
-
21
- Include if your extension adds any VS Code settings through the `contributes.configuration` extension point.
22
-
23
- For example:
24
-
25
- This extension contributes the following settings:
26
-
27
- * `myExtension.enable`: enable/disable this extension
28
- * `myExtension.thing`: set to `blah` to do something
29
-
30
- ## Known Issues
31
-
32
- Calling out known issues can help limit users opening duplicate issues against your extension.
8
+ Install yoda.
33
9
 
34
10
  ## Release Notes
35
11
 
36
- Users appreciate release notes as you update your extension.
37
-
38
- ### 1.0.0
39
-
40
- Initial release of ...
41
-
42
- ### 1.0.1
43
-
44
- Fixed issue #.
45
-
46
- ### 1.1.0
47
-
48
- Added features X, Y, and Z.
49
-
50
- -----------------------------------------------------------------------------------------------------------
51
-
52
- ## Working with Markdown
53
-
54
- **Note:** You can author your README using Visual Studio Code. Here are some useful editor keyboard shortcuts:
55
-
56
- * Split the editor (`Cmd+\` on OSX or `Ctrl+\` on Windows and Linux)
57
- * Toggle preview (`Shift+CMD+V` on OSX or `Shift+Ctrl+V` on Windows and Linux)
58
- * Press `Ctrl+Space` (Windows, Linux) or `Cmd+Space` (OSX) to see a list of Markdown snippets
59
-
60
- ### For more information
61
-
62
- * [Visual Studio Code's Markdown Support](http://code.visualstudio.com/docs/languages/markdown)
63
- * [Markdown Syntax Reference](https://help.github.com/articles/markdown-basics/)
12
+ ### 0.0.1
64
13
 
65
- **Enjoy!**
14
+ Initial release