Skip to content

Commit 63ddd1f

Browse files
committed
Add strict typing to RubyRequirementSetter
1 parent d0bb7bf commit 63ddd1f

File tree

1 file changed

+21
-1
lines changed

1 file changed

+21
-1
lines changed

bundler/lib/dependabot/bundler/file_updater/ruby_requirement_setter.rb

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,34 @@
1-
# typed: true
1+
# typed: strict
22
# frozen_string_literal: true
33

44
require "parser/current"
5+
require "sorbet-runtime"
6+
57
require "dependabot/bundler/file_updater"
68
require "dependabot/bundler/requirement"
9+
require "dependabot/bundler/version"
710

811
module Dependabot
912
module Bundler
1013
class FileUpdater
1114
class RubyRequirementSetter
15+
extend T::Sig
16+
1217
RUBY_VERSIONS = %w(
1318
1.8.7 1.9.3 2.0.0 2.1.10 2.2.10 2.3.8 2.4.10 2.5.9 2.6.9 2.7.6 3.0.6 3.1.6 3.2.8 3.3.8 3.4.4
1419
).freeze
1520

1621
LANGUAGE = "ruby"
1722

23+
sig { returns(T.nilable(Dependabot::DependencyFile)) }
1824
attr_reader :gemspec
1925

26+
sig { params(gemspec: Dependabot::DependencyFile).void }
2027
def initialize(gemspec:)
2128
@gemspec = gemspec
2229
end
2330

31+
sig { params(content: String).returns(String) }
2432
def rewrite(content)
2533
return content unless gemspec_declares_ruby_requirement?
2634

@@ -39,17 +47,20 @@ def rewrite(content)
3947

4048
private
4149

50+
sig { returns(T::Boolean) }
4251
def gemspec_declares_ruby_requirement?
4352
!ruby_requirement.nil?
4453
end
4554

55+
sig { params(node: T.untyped).returns(T::Boolean) }
4656
def declares_ruby_version?(node)
4757
return false unless node.is_a?(Parser::AST::Node)
4858
return true if node.type == :send && node.children[1] == :ruby
4959

5060
node.children.any? { |cn| declares_ruby_version?(cn) }
5161
end
5262

63+
sig { returns(Dependabot::Bundler::Version) }
5364
def ruby_version
5465
requirement = if ruby_requirement.is_a?(Gem::Requirement)
5566
ruby_requirement
@@ -74,6 +85,7 @@ def ruby_version
7485
end
7586

7687
# rubocop:disable Security/Eval
88+
sig { returns(T.nilable(T.untyped)) }
7789
def ruby_requirement
7890
ast = Parser::CurrentRuby.parse(gemspec.content)
7991
requirement_node = find_ruby_requirement_node(ast)
@@ -87,6 +99,7 @@ def ruby_requirement
8799
end
88100
# rubocop:enable Security/Eval
89101

102+
sig { params(node: T.untyped).returns(T.nilable(Parser::AST::Node)) }
90103
def find_ruby_requirement_node(node)
91104
return unless node.is_a?(Parser::AST::Node)
92105
return node if declares_ruby_requirement?(node)
@@ -97,17 +110,22 @@ def find_ruby_requirement_node(node)
97110
end
98111
end
99112

113+
sig { params(node: T.untyped).returns(T::Boolean) }
100114
def declares_ruby_requirement?(node)
101115
return false unless node.is_a?(Parser::AST::Node)
102116

103117
node.children[1] == :required_ruby_version=
104118
end
105119

106120
class GemfileRewriter < Parser::TreeRewriter
121+
extend T::Sig
122+
123+
sig { override.params(ruby_version: Dependabot::Bundler::Version).void }
107124
def initialize(ruby_version:)
108125
@ruby_version = ruby_version
109126
end
110127

128+
sig { override.params(node: T.untyped).void }
111129
def on_send(node)
112130
return unless declares_ruby_version?(node)
113131

@@ -117,8 +135,10 @@ def on_send(node)
117135

118136
private
119137

138+
sig { returns(T.nilable(Dependabot::Bundler::Version)) }
120139
attr_reader :ruby_version
121140

141+
sig { params(node: T.untyped).returns(T::Boolean) }
122142
def declares_ruby_version?(node)
123143
return false unless node.is_a?(Parser::AST::Node)
124144
return false unless node.type == :send

0 commit comments

Comments
 (0)