steep 1.5.0.pre.6 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
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: