steep 1.6.0 → 1.7.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (453) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +0 -1
  3. data/CHANGELOG.md +49 -0
  4. data/README.md +18 -0
  5. data/Rakefile +5 -0
  6. data/bin/output_test.rb +1 -0
  7. data/doc/narrowing.md +195 -0
  8. data/doc/shape.md +194 -0
  9. data/guides/src/gem-rbs-collection/gem-rbs-collection.md +7 -24
  10. data/guides/src/getting-started/getting-started.md +10 -11
  11. data/lib/steep/ast/ignore.rb +148 -0
  12. data/lib/steep/ast/types/factory.rb +27 -18
  13. data/lib/steep/ast/types/helper.rb +4 -0
  14. data/lib/steep/ast/types/intersection.rb +7 -0
  15. data/lib/steep/ast/types/proc.rb +14 -9
  16. data/lib/steep/ast/types/record.rb +7 -0
  17. data/lib/steep/ast/types/tuple.rb +7 -0
  18. data/lib/steep/ast/types/union.rb +7 -0
  19. data/lib/steep/cli.rb +6 -1
  20. data/lib/steep/diagnostic/ruby.rb +16 -0
  21. data/lib/steep/drivers/stats.rb +2 -2
  22. data/lib/steep/drivers/utils/driver_helper.rb +22 -11
  23. data/lib/steep/drivers/validate.rb +4 -2
  24. data/lib/steep/expectations.rb +2 -2
  25. data/lib/steep/interface/block.rb +1 -1
  26. data/lib/steep/interface/builder.rb +342 -358
  27. data/lib/steep/interface/function.rb +82 -11
  28. data/lib/steep/interface/method_type.rb +18 -10
  29. data/lib/steep/interface/shape.rb +69 -18
  30. data/lib/steep/interface/substitution.rb +4 -0
  31. data/lib/steep/node_helper.rb +30 -1
  32. data/lib/steep/project/dsl.rb +18 -21
  33. data/lib/steep/project/options.rb +39 -2
  34. data/lib/steep/project/pattern.rb +1 -2
  35. data/lib/steep/project.rb +11 -7
  36. data/lib/steep/rake_task.rb +132 -0
  37. data/lib/steep/server/change_buffer.rb +2 -2
  38. data/lib/steep/server/interaction_worker.rb +67 -11
  39. data/lib/steep/server/lsp_formatter.rb +2 -0
  40. data/lib/steep/server/worker_process.rb +3 -1
  41. data/lib/steep/services/completion_provider.rb +59 -26
  42. data/lib/steep/services/file_loader.rb +15 -19
  43. data/lib/steep/services/signature_help_provider.rb +37 -35
  44. data/lib/steep/services/type_check_service.rb +36 -8
  45. data/lib/steep/signature/validator.rb +185 -133
  46. data/lib/steep/source/ignore_ranges.rb +69 -0
  47. data/lib/steep/source.rb +10 -4
  48. data/lib/steep/subtyping/check.rb +50 -43
  49. data/lib/steep/subtyping/result.rb +6 -0
  50. data/lib/steep/subtyping/variable_variance.rb +3 -3
  51. data/lib/steep/test.rb +9 -0
  52. data/lib/steep/type_construction.rb +205 -309
  53. data/lib/steep/type_inference/block_params.rb +12 -4
  54. data/lib/steep/type_inference/case_when.rb +301 -0
  55. data/lib/steep/type_inference/context.rb +1 -1
  56. data/lib/steep/type_inference/logic_type_interpreter.rb +3 -2
  57. data/lib/steep/type_inference/method_params.rb +16 -0
  58. data/lib/steep/type_inference/send_args.rb +5 -2
  59. data/lib/steep/version.rb +1 -1
  60. data/lib/steep.rb +25 -8
  61. data/steep.gemspec +5 -2
  62. metadata +12 -396
  63. data/.github/dependabot.yml +0 -22
  64. data/.github/workflows/ruby-windows.yml +0 -34
  65. data/.github/workflows/ruby.yml +0 -33
  66. data/.vscode/steep-shared.code-snippets +0 -41
  67. data/Gemfile +0 -14
  68. data/Gemfile.lock +0 -104
  69. data/Gemfile.steep +0 -0
  70. data/gemfile_steep/Gemfile +0 -3
  71. data/gemfile_steep/Gemfile.lock +0 -64
  72. data/rbs_collection.steep.lock.yaml +0 -106
  73. data/rbs_collection.steep.yaml +0 -23
  74. data/sig/shims/bundler.rbs +0 -3
  75. data/sig/shims/concurrent-ruby.rbs +0 -39
  76. data/sig/shims/exception.rbs +0 -4
  77. data/sig/shims/language-server_protocol.rbs +0 -450
  78. data/sig/shims/parser/comment.rbs +0 -33
  79. data/sig/shims/parser/nodes.rbs +0 -252
  80. data/sig/shims/parser/source/map.rbs +0 -146
  81. data/sig/shims/parser/source/range.rbs +0 -237
  82. data/sig/shims/parser.rbs +0 -59
  83. data/sig/shims/string.rbs +0 -4
  84. data/sig/shims/tagged_logging.rbs +0 -6
  85. data/sig/steep/annotation_parser.rbs +0 -60
  86. data/sig/steep/ast/annotation/collection.rbs +0 -78
  87. data/sig/steep/ast/annotation.rbs +0 -121
  88. data/sig/steep/ast/builtin.rbs +0 -69
  89. data/sig/steep/ast/node/type_application.rbs +0 -31
  90. data/sig/steep/ast/node/type_assertion.rbs +0 -32
  91. data/sig/steep/ast/types/any.rbs +0 -29
  92. data/sig/steep/ast/types/boolean.rbs +0 -31
  93. data/sig/steep/ast/types/bot.rbs +0 -29
  94. data/sig/steep/ast/types/class.rbs +0 -33
  95. data/sig/steep/ast/types/factory.rbs +0 -110
  96. data/sig/steep/ast/types/helper.rbs +0 -22
  97. data/sig/steep/ast/types/instance.rbs +0 -33
  98. data/sig/steep/ast/types/intersection.rbs +0 -38
  99. data/sig/steep/ast/types/literal.rbs +0 -35
  100. data/sig/steep/ast/types/logic.rbs +0 -83
  101. data/sig/steep/ast/types/name.rbs +0 -80
  102. data/sig/steep/ast/types/nil.rbs +0 -31
  103. data/sig/steep/ast/types/proc.rbs +0 -53
  104. data/sig/steep/ast/types/record.rbs +0 -37
  105. data/sig/steep/ast/types/self.rbs +0 -33
  106. data/sig/steep/ast/types/top.rbs +0 -29
  107. data/sig/steep/ast/types/tuple.rbs +0 -35
  108. data/sig/steep/ast/types/union.rbs +0 -38
  109. data/sig/steep/ast/types/var.rbs +0 -42
  110. data/sig/steep/ast/types/void.rbs +0 -29
  111. data/sig/steep/ast/types.rbs +0 -16
  112. data/sig/steep/cli.rbs +0 -55
  113. data/sig/steep/diagnostic/deprecated/else_on_exhaustive_case.rbs +0 -13
  114. data/sig/steep/diagnostic/deprecated/unknown_constant_assigned.rbs +0 -15
  115. data/sig/steep/diagnostic/helper.rbs +0 -15
  116. data/sig/steep/diagnostic/lsp_formatter.rbs +0 -36
  117. data/sig/steep/diagnostic/ruby.rbs +0 -695
  118. data/sig/steep/diagnostic/signature.rbs +0 -252
  119. data/sig/steep/drivers/annotations.rbs +0 -17
  120. data/sig/steep/drivers/check.rbs +0 -33
  121. data/sig/steep/drivers/checkfile.rbs +0 -27
  122. data/sig/steep/drivers/diagnostic_printer.rbs +0 -25
  123. data/sig/steep/drivers/init.rbs +0 -19
  124. data/sig/steep/drivers/langserver.rbs +0 -36
  125. data/sig/steep/drivers/print_project.rbs +0 -15
  126. data/sig/steep/drivers/stats.rbs +0 -47
  127. data/sig/steep/drivers/utils/driver_helper.rbs +0 -25
  128. data/sig/steep/drivers/utils/jobs_option.rbs +0 -19
  129. data/sig/steep/drivers/validate.rbs +0 -15
  130. data/sig/steep/drivers/vendor.rbs +0 -19
  131. data/sig/steep/drivers/watch.rbs +0 -27
  132. data/sig/steep/drivers/worker.rbs +0 -29
  133. data/sig/steep/equatable.rbs +0 -11
  134. data/sig/steep/expectations.rbs +0 -72
  135. data/sig/steep/index/rbs_index.rbs +0 -141
  136. data/sig/steep/index/signature_symbol_provider.rbs +0 -41
  137. data/sig/steep/index/source_index.rbs +0 -63
  138. data/sig/steep/interface/block.rbs +0 -41
  139. data/sig/steep/interface/builder.rbs +0 -166
  140. data/sig/steep/interface/function.rbs +0 -265
  141. data/sig/steep/interface/method_type.rbs +0 -105
  142. data/sig/steep/interface/shape.rbs +0 -61
  143. data/sig/steep/interface/substitution.rbs +0 -49
  144. data/sig/steep/interface/type_param.rbs +0 -43
  145. data/sig/steep/method_name.rbs +0 -30
  146. data/sig/steep/module_helper.rbs +0 -16
  147. data/sig/steep/node_helper.rbs +0 -78
  148. data/sig/steep/path_helper.rbs +0 -15
  149. data/sig/steep/project/dsl.rbs +0 -104
  150. data/sig/steep/project/options.rbs +0 -27
  151. data/sig/steep/project/pattern.rbs +0 -47
  152. data/sig/steep/project/target.rbs +0 -25
  153. data/sig/steep/project.rbs +0 -26
  154. data/sig/steep/range_extension.rbs +0 -7
  155. data/sig/steep/server/base_worker.rbs +0 -49
  156. data/sig/steep/server/change_buffer.rbs +0 -36
  157. data/sig/steep/server/delay_queue.rbs +0 -37
  158. data/sig/steep/server/interaction_worker.rbs +0 -80
  159. data/sig/steep/server/lsp_formatter.rbs +0 -63
  160. data/sig/steep/server/master.rbs +0 -299
  161. data/sig/steep/server/type_check_worker.rbs +0 -141
  162. data/sig/steep/server/worker_process.rbs +0 -97
  163. data/sig/steep/services/completion_provider.rbs +0 -251
  164. data/sig/steep/services/content_change.rbs +0 -37
  165. data/sig/steep/services/file_loader.rbs +0 -21
  166. data/sig/steep/services/goto_service.rbs +0 -106
  167. data/sig/steep/services/hover_provider/rbs.rbs +0 -47
  168. data/sig/steep/services/hover_provider/ruby.rbs +0 -127
  169. data/sig/steep/services/hover_provider/singleton_methods.rbs +0 -11
  170. data/sig/steep/services/path_assignment.rbs +0 -21
  171. data/sig/steep/services/signature_help_provider.rbs +0 -49
  172. data/sig/steep/services/signature_service.rbs +0 -156
  173. data/sig/steep/services/stats_calculator.rbs +0 -41
  174. data/sig/steep/services/type_check_service.rbs +0 -107
  175. data/sig/steep/services/type_name_completion.rbs +0 -135
  176. data/sig/steep/signature/validator.rbs +0 -85
  177. data/sig/steep/source.rbs +0 -102
  178. data/sig/steep/subtyping/cache.rbs +0 -17
  179. data/sig/steep/subtyping/check.rbs +0 -129
  180. data/sig/steep/subtyping/constraints.rbs +0 -111
  181. data/sig/steep/subtyping/relation.rbs +0 -63
  182. data/sig/steep/subtyping/result.rbs +0 -175
  183. data/sig/steep/subtyping/variable_variance.rbs +0 -25
  184. data/sig/steep/thread_waiter.rbs +0 -13
  185. data/sig/steep/type_construction.rbs +0 -567
  186. data/sig/steep/type_inference/block_params.rbs +0 -170
  187. data/sig/steep/type_inference/constant_env.rbs +0 -29
  188. data/sig/steep/type_inference/context.rbs +0 -214
  189. data/sig/steep/type_inference/context_array.rbs +0 -38
  190. data/sig/steep/type_inference/logic_type_interpreter.rbs +0 -108
  191. data/sig/steep/type_inference/method_call.rbs +0 -124
  192. data/sig/steep/type_inference/method_params.rbs +0 -127
  193. data/sig/steep/type_inference/multiple_assignment.rbs +0 -76
  194. data/sig/steep/type_inference/send_args.rbs +0 -243
  195. data/sig/steep/type_inference/type_env.rbs +0 -160
  196. data/sig/steep/type_inference/type_env_builder.rbs +0 -81
  197. data/sig/steep/typing.rbs +0 -75
  198. data/sig/steep.rbs +0 -36
  199. data/smoke/alias/Steepfile +0 -6
  200. data/smoke/alias/a.rb +0 -16
  201. data/smoke/alias/a.rbs +0 -10
  202. data/smoke/alias/b.rb +0 -6
  203. data/smoke/alias/c.rb +0 -8
  204. data/smoke/alias/test_expectations.yml +0 -96
  205. data/smoke/and/Steepfile +0 -6
  206. data/smoke/and/a.rb +0 -8
  207. data/smoke/and/test_expectations.yml +0 -29
  208. data/smoke/array/Steepfile +0 -6
  209. data/smoke/array/a.rb +0 -18
  210. data/smoke/array/b.rb +0 -12
  211. data/smoke/array/c.rb +0 -6
  212. data/smoke/array/test_expectations.yml +0 -103
  213. data/smoke/block/Steepfile +0 -6
  214. data/smoke/block/a.rb +0 -10
  215. data/smoke/block/a.rbs +0 -6
  216. data/smoke/block/b.rb +0 -13
  217. data/smoke/block/c.rb +0 -9
  218. data/smoke/block/c.rbs +0 -3
  219. data/smoke/block/d.rb +0 -11
  220. data/smoke/block/e.rb +0 -12
  221. data/smoke/block/e.rbs +0 -4
  222. data/smoke/block/test_expectations.yml +0 -133
  223. data/smoke/case/Steepfile +0 -6
  224. data/smoke/case/a.rb +0 -18
  225. data/smoke/case/test_expectations.yml +0 -47
  226. data/smoke/class/Steepfile +0 -6
  227. data/smoke/class/a.rb +0 -25
  228. data/smoke/class/a.rbs +0 -23
  229. data/smoke/class/b.rb +0 -5
  230. data/smoke/class/c.rb +0 -9
  231. data/smoke/class/f.rb +0 -10
  232. data/smoke/class/g.rb +0 -6
  233. data/smoke/class/h.rb +0 -19
  234. data/smoke/class/h.rbs +0 -6
  235. data/smoke/class/i.rb +0 -14
  236. data/smoke/class/i.rbs +0 -9
  237. data/smoke/class/test_expectations.yml +0 -117
  238. data/smoke/compact/Steepfile +0 -6
  239. data/smoke/compact/a.rb +0 -2
  240. data/smoke/compact/a.rbs +0 -5
  241. data/smoke/compact/b.rb +0 -2
  242. data/smoke/compact/test_expectations.yml +0 -18
  243. data/smoke/const/Steepfile +0 -6
  244. data/smoke/const/a.rb +0 -27
  245. data/smoke/const/b.rb +0 -7
  246. data/smoke/const/b.rbs +0 -5
  247. data/smoke/const/test_expectations.yml +0 -134
  248. data/smoke/diagnostics/Steepfile +0 -6
  249. data/smoke/diagnostics/a.rbs +0 -22
  250. data/smoke/diagnostics/argument_type_mismatch.rb +0 -1
  251. data/smoke/diagnostics/block_body_type_mismatch.rb +0 -1
  252. data/smoke/diagnostics/block_type_mismatch.rb +0 -3
  253. data/smoke/diagnostics/break_type_mismatch.rb +0 -1
  254. data/smoke/diagnostics/different_method_parameter_kind.rb +0 -9
  255. data/smoke/diagnostics/else_on_exhaustive_case.rb +0 -12
  256. data/smoke/diagnostics/incompatible_annotation.rb +0 -6
  257. data/smoke/diagnostics/incompatible_argument.rb +0 -1
  258. data/smoke/diagnostics/incompatible_assignment.rb +0 -8
  259. data/smoke/diagnostics/method_arity_mismatch.rb +0 -11
  260. data/smoke/diagnostics/method_body_type_mismatch.rb +0 -6
  261. data/smoke/diagnostics/method_definition_missing.rb +0 -2
  262. data/smoke/diagnostics/method_parameter_mismatch.rb +0 -10
  263. data/smoke/diagnostics/method_return_type_annotation_mismatch.rb +0 -7
  264. data/smoke/diagnostics/missing_keyword.rb +0 -1
  265. data/smoke/diagnostics/no_method.rb +0 -1
  266. data/smoke/diagnostics/proc_type_expected.rb +0 -3
  267. data/smoke/diagnostics/required_block_missing.rb +0 -1
  268. data/smoke/diagnostics/return_type_mismatch.rb +0 -6
  269. data/smoke/diagnostics/test_expectations.yml +0 -591
  270. data/smoke/diagnostics/unexpected_block_given.rb +0 -1
  271. data/smoke/diagnostics/unexpected_dynamic_method.rb +0 -3
  272. data/smoke/diagnostics/unexpected_jump.rb +0 -4
  273. data/smoke/diagnostics/unexpected_jump_value.rb +0 -3
  274. data/smoke/diagnostics/unexpected_keyword.rb +0 -1
  275. data/smoke/diagnostics/unexpected_splat.rb +0 -1
  276. data/smoke/diagnostics/unexpected_yield.rb +0 -6
  277. data/smoke/diagnostics/unknown_constant_assigned.rb +0 -7
  278. data/smoke/diagnostics/unresolved_overloading.rb +0 -1
  279. data/smoke/diagnostics/unsupported_syntax.rb +0 -2
  280. data/smoke/diagnostics-rbs/Steepfile +0 -8
  281. data/smoke/diagnostics-rbs/duplicated-method-definition.rbs +0 -20
  282. data/smoke/diagnostics-rbs/generic-parameter-mismatch.rbs +0 -7
  283. data/smoke/diagnostics-rbs/inherit-module.rbs +0 -2
  284. data/smoke/diagnostics-rbs/invalid-method-overload.rbs +0 -3
  285. data/smoke/diagnostics-rbs/invalid-type-application.rbs +0 -7
  286. data/smoke/diagnostics-rbs/invalid_variance_annotation.rbs +0 -3
  287. data/smoke/diagnostics-rbs/mixin-class-error.rbs +0 -6
  288. data/smoke/diagnostics-rbs/nonregular-type-alias.rbs +0 -3
  289. data/smoke/diagnostics-rbs/recursive-alias.rbs +0 -5
  290. data/smoke/diagnostics-rbs/recursive-class.rbs +0 -8
  291. data/smoke/diagnostics-rbs/recursive-type-alias.rbs +0 -3
  292. data/smoke/diagnostics-rbs/superclass-mismatch.rbs +0 -7
  293. data/smoke/diagnostics-rbs/test_expectations.yml +0 -300
  294. data/smoke/diagnostics-rbs/unknown-method-alias.rbs +0 -3
  295. data/smoke/diagnostics-rbs/unknown-type-name-2.rbs +0 -5
  296. data/smoke/diagnostics-rbs/unknown-type-name.rbs +0 -13
  297. data/smoke/diagnostics-rbs-duplicated/Steepfile +0 -6
  298. data/smoke/diagnostics-rbs-duplicated/a.rbs +0 -5
  299. data/smoke/diagnostics-rbs-duplicated/test_expectations.yml +0 -13
  300. data/smoke/diagnostics-ruby-unsat/Steepfile +0 -6
  301. data/smoke/diagnostics-ruby-unsat/a.rbs +0 -3
  302. data/smoke/diagnostics-ruby-unsat/test_expectations.yml +0 -27
  303. data/smoke/diagnostics-ruby-unsat/unsatisfiable_constraint.rb +0 -6
  304. data/smoke/dstr/Steepfile +0 -6
  305. data/smoke/dstr/a.rb +0 -5
  306. data/smoke/dstr/test_expectations.yml +0 -13
  307. data/smoke/ensure/Steepfile +0 -6
  308. data/smoke/ensure/a.rb +0 -18
  309. data/smoke/ensure/test_expectations.yml +0 -62
  310. data/smoke/enumerator/Steepfile +0 -6
  311. data/smoke/enumerator/a.rb +0 -6
  312. data/smoke/enumerator/b.rb +0 -17
  313. data/smoke/enumerator/test_expectations.yml +0 -47
  314. data/smoke/extension/Steepfile +0 -6
  315. data/smoke/extension/a.rb +0 -10
  316. data/smoke/extension/a.rbs +0 -13
  317. data/smoke/extension/b.rb +0 -10
  318. data/smoke/extension/c.rb +0 -9
  319. data/smoke/extension/d.rb +0 -2
  320. data/smoke/extension/e.rb +0 -2
  321. data/smoke/extension/e.rbs +0 -7
  322. data/smoke/extension/f.rb +0 -2
  323. data/smoke/extension/f.rbs +0 -3
  324. data/smoke/extension/test_expectations.yml +0 -73
  325. data/smoke/hash/Steepfile +0 -6
  326. data/smoke/hash/a.rb +0 -17
  327. data/smoke/hash/a.rbs +0 -8
  328. data/smoke/hash/b.rb +0 -6
  329. data/smoke/hash/c.rb +0 -15
  330. data/smoke/hash/d.rb +0 -5
  331. data/smoke/hash/e.rb +0 -1
  332. data/smoke/hash/e.rbs +0 -3
  333. data/smoke/hash/f.rb +0 -11
  334. data/smoke/hash/test_expectations.yml +0 -81
  335. data/smoke/hello/Steepfile +0 -6
  336. data/smoke/hello/hello.rb +0 -11
  337. data/smoke/hello/hello.rbs +0 -7
  338. data/smoke/hello/test_expectations.yml +0 -25
  339. data/smoke/if/Steepfile +0 -6
  340. data/smoke/if/a.rb +0 -20
  341. data/smoke/if/test_expectations.yml +0 -34
  342. data/smoke/implements/Steepfile +0 -6
  343. data/smoke/implements/a.rb +0 -12
  344. data/smoke/implements/a.rbs +0 -6
  345. data/smoke/implements/b.rb +0 -13
  346. data/smoke/implements/b.rbs +0 -12
  347. data/smoke/implements/test_expectations.yml +0 -23
  348. data/smoke/initialize/Steepfile +0 -6
  349. data/smoke/initialize/a.rb +0 -12
  350. data/smoke/initialize/a.rbs +0 -3
  351. data/smoke/initialize/test_expectations.yml +0 -1
  352. data/smoke/integer/Steepfile +0 -6
  353. data/smoke/integer/a.rb +0 -26
  354. data/smoke/integer/test_expectations.yml +0 -110
  355. data/smoke/interface/Steepfile +0 -6
  356. data/smoke/interface/a.rb +0 -12
  357. data/smoke/interface/a.rbs +0 -12
  358. data/smoke/interface/test_expectations.yml +0 -23
  359. data/smoke/kwbegin/Steepfile +0 -6
  360. data/smoke/kwbegin/a.rb +0 -7
  361. data/smoke/kwbegin/test_expectations.yml +0 -17
  362. data/smoke/lambda/Steepfile +0 -6
  363. data/smoke/lambda/a.rb +0 -10
  364. data/smoke/lambda/test_expectations.yml +0 -17
  365. data/smoke/literal/Steepfile +0 -6
  366. data/smoke/literal/a.rb +0 -11
  367. data/smoke/literal/b.rb +0 -7
  368. data/smoke/literal/literal_methods.rbs +0 -4
  369. data/smoke/literal/test_expectations.yml +0 -106
  370. data/smoke/map/Steepfile +0 -6
  371. data/smoke/map/a.rb +0 -5
  372. data/smoke/map/test_expectations.yml +0 -1
  373. data/smoke/method/Steepfile +0 -6
  374. data/smoke/method/a.rb +0 -21
  375. data/smoke/method/a.rbs +0 -4
  376. data/smoke/method/b.rb +0 -25
  377. data/smoke/method/c.rb +0 -5
  378. data/smoke/method/d.rb +0 -1
  379. data/smoke/method/d.rbs +0 -3
  380. data/smoke/method/test_expectations.yml +0 -121
  381. data/smoke/module/Steepfile +0 -6
  382. data/smoke/module/a.rb +0 -19
  383. data/smoke/module/a.rbs +0 -16
  384. data/smoke/module/b.rb +0 -6
  385. data/smoke/module/c.rb +0 -22
  386. data/smoke/module/d.rb +0 -4
  387. data/smoke/module/e.rb +0 -13
  388. data/smoke/module/f.rb +0 -11
  389. data/smoke/module/test_expectations.yml +0 -75
  390. data/smoke/regexp/Steepfile +0 -6
  391. data/smoke/regexp/a.rb +0 -109
  392. data/smoke/regexp/b.rb +0 -79
  393. data/smoke/regexp/test_expectations.yml +0 -615
  394. data/smoke/regression/Steepfile +0 -6
  395. data/smoke/regression/array.rb +0 -7
  396. data/smoke/regression/block_param_split.rb +0 -7
  397. data/smoke/regression/block_param_split.rbs +0 -3
  398. data/smoke/regression/empty_yield.rb +0 -5
  399. data/smoke/regression/empty_yield.rbs +0 -3
  400. data/smoke/regression/enumerator_product.rb +0 -1
  401. data/smoke/regression/fun.rb +0 -8
  402. data/smoke/regression/fun.rbs +0 -4
  403. data/smoke/regression/hash.rb +0 -7
  404. data/smoke/regression/hello world.rb +0 -1
  405. data/smoke/regression/issue_328.rb +0 -1
  406. data/smoke/regression/issue_328.rbs +0 -0
  407. data/smoke/regression/issue_332.rb +0 -11
  408. data/smoke/regression/issue_332.rbs +0 -19
  409. data/smoke/regression/issue_372.rb +0 -8
  410. data/smoke/regression/issue_372.rbs +0 -4
  411. data/smoke/regression/lambda.rb +0 -3
  412. data/smoke/regression/masgn.rb +0 -4
  413. data/smoke/regression/poly_new.rb +0 -2
  414. data/smoke/regression/poly_new.rbs +0 -4
  415. data/smoke/regression/range.rb +0 -5
  416. data/smoke/regression/set_divide.rb +0 -12
  417. data/smoke/regression/test_expectations.yml +0 -120
  418. data/smoke/regression/thread.rb +0 -7
  419. data/smoke/rescue/Steepfile +0 -6
  420. data/smoke/rescue/a.rb +0 -48
  421. data/smoke/rescue/test_expectations.yml +0 -79
  422. data/smoke/self/Steepfile +0 -6
  423. data/smoke/self/a.rb +0 -21
  424. data/smoke/self/a.rbs +0 -4
  425. data/smoke/self/test_expectations.yml +0 -23
  426. data/smoke/skip/Steepfile +0 -6
  427. data/smoke/skip/skip.rb +0 -13
  428. data/smoke/skip/test_expectations.yml +0 -23
  429. data/smoke/stdout/Steepfile +0 -6
  430. data/smoke/stdout/a.rb +0 -8
  431. data/smoke/stdout/a.rbs +0 -7
  432. data/smoke/stdout/test_expectations.yml +0 -1
  433. data/smoke/super/Steepfile +0 -6
  434. data/smoke/super/a.rb +0 -30
  435. data/smoke/super/a.rbs +0 -10
  436. data/smoke/super/test_expectations.yml +0 -69
  437. data/smoke/toplevel/Steepfile +0 -6
  438. data/smoke/toplevel/a.rb +0 -3
  439. data/smoke/toplevel/a.rbs +0 -3
  440. data/smoke/toplevel/test_expectations.yml +0 -15
  441. data/smoke/tsort/Steepfile +0 -7
  442. data/smoke/tsort/a.rb +0 -12
  443. data/smoke/tsort/test_expectations.yml +0 -1
  444. data/smoke/type_case/Steepfile +0 -6
  445. data/smoke/type_case/a.rb +0 -24
  446. data/smoke/type_case/test_expectations.yml +0 -58
  447. data/smoke/unexpected/Steepfile +0 -6
  448. data/smoke/unexpected/test_expectations.yml +0 -13
  449. data/smoke/unexpected/unexpected.rbs +0 -3
  450. data/smoke/yield/Steepfile +0 -6
  451. data/smoke/yield/a.rb +0 -15
  452. data/smoke/yield/b.rb +0 -6
  453. data/smoke/yield/test_expectations.yml +0 -88
@@ -1,299 +0,0 @@
1
- module Steep
2
- module Server
3
- class Master
4
- module LSP = LanguageServer::Protocol
5
-
6
- class TypeCheckRequest
7
- attr_reader guid: String
8
-
9
- attr_reader library_paths: Set[Pathname]
10
-
11
- attr_reader signature_paths: Set[Pathname]
12
-
13
- attr_reader code_paths: Set[Pathname]
14
-
15
- attr_reader priority_paths: Set[Pathname]
16
-
17
- attr_reader checked_paths: Set[Pathname]
18
-
19
- def initialize: (guid: String) -> void
20
-
21
- def uri: (Pathname path) -> URI::File
22
-
23
- def as_json: (assignment: Services::PathAssignment) -> { guid: String, library_uris: Array[String], signature_uris: Array[String], code_uris: Array[String], priority_uris: Array[String] }
24
-
25
- def total: () -> Integer
26
-
27
- def percentage: () -> Integer
28
-
29
- def all_paths: () -> Set[Pathname]
30
-
31
- def checking_path?: (Pathname path) -> bool
32
-
33
- def checked: (Pathname path) -> void
34
-
35
- def finished?: () -> bool
36
-
37
- def unchecked_paths: () -> Set[Pathname]
38
-
39
- def unchecked_code_paths: () -> Set[Pathname]
40
-
41
- def unchecked_library_paths: () -> Set[Pathname]
42
-
43
- def unchecked_signature_paths: () -> Set[Pathname]
44
- end
45
-
46
- # TypeCheckController remembers changed files, keep track of open editors, and make a TypeCheckRequest that contains list of all files to be type checked
47
- #
48
- # ```rb
49
- # controller = TypeCheckController.new(project: project)
50
- #
51
- # controller.push_changes(file_path) # Remember that the path is changed
52
- # controller.update_priority(open: file_path) # Remember that an editor opens the path
53
- # controller.make_request(...) # Make an instance of TypeCheckRequest that contains list of all paths to type check
54
- # ```
55
- class TypeCheckController
56
- attr_reader project: Project
57
-
58
- attr_reader priority_paths: Set[Pathname]
59
-
60
- attr_reader changed_paths: Set[Pathname]
61
-
62
- attr_reader target_paths: Array[TargetPaths]
63
-
64
- # TargetPaths object keeps track of the expanded absolute paths of each target
65
- #
66
- # 1. *Library path* is a RBS file that is loaded as a part of a library
67
- # 2. *Signature path* is a RBS file that is loaded as a part of the application library
68
- # 3. *Code path* is a Ruby file that is being type checked
69
- #
70
- class TargetPaths
71
- attr_reader project: Project
72
-
73
- attr_reader target: Project::Target
74
-
75
- # Set of absolute paths of Ruby code
76
- #
77
- attr_reader code_paths: Set[Pathname]
78
-
79
- # Set of absolute paths of app signatures
80
- #
81
- attr_reader signature_paths: Set[Pathname]
82
-
83
- # Set of absolute paths of library signatures
84
- #
85
- # Unlike `code_paths` and `signature_paths`, the `library_paths` must be added explicitly not by `#add` method.
86
- #
87
- attr_reader library_paths: Set[Pathname]
88
-
89
- def initialize: (project: Project, target: Project::Target) -> void
90
-
91
- def all_paths: () -> Set[Pathname]
92
-
93
- def library_path?: (Pathname path) -> bool
94
-
95
- def signature_path?: (Pathname path) -> bool
96
-
97
- def code_path?: (Pathname path) -> bool
98
-
99
- # Adds `path` to the object
100
- #
101
- # Returns `false` if the path is not a part of the project.
102
- #
103
- # Whether `path` is a code path or signature path is automatically detected.
104
- # `library: true` is required to add the path to library path.
105
- #
106
- def add: (Pathname path, ?library: bool) -> bool
107
-
108
- alias << add
109
- end
110
-
111
- def initialize: (project: Project) -> void
112
-
113
- def load: (command_line_args: Array[String]) -> void
114
-
115
- def push_changes: (Pathname path) -> void
116
-
117
- def update_priority: (open: Pathname) -> void
118
- | (close: Pathname) -> void
119
-
120
- def make_request: (?guid: String, ?last_request: TypeCheckRequest?, ?include_unchanged: bool) -> TypeCheckRequest?
121
- end
122
-
123
- type lsp_notification = { method: String, params: untyped }
124
-
125
- type lsp_request = { id: String, method: String, params: untyped }
126
-
127
- type lsp_response = { id: String, result: untyped }
128
-
129
- type lsp_message = { method: String, id: String?, params: untyped?, result: untyped? }
130
-
131
- class ResultHandler
132
- attr_reader request: lsp_request
133
-
134
- attr_reader completion_handler: (^(lsp_response) -> void)?
135
-
136
- attr_reader response: lsp_response?
137
-
138
- @completed: bool
139
-
140
- def initialize: (request: untyped) -> void
141
-
142
- def process_response: (lsp_response message) -> bool
143
-
144
- def result: () -> untyped
145
-
146
- def completed?: () -> bool
147
-
148
- def on_completion: () ?{ (lsp_response) -> void } -> void
149
- end
150
-
151
- class GroupHandler
152
- attr_reader request: lsp_request
153
-
154
- attr_reader handlers: Hash[String, ResultHandler]
155
-
156
- attr_reader completion_handler: (^(Array[ResultHandler]) -> void)?
157
-
158
- def initialize: () -> void
159
-
160
- def process_response: (lsp_response message) -> bool
161
-
162
- def completed?: () -> bool
163
-
164
- def <<: (ResultHandler handler) -> void
165
-
166
- def on_completion: () { (Array[ResultHandler]) -> void } -> void
167
- end
168
-
169
- class ResultController
170
- attr_reader handlers: Array[ResultHandler | GroupHandler]
171
-
172
- def initialize: () -> void
173
-
174
- def <<: (ResultHandler | GroupHandler handler) -> void
175
-
176
- def request_group: () { (GroupHandler) -> void } -> GroupHandler
177
-
178
- def process_response: (lsp_response message) -> bool
179
- end
180
-
181
- module MessageUtils : _WithMessage
182
- interface _WithMessage
183
- def message: () -> untyped
184
- end
185
-
186
- def request?: () -> bool
187
-
188
- def notification?: () -> bool
189
-
190
- def response?: () -> bool
191
-
192
- %a{pure} def method: () -> String?
193
-
194
- %a{pure} def id: () -> String?
195
-
196
- %a{pure} def result: () -> untyped?
197
-
198
- %a{pure} def params: () -> untyped?
199
- end
200
-
201
- class ReceiveMessageJob
202
- attr_reader source: WorkerProcess | :client
203
-
204
- attr_reader message: untyped
205
-
206
- def initialize: (source: WorkerProcess | :client, message: untyped) -> void
207
-
208
- include MessageUtils
209
- end
210
-
211
- class SendMessageJob
212
- attr_reader dest: WorkerProcess | :client
213
-
214
- attr_reader message: untyped
215
-
216
- def initialize: (dest: WorkerProcess | :client, message: untyped) -> void
217
-
218
- def self.to_worker: (WorkerProcess, message: untyped) -> SendMessageJob
219
-
220
- def self.to_client: (message: untyped) -> SendMessageJob
221
-
222
- include MessageUtils
223
- end
224
-
225
- attr_reader project: Project
226
-
227
- attr_reader reader: LanguageServer::Protocol::Transport::Io::Reader
228
-
229
- attr_reader writer: LanguageServer::Protocol::Transport::Io::Writer
230
-
231
- attr_reader commandline_args: Array[String]
232
-
233
- attr_reader interaction_worker: WorkerProcess?
234
-
235
- attr_reader typecheck_workers: Array[WorkerProcess]
236
-
237
- attr_reader job_queue: Thread::Queue
238
-
239
- attr_reader current_type_check_request: TypeCheckRequest?
240
-
241
- attr_reader controller: TypeCheckController
242
-
243
- attr_reader result_controller: ResultController
244
-
245
- attr_reader initialize_params: untyped
246
-
247
- attr_accessor typecheck_automatically: bool
248
-
249
- attr_reader start_type_checking_queue: DelayQueue
250
-
251
- def initialize: (project: Project, reader: untyped, writer: untyped, interaction_worker: WorkerProcess?, typecheck_workers: Array[WorkerProcess], ?queue: Thread::Queue) -> void
252
-
253
- # Start the Steep language server
254
- #
255
- # Returns after the language server shutdown.
256
- # The shutdown process starts by `exit` message.
257
- #
258
- # Raises an exception if the worker processes doesn't shutdown properly, like being `#kill`-ed.
259
- # Exiting the process is assumed in the case of error.
260
- # The only one cleanup it does is stopping the worker processes, by `SIGKILL`.
261
- #
262
- def start: () -> void
263
-
264
- # Stops the language server workers by sending SIGTERM
265
- #
266
- # This skips the normal shutdown process defined in LSP.
267
- # The `#start` call will result in an exception.
268
- #
269
- def kill: () -> void
270
-
271
- def each_worker: () { (WorkerProcess) -> void } -> void
272
- | () -> Enumerator[WorkerProcess, void]
273
-
274
- def pathname: (String uri) -> Pathname?
275
-
276
- def work_done_progress_supported?: () -> bool
277
-
278
- def file_system_watcher_supported?: () -> bool
279
-
280
- def process_message_from_client: (untyped message) -> void
281
-
282
- def process_message_from_worker: (untyped message, worker: WorkerProcess) -> void
283
-
284
- def start_type_check: (TypeCheckRequest request, last_request: TypeCheckRequest?, start_progress: bool) -> void
285
-
286
- def on_type_check_update: (guid: String, path: Pathname) -> void
287
-
288
- def broadcast_notification: (lsp_notification message) -> void
289
-
290
- def send_notification: (lsp_notification message, worker: WorkerProcess) -> void
291
-
292
- def fresh_request_id: () -> String
293
-
294
- def send_request: (method: String, worker: WorkerProcess, ?id: String, ?params: untyped?) ?{ (ResultHandler) -> void } -> ResultHandler
295
-
296
- def group_request: () { (GroupHandler) -> void } -> GroupHandler
297
- end
298
- end
299
- end
@@ -1,141 +0,0 @@
1
- use Steep::Services::*, LanguageServer::Protocol as LSP
2
-
3
- module Steep
4
- module Server
5
- # TypeCheckWorker provides two features:
6
- #
7
- # 1. Type check and validate source code invoked by `$/typecheck/start` notification
8
- # 2. Language related features: `workspace/symbol`, `textDocument/definition`, `textDocument/implementation`, and `steep/stats` command
9
- #
10
- # `$/typecheck/start` notification is delivered to `#enqueue_typecheck_jobs` command that creates *jobs*.
11
- #
12
- # * `StartTypeCheckJob` applies the pending changes
13
- # * `ValidateAppSignatureJob` validates an *application* RBS file
14
- # * `ValidateLibrarySignatureJob` validates a *library* RBS file
15
- # * `TypeCheckCodeJob` type checks a ruby code
16
- #
17
- class TypeCheckWorker < BaseWorker
18
- attr_reader project: Project
19
-
20
- attr_reader assignment: PathAssignment
21
-
22
- attr_reader service: TypeCheckService
23
-
24
- attr_reader commandline_args: Array[String]
25
-
26
- attr_reader current_type_check_guid: String?
27
-
28
- class WorkspaceSymbolJob
29
- attr_reader id: String
30
-
31
- attr_reader query: String
32
-
33
- def initialize: (id: String, query: String) -> void
34
- end
35
-
36
- class StatsJob
37
- attr_reader id: String
38
-
39
- def initialize: (id: String) -> void
40
- end
41
-
42
- class StartTypeCheckJob
43
- attr_reader guid: String
44
-
45
- attr_reader changes: ChangeBuffer::changes
46
-
47
- def initialize: (guid: String, changes: ChangeBuffer::changes) -> void
48
- end
49
-
50
- class TypeCheckCodeJob
51
- attr_reader guid: String
52
-
53
- attr_reader path: Pathname
54
-
55
- def initialize: (guid: String, path: Pathname) -> void
56
- end
57
-
58
- class ValidateAppSignatureJob
59
- attr_reader guid: String
60
-
61
- attr_reader path: Pathname
62
-
63
- def initialize: (guid: String, path: Pathname) -> void
64
- end
65
-
66
- class ValidateLibrarySignatureJob
67
- attr_reader guid: String
68
-
69
- attr_reader path: Pathname
70
-
71
- def initialize: (guid: String, path: Pathname) -> void
72
- end
73
-
74
- class GotoJob
75
- type kind = :implementation | :definition | :type_definition
76
-
77
- attr_reader id: String
78
-
79
- attr_reader kind: kind
80
-
81
- type params = Hash[Symbol, untyped]
82
-
83
- attr_reader params: params
84
-
85
- def initialize: (id: String, params: params, kind: kind) -> void
86
-
87
- def self.implementation: (id: String, params: params) -> GotoJob
88
-
89
- def self.definition: (id: String, params: params) -> GotoJob
90
-
91
- def self.type_definition: (id: String, params: params) -> GotoJob
92
-
93
- def implementation?: () -> bool
94
-
95
- def definition?: () -> bool
96
-
97
- def type_definition?: () -> bool
98
- end
99
-
100
- include ChangeBuffer
101
-
102
- def initialize: (
103
- project: Project,
104
- reader: LSP::Transport::Io::Reader,
105
- writer: LSP::Transport::Io::Writer,
106
- assignment: PathAssignment,
107
- commandline_args: Array[String]
108
- ) -> void
109
-
110
- def handle_request: (untyped request) -> void
111
-
112
- type type_check_start_params = {
113
- guid: String,
114
- priority_uris: Array[String],
115
- library_uris: Array[String],
116
- signature_uris: Array[String],
117
- code_uris: Array[String]
118
- }
119
-
120
- def enqueue_typecheck_jobs: (type_check_start_params) -> void
121
-
122
- type job = WorkspaceSymbolJob
123
- | StartTypeCheckJob
124
- | TypeCheckCodeJob
125
- | ValidateAppSignatureJob
126
- | ValidateLibrarySignatureJob
127
- | GotoJob
128
- | StatsJob
129
-
130
- def handle_job: (job) -> void
131
-
132
- def typecheck_progress: (guid: String, path: Pathname) -> void
133
-
134
- def workspace_symbol_result: (untyped query) -> untyped
135
-
136
- def stats_result: () -> untyped
137
-
138
- def goto: (GotoJob job) -> Array[untyped]
139
- end
140
- end
141
- end
@@ -1,97 +0,0 @@
1
- use LanguageServer::Protocol as LSP
2
-
3
- module Steep
4
- module Server
5
- # WorkerProcess class represents a worker process
6
- #
7
- # Available operations are:
8
- #
9
- # 1. Sending a LSP message to the process
10
- # 2. Receiving a LSP message from the process
11
- # 3. Killing the process
12
- #
13
- # The process may be invoked by
14
- #
15
- # 1. `#fork` if available, or
16
- # 2. `#spawn` otherwise
17
- #
18
- # `#fork` version is faster because it skips loading libraries.
19
- #
20
- #
21
- class WorkerProcess
22
- interface _ProcessWaitThread
23
- def pid: () -> Integer
24
- end
25
-
26
- attr_reader reader: LSP::Transport::Io::Reader
27
-
28
- attr_reader writer: LSP::Transport::Io::Writer
29
-
30
- attr_reader stderr: IO?
31
-
32
- attr_reader name: String
33
-
34
- attr_reader wait_thread: Thread & _ProcessWaitThread
35
-
36
- attr_reader index: Integer?
37
-
38
- def initialize: (
39
- reader: LSP::Transport::Io::Reader,
40
- writer: LSP::Transport::Io::Writer,
41
- stderr: IO?,
42
- wait_thread: Thread & _ProcessWaitThread,
43
- name: String,
44
- ?index: Integer?
45
- ) -> void
46
-
47
- type worker_type = :interaction | :typecheck
48
-
49
- def self.start_worker: (
50
- worker_type `type`,
51
- name: String,
52
- steepfile: Pathname,
53
- steep_command: String?,
54
- ?patterns: Array[String],
55
- ?delay_shutdown: bool,
56
- ?index: [Integer, Integer]?
57
- ) -> WorkerProcess
58
-
59
- def self.fork_worker: (
60
- worker_type `type`,
61
- name: String,
62
- steepfile: Pathname,
63
- patterns: Array[String],
64
- delay_shutdown: bool,
65
- index: [Integer, Integer]?
66
- ) -> WorkerProcess
67
-
68
- def self.spawn_worker: (
69
- worker_type `type`,
70
- name: String,
71
- steepfile: Pathname,
72
- steep_command: ::String,
73
- patterns: Array[String],
74
- delay_shutdown: bool,
75
- index: [Integer, Integer]?
76
- ) -> WorkerProcess
77
-
78
- def self.start_typecheck_workers: (
79
- steepfile: Pathname,
80
- args: Array[String],
81
- steep_command: ::String?,
82
- ?count: Integer,
83
- ?delay_shutdown: bool
84
- ) -> Array[WorkerProcess]
85
-
86
- def <<: (untyped message) -> void
87
-
88
- def read: () { (untyped) -> void } -> void
89
-
90
- # Stop the process by sending SIGTERM and wait for the process exit
91
- #
92
- # Send `SIGKILL` and returns immediately if `force:` is `true`.
93
- #
94
- def kill: (?force: bool) -> void
95
- end
96
- end
97
- end