steep 1.5.0.pre.6 → 1.5.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d00242c259b7c8d2a4a0f7022874ac5bb5f08491ab3edade6165ff1a9fbe89a7
4
- data.tar.gz: e02d896359c4eb88c730601320bb9137342c19b9ad1956d4ac417ffa5926d74a
3
+ metadata.gz: 77aea7baf36285cf4a5b0941e63cc8f5f95d52132d3a5d4933a396a79b949721
4
+ data.tar.gz: 2506370595dde6633abbab74b1e370d435579415a154b4a82b4da3bb1b065627
5
5
  SHA512:
6
- metadata.gz: 5be83d84d984d215342c030e9ea590c419a1e12963361266f4bc57e2b2ceec110a3f08313754b2f46a274fc8b0d2acca497c71f2eff24c3fd4505cb1ff2ac5a7
7
- data.tar.gz: 7a30b064aa7ec6e27e3811e93b1ddf7ff4824cdeb5dfe70075f34311f7e22016bf4f3a2b107307a5247c54532451a25155fc2ba277842fec85f71aa23fdaced1
6
+ metadata.gz: 6f3190f0ca65a931f9c88d99cbd67836478d754439b5630b1b68f89e9fa6d84a84cc8bde32335d4bdb38b3f13aefaeaf93a75b53722a0b6841eab27e9b689ed8
7
+ data.tar.gz: 94576f1eedcb8c46ca8228e84e4100e860c0e3ed2a28dc209afa80abdeeed188118f1589dcb15d0a8edb0cd8c751f611035a15b613d284113c8cbebcce42dc6e
data/CHANGELOG.md CHANGED
@@ -2,6 +2,24 @@
2
2
 
3
3
  ## master
4
4
 
5
+ ## 1.5.0 (2023-07-13)
6
+
7
+ ### Type checker core
8
+
9
+ * Fix for the case `untyped` is the proc type hint ([#868](https://github.com/soutaro/steep/pull/868))
10
+ * Type case with type variable ([#869](https://github.com/soutaro/steep/pull/869))
11
+ * Filx `nil?` unreachability detection ([#867](https://github.com/soutaro/steep/pull/867))
12
+
13
+ ### Commandline tool
14
+
15
+ * Update `#configure_code_diagnostics` type ([#873](https://github.com/soutaro/steep/pull/873))
16
+ * Update diagnostics templates ([#871](https://github.com/soutaro/steep/pull/871))
17
+ * Removed "set" from "libray" in init.rb and README ([#870](https://github.com/soutaro/steep/pull/870))
18
+
19
+ ### Language server
20
+
21
+ * Use RBS::Buffer method to calculate position ([#872](https://github.com/soutaro/steep/pull/872))
22
+
5
23
  ## 1.5.0.pre.6 (2023-07-11)
6
24
 
7
25
  ### Type checker core
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- steep (1.5.0.pre.6)
4
+ steep (1.5.0)
5
5
  activesupport (>= 5.1)
6
6
  concurrent-ruby (>= 1.1.10)
7
7
  csv (>= 3.0.9)
data/README.md CHANGED
@@ -30,7 +30,7 @@ target :app do
30
30
  check "lib"
31
31
  signature "sig"
32
32
 
33
- library "set", "pathname"
33
+ library "pathname"
34
34
  end
35
35
  ```
36
36
 
@@ -992,20 +992,57 @@ module Steep
992
992
  def self.default
993
993
  @default ||= _ = all_error.merge(
994
994
  {
995
- ImplicitBreakValueMismatch => :warning,
996
- FallbackAny => :information,
997
- UnreachableValueBranch => :warning,
998
- UnreachableBranch => :information,
995
+ ArgumentTypeMismatch => :error,
996
+ BlockBodyTypeMismatch => :hint,
997
+ BlockTypeMismatch => :hint,
998
+ BreakTypeMismatch => :hint,
999
+ DifferentMethodParameterKind => :hint,
1000
+ FallbackAny => :hint,
1001
+ FalseAssertion => :hint,
1002
+ ImplicitBreakValueMismatch => :hint,
1003
+ IncompatibleAnnotation => :hint,
1004
+ IncompatibleArgumentForwarding => :warning,
1005
+ IncompatibleAssignment => :hint,
1006
+ IncompatibleMethodTypeAnnotation => :hint,
1007
+ IncompatibleTypeCase => :hint,
1008
+ InsufficientKeywordArguments => :error,
1009
+ InsufficientPositionalArguments => :error,
1010
+ InsufficientTypeArgument => :hint,
1011
+ MethodArityMismatch => :error,
1012
+ MethodBodyTypeMismatch => :error,
1013
+ MethodDefinitionMissing => nil,
1014
+ MethodParameterMismatch => :error,
1015
+ MethodReturnTypeAnnotationMismatch => :hint,
1016
+ MultipleAssignmentConversionError => :hint,
1017
+ NoMethod => :error,
1018
+ ProcHintIgnored => :hint,
1019
+ ProcTypeExpected => :hint,
1020
+ RBSError => :information,
1021
+ RequiredBlockMissing => :error,
1022
+ ReturnTypeMismatch => :error,
1023
+ SetterBodyTypeMismatch => :information,
1024
+ SetterReturnTypeMismatch => :information,
1025
+ SyntaxError => :hint,
1026
+ TypeArgumentMismatchError => :hint,
1027
+ UnexpectedBlockGiven => :warning,
1028
+ UnexpectedDynamicMethod => :hint,
1029
+ UnexpectedError => :hint,
1030
+ UnexpectedJump => :hint,
1031
+ UnexpectedJumpValue => :hint,
1032
+ UnexpectedKeywordArgument => :error,
1033
+ UnexpectedPositionalArgument => :error,
1034
+ UnexpectedSplat => :hint,
1035
+ UnexpectedSuper => :information,
1036
+ UnexpectedTypeArgument => :hint,
1037
+ UnexpectedYield => :warning,
999
1038
  UnknownConstant => :warning,
1000
- MethodDefinitionMissing => :information,
1001
- FalseAssertion => :information,
1002
- UnexpectedTypeArgument => :information,
1003
- InsufficientTypeArgument => :information,
1004
- UnexpectedTypeArgument => :information,
1005
- UnsupportedSyntax => nil,
1006
- ProcHintIgnored => :information,
1007
- SetterBodyTypeMismatch => nil,
1008
- SetterReturnTypeMismatch => nil
1039
+ UnknownGlobalVariable => :warning,
1040
+ UnknownInstanceVariable => :information,
1041
+ UnreachableBranch => :hint,
1042
+ UnreachableValueBranch => :hint,
1043
+ UnresolvedOverloading => :error,
1044
+ UnsatisfiableConstraint => :hint,
1045
+ UnsupportedSyntax => :hint,
1009
1046
  }
1010
1047
  ).freeze
1011
1048
  end
@@ -1013,17 +1050,57 @@ module Steep
1013
1050
  def self.strict
1014
1051
  @strict ||= _ = all_error.merge(
1015
1052
  {
1016
- NoMethod => nil,
1017
- ImplicitBreakValueMismatch => nil,
1018
- FallbackAny => nil,
1019
- UnreachableValueBranch => nil,
1020
- UnreachableBranch => nil,
1021
- UnknownConstant => nil,
1022
- MethodDefinitionMissing => nil,
1023
- UnsupportedSyntax => nil,
1024
- ProcHintIgnored => :warning,
1053
+ ArgumentTypeMismatch => :error,
1054
+ BlockBodyTypeMismatch => :error,
1055
+ BlockTypeMismatch => :error,
1056
+ BreakTypeMismatch => :error,
1057
+ DifferentMethodParameterKind => :error,
1058
+ FallbackAny => :warning,
1059
+ FalseAssertion => :error,
1060
+ ImplicitBreakValueMismatch => :information,
1061
+ IncompatibleAnnotation => :error,
1062
+ IncompatibleArgumentForwarding => :error,
1063
+ IncompatibleAssignment => :error,
1064
+ IncompatibleMethodTypeAnnotation => :error,
1065
+ IncompatibleTypeCase => :error,
1066
+ InsufficientKeywordArguments => :error,
1067
+ InsufficientPositionalArguments => :error,
1068
+ InsufficientTypeArgument => :error,
1069
+ MethodArityMismatch => :error,
1070
+ MethodBodyTypeMismatch => :error,
1071
+ MethodDefinitionMissing => :hint,
1072
+ MethodParameterMismatch => :error,
1073
+ MethodReturnTypeAnnotationMismatch => :error,
1074
+ MultipleAssignmentConversionError => :error,
1075
+ NoMethod => :error,
1076
+ ProcHintIgnored => :information,
1077
+ ProcTypeExpected => :error,
1078
+ RBSError => :error,
1079
+ RequiredBlockMissing => :error,
1080
+ ReturnTypeMismatch => :error,
1025
1081
  SetterBodyTypeMismatch => :error,
1026
- SetterReturnTypeMismatch => :error
1082
+ SetterReturnTypeMismatch => :error,
1083
+ SyntaxError => :hint,
1084
+ TypeArgumentMismatchError => :error,
1085
+ UnexpectedBlockGiven => :error,
1086
+ UnexpectedDynamicMethod => :information,
1087
+ UnexpectedError => :information,
1088
+ UnexpectedJump => :error,
1089
+ UnexpectedJumpValue => :error,
1090
+ UnexpectedKeywordArgument => :error,
1091
+ UnexpectedPositionalArgument => :error,
1092
+ UnexpectedSplat => :warning,
1093
+ UnexpectedSuper => :error,
1094
+ UnexpectedTypeArgument => :error,
1095
+ UnexpectedYield => :error,
1096
+ UnknownConstant => :error,
1097
+ UnknownGlobalVariable => :error,
1098
+ UnknownInstanceVariable => :error,
1099
+ UnreachableBranch => :information,
1100
+ UnreachableValueBranch => :warning,
1101
+ UnresolvedOverloading => :error,
1102
+ UnsatisfiableConstraint => :error,
1103
+ UnsupportedSyntax => :information,
1027
1104
  }
1028
1105
  ).freeze
1029
1106
  end
@@ -1031,19 +1108,57 @@ module Steep
1031
1108
  def self.lenient
1032
1109
  @lenient ||= _ = all_error.merge(
1033
1110
  {
1034
- NoMethod => nil,
1035
- ImplicitBreakValueMismatch => nil,
1111
+ ArgumentTypeMismatch => :information,
1112
+ BlockBodyTypeMismatch => :hint,
1113
+ BlockTypeMismatch => :hint,
1114
+ BreakTypeMismatch => :hint,
1115
+ DifferentMethodParameterKind => nil,
1036
1116
  FallbackAny => nil,
1037
- UnreachableValueBranch => nil,
1038
- UnreachableBranch => nil,
1039
- UnknownConstant => nil,
1117
+ FalseAssertion => nil,
1118
+ ImplicitBreakValueMismatch => nil,
1119
+ IncompatibleAnnotation => nil,
1120
+ IncompatibleArgumentForwarding => :information,
1121
+ IncompatibleAssignment => :hint,
1122
+ IncompatibleMethodTypeAnnotation => nil,
1123
+ IncompatibleTypeCase => nil,
1124
+ InsufficientKeywordArguments => :information,
1125
+ InsufficientPositionalArguments => :information,
1126
+ InsufficientTypeArgument => nil,
1127
+ MethodArityMismatch => :information,
1128
+ MethodBodyTypeMismatch => :warning,
1040
1129
  MethodDefinitionMissing => nil,
1041
- UnexpectedJump => nil,
1042
- FalseAssertion => :hint,
1043
- UnsupportedSyntax => nil,
1044
- ProcHintIgnored => :hint,
1130
+ MethodParameterMismatch => :warning,
1131
+ MethodReturnTypeAnnotationMismatch => nil,
1132
+ MultipleAssignmentConversionError => nil,
1133
+ NoMethod => :information,
1134
+ ProcHintIgnored => nil,
1135
+ ProcTypeExpected => nil,
1136
+ RBSError => :information,
1137
+ RequiredBlockMissing => :hint,
1138
+ ReturnTypeMismatch => :warning,
1045
1139
  SetterBodyTypeMismatch => nil,
1046
- SetterReturnTypeMismatch => nil
1140
+ SetterReturnTypeMismatch => nil,
1141
+ SyntaxError => :hint,
1142
+ TypeArgumentMismatchError => nil,
1143
+ UnexpectedBlockGiven => :hint,
1144
+ UnexpectedDynamicMethod => nil,
1145
+ UnexpectedError => :hint,
1146
+ UnexpectedJump => nil,
1147
+ UnexpectedJumpValue => nil,
1148
+ UnexpectedKeywordArgument => :information,
1149
+ UnexpectedPositionalArgument => :information,
1150
+ UnexpectedSplat => nil,
1151
+ UnexpectedSuper => nil,
1152
+ UnexpectedTypeArgument => nil,
1153
+ UnexpectedYield => :information,
1154
+ UnknownConstant => :hint,
1155
+ UnknownGlobalVariable => :hint,
1156
+ UnknownInstanceVariable => :hint,
1157
+ UnreachableBranch => :hint,
1158
+ UnreachableValueBranch => :hint,
1159
+ UnresolvedOverloading => :information,
1160
+ UnsatisfiableConstraint => :hint,
1161
+ UnsupportedSyntax => :hint,
1047
1162
  }
1048
1163
  ).freeze
1049
1164
  end
@@ -18,9 +18,10 @@ module Steep
18
18
  # check "app/models/**/*.rb" # Glob
19
19
  # # ignore "lib/templates/*.rb"
20
20
  #
21
- # # library "pathname", "set" # Standard libraries
21
+ # # library "pathname" # Standard libraries
22
22
  # # library "strong_json" # Gems
23
23
  #
24
+ # # configure_code_diagnostics(D::Ruby.default) # `default` diagnostics setting (applies by default)
24
25
  # # configure_code_diagnostics(D::Ruby.strict) # `strict` diagnostics setting
25
26
  # # configure_code_diagnostics(D::Ruby.lenient) # `lenient` diagnostics setting
26
27
  # # configure_code_diagnostics(D::Ruby.silent) # `silent` diagnostics setting
@@ -34,7 +35,7 @@ module Steep
34
35
  #
35
36
  # check "test"
36
37
  #
37
- # # library "pathname", "set" # Standard libraries
38
+ # # library "pathname" # Standard libraries
38
39
  # end
39
40
  EOF
40
41
 
@@ -143,27 +143,6 @@ module Steep
143
143
  @repo_paths.push(*paths.map {|s| Pathname(s) })
144
144
  end
145
145
 
146
- # Configure the code diagnostics printing setup.
147
- #
148
- # Yields a hash, and the update the hash in the block.
149
- #
150
- # ```rb
151
- # D = Steep::Diagnostic
152
- #
153
- # configure_code_diagnostics do |hash|
154
- # # Assign one of :error, :warning, :information, :hint or :nil to error classes.
155
- # hash[D::Ruby::UnexpectedPositionalArgument] = :error
156
- # end
157
- # ```
158
- #
159
- # Passing a hash is also allowed.
160
- #
161
- # ```rb
162
- # D = Steep::Diagnostic
163
- #
164
- # configure_code_diagnostics(D::Ruby.lenient)
165
- # ```
166
- #
167
146
  def configure_code_diagnostics(hash = nil)
168
147
  if hash
169
148
  code_diagnostics_config.merge!(hash)
data/lib/steep/source.rb CHANGED
@@ -330,13 +330,12 @@ module Steep
330
330
  def find_heredoc_nodes(line, column, position)
331
331
  each_heredoc_node() do |nodes, location|
332
332
  node = nodes[0]
333
+ loc = location.heredoc_body #: Parser::Source::Range
333
334
 
334
- range = location.heredoc_body&.yield_self do |r|
335
- r.begin_pos..r.end_pos
336
- end
337
-
338
- if range && (range === position)
339
- return nodes
335
+ if range = loc.to_range
336
+ if range.begin <= position && position <= range.end
337
+ return nodes
338
+ end
340
339
  end
341
340
  end
342
341
 
@@ -344,12 +343,10 @@ module Steep
344
343
  end
345
344
 
346
345
  def find_nodes_loc(node, position, parents)
347
- range = node.location.expression&.yield_self do |r|
348
- r.begin_pos..r.end_pos
349
- end
346
+ range = node.location.expression&.to_range
350
347
 
351
348
  if range
352
- if range === position
349
+ if range.begin <= position && position <= range.end
353
350
  parents.unshift node
354
351
 
355
352
  Source.each_child_node(node) do |child|
@@ -366,9 +363,7 @@ module Steep
366
363
  def find_nodes(line:, column:)
367
364
  return [] unless node
368
365
 
369
- position = (line-1).times.sum do |i|
370
- node.location.expression.source_buffer.source_line(i+1).size + 1
371
- end + column
366
+ position = buffer.loc_to_pos([line, column])
372
367
 
373
368
  if heredoc_nodes = find_heredoc_nodes(line, column, position)
374
369
  Source.each_child_node(heredoc_nodes[0]) do |child|
@@ -3103,27 +3103,29 @@ module Steep
3103
3103
 
3104
3104
  type_hint = deep_expand_alias(type_hint) || type_hint
3105
3105
 
3106
- procs = flatten_union(type_hint).select do |type|
3107
- check_relation(sub_type: type, super_type: AST::Builtin::Proc.instance_type).success? &&
3108
- !type.is_a?(AST::Types::Any)
3109
- end
3106
+ unless type_hint.is_a?(AST::Types::Any)
3107
+ procs = flatten_union(type_hint).select do |type|
3108
+ check_relation(sub_type: type, super_type: AST::Builtin::Proc.instance_type).success? &&
3109
+ !type.is_a?(AST::Types::Any)
3110
+ end
3110
3111
 
3111
- proc_instances, proc_types = procs.partition {|type| AST::Builtin::Proc.instance_type?(type) }
3112
+ proc_instances, proc_types = procs.partition {|type| AST::Builtin::Proc.instance_type?(type) }
3112
3113
 
3113
- case
3114
- when !proc_instances.empty? && proc_types.empty?
3115
- # `::Proc` is given as a hint
3116
- when proc_types.size == 1
3117
- # Proc type is given as a hint
3118
- hint_proc = proc_types[0] #: AST::Types::Proc
3119
- params_hint = hint_proc.type.params
3120
- return_hint = hint_proc.type.return_type
3121
- block_hint = hint_proc.block
3122
- self_hint = hint_proc.self_type
3123
- else
3124
- typing.add_error(
3125
- Diagnostic::Ruby::ProcHintIgnored.new(hint_type: original_hint, node: node)
3126
- )
3114
+ case
3115
+ when !proc_instances.empty? && proc_types.empty?
3116
+ # `::Proc` is given as a hint
3117
+ when proc_types.size == 1
3118
+ # Proc type is given as a hint
3119
+ hint_proc = proc_types[0] #: AST::Types::Proc
3120
+ params_hint = hint_proc.type.params
3121
+ return_hint = hint_proc.type.return_type
3122
+ block_hint = hint_proc.block
3123
+ self_hint = hint_proc.self_type
3124
+ else
3125
+ typing.add_error(
3126
+ Diagnostic::Ruby::ProcHintIgnored.new(hint_type: original_hint, node: node)
3127
+ )
3128
+ end
3127
3129
  end
3128
3130
  end
3129
3131
 
@@ -280,20 +280,22 @@ module Steep
280
280
  when AST::Types::Logic::ReceiverIsNil
281
281
  if receiver && arguments.size.zero?
282
282
  receiver_type = typing.type_of(node: receiver)
283
- truthy_receiver, falsy_receiver = factory.partition_union(receiver_type)
283
+ unwrap = factory.unwrap_optional(receiver_type)
284
+ truthy_receiver = AST::Builtin.nil_type
285
+ falsy_receiver = unwrap || receiver_type
284
286
 
285
287
  truthy_env, falsy_env = refine_node_type(
286
288
  env: env,
287
289
  node: receiver,
288
- truthy_type: falsy_receiver || BOT,
289
- falsy_type: truthy_receiver || BOT
290
+ truthy_type: truthy_receiver,
291
+ falsy_type: falsy_receiver
290
292
  )
291
293
 
292
294
  truthy_result = Result.new(type: TRUE, env: truthy_env, unreachable: false)
293
- truthy_result.unreachable! unless truthy_receiver
295
+ truthy_result.unreachable! if unwrap == receiver_type
294
296
 
295
297
  falsy_result = Result.new(type: FALSE, env: falsy_env, unreachable: false)
296
- falsy_result.unreachable! unless falsy_receiver
298
+ falsy_result.unreachable! unless unwrap
297
299
 
298
300
  [truthy_result, falsy_result]
299
301
  end
@@ -500,7 +502,7 @@ module Steep
500
502
  type_case_select0(ty, klass)
501
503
  end
502
504
 
503
- when AST::Types::Any, AST::Types::Top
505
+ when AST::Types::Any, AST::Types::Top, AST::Types::Var
504
506
  [
505
507
  [instance_type],
506
508
  [type]
data/lib/steep/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Steep
2
- VERSION = "1.5.0.pre.6"
2
+ VERSION = "1.5.0"
3
3
  end
@@ -77,13 +77,12 @@ module Steep
77
77
  # Returns a type that doesn't have `nil` in the union component
78
78
  #
79
79
  # * Returns `nil` if given type is `nil`
80
- # * **Doesn't expand type alias automatically**
80
+ # * Expand (unfold) the type aliases automatically
81
81
  #
82
82
  # ```ruby
83
83
  # unwrap_optional(`String?`) # => `String`
84
84
  # unwrap_optional(`String | Integer | false | nil`) # => `String | Integer | false`
85
85
  # unwrap_optional(`nil`) # => nil
86
- # unwrap_optional(`boolish`) # => `boolish`
87
86
  # ```
88
87
  #
89
88
  def unwrap_optional: (Types::t) -> Types::t?
@@ -623,7 +623,7 @@ module Steep
623
623
  end
624
624
 
625
625
  # RBS embedded in the Ruby code has validation error
626
- #
626
+ #
627
627
  class RBSError < Base
628
628
  attr_reader error: Signature::Base
629
629
 
@@ -662,21 +662,35 @@ module Steep
662
662
 
663
663
  ALL: Array[singleton(Base)]
664
664
 
665
- type template = Hash[singleton(Base), LSPFormatter::severity]
665
+ type template = Hash[singleton(Base), LSPFormatter::severity?]
666
666
 
667
667
  self.@all_error: template?
668
+ self.@default: template?
669
+ self.@strict: template?
670
+ self.@lenient: template?
671
+ self.@silent: template?
672
+
673
+ # This template reports everything as an error
674
+ #
668
675
  def self.all_error: () -> template
669
676
 
670
- self.@default: template?
677
+ # This template detects inconsistencies between RBS and Ruby code APIs
678
+ #
671
679
  def self.default: () -> template
672
680
 
673
- self.@strict: template?
681
+ # This template helps you keeping your codebase (almost) type-safe
682
+ #
683
+ # You can start with this template to review the problems reported on the project,
684
+ # and you can ignore some kind of errors.
685
+ #
674
686
  def self.strict: () -> template
675
687
 
676
- self.@lenient: template?
688
+ # This template detects inconsistent definition in Ruby code with respect to your RBS definition
689
+ #
677
690
  def self.lenient: () -> template
678
691
 
679
- self.@silent: template?
692
+ # This template reports nothing
693
+ #
680
694
  def self.silent: () -> template
681
695
  end
682
696
  end
@@ -1,3 +1,5 @@
1
+ use Steep::Diagnostic::Ruby::template
2
+
1
3
  module Steep
2
4
  class Project
3
5
  class DSL
@@ -71,10 +73,13 @@ module Steep
71
73
  # D = Steep::Diagnostic
72
74
  #
73
75
  # configure_code_diagnostics(D::Ruby.lenient)
76
+ # configure_code_diagnostics(D::Ruby.strict) do |config|
77
+ # config[D::Ruby::NoMethod] = nil
78
+ # end
74
79
  # ```
75
80
  #
76
- def configure_code_diagnostics: (Hash[untyped, untyped] hash) -> void
77
- | () { (Hash[untyped, untyped]) -> void } -> void
81
+ def configure_code_diagnostics: (template hash) ?{ (template) -> void }-> void
82
+ | () { (template) -> void }-> void
78
83
 
79
84
  def collection_config: (Pathname path) -> void
80
85
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: steep
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0.pre.6
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Soutaro Matsumoto
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-07-11 00:00:00.000000000 Z
11
+ date: 2023-07-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parser
@@ -782,9 +782,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
782
782
  version: 2.7.0
783
783
  required_rubygems_version: !ruby/object:Gem::Requirement
784
784
  requirements:
785
- - - ">"
785
+ - - ">="
786
786
  - !ruby/object:Gem::Version
787
- version: 1.3.1
787
+ version: '0'
788
788
  requirements: []
789
789
  rubygems_version: 3.4.10
790
790
  signing_key: