Skip to content

Commit

Permalink
dev-cmd/typecheck: Delete old files from sorbet/files.yaml
Browse files Browse the repository at this point in the history
- I was going through the `sorbet/files.yaml` moving various things to
  `true`, playing around locally, and happened upon some files that it
  was tracking that had been deleted.
- We want to do some automation of new files, but I'm not sure we'd ever
  considered the possibility of code being removed. :-D
- This adds a `--prune-files-list` switch and updates the Tapioca GitHub
  Actions workflow to use it. Any changes to the `sorbet/files.yaml`
  file will be committed as part of the scheduled Tapioca update job.
  • Loading branch information
issyl0 committed Sep 18, 2020
1 parent 16f936a commit 3bf5136
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 2 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/tapioca.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ jobs:
BRANCH_EXISTS="1"
fi
if brew typecheck --update-definitions --fail-if-not-changed; then
if brew typecheck --prune-files-list --update-definitions --fail-if-not-changed; then
git add "$GITHUB_WORKSPACE/Library/Homebrew/sorbet"
git commit -m "sorbet: update RBI files using Tapioca." -m "Autogenerated by [a scheduled GitHub Action](https://github.com/Homebrew/brew/blob/master/.github/workflows/tapioca.yml)."
echo "::set-output name=committed::true"
Expand Down
22 changes: 21 additions & 1 deletion Library/Homebrew/dev-cmd/typecheck.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
module Homebrew
module_function

SORBET_FILES_YAML = "sorbet/files.yaml"

def typecheck_args
Homebrew::CLI::Parser.new do
usage_banner <<~EOS
Expand All @@ -16,6 +18,8 @@ def typecheck_args
description: "Silence all non-critical errors."
switch "--update-definitions",
description: "Update Tapioca gem definitions of recently bumped gems"
switch "--prune-files-list",
description: "Remove deleted filepaths from #{SORBET_FILES_YAML}"
switch "--fail-if-not-changed",
description: "Return a failing status code if all gems are up to date " \
"and gem definitions do not need a tapioca update"
Expand All @@ -37,6 +41,22 @@ def typecheck
Homebrew.install_bundler_gems!

HOMEBREW_LIBRARY_PATH.cd do
if args.prune_files_list?
lines_to_keep = []
sorbet_keywords = ["true:", "false:", "strict:", "strong:"]

File.readlines(SORBET_FILES_YAML).map(&:chomp).each do |line|
if sorbet_keywords.include?(line) || line.blank?
lines_to_keep << line
elsif line.end_with?(".rb")
filepath = line.split(" ").last
lines_to_keep << line if File.exist?(filepath)
end
end

File.write(SORBET_FILES_YAML, lines_to_keep.join("\n"))
end

if args.update_definitions?
system "bundle", "exec", "tapioca", "sync"
system "bundle", "exec", "srb", "rbi", "hidden-definitions"
Expand All @@ -55,7 +75,7 @@ def typecheck
srb_exec += ["--file", "../#{args.file}"] if args.file
srb_exec += ["--dir", "../#{args.dir}"] if args.dir
else
srb_exec += ["--typed-override", "sorbet/files.yaml"]
srb_exec += ["--typed-override", SORBET_FILES_YAML]
end
Homebrew.failed = !system(*srb_exec)
end
Expand Down
2 changes: 2 additions & 0 deletions docs/Manpage.md
Original file line number Diff line number Diff line change
Expand Up @@ -1236,6 +1236,8 @@ Check for typechecking errors using Sorbet.
Silence all non-critical errors.
* `--update-definitions`:
Update Tapioca gem definitions of recently bumped gems
* `--prune-files-list`:
Remove deleted filepaths from sorbet/files.yaml
* `--fail-if-not-changed`:
Return a failing status code if all gems are up to date and gem definitions do not need a tapioca update
* `--dir`:
Expand Down
4 changes: 4 additions & 0 deletions manpages/brew.1
Original file line number Diff line number Diff line change
Expand Up @@ -1702,6 +1702,10 @@ Silence all non\-critical errors\.
Update Tapioca gem definitions of recently bumped gems
.
.TP
\fB\-\-prune\-files\-list\fR
Remove deleted filepaths from sorbet/files\.yaml
.
.TP
\fB\-\-fail\-if\-not\-changed\fR
Return a failing status code if all gems are up to date and gem definitions do not need a tapioca update
.
Expand Down

0 comments on commit 3bf5136

Please sign in to comment.