From 1cbf5ce09340388d15311e13f721c1dfcea011a3 Mon Sep 17 00:00:00 2001 From: Anatoli Babenia Date: Sun, 24 Sep 2023 16:52:20 +0300 Subject: [PATCH 01/16] dev-cmd/edit: Move path specific functions to Pathname --- Library/Homebrew/dev-cmd/edit.rb | 19 ++++++++----------- Library/Homebrew/extend/pathname.rb | 20 ++++++++++++++++++++ 2 files changed, 28 insertions(+), 11 deletions(-) diff --git a/Library/Homebrew/dev-cmd/edit.rb b/Library/Homebrew/dev-cmd/edit.rb index 40cf56a785d37..7d651dde337ac 100644 --- a/Library/Homebrew/dev-cmd/edit.rb +++ b/Library/Homebrew/dev-cmd/edit.rb @@ -52,18 +52,13 @@ def edit else edit_api_message_displayed = T.let(false, T::Boolean) args.named.to_paths.select do |path| - core_formula_path = path.fnmatch?("**/homebrew-core/Formula/**.rb", File::FNM_DOTMATCH) - core_cask_path = path.fnmatch?("**/homebrew-cask/Casks/**.rb", File::FNM_DOTMATCH) - core_formula_tap = path == CoreTap.instance.path - core_cask_tap = path == CoreCaskTap.instance.path - if path.exist? - if (core_formula_path || core_cask_path || core_formula_tap || core_cask_tap) && + if (path.core_formula_path? || path.core_cask_path? || path.core_formula_tap? || path.core_cask_tap?) && !edit_api_message_displayed && !Homebrew::EnvConfig.no_install_from_api? && !Homebrew::EnvConfig.no_env_hints? opoo <<~EOS - `brew install` ignores locally edited #{(core_cask_path || core_cask_tap) ? "casks" : "formulae"} if + `brew install` ignores locally edited #{(path.core_cask_path? || path.core_cask_tap?) ? "casks" : "formulae"} if `HOMEBREW_NO_INSTALL_FROM_API` is not set. EOS edit_api_message_displayed = true @@ -74,11 +69,11 @@ def edit name = path.basename(".rb").to_s if (tap_match = Regexp.new(HOMEBREW_TAP_DIR_REGEX.source + /$/.source).match(path.to_s)) - raise TapUnavailableError, CoreTap.instance.name if core_formula_tap - raise TapUnavailableError, CoreCaskTap.instance.name if core_cask_tap + raise TapUnavailableError, CoreTap.instance.name if path.core_formula_tap? + raise TapUnavailableError, CoreCaskTap.instance.name if path.core_cask_tap? raise TapUnavailableError, "#{tap_match[:user]}/#{tap_match[:repo]}" - elsif args.cask? || core_cask_path + elsif args.cask? || path.core_cask_path? if !CoreCaskTap.instance.installed? && Homebrew::API::Cask.all_casks.key?(name) command = "brew tap --force #{CoreCaskTap.instance.name}" action = "tap #{CoreCaskTap.instance.name}" @@ -86,7 +81,9 @@ def edit command = "brew create --cask --set-name #{name} $URL" action = "create a new cask" end - elsif core_formula_path && !CoreTap.instance.installed? && Homebrew::API::Formula.all_formulae.key?(name) + elsif path.core_formula_path? && + !CoreTap.instance.installed? && + Homebrew::API::Formula.all_formulae.key?(name) command = "brew tap --force #{CoreTap.instance.name}" action = "tap #{CoreTap.instance.name}" else diff --git a/Library/Homebrew/extend/pathname.rb b/Library/Homebrew/extend/pathname.rb index b169d984d0e1a..4a68eca99896a 100644 --- a/Library/Homebrew/extend/pathname.rb +++ b/Library/Homebrew/extend/pathname.rb @@ -488,6 +488,26 @@ def zipinfo .encode(Encoding::UTF_8, invalid: :replace) .split("\n") end + + sig { returns(T::Boolean) } + def core_formula_path? + fnmatch?("**/homebrew-core/Formula/**.rb", File::FNM_DOTMATCH) + end + + sig { returns(T::Boolean) } + def core_cask_path? + fnmatch?("**/homebrew-cask/Casks/**.rb", File::FNM_DOTMATCH) + end + + sig { returns(T::Boolean) } + def core_formula_tap? + self == CoreTap.instance.path + end + + sig { returns(T::Boolean) } + def core_cask_tap? + self == CoreCaskTap.instance.path + end end require "extend/os/pathname" From eae95670efbf68800725b4baf1a3ce74d4e8f72b Mon Sep 17 00:00:00 2001 From: Anatoli Babenia Date: Sun, 24 Sep 2023 21:05:37 +0300 Subject: [PATCH 02/16] Separate logic that shows warning from path detection --- Library/Homebrew/dev-cmd/edit.rb | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/Library/Homebrew/dev-cmd/edit.rb b/Library/Homebrew/dev-cmd/edit.rb index 7d651dde337ac..b662a44ebbd3e 100644 --- a/Library/Homebrew/dev-cmd/edit.rb +++ b/Library/Homebrew/dev-cmd/edit.rb @@ -50,19 +50,22 @@ def edit [HOMEBREW_REPOSITORY] end else - edit_api_message_displayed = T.let(false, T::Boolean) - args.named.to_paths.select do |path| + expanded_paths = args.named.to_paths + expanded_paths.each do |path| + if path.exist? && + (path.core_formula_path? || path.core_cask_path? || path.core_formula_tap? || path.core_cask_tap?) && + !Homebrew::EnvConfig.no_install_from_api? && + !Homebrew::EnvConfig.no_env_hints? + opoo <<~EOS + `brew install` ignores locally edited #{(path.core_cask_path? || path.core_cask_tap?) ? "casks" : "formulae"} if + `HOMEBREW_NO_INSTALL_FROM_API` is not set. + EOS + break + end + end + + expanded_paths.select do |path| if path.exist? - if (path.core_formula_path? || path.core_cask_path? || path.core_formula_tap? || path.core_cask_tap?) && - !edit_api_message_displayed && - !Homebrew::EnvConfig.no_install_from_api? && - !Homebrew::EnvConfig.no_env_hints? - opoo <<~EOS - `brew install` ignores locally edited #{(path.core_cask_path? || path.core_cask_tap?) ? "casks" : "formulae"} if - `HOMEBREW_NO_INSTALL_FROM_API` is not set. - EOS - edit_api_message_displayed = true - end next path end From 8f072dc05ca7c76751797660ee52f2d01375a309 Mon Sep 17 00:00:00 2001 From: Anatoli Babenia Date: Mon, 25 Sep 2023 08:09:03 +0300 Subject: [PATCH 03/16] Move error reporting logic for absent path to separate method --- Library/Homebrew/dev-cmd/edit.rb | 73 +++++++++++++++++--------------- 1 file changed, 38 insertions(+), 35 deletions(-) diff --git a/Library/Homebrew/dev-cmd/edit.rb b/Library/Homebrew/dev-cmd/edit.rb index b662a44ebbd3e..e8bb9ea53b828 100644 --- a/Library/Homebrew/dev-cmd/edit.rb +++ b/Library/Homebrew/dev-cmd/edit.rb @@ -28,6 +28,40 @@ def edit_args end end + sig { void } + def fail(path, cask) + name = path.basename(".rb").to_s + + if (tap_match = Regexp.new(HOMEBREW_TAP_DIR_REGEX.source + /$/.source).match(path.to_s)) + raise TapUnavailableError, CoreTap.instance.name if path.core_formula_tap? + raise TapUnavailableError, CoreCaskTap.instance.name if path.core_cask_tap? + + raise TapUnavailableError, "#{tap_match[:user]}/#{tap_match[:repo]}" + elsif cask || path.core_cask_path? + if !CoreCaskTap.instance.installed? && Homebrew::API::Cask.all_casks.key?(name) + command = "brew tap --force #{CoreCaskTap.instance.name}" + action = "tap #{CoreCaskTap.instance.name}" + else + command = "brew create --cask --set-name #{name} $URL" + action = "create a new cask" + end + elsif path.core_formula_path? && + !CoreTap.instance.installed? && + Homebrew::API::Formula.all_formulae.key?(name) + command = "brew tap --force #{CoreTap.instance.name}" + action = "tap #{CoreTap.instance.name}" + else + command = "brew create --set-name #{name} $URL" + action = "create a new formula" + end + + message = <<~EOS + #{name} doesn't exist on disk. + Run #{Formatter.identifier(command)} to #{action}! + EOS + raise UsageError, message + end + sig { void } def edit args = edit_args.parse @@ -64,42 +98,11 @@ def edit end end - expanded_paths.select do |path| - if path.exist? - next path - end - - name = path.basename(".rb").to_s - - if (tap_match = Regexp.new(HOMEBREW_TAP_DIR_REGEX.source + /$/.source).match(path.to_s)) - raise TapUnavailableError, CoreTap.instance.name if path.core_formula_tap? - raise TapUnavailableError, CoreCaskTap.instance.name if path.core_cask_tap? - - raise TapUnavailableError, "#{tap_match[:user]}/#{tap_match[:repo]}" - elsif args.cask? || path.core_cask_path? - if !CoreCaskTap.instance.installed? && Homebrew::API::Cask.all_casks.key?(name) - command = "brew tap --force #{CoreCaskTap.instance.name}" - action = "tap #{CoreCaskTap.instance.name}" - else - command = "brew create --cask --set-name #{name} $URL" - action = "create a new cask" - end - elsif path.core_formula_path? && - !CoreTap.instance.installed? && - Homebrew::API::Formula.all_formulae.key?(name) - command = "brew tap --force #{CoreTap.instance.name}" - action = "tap #{CoreTap.instance.name}" - else - command = "brew create --set-name #{name} $URL" - action = "create a new formula" + expanded_paths.each do |path| + if not path.exist? + fail(path, args.cask?) end - - message = <<~EOS - #{name} doesn't exist on disk. - Run #{Formatter.identifier(command)} to #{action}! - EOS - raise UsageError, message - end.presence + end end if args.print_path? From a78da3ecf04ce5d4d0108a7ac2d7b3500f2daa3e Mon Sep 17 00:00:00 2001 From: Anatoli Babenia Date: Mon, 25 Sep 2023 13:09:11 +0300 Subject: [PATCH 04/16] Check paths exist before `brew install` warning --- Library/Homebrew/dev-cmd/edit.rb | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/Library/Homebrew/dev-cmd/edit.rb b/Library/Homebrew/dev-cmd/edit.rb index e8bb9ea53b828..dc4e63b5fc51b 100644 --- a/Library/Homebrew/dev-cmd/edit.rb +++ b/Library/Homebrew/dev-cmd/edit.rb @@ -86,10 +86,13 @@ def edit else expanded_paths = args.named.to_paths expanded_paths.each do |path| - if path.exist? && - (path.core_formula_path? || path.core_cask_path? || path.core_formula_tap? || path.core_cask_tap?) && - !Homebrew::EnvConfig.no_install_from_api? && - !Homebrew::EnvConfig.no_env_hints? + fail(path, args.cask?) unless path.exist? + end + + expanded_paths.each do |path| + if (path.core_formula_path? || path.core_cask_path? || path.core_formula_tap? || path.core_cask_tap?) && + !Homebrew::EnvConfig.no_install_from_api? && + !Homebrew::EnvConfig.no_env_hints? opoo <<~EOS `brew install` ignores locally edited #{(path.core_cask_path? || path.core_cask_tap?) ? "casks" : "formulae"} if `HOMEBREW_NO_INSTALL_FROM_API` is not set. @@ -97,12 +100,7 @@ def edit break end end - - expanded_paths.each do |path| - if not path.exist? - fail(path, args.cask?) - end - end + expanded_paths end if args.print_path? From 63c60d2859824018befbdd0f1124055f20c034a6 Mon Sep 17 00:00:00 2001 From: Anatoli Babenia Date: Mon, 25 Sep 2023 15:58:52 +0300 Subject: [PATCH 05/16] Rename `fail` to more descriptive `fail_with_message` --- Library/Homebrew/dev-cmd/edit.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Library/Homebrew/dev-cmd/edit.rb b/Library/Homebrew/dev-cmd/edit.rb index dc4e63b5fc51b..74969acb48fe3 100644 --- a/Library/Homebrew/dev-cmd/edit.rb +++ b/Library/Homebrew/dev-cmd/edit.rb @@ -29,7 +29,7 @@ def edit_args end sig { void } - def fail(path, cask) + def fail_with_message(path, cask) name = path.basename(".rb").to_s if (tap_match = Regexp.new(HOMEBREW_TAP_DIR_REGEX.source + /$/.source).match(path.to_s)) @@ -86,7 +86,7 @@ def edit else expanded_paths = args.named.to_paths expanded_paths.each do |path| - fail(path, args.cask?) unless path.exist? + fail_with_message(path, args.cask?) unless path.exist? end expanded_paths.each do |path| From 466055a1bef773f40efb121746f3e09d33321325 Mon Sep 17 00:00:00 2001 From: Anatoli Babenia Date: Mon, 25 Sep 2023 16:13:16 +0300 Subject: [PATCH 06/16] Use regexp interpolation instead of string concat --- Library/Homebrew/dev-cmd/edit.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Library/Homebrew/dev-cmd/edit.rb b/Library/Homebrew/dev-cmd/edit.rb index 74969acb48fe3..554e09705ce0c 100644 --- a/Library/Homebrew/dev-cmd/edit.rb +++ b/Library/Homebrew/dev-cmd/edit.rb @@ -32,7 +32,7 @@ def edit_args def fail_with_message(path, cask) name = path.basename(".rb").to_s - if (tap_match = Regexp.new(HOMEBREW_TAP_DIR_REGEX.source + /$/.source).match(path.to_s)) + if (tap_match = Regexp.new("#{HOMEBREW_TAP_DIR_REGEX.source}$").match(path.to_s)) raise TapUnavailableError, CoreTap.instance.name if path.core_formula_tap? raise TapUnavailableError, CoreCaskTap.instance.name if path.core_cask_tap? From 96ca1c561a126815de62ea3368010e3f60333fc2 Mon Sep 17 00:00:00 2001 From: Anatoli Babenia Date: Mon, 25 Sep 2023 17:21:21 +0300 Subject: [PATCH 07/16] Move helper Pathname methods into Refinement https://docs.ruby-lang.org/en/2.4.0/syntax/refinements_rdoc.html --- Library/Homebrew/dev-cmd/edit.rb | 26 ++++++++++++++++++++++++++ Library/Homebrew/extend/pathname.rb | 20 -------------------- 2 files changed, 26 insertions(+), 20 deletions(-) diff --git a/Library/Homebrew/dev-cmd/edit.rb b/Library/Homebrew/dev-cmd/edit.rb index 554e09705ce0c..f680b7aa3cefb 100644 --- a/Library/Homebrew/dev-cmd/edit.rb +++ b/Library/Homebrew/dev-cmd/edit.rb @@ -7,6 +7,32 @@ module Homebrew module_function + module Refinements + refine Pathname do + sig { returns(T::Boolean) } + def core_formula_path? + fnmatch?("**/homebrew-core/Formula/**.rb", File::FNM_DOTMATCH) + end + + sig { returns(T::Boolean) } + def core_cask_path? + fnmatch?("**/homebrew-cask/Casks/**.rb", File::FNM_DOTMATCH) + end + + sig { returns(T::Boolean) } + def core_formula_tap? + self == CoreTap.instance.path + end + + sig { returns(T::Boolean) } + def core_cask_tap? + self == CoreCaskTap.instance.path + end + end + end + + using Refinements + sig { returns(CLI::Parser) } def edit_args Homebrew::CLI::Parser.new do diff --git a/Library/Homebrew/extend/pathname.rb b/Library/Homebrew/extend/pathname.rb index 4a68eca99896a..b169d984d0e1a 100644 --- a/Library/Homebrew/extend/pathname.rb +++ b/Library/Homebrew/extend/pathname.rb @@ -488,26 +488,6 @@ def zipinfo .encode(Encoding::UTF_8, invalid: :replace) .split("\n") end - - sig { returns(T::Boolean) } - def core_formula_path? - fnmatch?("**/homebrew-core/Formula/**.rb", File::FNM_DOTMATCH) - end - - sig { returns(T::Boolean) } - def core_cask_path? - fnmatch?("**/homebrew-cask/Casks/**.rb", File::FNM_DOTMATCH) - end - - sig { returns(T::Boolean) } - def core_formula_tap? - self == CoreTap.instance.path - end - - sig { returns(T::Boolean) } - def core_cask_tap? - self == CoreCaskTap.instance.path - end end require "extend/os/pathname" From 7e835bcd971c0fd69a00a40d3ebbccf56e0cc722 Mon Sep 17 00:00:00 2001 From: Anatoli Babenia Date: Mon, 25 Sep 2023 17:22:18 +0300 Subject: [PATCH 08/16] Skip backticks when printing env var name --- Library/Homebrew/dev-cmd/edit.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Library/Homebrew/dev-cmd/edit.rb b/Library/Homebrew/dev-cmd/edit.rb index f680b7aa3cefb..9857d77530b1e 100644 --- a/Library/Homebrew/dev-cmd/edit.rb +++ b/Library/Homebrew/dev-cmd/edit.rb @@ -121,7 +121,7 @@ def edit !Homebrew::EnvConfig.no_env_hints? opoo <<~EOS `brew install` ignores locally edited #{(path.core_cask_path? || path.core_cask_tap?) ? "casks" : "formulae"} if - `HOMEBREW_NO_INSTALL_FROM_API` is not set. + HOMEBREW_NO_INSTALL_FROM_API is not set. EOS break end From cbee94150228d50420d6dde583f5ffa37ca57e29 Mon Sep 17 00:00:00 2001 From: Anatoli Babenia Date: Mon, 25 Sep 2023 17:34:10 +0300 Subject: [PATCH 09/16] Add proper sig for `fail_with_message` --- Library/Homebrew/dev-cmd/edit.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Library/Homebrew/dev-cmd/edit.rb b/Library/Homebrew/dev-cmd/edit.rb index 9857d77530b1e..c06b60c468660 100644 --- a/Library/Homebrew/dev-cmd/edit.rb +++ b/Library/Homebrew/dev-cmd/edit.rb @@ -54,7 +54,7 @@ def edit_args end end - sig { void } + sig { params(path: Pathname, cask: T::Boolean).void } def fail_with_message(path, cask) name = path.basename(".rb").to_s From e3c0dafbc4a80c314e7efaf4ba5bb2cddc11b57a Mon Sep 17 00:00:00 2001 From: Anatoli Babenia Date: Mon, 25 Sep 2023 18:03:57 +0300 Subject: [PATCH 10/16] Update Library/Homebrew/dev-cmd/edit.rb Co-authored-by: Mike McQuaid --- Library/Homebrew/dev-cmd/edit.rb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Library/Homebrew/dev-cmd/edit.rb b/Library/Homebrew/dev-cmd/edit.rb index c06b60c468660..0bd2578715557 100644 --- a/Library/Homebrew/dev-cmd/edit.rb +++ b/Library/Homebrew/dev-cmd/edit.rb @@ -81,11 +81,10 @@ def fail_with_message(path, cask) action = "create a new formula" end - message = <<~EOS + raise UsageError, <<~EOS #{name} doesn't exist on disk. Run #{Formatter.identifier(command)} to #{action}! EOS - raise UsageError, message end sig { void } From 6c7f3eb2336c578dced4b517c2f3a836c534b5ca Mon Sep 17 00:00:00 2001 From: Anatoli Babenia Date: Mon, 25 Sep 2023 18:11:27 +0300 Subject: [PATCH 11/16] Move condition in interpolated part into variable --- Library/Homebrew/dev-cmd/edit.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Library/Homebrew/dev-cmd/edit.rb b/Library/Homebrew/dev-cmd/edit.rb index 0bd2578715557..e60bd34364e2d 100644 --- a/Library/Homebrew/dev-cmd/edit.rb +++ b/Library/Homebrew/dev-cmd/edit.rb @@ -118,8 +118,9 @@ def edit if (path.core_formula_path? || path.core_cask_path? || path.core_formula_tap? || path.core_cask_tap?) && !Homebrew::EnvConfig.no_install_from_api? && !Homebrew::EnvConfig.no_env_hints? + path_type = (path.core_cask_path? || path.core_cask_tap?) ? "casks" : "formulae" opoo <<~EOS - `brew install` ignores locally edited #{(path.core_cask_path? || path.core_cask_tap?) ? "casks" : "formulae"} if + `brew install` ignores locally edited #{path_type} if HOMEBREW_NO_INSTALL_FROM_API is not set. EOS break From d16e7e1f3242039d41f87ced3692614d212b36d9 Mon Sep 17 00:00:00 2001 From: Anatoli Babenia Date: Mon, 25 Sep 2023 18:50:38 +0300 Subject: [PATCH 12/16] Rename refinement --- Library/Homebrew/dev-cmd/edit.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Library/Homebrew/dev-cmd/edit.rb b/Library/Homebrew/dev-cmd/edit.rb index e60bd34364e2d..f18403dbd8e5b 100644 --- a/Library/Homebrew/dev-cmd/edit.rb +++ b/Library/Homebrew/dev-cmd/edit.rb @@ -7,7 +7,7 @@ module Homebrew module_function - module Refinements + module EditPathnameRefinements refine Pathname do sig { returns(T::Boolean) } def core_formula_path? @@ -31,7 +31,7 @@ def core_cask_tap? end end - using Refinements + using EditPathnameRefinements sig { returns(CLI::Parser) } def edit_args From 2445b687c6768e239cea7284939cb172066c155b Mon Sep 17 00:00:00 2001 From: Anatoli Babenia Date: Tue, 26 Sep 2023 10:08:54 +0300 Subject: [PATCH 13/16] Use any? to check for warning message and fix `brew style` --- Library/Homebrew/dev-cmd/edit.rb | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/Library/Homebrew/dev-cmd/edit.rb b/Library/Homebrew/dev-cmd/edit.rb index f18403dbd8e5b..a30bece9fd9c6 100644 --- a/Library/Homebrew/dev-cmd/edit.rb +++ b/Library/Homebrew/dev-cmd/edit.rb @@ -114,17 +114,15 @@ def edit fail_with_message(path, args.cask?) unless path.exist? end - expanded_paths.each do |path| - if (path.core_formula_path? || path.core_cask_path? || path.core_formula_tap? || path.core_cask_tap?) && + if expanded_paths.any? do |path| + (path.core_formula_path? || path.core_cask_path? || path.core_formula_tap? || path.core_cask_tap?) && !Homebrew::EnvConfig.no_install_from_api? && !Homebrew::EnvConfig.no_env_hints? - path_type = (path.core_cask_path? || path.core_cask_tap?) ? "casks" : "formulae" - opoo <<~EOS - `brew install` ignores locally edited #{path_type} if - HOMEBREW_NO_INSTALL_FROM_API is not set. - EOS - break - end + end + opoo <<~EOS + `brew install` ignores locally edited casks and formulae if + HOMEBREW_NO_INSTALL_FROM_API is not set. + EOS end expanded_paths end From 10a55ec4e1e6f7ada173b31e2945070b043a5b5b Mon Sep 17 00:00:00 2001 From: Anatoli Babenia Date: Wed, 27 Sep 2023 08:27:13 +0300 Subject: [PATCH 14/16] Rename `fail_with_message` to `raise_with_message!` --- Library/Homebrew/dev-cmd/edit.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Library/Homebrew/dev-cmd/edit.rb b/Library/Homebrew/dev-cmd/edit.rb index a30bece9fd9c6..9dcef3c30b60e 100644 --- a/Library/Homebrew/dev-cmd/edit.rb +++ b/Library/Homebrew/dev-cmd/edit.rb @@ -54,8 +54,8 @@ def edit_args end end - sig { params(path: Pathname, cask: T::Boolean).void } - def fail_with_message(path, cask) + sig { params(path: Pathname, cask: T::Boolean).returns(T.noreturn) } + def raise_with_message!(path, cask) name = path.basename(".rb").to_s if (tap_match = Regexp.new("#{HOMEBREW_TAP_DIR_REGEX.source}$").match(path.to_s)) @@ -111,7 +111,7 @@ def edit else expanded_paths = args.named.to_paths expanded_paths.each do |path| - fail_with_message(path, args.cask?) unless path.exist? + raise_with_message(path, args.cask?) unless path.exist? end if expanded_paths.any? do |path| From 071a684b25687e5b37e4e604f4667b58ab7e3852 Mon Sep 17 00:00:00 2001 From: Anatoli Babenia Date: Wed, 27 Sep 2023 12:39:03 +0300 Subject: [PATCH 15/16] Replace refinements with local methods --- Library/Homebrew/dev-cmd/edit.rb | 56 ++++++++++++++------------------ 1 file changed, 25 insertions(+), 31 deletions(-) diff --git a/Library/Homebrew/dev-cmd/edit.rb b/Library/Homebrew/dev-cmd/edit.rb index 9dcef3c30b60e..ec9f019839d84 100644 --- a/Library/Homebrew/dev-cmd/edit.rb +++ b/Library/Homebrew/dev-cmd/edit.rb @@ -7,32 +7,6 @@ module Homebrew module_function - module EditPathnameRefinements - refine Pathname do - sig { returns(T::Boolean) } - def core_formula_path? - fnmatch?("**/homebrew-core/Formula/**.rb", File::FNM_DOTMATCH) - end - - sig { returns(T::Boolean) } - def core_cask_path? - fnmatch?("**/homebrew-cask/Casks/**.rb", File::FNM_DOTMATCH) - end - - sig { returns(T::Boolean) } - def core_formula_tap? - self == CoreTap.instance.path - end - - sig { returns(T::Boolean) } - def core_cask_tap? - self == CoreCaskTap.instance.path - end - end - end - - using EditPathnameRefinements - sig { returns(CLI::Parser) } def edit_args Homebrew::CLI::Parser.new do @@ -54,16 +28,36 @@ def edit_args end end + sig { returns(T::Boolean) } + def core_formula_path?(path) + path.fnmatch?("**/homebrew-core/Formula/**.rb", File::FNM_DOTMATCH) + end + + sig { returns(T::Boolean) } + def core_cask_path?(path) + path.fnmatch?("**/homebrew-cask/Casks/**.rb", File::FNM_DOTMATCH) + end + + sig { returns(T::Boolean) } + def core_formula_tap?(path) + path == CoreTap.instance.path + end + + sig { returns(T::Boolean) } + def core_cask_tap?(path) + path == CoreCaskTap.instance.path + end + sig { params(path: Pathname, cask: T::Boolean).returns(T.noreturn) } def raise_with_message!(path, cask) name = path.basename(".rb").to_s if (tap_match = Regexp.new("#{HOMEBREW_TAP_DIR_REGEX.source}$").match(path.to_s)) - raise TapUnavailableError, CoreTap.instance.name if path.core_formula_tap? - raise TapUnavailableError, CoreCaskTap.instance.name if path.core_cask_tap? + raise TapUnavailableError, CoreTap.instance.name if core_formula_tap?(path) + raise TapUnavailableError, CoreCaskTap.instance.name if core_cask_tap?(path) raise TapUnavailableError, "#{tap_match[:user]}/#{tap_match[:repo]}" - elsif cask || path.core_cask_path? + elsif cask || core_cask_path?(path) if !CoreCaskTap.instance.installed? && Homebrew::API::Cask.all_casks.key?(name) command = "brew tap --force #{CoreCaskTap.instance.name}" action = "tap #{CoreCaskTap.instance.name}" @@ -71,7 +65,7 @@ def raise_with_message!(path, cask) command = "brew create --cask --set-name #{name} $URL" action = "create a new cask" end - elsif path.core_formula_path? && + elsif core_formula_path?(path) && !CoreTap.instance.installed? && Homebrew::API::Formula.all_formulae.key?(name) command = "brew tap --force #{CoreTap.instance.name}" @@ -115,7 +109,7 @@ def edit end if expanded_paths.any? do |path| - (path.core_formula_path? || path.core_cask_path? || path.core_formula_tap? || path.core_cask_tap?) && + (core_formula_path?(path) || core_cask_path?(path) || core_formula_tap?(path) || core_cask_tap?(path)) && !Homebrew::EnvConfig.no_install_from_api? && !Homebrew::EnvConfig.no_env_hints? end From 0c51aea403f58d5741f7a93066f64fe34b75847f Mon Sep 17 00:00:00 2001 From: Anatoli Babenia Date: Wed, 27 Sep 2023 12:49:37 +0300 Subject: [PATCH 16/16] Fix typecheck errors --- Library/Homebrew/dev-cmd/edit.rb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Library/Homebrew/dev-cmd/edit.rb b/Library/Homebrew/dev-cmd/edit.rb index ec9f019839d84..618ce68ccabdf 100644 --- a/Library/Homebrew/dev-cmd/edit.rb +++ b/Library/Homebrew/dev-cmd/edit.rb @@ -28,22 +28,22 @@ def edit_args end end - sig { returns(T::Boolean) } + sig { params(path: Pathname).returns(T::Boolean) } def core_formula_path?(path) path.fnmatch?("**/homebrew-core/Formula/**.rb", File::FNM_DOTMATCH) end - sig { returns(T::Boolean) } + sig { params(path: Pathname).returns(T::Boolean) } def core_cask_path?(path) path.fnmatch?("**/homebrew-cask/Casks/**.rb", File::FNM_DOTMATCH) end - sig { returns(T::Boolean) } + sig { params(path: Pathname).returns(T::Boolean) } def core_formula_tap?(path) path == CoreTap.instance.path end - sig { returns(T::Boolean) } + sig { params(path: Pathname).returns(T::Boolean) } def core_cask_tap?(path) path == CoreCaskTap.instance.path end @@ -105,7 +105,7 @@ def edit else expanded_paths = args.named.to_paths expanded_paths.each do |path| - raise_with_message(path, args.cask?) unless path.exist? + raise_with_message!(path, args.cask?) unless path.exist? end if expanded_paths.any? do |path|