dependabot-bundler 0.95.5 → 0.95.6

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.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. metadata +4 -38
  3. data/helpers/Makefile +0 -9
  4. data/helpers/build +0 -26
  5. data/lib/dependabot/bundler.rb +0 -27
  6. data/lib/dependabot/bundler/file_fetcher.rb +0 -216
  7. data/lib/dependabot/bundler/file_fetcher/child_gemfile_finder.rb +0 -68
  8. data/lib/dependabot/bundler/file_fetcher/gemspec_finder.rb +0 -96
  9. data/lib/dependabot/bundler/file_fetcher/path_gemspec_finder.rb +0 -112
  10. data/lib/dependabot/bundler/file_fetcher/require_relative_finder.rb +0 -65
  11. data/lib/dependabot/bundler/file_parser.rb +0 -297
  12. data/lib/dependabot/bundler/file_parser/file_preparer.rb +0 -84
  13. data/lib/dependabot/bundler/file_parser/gemfile_checker.rb +0 -46
  14. data/lib/dependabot/bundler/file_updater.rb +0 -125
  15. data/lib/dependabot/bundler/file_updater/gemfile_updater.rb +0 -114
  16. data/lib/dependabot/bundler/file_updater/gemspec_dependency_name_finder.rb +0 -50
  17. data/lib/dependabot/bundler/file_updater/gemspec_sanitizer.rb +0 -298
  18. data/lib/dependabot/bundler/file_updater/gemspec_updater.rb +0 -62
  19. data/lib/dependabot/bundler/file_updater/git_pin_replacer.rb +0 -78
  20. data/lib/dependabot/bundler/file_updater/git_source_remover.rb +0 -100
  21. data/lib/dependabot/bundler/file_updater/lockfile_updater.rb +0 -387
  22. data/lib/dependabot/bundler/file_updater/requirement_replacer.rb +0 -221
  23. data/lib/dependabot/bundler/metadata_finder.rb +0 -204
  24. data/lib/dependabot/bundler/requirement.rb +0 -29
  25. data/lib/dependabot/bundler/update_checker.rb +0 -334
  26. data/lib/dependabot/bundler/update_checker/file_preparer.rb +0 -279
  27. data/lib/dependabot/bundler/update_checker/force_updater.rb +0 -259
  28. data/lib/dependabot/bundler/update_checker/latest_version_finder.rb +0 -165
  29. data/lib/dependabot/bundler/update_checker/requirements_updater.rb +0 -281
  30. data/lib/dependabot/bundler/update_checker/ruby_requirement_setter.rb +0 -113
  31. data/lib/dependabot/bundler/update_checker/shared_bundler_helpers.rb +0 -244
  32. data/lib/dependabot/bundler/update_checker/version_resolver.rb +0 -272
  33. data/lib/dependabot/bundler/version.rb +0 -13
  34. data/lib/dependabot/monkey_patches/bundler/definition_bundler_version_patch.rb +0 -15
  35. data/lib/dependabot/monkey_patches/bundler/definition_ruby_version_patch.rb +0 -14
  36. data/lib/dependabot/monkey_patches/bundler/git_source_patch.rb +0 -27
