steep 1.1.0 → 1.2.0.pre.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (143) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +27 -0
  3. data/Gemfile +0 -1
  4. data/Gemfile.lock +12 -11
  5. data/Gemfile.steep +2 -2
  6. data/Gemfile.steep.lock +10 -10
  7. data/README.md +3 -3
  8. data/Steepfile +23 -0
  9. data/bin/steep-prof +2 -1
  10. data/lib/steep/annotation_parser.rb +1 -1
  11. data/lib/steep/ast/types/class.rb +4 -0
  12. data/lib/steep/ast/types/factory.rb +86 -602
  13. data/lib/steep/ast/types/instance.rb +4 -0
  14. data/lib/steep/ast/types/literal.rb +1 -1
  15. data/lib/steep/ast/types/proc.rb +22 -8
  16. data/lib/steep/ast/types/self.rb +4 -0
  17. data/lib/steep/ast/types/union.rb +1 -1
  18. data/lib/steep/cli.rb +24 -1
  19. data/lib/steep/diagnostic/ruby.rb +17 -22
  20. data/lib/steep/drivers/checkfile.rb +205 -0
  21. data/lib/steep/drivers/validate.rb +3 -1
  22. data/lib/steep/equatable.rb +2 -0
  23. data/lib/steep/interface/block.rb +21 -11
  24. data/lib/steep/interface/builder.rb +756 -0
  25. data/lib/steep/interface/function.rb +32 -24
  26. data/lib/steep/interface/method_type.rb +191 -78
  27. data/lib/steep/interface/shape.rb +132 -0
  28. data/lib/steep/interface/substitution.rb +23 -12
  29. data/lib/steep/interface/type_param.rb +1 -2
  30. data/lib/steep/path_helper.rb +1 -1
  31. data/lib/steep/project.rb +5 -7
  32. data/lib/steep/server/base_worker.rb +2 -2
  33. data/lib/steep/server/change_buffer.rb +4 -3
  34. data/lib/steep/server/interaction_worker.rb +1 -1
  35. data/lib/steep/server/master.rb +69 -9
  36. data/lib/steep/server/type_check_worker.rb +13 -11
  37. data/lib/steep/server/worker_process.rb +9 -7
  38. data/lib/steep/services/completion_provider.rb +15 -3
  39. data/lib/steep/services/hover_provider/singleton_methods.rb +5 -6
  40. data/lib/steep/services/signature_service.rb +13 -8
  41. data/lib/steep/services/type_check_service.rb +2 -0
  42. data/lib/steep/signature/validator.rb +1 -1
  43. data/lib/steep/subtyping/check.rb +154 -103
  44. data/lib/steep/subtyping/relation.rb +3 -3
  45. data/lib/steep/subtyping/result.rb +20 -2
  46. data/lib/steep/subtyping/variable_variance.rb +9 -0
  47. data/lib/steep/type_construction.rb +660 -330
  48. data/lib/steep/type_inference/block_params.rb +169 -86
  49. data/lib/steep/type_inference/logic_type_interpreter.rb +36 -26
  50. data/lib/steep/type_inference/method_params.rb +12 -7
  51. data/lib/steep/type_inference/multiple_assignment.rb +6 -1
  52. data/lib/steep/type_inference/send_args.rb +41 -35
  53. data/lib/steep/type_inference/type_env.rb +13 -1
  54. data/lib/steep/type_inference/type_env_builder.rb +1 -1
  55. data/lib/steep/version.rb +1 -1
  56. data/lib/steep.rb +71 -2
  57. data/rbs_collection.steep.lock.yaml +18 -30
  58. data/rbs_collection.steep.yaml +1 -0
  59. data/sig/shims/language-server_protocol.rbs +20 -0
  60. data/sig/shims/tagged_logging.rbs +6 -0
  61. data/sig/steep/ast/annotation/collection.rbs +6 -6
  62. data/sig/steep/ast/types/class.rbs +3 -0
  63. data/sig/steep/ast/types/factory.rbs +38 -32
  64. data/sig/steep/ast/types/instance.rbs +3 -0
  65. data/sig/steep/ast/types/intersection.rbs +1 -1
  66. data/sig/steep/ast/types/literal.rbs +7 -7
  67. data/sig/steep/ast/types/name.rbs +14 -13
  68. data/sig/steep/ast/types/proc.rbs +3 -1
  69. data/sig/steep/ast/types/self.rbs +3 -0
  70. data/sig/steep/ast/types/var.rbs +1 -1
  71. data/sig/steep/diagnostic/ruby.rbs +30 -34
  72. data/sig/steep/drivers/annotations.rbs +17 -0
  73. data/sig/steep/drivers/check.rbs +33 -0
  74. data/sig/steep/drivers/checkfile.rbs +26 -0
  75. data/sig/steep/drivers/diagnostic_printer.rbs +25 -0
  76. data/sig/steep/drivers/init.rbs +19 -0
  77. data/sig/steep/drivers/langserver.rbs +35 -0
  78. data/sig/steep/drivers/print_project.rbs +15 -0
  79. data/sig/steep/drivers/stats.rbs +37 -0
  80. data/sig/steep/drivers/utils/driver_helper.rbs +23 -0
  81. data/sig/steep/drivers/utils/jobs_count.rbs +11 -0
  82. data/sig/steep/drivers/validate.rbs +15 -0
  83. data/sig/steep/drivers/vendor.rbs +19 -0
  84. data/sig/steep/drivers/watch.rbs +27 -0
  85. data/sig/steep/drivers/worker.rbs +31 -0
  86. data/sig/steep/equatable.rbs +11 -0
  87. data/sig/steep/index/rbs_index.rbs +91 -0
  88. data/sig/steep/index/signature_symbol_provider.rbs +29 -0
  89. data/sig/steep/index/source_index.rbs +63 -0
  90. data/sig/steep/interface/block.rbs +3 -1
  91. data/sig/steep/interface/builder.rbs +152 -0
  92. data/sig/steep/interface/function.rbs +67 -55
  93. data/sig/steep/interface/method_type.rbs +60 -12
  94. data/sig/steep/interface/shape.rbs +61 -0
  95. data/sig/steep/interface/substitution.rbs +18 -22
  96. data/sig/steep/interface/type_param.rbs +9 -1
  97. data/sig/steep/node_helper.rbs +2 -0
  98. data/sig/steep/path_helper.rbs +7 -0
  99. data/sig/steep/project/pattern.rbs +10 -10
  100. data/sig/steep/project/target.rbs +2 -2
  101. data/sig/steep/project.rbs +15 -8
  102. data/sig/steep/server/base_worker.rbs +49 -0
  103. data/sig/steep/server/change_buffer.rbs +32 -0
  104. data/sig/steep/server/interaction_worker.rbs +41 -0
  105. data/sig/steep/server/lsp_formatter.rbs +29 -0
  106. data/sig/steep/server/master.rbs +260 -0
  107. data/sig/steep/server/type_check_worker.rbs +135 -0
  108. data/sig/steep/server/worker_process.rbs +29 -0
  109. data/sig/steep/services/completion_provider.rbs +5 -5
  110. data/sig/steep/services/content_change.rbs +14 -12
  111. data/sig/steep/services/file_loader.rbs +12 -4
  112. data/sig/steep/services/hover_provider/singleton_methods.rbs +1 -1
  113. data/sig/steep/services/path_assignment.rbs +7 -7
  114. data/sig/steep/services/signature_service.rbs +67 -40
  115. data/sig/steep/services/type_check_service.rbs +53 -39
  116. data/sig/steep/subtyping/check.rbs +80 -44
  117. data/sig/steep/subtyping/relation.rbs +24 -22
  118. data/sig/steep/subtyping/result.rbs +48 -30
  119. data/sig/steep/subtyping/variable_variance.rbs +2 -0
  120. data/sig/steep/type_construction.rbs +147 -23
  121. data/sig/steep/type_inference/block_params.rbs +120 -18
  122. data/sig/steep/type_inference/context.rbs +45 -20
  123. data/sig/steep/type_inference/context_array.rbs +37 -0
  124. data/sig/steep/type_inference/logic_type_interpreter.rbs +3 -1
  125. data/sig/steep/type_inference/method_params.rbs +13 -9
  126. data/sig/steep/type_inference/send_args.rbs +229 -0
  127. data/sig/steep/type_inference/type_env.rbs +2 -0
  128. data/sig/steep/type_inference/type_env_builder.rbs +1 -1
  129. data/sig/steep/typing.rbs +4 -4
  130. data/sig/steep.rbs +4 -2
  131. data/smoke/block/e.rb +12 -0
  132. data/smoke/block/e.rbs +4 -0
  133. data/smoke/block/test_expectations.yml +12 -0
  134. data/smoke/regression/block_param_split.rb +7 -0
  135. data/smoke/regression/block_param_split.rbs +3 -0
  136. data/smoke/regression/empty_yield.rb +5 -0
  137. data/smoke/regression/empty_yield.rbs +3 -0
  138. data/smoke/regression/test_expectations.yml +12 -0
  139. data/smoke/yield/test_expectations.yml +4 -4
  140. data/steep.gemspec +2 -1
  141. metadata +62 -9
  142. data/lib/steep/interface/interface.rb +0 -34
  143. data/sig/steep/interface/interface.rbs +0 -23
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7c8da530ec2506030583be78aaaecc04f977ce86bef6c69a5025806c29f32a73
4
- data.tar.gz: 507b2fc612005b9893ae02ec840114b428654d039dd6e0c3cf3c719fc03916ab
3
+ metadata.gz: 16805860000461131410384bf4faece6263672c4e3378ecfe464e0f710322f61
4
+ data.tar.gz: 3c3bd23ed01ae1fc56f4ecb683e5ef1f6dfdba3ff131be88c93bd43f87b621b2
5
5
  SHA512:
