From 3bf5136e82b594429abff8934e9eb8fd362e8e91 Mon Sep 17 00:00:00 2001 From: Issy Long Date: Wed, 16 Sep 2020 14:05:54 +0100 Subject: [PATCH] dev-cmd/typecheck: Delete old files from `sorbet/files.yaml` - 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. --- .github/workflows/tapioca.yml | 2 +- Library/Homebrew/dev-cmd/typecheck.rb | 22 +++++++++++++++++++++- docs/Manpage.md | 2 ++ manpages/brew.1 | 4 ++++ 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/.github/workflows/tapioca.yml b/.github/workflows/tapioca.yml index 0ce75a5ea1..9f9b518243 100644 --- a/.github/workflows/tapioca.yml +++ b/.github/workflows/tapioca.yml @@ -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" diff --git a/Library/Homebrew/dev-cmd/typecheck.rb b/Library/Homebrew/dev-cmd/typecheck.rb index b14d650181..753d125213 100644 --- a/Library/Homebrew/dev-cmd/typecheck.rb +++ b/Library/Homebrew/dev-cmd/typecheck.rb @@ -5,6 +5,8 @@ require "cli/parser" module Homebrew module_function + SORBET_FILES_YAML = "sorbet/files.yaml" + def typecheck_args Homebrew::CLI::Parser.new do usage_banner <<~EOS @@ -16,6 +18,8 @@ module Homebrew 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" @@ -37,6 +41,22 @@ module Homebrew 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" @@ -55,7 +75,7 @@ module Homebrew 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 diff --git a/docs/Manpage.md b/docs/Manpage.md index c1c0870ebc..57afa88fb5 100644 --- a/docs/Manpage.md +++ b/docs/Manpage.md @@ -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`: diff --git a/manpages/brew.1 b/manpages/brew.1 index 65c0f144cb..6dea34c435 100644 --- a/manpages/brew.1 +++ b/manpages/brew.1 @@ -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 .