@@ -1,84 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "dependabot/dependency_file"
4
- require "dependabot/bundler/file_parser"
5
- require "dependabot/bundler/file_updater/gemspec_sanitizer"
6
-
7
- module Dependabot
8
- module Bundler
9
- class FileParser
10
- class FilePreparer
11
- def initialize(dependency_files:)
12
- @dependency_files = dependency_files
13
- end
14
-
15
- def prepared_dependency_files
16
- files = []
17
-
18
- gemspecs.compact.each do |file|
19
- files << DependencyFile.new(
20
- name: file.name,
21
- content: sanitize_gemspec_content(file.content),
22
- directory: file.directory,
23
- support_file: file.support_file?
24
- )
25
- end
26
-
27
- files += [
28
- gemfile,
29
- *evaled_gemfiles,
30
- lockfile,
31
- ruby_version_file,
32
- *imported_ruby_files
33
- ].compact
34
- end
35
-
36
- private
37
-
38
- attr_reader :dependency_files
39
-
40
- def gemfile
41
- dependency_files.find { |f| f.name == "Gemfile" } ||
42
- dependency_files.find { |f| f.name == "gems.rb" }
43
- end
44
-
45
- def evaled_gemfiles
46
- dependency_files.
47
- reject { |f| f.name.end_with?(".gemspec") }.
48
- reject { |f| f.name.end_with?(".lock") }.
49
- reject { |f| f.name.end_with?(".ruby-version") }.
50
- reject { |f| f.name == "Gemfile" }.
51
- reject { |f| f.name == "gems.rb" }.
52
- reject { |f| f.name == "gems.locked" }
53
- end
54
-
55
- def lockfile
56
- dependency_files.find { |f| f.name == "Gemfile.lock" } ||
57
- dependency_files.find { |f| f.name == "gems.locked" }
58
- end
59
-
60
- def gemspecs
61
- dependency_files.select { |f| f.name.end_with?(".gemspec") }
62
- end
63
-
64
- def ruby_version_file
65
- dependency_files.find { |f| f.name == ".ruby-version" }
66
- end
67
-
68
- def imported_ruby_files
69
- dependency_files.
70
- select { |f| f.name.end_with?(".rb") }.
71
- reject { |f| f.name == "gems.rb" }
72
- end
73
-
74
- def sanitize_gemspec_content(gemspec_content)
75
- # No need to set the version correctly - this is just an update
76
- # check so we're not going to persist any changes to the lockfile.
77
- FileUpdater::GemspecSanitizer.
78
- new(replacement_version: "0.0.1").
79
- rewrite(gemspec_content)
80
- end
81
- end
82
- end
83
- end
84
- end
@@ -1,46 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "parser/current"
4
- require "dependabot/bundler/file_parser"
5
-
6
- module Dependabot
7
- module Bundler
8
- class FileParser
9
- # Checks whether a dependency is declared in a Gemfile
10
- class GemfileChecker
11
- def initialize(dependency:, gemfile:)
12
- @dependency = dependency
13
- @gemfile = gemfile
14
- end
15
-
16
- def includes_dependency?
17
- return false unless Parser::CurrentRuby.parse(gemfile.content)
18
-
19
- Parser::CurrentRuby.parse(gemfile.content).children.any? do |node|
20
- deep_check_for_gem(node)
21
- end
22
- end
23
-
24
- private
25
-
26
- attr_reader :dependency, :gemfile
27
-
28
- def deep_check_for_gem(node)
29
- return true if declares_targeted_gem?(node)
30
- return false unless node.is_a?(Parser::AST::Node)
31
-
32
- node.children.any? do |child_node|
33
- deep_check_for_gem(child_node)
34
- end
35
- end
36
-
37
- def declares_targeted_gem?(node)
38
- return false unless node.is_a?(Parser::AST::Node)
39
- return false unless node.children[1] == :gem
40
-
41
- node.children[2].children.first == dependency.name
42
- end
43
- end
44
- end
45
- end
46
- end
@@ -1,125 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "dependabot/file_updaters"
4
- require "dependabot/file_updaters/base"
5
-
6
- module Dependabot
7
- module Bundler
8
- class FileUpdater < Dependabot::FileUpdaters::Base
9
- require_relative "file_updater/gemfile_updater"
10
- require_relative "file_updater/gemspec_updater"
11
- require_relative "file_updater/lockfile_updater"
12
-
13
- def self.updated_files_regex
14
- [
15
- /^Gemfile$/,
16
- /^Gemfile\.lock$/,
17
- /^gems\.rb$/,
18
- /^gems\.locked$/,
19
- /^*\.gemspec$/
20
- ]
21
- end
22
-
23
- def updated_dependency_files
24
- updated_files = []
25
-
26
- if gemfile && file_changed?(gemfile)
27
- updated_files <<
28
- updated_file(
29
- file: gemfile,
30
- content: updated_gemfile_content(gemfile)
31
- )
32
- end
33
-
34
- if lockfile && dependencies.any?(&:appears_in_lockfile?)
35
- updated_files <<
36
- updated_file(file: lockfile, content: updated_lockfile_content)
37
- end
38
-
39
- top_level_gemspecs.each do |file|
40
- next unless file_changed?(file)
41
-
42
- updated_files <<
43
- updated_file(file: file, content: updated_gemspec_content(file))
44
- end
45
-
46
- evaled_gemfiles.each do |file|
47
- next unless file_changed?(file)
48
-
49
- updated_files <<
50
- updated_file(file: file, content: updated_gemfile_content(file))
51
- end
52
-
53
- updated_files
54
- end
55
-
56
- private
57
-
58
- def check_required_files
59
- file_names = dependency_files.map(&:name)
60
-
61
- if lockfile && !gemfile
62
- raise "A Gemfile must be provided if a lockfile is!"
63
- end
64
-
65
- return if file_names.any? { |name| name.match?(%r{^[^/]*\.gemspec$}) }
66
- return if gemfile
67
-
68
- raise "A gemspec or Gemfile must be provided!"
69
- end
70
-
71
- def gemfile
72
- @gemfile ||= get_original_file("Gemfile") ||
73
- get_original_file("gems.rb")
74
- end
75
-
76
- def lockfile
77
- @lockfile ||= get_original_file("Gemfile.lock") ||
78
- get_original_file("gems.locked")
79
- end
80
-
81
- def evaled_gemfiles
82
- @evaled_gemfiles ||=
83
- dependency_files.
84
- reject { |f| f.name.end_with?(".gemspec") }.
85
- reject { |f| f.name.end_with?(".lock") }.
86
- reject { |f| f.name.end_with?(".ruby-version") }.
87
- reject { |f| f.name == "Gemfile" }.
88
- reject { |f| f.name == "gems.rb" }.
89
- reject { |f| f.name == "gems.locked" }
90
- end
91
-
92
- def updated_gemfile_content(file)
93
- GemfileUpdater.new(
94
- dependencies: dependencies,
95
- gemfile: file
96
- ).updated_gemfile_content
97
- end
98
-
99
- def updated_gemspec_content(gemspec)
100
- GemspecUpdater.new(
101
- dependencies: dependencies,
102
- gemspec: gemspec
103
- ).updated_gemspec_content
104
- end
105
-
106
- def updated_lockfile_content
107
- @updated_lockfile_content ||=
108
- LockfileUpdater.new(
109
- dependencies: dependencies,
110
- dependency_files: dependency_files,
111
- credentials: credentials
112
- ).updated_lockfile_content
113
- end
114
-
115
- def top_level_gemspecs
116
- dependency_files.
117
- select { |file| file.name.end_with?(".gemspec") }.
118
- reject(&:support_file?)
119
- end
120
- end
121
- end
122
- end
123
-
124
- Dependabot::FileUpdaters.
125
- register("bundler", Dependabot::Bundler::FileUpdater)
@@ -1,114 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "dependabot/bundler/file_updater"
4
-
5
- module Dependabot
6
- module Bundler
7
- class FileUpdater
8
- class GemfileUpdater
9
- require_relative "git_pin_replacer"
10
- require_relative "git_source_remover"
11
- require_relative "requirement_replacer"
12
-
13
- def initialize(dependencies:, gemfile:)
14
- @dependencies = dependencies
15
- @gemfile = gemfile
16
- end
17
-
18
- def updated_gemfile_content
19
- content = gemfile.content
20
-
21
- dependencies.each do |dependency|
22
- content = replace_gemfile_version_requirement(
23
- dependency,
24
- gemfile,
25
- content
26
- )
27
-
28
- if remove_git_source?(dependency)
29
- content = remove_gemfile_git_source(dependency, content)
30
- end
31
-
32
- if update_git_pin?(dependency)
33
- content = update_gemfile_git_pin(dependency, gemfile, content)
34
- end
35
- end
36
-
37
- content
38
- end
39
-
40
- private
41
-
42
- attr_reader :dependencies, :gemfile
43
-
44
- def replace_gemfile_version_requirement(dependency, file, content)
45
- return content unless requirement_changed?(file, dependency)
46
-
47
- updated_requirement =
48
- dependency.requirements.
49
- find { |r| r[:file] == file.name }.
50
- fetch(:requirement)
51
-
52
- previous_requirement =
53
- dependency.previous_requirements.
54
- find { |r| r[:file] == file.name }.
55
- fetch(:requirement)
56
-
57
- RequirementReplacer.new(
58
- dependency: dependency,
59
- file_type: :gemfile,
60
- updated_requirement: updated_requirement,
61
- previous_requirement: previous_requirement
62
- ).rewrite(content)
63
- end
64
-
65
- def requirement_changed?(file, dependency)
66
- changed_requirements =
67
- dependency.requirements - dependency.previous_requirements
68
-
69
- changed_requirements.any? { |f| f[:file] == file.name }
70
- end
71
-
72
- def remove_git_source?(dependency)
73
- old_gemfile_req =
74
- dependency.previous_requirements.
75
- find { |f| %w(Gemfile gems.rb).include?(f[:file]) }
76
-
77
- return false unless old_gemfile_req&.dig(:source, :type) == "git"
78
-
79
- new_gemfile_req =
80
- dependency.requirements.
81
- find { |f| %w(Gemfile gems.rb).include?(f[:file]) }
82
-
83
- new_gemfile_req[:source].nil?
84
- end
85
-
86
- def update_git_pin?(dependency)
87
- new_gemfile_req =
88
- dependency.requirements.
89
- find { |f| %w(Gemfile gems.rb).include?(f[:file]) }
90
- return false unless new_gemfile_req&.dig(:source, :type) == "git"
91
-
92
- # If the new requirement is a git dependency with a ref then there's
93
- # no harm in doing an update
94
- new_gemfile_req.dig(:source, :ref)
95
- end
96
-
97
- def remove_gemfile_git_source(dependency, content)
98
- GitSourceRemover.new(dependency: dependency).rewrite(content)
99
- end
100
-
101
- def update_gemfile_git_pin(dependency, file, content)
102
- new_pin =
103
- dependency.requirements.
104
- find { |f| f[:file] == file.name }.
105
- fetch(:source).fetch(:ref)
106
-
107
- GitPinReplacer.
108
- new(dependency: dependency, new_pin: new_pin).
109
- rewrite(content)
110
- end
111
- end
112
- end
113
- end
114
- end
@@ -1,50 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "parser/current"
4
- require "dependabot/bundler/file_updater"
5
-
6
- module Dependabot
7
- module Bundler
8
- class FileUpdater
9
- class GemspecDependencyNameFinder
10
- attr_reader :gemspec_content
11
-
12
- def initialize(gemspec_content:)
13
- @gemspec_content = gemspec_content
14
- end
15
-
16
- # rubocop:disable Security/Eval
17
- def dependency_name
18
- ast = Parser::CurrentRuby.parse(gemspec_content)
19
- dependency_name_node = find_dependency_name_node(ast)
20
- return unless dependency_name_node
21
-
22
- begin
23
- eval(dependency_name_node.children[2].loc.expression.source)
24
- rescue StandardError
25
- nil # If we can't evaluate the expression just return nil
26
- end
27
- end
28
- # rubocop:enable Security/Eval
29
-
30
- private
31
-
32
- def find_dependency_name_node(node)
33
- return unless node.is_a?(Parser::AST::Node)
34
- return node if declares_dependency_name?(node)
35
-
36
- node.children.find do |cn|
37
- dependency_name_node = find_dependency_name_node(cn)
38
- break dependency_name_node if dependency_name_node
39
- end
40
- end
41
-
42
- def declares_dependency_name?(node)
43
- return false unless node.is_a?(Parser::AST::Node)
44
-
45
- node.children[1] == :name=
46
- end
47
- end
48
- end
49
- end
50
- end
@@ -1,298 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "parser/current"
4
- require "dependabot/bundler/file_updater"
5
-
6
- module Dependabot
7
- module Bundler
8
- class FileUpdater
9
- class GemspecSanitizer
10
- UNNECESSARY_ASSIGNMENTS = %i(
11
- bindir=
12
- cert_chain=
13
- email=
14
- executables=
15
- extra_rdoc_files=
16
- homepage=
17
- license=
18
- licenses=
19
- metadata=
20
- post_install_message=
21
- rdoc_options=
22
- ).freeze
23
-
24
- attr_reader :replacement_version
25
-
26
- def initialize(replacement_version:)
27
- @replacement_version = replacement_version
28
- end
29
-
30
- def rewrite(content)
31
- buffer = Parser::Source::Buffer.new("(gemspec_content)")
32
- buffer.source = content
33
- ast = Parser::CurrentRuby.new.parse(buffer)
34
-
35
- Rewriter.
36
- new(replacement_version: replacement_version).
37
- rewrite(buffer, ast)
38
- end
39
-
40
- class Rewriter < Parser::TreeRewriter
41
- def initialize(replacement_version:)
42
- @replacement_version = replacement_version
43
- end
44
-
45
- def on_send(node)
46
- # Wrap any `require` or `require_relative` calls in a rescue
47
- # block, as we might not have the required files
48
- wrap_require(node) if requires_file?(node)
49
-
50
- # Remove any assignments to a VERSION constant (or similar), as
51
- # that constant probably comes from a required file
52
- replace_version_assignments(node)
53
-
54
- # Replace the `s.files= ...` assignment with a blank array, as
55
- # occassionally a File.open(..).readlines pattern is used
56
- replace_file_assignments(node)
57
-
58
- # Replace the `s.require_path= ...` assignment, as
59
- # occassionally a Dir['lib'] pattern is used
60
- replace_require_paths_assignments(node)
61
-
62
- # Replace any `File.read(...)` calls with a dummy string
63
- replace_file_reads(node)
64
-
65
- # Remove the arguments from any `Find.find(...)` calls
66
- remove_find_dot_find_args(node)
67
-
68
- remove_unnecessary_assignments(node)
69
- end
70
-
71
- private
72
-
73
- attr_reader :replacement_version
74
-
75
- def requires_file?(node)
76
- %i(require require_relative).include?(node.children[1])
77
- end
78
-
79
- def wrap_require(node)
80
- replace(
81
- node.loc.expression,
82
- "begin\n"\
83
- "#{node.loc.expression.source_line}\n"\
84
- "rescue LoadError\n"\
85
- "end"
86
- )
87
- end
88
-
89
- def replace_version_assignments(node)
90
- return unless node.is_a?(Parser::AST::Node)
91
-
92
- if node_assigns_to_version_constant?(node)
93
- return replace_constant(node)
94
- end
95
-
96
- node.children.each { |child| replace_version_assignments(child) }
97
- end
98
-
99
- def replace_file_assignments(node)
100
- return unless node.is_a?(Parser::AST::Node)
101
-
102
- if node_assigns_files_to_var?(node)
103
- return replace_file_assignment(node)
104
- end
105
-
106
- node.children.each { |child| replace_file_assignments(child) }
107
- end
108
-
109
- def replace_require_paths_assignments(node)
110
- return unless node.is_a?(Parser::AST::Node)
111
-
112
- if node_assigns_require_paths?(node)
113
- return replace_require_paths_assignment(node)
114
- end
115
-
116
- node.children.each do |child|
117
- replace_require_paths_assignments(child)
118
- end
119
- end
120
-
121
- def node_assigns_to_version_constant?(node)
122
- return false unless node.is_a?(Parser::AST::Node)
123
- return false unless node.children.first.is_a?(Parser::AST::Node)
124
- return false unless node.children.first&.type == :lvar
125
-
126
- return true if node.children[1] == :version=
127
- return true if node_is_version_constant?(node.children.last)
128
- return true if node_calls_version_constant?(node.children.last)
129
-
130
- node_interpolates_version_constant?(node.children.last)
131
- end
132
-
133
- def node_assigns_files_to_var?(node)
134
- return false unless node.is_a?(Parser::AST::Node)
135
- return false unless node.children.first.is_a?(Parser::AST::Node)
136
- return false unless node.children.first&.type == :lvar
137
- return false unless node.children[1] == :files=
138
-
139
- node.children[2]&.type == :send
140
- end
141
-
142
- def node_assigns_require_paths?(node)
143
- return false unless node.is_a?(Parser::AST::Node)
144
- return false unless node.children.first.is_a?(Parser::AST::Node)
145
- return false unless node.children.first&.type == :lvar
146
-
147
- node.children[1] == :require_paths=
148
- end
149
-
150
- def replace_file_reads(node)
151
- return unless node.is_a?(Parser::AST::Node)
152
- return if node.children[1] == :version=
153
- return replace_file_read(node) if node_reads_a_file?(node)
154
- return replace_file_readlines(node) if node_uses_readlines?(node)
155
-
156
- node.children.each { |child| replace_file_reads(child) }
157
- end
158
-
159
- def node_reads_a_file?(node)
160
- return false unless node.is_a?(Parser::AST::Node)
161
- return false unless node.children.first.is_a?(Parser::AST::Node)
162
- return false unless node.children.first&.type == :const
163
- return false unless node.children.first.children.last == :File
164
-
165
- node.children[1] == :read
166
- end
167
-
168
- def node_uses_readlines?(node)
169
- return false unless node.is_a?(Parser::AST::Node)
170
- return false unless node.children.first.is_a?(Parser::AST::Node)
171
- return false unless node.children.first&.type == :const
172
- return false unless node.children.first.children.last == :File
173
-
174
- node.children[1] == :readlines
175
- end
176
-
177
- def remove_find_dot_find_args(node)
178
- return unless node.is_a?(Parser::AST::Node)
179
- return if node.children[1] == :version=
180
- return remove_find_args(node) if node_calls_find_dot_find?(node)
181
-
182
- node.children.each { |child| remove_find_dot_find_args(child) }
183
- end
184
-
185
- def node_calls_find_dot_find?(node)
186
- return false unless node.is_a?(Parser::AST::Node)
187
- return false unless node.children.first.is_a?(Parser::AST::Node)
188
- return false unless node.children.first&.type == :const
189
- return false unless node.children.first.children.last == :Find
190
-
191
- node.children[1] == :find
192
- end
193
-
194
- def remove_unnecessary_assignments(node)
195
- return unless node.is_a?(Parser::AST::Node)
196
-
197
- if unnecessary_assignment?(node) &&
198
- node.children.last&.location&.respond_to?(:heredoc_end)
199
- range_to_remove = node.loc.expression.join(
200
- node.children.last.location.heredoc_end
201
- )
202
- return replace(range_to_remove, '"sanitized"')
203
- elsif unnecessary_assignment?(node)
204
- return replace(node.loc.expression, '"sanitized"')
205
- end
206
-
207
- node.children.each do |child|
208
- remove_unnecessary_assignments(child)
209
- end
210
- end
211
-
212
- def unnecessary_assignment?(node)
213
- return false unless node.is_a?(Parser::AST::Node)
214
- return false unless node.children.first.is_a?(Parser::AST::Node)
215
-
216
- return true if node.children.first.type == :lvar &&
217
- UNNECESSARY_ASSIGNMENTS.include?(node.children[1])
218
-
219
- node.children[1] == :[]= && node.children.first.children.last
220
- end
221
-
222
- def node_is_version_constant?(node)
223
- return false unless node.is_a?(Parser::AST::Node)
224
- return false unless node.type == :const
225
-
226
- node.children.last.to_s.match?(/version/i)
227
- end
228
-
229
- def node_calls_version_constant?(node)
230
- return false unless node.is_a?(Parser::AST::Node)
231
- return false unless node.type == :send
232
-
233
- node.children.any? { |n| node_is_version_constant?(n) }
234
- end
235
-
236
- def node_interpolates_version_constant?(node)
237
- return false unless node.is_a?(Parser::AST::Node)
238
- return false unless node.type == :dstr
239
-
240
- node.children.
241
- select { |n| n.type == :begin }.
242
- flat_map(&:children).
243
- any? { |n| node_is_version_constant?(n) }
244
- end
245
-
246
- def replace_constant(node)
247
- case node.children.last&.type
248
- when :str, :int then nil # no-op
249
- when :const, :send, :lvar
250
- replace(
251
- node.children.last.loc.expression,
252
- %("#{replacement_version}")
253
- )
254
- when :dstr
255
- node.children.last.children.
256
- select { |n| n.type == :begin }.
257
- flat_map(&:children).
258
- select { |n| node_is_version_constant?(n) }.
259
- each do |n|
260
- replace(
261
- n.loc.expression,
262
- %("#{replacement_version}")
263
- )
264
- end
265
- else
266
- raise "Unexpected node type #{node.children.last&.type}"
267
- end
268
- end
269
-
270
- def replace_file_assignment(node)
271
- replace(node.children.last.loc.expression, "[]")
272
- end
273
-
274
- def replace_require_paths_assignment(node)
275
- replace(node.children.last.loc.expression, "['lib']")
276
- end
277
-
278
- def replace_file_read(node)
279
- replace(node.loc.expression, '"text"')
280
- end
281
-
282
- def replace_file_readlines(node)
283
- replace(node.loc.expression, '["text"]')
284
- end
285
-
286
- def remove_find_args(node)
287
- last_arg = node.children.last
288
-
289
- range_to_remove =
290
- last_arg.loc.expression.join(node.children[2].loc.begin.begin)
291
-
292
- remove(range_to_remove)
293
- end
294
- end
295
- end
296
- end
297
- end
298
- end