6
- metadata.gz: 03444250fd89df0edcb58884081dee7c21f5a2b26d1c2b012371ee5b7046355b426dec781b7a9551d336190f306850721ac66d525128518a7c2324fb8b63f4f1
7
- data.tar.gz: c4f35528752c20c8d2b494e8bb60546ca65cf0317134343202679b865e7afd92d58bcfe49dc315f58ea2f29c93906ba65ebacb1a53741f94f2f47870961e23ff
6
+ metadata.gz: 73c14bad856adc3a5bfbd4f10604a6e42ce73fc338e8891a50de91d86e971a42195aff504fb9c1d9eee41ef39bed8ec05d0622a5208403a2e4d219f3f8a3e85d
7
+ data.tar.gz: 2c94b001a204c73498532062c14db1c01fb67b0562f18c815be5ca3dd99ceeea44e65ea13f17909dc6d7f3a00a885810ab0ec3d9d58f9a734913c06566712a42
data/CHANGELOG.md CHANGED
@@ -2,6 +2,33 @@
2
2
 
3
3
  ## master
4
4
 
5
+ ## 1.2.0.pre.1 (2022-10-06)
6
+
7
+ ### Type checker core
8
+
9
+ * Support type checking block/proc self type binding ([#637](https://github.com/soutaro/steep/pull/637))
10
+ * Type check multiple assignment on block parameters ([#641](https://github.com/soutaro/steep/pull/641), [#643](https://github.com/soutaro/steep/pull/643))
11
+ * Make more multiple assignments type check ([#630](https://github.com/soutaro/steep/pull/630))
12
+ * Refactor *shape* calculation ([#635](https://github.com/soutaro/steep/pull/635), [#649
13
+ ](https://github.com/soutaro/steep/pull/649))
14
+ * Report type errors if argument mismatch on yield ([#640](https://github.com/soutaro/steep/pull/640))
15
+ * Relax caching requirements to cache more results ([#651](https://github.com/soutaro/steep/pull/651))
16
+
17
+ ### Commandline tool
18
+
19
+ * Add `steep checkfile` command ([#650](https://github.com/soutaro/steep/pull/650))
20
+
21
+ ### Miscellaneous
22
+
23
+ * Add docs for sublime text integration ([#633](https://github.com/soutaro/steep/pull/633))
24
+
25
+ ## 1.1.1 (2022-07-31)
26
+
27
+ ### Type checker core
28
+
29
+ * Ignore special local variables -- `_`, `__any__` and `__skip__` ([#617](https://github.com/soutaro/steep/pull/617), [#627](https://github.com/soutaro/steep/pull/627))
30
+ * Fix type narrowing on assignments ([#622](https://github.com/soutaro/steep/pull/622))
31
+
5
32
  ## 1.1.0 (2022-07-27)
6
33
 
7
34
  ### Type checker core
data/Gemfile CHANGED
@@ -10,7 +10,6 @@ group :stackprof, optional: true do
10
10
  gem "stackprof"
11
11
  end
12
12
  gem 'minitest-slow_test'
13
- gem "rbs", "~> 2.5.1"
14
13
 
15
14
  group :ide, optional: true do
16
15
  gem "ruby-debug-ide"
data/Gemfile.lock CHANGED
@@ -1,20 +1,21 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- steep (1.1.0)
4
+ steep (1.2.0.pre.1)
5
5
  activesupport (>= 5.1)
6
6
  language_server-protocol (>= 3.15, < 4.0)
7
7
  listen (~> 3.0)
8
8
  parallel (>= 1.0.0)
9
9
  parser (>= 3.1)
10
10
  rainbow (>= 2.2.2, < 4.0)
11
- rbs (>= 2.3.2)
11
+ rbs (>= 2.7.0.pre)
12
+ securerandom (>= 0.1)
12
13
  terminal-table (>= 2, < 4)
13
14
 
14
15
  GEM
15
16
  remote: https://rubygems.org/
16
17
  specs:
17
- activesupport (7.0.3.1)
18
+ activesupport (7.0.4)
18
19
  concurrent-ruby (~> 1.0, >= 1.0.2)
19
20
  i18n (>= 1.6, < 2)
20
21
  minitest (>= 5.1)
@@ -27,32 +28,33 @@ GEM
27
28
  ffi (1.15.5)
28
29
  i18n (1.12.0)
29
30
  concurrent-ruby (~> 1.0)
30
- language_server-protocol (3.16.0.3)
31
+ language_server-protocol (3.17.0.1)
31
32
  listen (3.7.1)
32
33
  rb-fsevent (~> 0.10, >= 0.10.3)
33
34
  rb-inotify (~> 0.9, >= 0.9.10)
34
- minitest (5.16.2)
35
+ minitest (5.16.3)
35
36
  minitest-hooks (1.5.0)
36
37
  minitest (> 5.3)
37
38
  minitest-slow_test (0.2.0)
38
39
  minitest (>= 5.0)
39
40
  parallel (1.22.1)
40
- parser (3.1.2.0)
41
+ parser (3.1.2.1)
41
42
  ast (~> 2.4.1)
42
43
  rainbow (3.1.1)
43
44
  rake (13.0.6)
44
- rb-fsevent (0.11.1)
45
+ rb-fsevent (0.11.2)
45
46
  rb-inotify (0.10.1)
46
47
  ffi (~> 1.0)
47
- rbs (2.5.1)
48
+ rbs (2.7.0.pre.3)
48
49
  ruby-debug-ide (0.7.3)
49
50
  rake (>= 0.8.1)
50
- stackprof (0.2.19)
51
+ securerandom (0.2.0)
52
+ stackprof (0.2.21)
51
53
  terminal-table (3.0.2)
52
54
  unicode-display_width (>= 1.1.1, < 3)
53
55
  tzinfo (2.0.5)
54
56
  concurrent-ruby (~> 1.0)
55
- unicode-display_width (2.2.0)
57
+ unicode-display_width (2.3.0)
56
58
 
57
59
  PLATFORMS
58
60
  ruby
@@ -63,7 +65,6 @@ DEPENDENCIES
63
65
  minitest-hooks
64
66
  minitest-slow_test
65
67
  rake
66
- rbs (~> 2.5.1)
67
68
  ruby-debug-ide
68
69
  stackprof
69
70
  steep!
data/Gemfile.steep CHANGED
@@ -1,4 +1,4 @@
1
1
  source "https://rubygems.org"
2
2
 
3
- gem 'steep', '~> 1.1.pre'
4
- gem "rbs", "~> 2.5.0"
3
+ gem 'steep', '~> 1.1.0'
4
+ gem "rbs", "~> 2.7.pre"
data/Gemfile.steep.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  GEM
2
2
  remote: https://rubygems.org/
3
3
  specs:
4
- activesupport (7.0.3.1)
4
+ activesupport (7.0.4)
5
5
  concurrent-ruby (~> 1.0, >= 1.0.2)
6
6
  i18n (>= 1.6, < 2)
7
7
  minitest (>= 5.1)
@@ -11,20 +11,20 @@ GEM
11
11
  ffi (1.15.5)
12
12
  i18n (1.12.0)
13
13
  concurrent-ruby (~> 1.0)
14
- language_server-protocol (3.16.0.3)
14
+ language_server-protocol (3.17.0.1)
15
15
  listen (3.7.1)
16
16
  rb-fsevent (~> 0.10, >= 0.10.3)
17
17
  rb-inotify (~> 0.9, >= 0.9.10)
18
- minitest (5.16.2)
18
+ minitest (5.16.3)
19
19
  parallel (1.22.1)
20
- parser (3.1.2.0)
20
+ parser (3.1.2.1)
21
21
  ast (~> 2.4.1)
22
22
  rainbow (3.1.1)
23
- rb-fsevent (0.11.1)
23
+ rb-fsevent (0.11.2)
24
24
  rb-inotify (0.10.1)
25
25
  ffi (~> 1.0)
26
- rbs (2.5.1)
27
- steep (1.1.0.pre.1)
26
+ rbs (2.7.0.pre.2)
27
+ steep (1.1.1)
28
28
  activesupport (>= 5.1)
29
29
  language_server-protocol (>= 3.15, < 4.0)
30
30
  listen (~> 3.0)
@@ -37,14 +37,14 @@ GEM
37
37
  unicode-display_width (>= 1.1.1, < 3)
38
38
  tzinfo (2.0.5)
39
39
  concurrent-ruby (~> 1.0)
40
- unicode-display_width (2.2.0)
40
+ unicode-display_width (2.3.0)
41
41
 
42
42
  PLATFORMS
43
43
  arm64-darwin-21
44
44
 
45
45
  DEPENDENCIES
46
- rbs (~> 2.5.0)
47
- steep (~> 1.1.pre)
46
+ rbs (~> 2.7.pre)
47
+ steep (~> 1.1.0)
48
48
 
49
49
  BUNDLED WITH
50
50
  2.3.15
data/README.md CHANGED
@@ -207,9 +207,9 @@ You can find examples in `smoke` directory.
207
207
 
208
208
  ## IDEs
209
209
 
210
- Steep implements some of the Language Server Protocol features. You can use Steep with VSCode and its plugin.
211
-
212
- - https://github.com/soutaro/steep-vscode
210
+ Steep implements some of the Language Server Protocol features.
211
+ - For **VSCode** please install [the plugin](https://github.com/soutaro/steep-vscode)
212
+ - For **SublimeText** please install [LSP](https://github.com/sublimelsp/LSP) package and follow [instructions](https://lsp.sublimetext.io/language_servers/#steep)
213
213
 
214
214
  Other LSP supporting tools may work with Steep where it starts the server as `steep langserver`.
215
215
 
data/Steepfile CHANGED
@@ -3,4 +3,27 @@ target :app do
3
3
  signature "sig"
4
4
 
5
5
  collection_config "rbs_collection.steep.yaml"
6
+
7
+ signature "../rbs/sig", "../rbs/stdlib/rdoc/0"
8
+ library(
9
+ "set",
10
+ "pathname",
11
+ "json",
12
+ "logger",
13
+ "monitor",
14
+ "tsort",
15
+ "uri",
16
+ 'yaml',
17
+ 'dbm',
18
+ 'pstore',
19
+ 'singleton',
20
+ 'shellwords',
21
+ 'fileutils',
22
+ 'find',
23
+ 'digest',
24
+ "strscan",
25
+ "rubygems",
26
+ "optparse",
27
+ "securerandom"
28
+ )
6
29
  end
data/bin/steep-prof CHANGED
@@ -4,12 +4,13 @@ require "stackprof"
4
4
 
5
5
  mode = (ENV["STEEP_STACKPROF_MODE"] || :wall).to_sym
6
6
  out = ENV["STEEP_STACKPROF_OUT"] || "tmp/stackprof-#{mode}-steep.dump"
7
+ interval = ENV["STEEP_STACKPROF_INTERVAL"]&.to_i || 1000
7
8
 
8
9
  def exit(*)
9
10
 
10
11
  end
11
12
 
12
13
  STDERR.puts "Running profiler: mode=#{mode}, out=#{out}"
13
- StackProf.run(mode: mode, out: out, raw: true) do
14
+ StackProf.run(mode: mode, out: out, raw: true, interval: interval) do
14
15
  load File.join(__dir__, "../exe/steep")
15
16
  end
@@ -76,7 +76,7 @@ module Steep
76
76
  name = match[:name]
77
77
  type = match[:type]
78
78
 
79
- method_type = factory.method_type(RBS::Parser.parse_method_type(type), self_type: AST::Types::Self.new, method_decls: Set[])
79
+ method_type = factory.method_type(RBS::Parser.parse_method_type(type), method_decls: Set[])
80
80
 
81
81
  AST::Annotation::MethodType.new(name: name.to_sym,
82
82
  type: method_type,
@@ -8,6 +8,10 @@ module Steep
8
8
  @location = location
9
9
  end
10
10
 
11
+ def self.instance
12
+ @instance ||= new()
13
+ end
14
+
11
15
  def to_s
12
16
  "class"
13
17
  end