lib/tapioca/compilers/requires_compiler.rb in tapioca-0.6.1 vs lib/tapioca/compilers/requires_compiler.rb in tapioca-0.6.2
- old
+ new
@@ -15,14 +15,13 @@
sig { returns(String) }
def compile
config = Spoom::Sorbet::Config.parse_file(@sorbet_path)
files = collect_files(config)
+ names_in_project = files.map { |file| [File.basename(file, ".rb"), true] }.to_h
files.flat_map do |file|
- collect_requires(file).reject do |req|
- name_in_project?(files, req)
- end
+ collect_requires(file).reject { |req| names_in_project[req] }
end.sort.uniq.map do |name|
"require \"#{name}\"\n"
end.join
end
@@ -43,13 +42,14 @@
end.sort.uniq
end
sig { params(file_path: String).returns(T::Enumerable[String]) }
def collect_requires(file_path)
- File.read(file_path).lines.map do |line|
+ File.binread(file_path).lines.map do |line|
/^\s*require\s*(\(\s*)?['"](?<name>[^'"]+)['"](\s*\))?/.match(line) { |m| m["name"] }
end.compact
+ .reject { |require| require.include?('#{') } # ignore interpolation
end
sig { params(config: Spoom::Sorbet::Config, file_path: Pathname).returns(T::Boolean) }
def file_ignored_by_sorbet?(config, file_path)
file_path_parts = path_parts(file_path)
@@ -80,16 +80,9 @@
end
sig { params(path: Pathname).returns(T::Array[String]) }
def path_parts(path)
T.unsafe(path).descend.map { |part| part.basename.to_s }
- end
-
- sig { params(files: T::Enumerable[String], name: String).returns(T::Boolean) }
- def name_in_project?(files, name)
- files.any? do |file|
- File.basename(file, ".rb") == name
- end
end
end
end
end