diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 725bc3c373..e28c5eb3df 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -5,68 +5,86 @@ updates: directory: / schedule: interval: weekly + day: "friday" + time: "08:00" + timezone: "Etc/UTC" allow: - dependency-type: all - # The actions in triage-issues.yml are updated in the Homebrew/.github repo - ignore: - - dependency-name: actions/stale groups: - artifacts: + github-actions: patterns: - - actions/*-artifact - open-pull-requests-limit: 10 + - "*" - package-ecosystem: bundler - directory: /Library/Homebrew + directories: + - / + - /Library/Homebrew schedule: - interval: daily + interval: weekly + day: "friday" + time: "08:00" + timezone: "Etc/UTC" allow: - dependency-type: all groups: - rspec: + bundler: patterns: - - "rspec*" - sorbet: - patterns: - - "sorbet*" - open-pull-requests-limit: 10 + - "*" - package-ecosystem: npm directory: / schedule: - interval: daily + interval: weekly + day: "friday" + time: "08:00" + timezone: "Etc/UTC" allow: - dependency-type: all - open-pull-requests-limit: 10 + groups: + npm: + patterns: + - "*" - package-ecosystem: docker directory: / schedule: - interval: daily + interval: weekly + day: "friday" + time: "08:00" + timezone: "Etc/UTC" allow: - dependency-type: all - open-pull-requests-limit: 10 + groups: + docker: + patterns: + - "*" - package-ecosystem: devcontainers directory: / schedule: - interval: daily + interval: weekly + day: "friday" + time: "08:00" + timezone: "Etc/UTC" allow: - dependency-type: all - open-pull-requests-limit: 10 + groups: + devcontainers: + patterns: + - "*" - package-ecosystem: pip - directory: / + directories: + - / + - /Library/Homebrew/formula-analytics/ schedule: - interval: daily + interval: weekly + day: "friday" + time: "08:00" + timezone: "Etc/UTC" allow: - dependency-type: all - open-pull-requests-limit: 10 - - - package-ecosystem: pip - directory: /Library/Homebrew/formula-analytics/ - schedule: - interval: daily - allow: - - dependency-type: all - open-pull-requests-limit: 10 + groups: + pip: + patterns: + - "*" diff --git a/.github/workflows/actionlint.yml b/.github/workflows/actionlint.yml index d32c3c370a..d35fac7a95 100644 --- a/.github/workflows/actionlint.yml +++ b/.github/workflows/actionlint.yml @@ -77,7 +77,7 @@ jobs: path: results.sarif - name: Upload SARIF file - uses: github/codeql-action/upload-sarif@60168efe1c415ce0f5521ea06d5c2062adbeed1b # v3.28.17 + uses: github/codeql-action/upload-sarif@ff0a06e83cb2de871e5a09832bc6a81e7276941f # v3.28.18 with: sarif_file: results.sarif category: zizmor diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 44ec339e7c..939da5f9e7 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -28,7 +28,7 @@ jobs: persist-credentials: false - name: Initialize CodeQL - uses: github/codeql-action/init@60168efe1c415ce0f5521ea06d5c2062adbeed1b # v3.28.17 + uses: github/codeql-action/init@ff0a06e83cb2de871e5a09832bc6a81e7276941f # v3.28.18 with: languages: ruby config: | @@ -36,4 +36,4 @@ jobs: - Library/Homebrew/vendor - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@60168efe1c415ce0f5521ea06d5c2062adbeed1b # v3.28.17 + uses: github/codeql-action/analyze@ff0a06e83cb2de871e5a09832bc6a81e7276941f # v3.28.18 diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 7837eb0675..81c9c7ad86 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -190,7 +190,7 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} - name: Build Docker image - uses: docker/build-push-action@14487ce63c7a62a4a324b0bfb37086795e31c6c1 # v6.16.0 + uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6.18.0 with: context: . load: true @@ -227,7 +227,7 @@ jobs: - name: Deploy the Docker image by digest id: digest if: fromJSON(steps.attributes.outputs.push) - uses: docker/build-push-action@14487ce63c7a62a4a324b0bfb37086795e31c6c1 # v6.16.0 + uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6.18.0 with: context: . cache-from: type=registry,ref=ghcr.io/homebrew/ubuntu${{ matrix.version }}:cache diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index c737393429..5d88cf7e65 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -52,7 +52,7 @@ jobs: run: vale docs/ - name: Install Ruby - uses: ruby/setup-ruby@eaecf785f6a34567a6d97f686bbb7bccc1ac1e5c # v1.237.0 + uses: ruby/setup-ruby@13e7a03dc3ac6c3798f4570bfead2aed4d96abfb # v1.244.0 with: bundler-cache: true working-directory: docs diff --git a/.github/workflows/pkg-installer.yml b/.github/workflows/pkg-installer.yml index 2b23ea501a..adb7f99c4c 100644 --- a/.github/workflows/pkg-installer.yml +++ b/.github/workflows/pkg-installer.yml @@ -230,17 +230,15 @@ jobs: --password "${PKG_APPLE_ID_APP_SPECIFIC_PASSWORD}" --wait - - name: Install gh - run: brew install gh - - name: Upload installer to GitHub release if: github.event_name == 'release' env: GH_TOKEN: ${{ github.token }} INSTALLER_PATH: ${{ needs.build.outputs.installer_path }} - run: gh release upload --repo Homebrew/brew - "${GITHUB_REF//refs\/tags\//}" - "${INSTALLER_PATH}" + run: | + VERSION="${INSTALLER_PATH#Homebrew-}" + VERSION="${VERSION%.pkg}" + gh release upload --repo Homebrew/brew "${VERSION}" "${INSTALLER_PATH}" issue: needs: [build, test, upload] diff --git a/.github/workflows/rubydoc.yml b/.github/workflows/rubydoc.yml index 026433889f..2c0399ed56 100644 --- a/.github/workflows/rubydoc.yml +++ b/.github/workflows/rubydoc.yml @@ -42,7 +42,7 @@ jobs: persist-credentials: false - name: Install Ruby - uses: ruby/setup-ruby@eaecf785f6a34567a6d97f686bbb7bccc1ac1e5c # v1.237.0 + uses: ruby/setup-ruby@13e7a03dc3ac6c3798f4570bfead2aed4d96abfb # v1.244.0 with: bundler-cache: true working-directory: rubydoc diff --git a/.github/workflows/stale-issues.yml b/.github/workflows/stale-issues.yml index 608d2e65e9..c4bfc33e0e 100644 --- a/.github/workflows/stale-issues.yml +++ b/.github/workflows/stale-issues.yml @@ -38,7 +38,7 @@ jobs: pull-requests: write steps: - name: Mark/Close Stale Issues and Pull Requests - uses: actions/stale@28ca1036281a5e5922ead5184a1bbf96e5fc984e # v9.0.0 + uses: actions/stale@5bef64f19d7facfb25b37b414482c7164d639639 # v9.1.0 with: repo-token: ${{ secrets.GITHUB_TOKEN }} days-before-stale: 21 @@ -68,7 +68,7 @@ jobs: pull-requests: write steps: - name: Mark/Close Stale `bump-formula-pr` and `bump-cask-pr` Pull Requests - uses: actions/stale@28ca1036281a5e5922ead5184a1bbf96e5fc984e # v9.0.0 + uses: actions/stale@5bef64f19d7facfb25b37b414482c7164d639639 # v9.1.0 with: repo-token: ${{ secrets.GITHUB_TOKEN }} days-before-stale: 2 diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index c93da5febf..5742f294cb 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -335,14 +335,14 @@ jobs: filenames=$(find Library/Homebrew/test/junit -name 'rspec*.xml' -print | tr '\n' ',') echo "filenames=${filenames%,}" >> "$GITHUB_OUTPUT" - - uses: codecov/test-results-action@f2dba722c67b86c6caa034178c6e4d35335f6706 # v1.1.0 + - uses: codecov/test-results-action@47f89e9acb64b76debcd5ea40642d25a4adced9f # v1.1.1 with: working-directory: ${{ steps.set-up-homebrew.outputs.repository-path }} files: ${{ steps.junit_xml.outputs.filenames }} disable_search: true token: ${{ secrets.CODECOV_TOKEN }} - - uses: codecov/codecov-action@ad3126e916f78f00edff4ed0317cf185271ccc2d # v5.4.2 + - uses: codecov/codecov-action@18283e04ce6e62d37312384ff67231eb8fd56d24 # v5.4.3 with: working-directory: ${{ steps.set-up-homebrew.outputs.repository-path }} files: Library/Homebrew/test/coverage/coverage.xml diff --git a/.gitignore b/.gitignore index bb824a889e..ca100463a9 100644 --- a/.gitignore +++ b/.gitignore @@ -164,6 +164,7 @@ !/completions !/docs !/manpages +!/CODEOWNERS # Unignore our packaging files !/package @@ -172,6 +173,7 @@ # Ignore generated documentation site /docs/_site /docs/.jekyll-metadata +/docs/tmp/.htmlproofer /docs/vendor /docs/Gemfile.lock diff --git a/CODEOWNERS b/CODEOWNERS new file mode 100644 index 0000000000..b76c645caf --- /dev/null +++ b/CODEOWNERS @@ -0,0 +1,11 @@ +# Note that the naming of this file is incorrect for our case: these people do not "own" the provided files but are +# people with write-access to this repository who wish to approve changes to these files. +# +# Their review is required to merge PRs that change these files. +# +# To be explicit: we will never accept changes to this file adding people from outside the Homebrew GitHub +# organisation. If you are not a Homebrew maintainer: you do not personally "own" or "maintain" any files. +# +# Note: @Homebrew/plc does not have write-access to this repository, and therefore cannot be listed in this file. + +docs/Support-Tiers.md @Homebrew/tsc @MikeMcQuaid diff --git a/Library/.rubocop.yml b/Library/.rubocop.yml index a5362c95d6..a206ed6e33 100644 --- a/Library/.rubocop.yml +++ b/Library/.rubocop.yml @@ -26,7 +26,7 @@ AllCops: Include: - "**/*.rbi" Exclude: - - "Homebrew/sorbet/rbi/{dsl,gems}/**/*.rbi" + - "Homebrew/sorbet/rbi/{annotations,dsl,gems}/**/*.rbi" - "Homebrew/sorbet/rbi/parser*.rbi" - "Homebrew/bin/*" - "Homebrew/vendor/**/*" diff --git a/Library/Homebrew/.ruby-version b/Library/Homebrew/.ruby-version index 6cb9d3dd0d..f9892605c7 100644 --- a/Library/Homebrew/.ruby-version +++ b/Library/Homebrew/.ruby-version @@ -1 +1 @@ -3.4.3 +3.4.4 diff --git a/Library/Homebrew/Gemfile.lock b/Library/Homebrew/Gemfile.lock index c5f83d7585..8053d3bb79 100644 --- a/Library/Homebrew/Gemfile.lock +++ b/Library/Homebrew/Gemfile.lock @@ -11,13 +11,13 @@ GEM coderay (1.1.3) concurrent-ruby (1.3.5) csv (3.3.4) - diff-lcs (1.6.1) + diff-lcs (1.6.2) docile (1.4.1) elftools (1.3.1) bindata (~> 2) erubi (1.13.1) hana (1.3.7) - json (2.11.3) + json (2.12.0) json_schemer (2.4.0) bigdecimal hana (~> 1.3) @@ -25,14 +25,14 @@ GEM simpleidn (~> 0.2) kramdown (2.5.1) rexml (>= 3.3.9) - language_server-protocol (3.17.0.4) + language_server-protocol (3.17.0.5) lint_roller (1.1.0) logger (1.7.0) method_source (1.1.0) minitest (5.25.5) netrc (0.11.0) parallel (1.27.0) - parallel_tests (5.1.0) + parallel_tests (5.2.0) parallel parser (3.3.8.0) ast (~> 2.4.1) @@ -48,11 +48,11 @@ GEM pycall (1.5.2) racc (1.8.1) rainbow (3.1.1) - rbi (0.3.2) + rbi (0.3.3) prism (~> 1.0) rbs (>= 3.4.4) sorbet-runtime (>= 0.5.9204) - rbs (3.9.2) + rbs (3.9.4) logger redcarpet (3.6.1) regexp_parser (2.10.0) @@ -78,7 +78,7 @@ GEM rspec-support (3.13.3) rspec_junit_formatter (0.6.0) rspec-core (>= 2, < 4, != 2.12.0) - rubocop (1.75.5) + rubocop (1.75.6) json (~> 2.3) language_server-protocol (~> 3.17.0.2) lint_roller (~> 1.1.0) @@ -104,7 +104,7 @@ GEM rubocop (~> 1.72, >= 1.72.1) rubocop-sorbet (0.10.0) rubocop (>= 1) - ruby-lsp (0.23.17) + ruby-lsp (0.23.21) language_server-protocol (~> 3.17.0) prism (>= 1.2, < 2.0) rbs (>= 3, < 4) @@ -122,19 +122,20 @@ GEM simplecov-html (0.13.1) simplecov_json_formatter (0.1.4) simpleidn (0.2.3) - sorbet (0.5.12067) - sorbet-static (= 0.5.12067) - sorbet-runtime (0.5.12067) - sorbet-static (0.5.12067-aarch64-linux) - sorbet-static (0.5.12067-universal-darwin) - sorbet-static (0.5.12067-x86_64-linux) - sorbet-static-and-runtime (0.5.12067) - sorbet (= 0.5.12067) - sorbet-runtime (= 0.5.12067) - spoom (1.6.1) + sorbet (0.5.12117) + sorbet-static (= 0.5.12117) + sorbet-runtime (0.5.12117) + sorbet-static (0.5.12117-aarch64-linux) + sorbet-static (0.5.12117-universal-darwin) + sorbet-static (0.5.12117-x86_64-linux) + sorbet-static-and-runtime (0.5.12117) + sorbet (= 0.5.12117) + sorbet-runtime (= 0.5.12117) + spoom (1.6.3) erubi (>= 1.10.0) prism (>= 0.28.0) - rbi (>= 0.2.3) + rbi (>= 0.3.3) + rexml (>= 3.2.6) sorbet-static-and-runtime (>= 0.5.10187) thor (>= 0.19.2) stackprof (0.2.27) @@ -152,7 +153,7 @@ GEM unicode-display_width (3.1.4) unicode-emoji (~> 4.0, >= 4.0.4) unicode-emoji (4.0.4) - vernier (1.7.0) + vernier (1.7.1) warning (1.5.0) yard (0.9.37) yard-sorbet (0.9.0) @@ -212,7 +213,7 @@ DEPENDENCIES yard-sorbet RUBY VERSION - ruby 3.4.3p32 + ruby 3.4.4p34 BUNDLED WITH 2.6.7 diff --git a/Library/Homebrew/autobump_constants.rb b/Library/Homebrew/autobump_constants.rb index 15f6ed8ea5..6dfab8de22 100644 --- a/Library/Homebrew/autobump_constants.rb +++ b/Library/Homebrew/autobump_constants.rb @@ -5,4 +5,7 @@ NO_AUTOBUMP_REASONS_LIST = T.let({ incompatible_version_format: "incompatible version format", bumped_by_upstream: "bumped by upstream", + extract_plist: "livecheck uses `:extract_plist` strategy", + latest_version: "`version` is set to `:latest`", + requires_manual_review: "a manual review of this package is required for inclusion in autobump", }.freeze, T::Hash[Symbol, String]) diff --git a/Library/Homebrew/bundle/adder.rb b/Library/Homebrew/bundle/adder.rb index bcb698f98d..6c1599619f 100644 --- a/Library/Homebrew/bundle/adder.rb +++ b/Library/Homebrew/bundle/adder.rb @@ -11,6 +11,9 @@ module Homebrew sig { params(args: String, type: Symbol, global: T::Boolean, file: String).void } def add(*args, type:, global:, file:) + brewfile_path = Brewfile.path(global:, file:) + brewfile_path.write("") unless brewfile_path.exist? + brewfile = Brewfile.read(global:, file:) content = brewfile.input # TODO: - support `:describe` diff --git a/Library/Homebrew/bundle/cask_installer.rb b/Library/Homebrew/bundle/cask_installer.rb index 781bbf57bf..4014666d73 100644 --- a/Library/Homebrew/bundle/cask_installer.rb +++ b/Library/Homebrew/bundle/cask_installer.rb @@ -41,7 +41,7 @@ module Homebrew case v when TrueClass "--#{k}" - when FalseClass + when FalseClass, NilClass nil else "--#{k}=#{v}" diff --git a/Library/Homebrew/bundle/commands/cleanup.rb b/Library/Homebrew/bundle/commands/cleanup.rb index a42f07d980..7a6da0c6c3 100644 --- a/Library/Homebrew/bundle/commands/cleanup.rb +++ b/Library/Homebrew/bundle/commands/cleanup.rb @@ -25,13 +25,14 @@ module Homebrew Homebrew::Bundle::BrewServices.reset! end - def self.run(global: false, file: nil, force: false, zap: false, dsl: nil) + def self.run(global: false, file: nil, force: false, zap: false, dsl: nil, + brews: true, casks: true, taps: true, vscode: true) @dsl ||= dsl - casks = casks_to_uninstall(global:, file:) - formulae = formulae_to_uninstall(global:, file:) - taps = taps_to_untap(global:, file:) - vscode_extensions = vscode_extensions_to_uninstall(global:, file:) + casks = casks ? casks_to_uninstall(global:, file:) : [] + formulae = brews ? formulae_to_uninstall(global:, file:) : [] + taps = taps ? taps_to_untap(global:, file:) : [] + vscode_extensions = vscode ? vscode_extensions_to_uninstall(global:, file:) : [] if force if casks.any? args = zap ? ["--zap"] : [] diff --git a/Library/Homebrew/bundle/commands/exec.rb b/Library/Homebrew/bundle/commands/exec.rb index 543d84114b..103706dd76 100644 --- a/Library/Homebrew/bundle/commands/exec.rb +++ b/Library/Homebrew/bundle/commands/exec.rb @@ -178,7 +178,9 @@ module Homebrew exit_code = 0 run_services(@dsl.entries) do Kernel.system(*args) - exit_code = $CHILD_STATUS.exitstatus + if (system_exit_code = $CHILD_STATUS&.exitstatus) + exit_code = system_exit_code + end end exit!(exit_code) else diff --git a/Library/Homebrew/bundle/dsl.rb b/Library/Homebrew/bundle/dsl.rb index 5196c17499..3431cc01c3 100644 --- a/Library/Homebrew/bundle/dsl.rb +++ b/Library/Homebrew/bundle/dsl.rb @@ -42,7 +42,7 @@ module Homebrew def cask_args(args) raise "cask_args(#{args.inspect}) should be a Hash object" unless args.is_a? Hash - @cask_arguments = args + @cask_arguments.merge!(args) end def brew(name, options = {}) diff --git a/Library/Homebrew/cask/artifact/abstract_uninstall.rb b/Library/Homebrew/cask/artifact/abstract_uninstall.rb index 4322777fc9..4773dc7982 100644 --- a/Library/Homebrew/cask/artifact/abstract_uninstall.rb +++ b/Library/Homebrew/cask/artifact/abstract_uninstall.rb @@ -464,9 +464,9 @@ module Cask args: paths, print_stderr: Homebrew::EnvConfig.developer? - trashed, = stdout.partition("\n") - trashed = trashed.split(":") & paths - untrashable = paths - trashed + trashed, _, untrashable = stdout.partition("\n") + trashed = trashed.split(":") + untrashable = untrashable.split(":") trashed_with_permissions, untrashable = untrashable.partition do |path| Utils.gain_permissions(path, ["-R"], SystemCommand) do diff --git a/Library/Homebrew/cask/artifact/shellcompletion.rb b/Library/Homebrew/cask/artifact/shellcompletion.rb index d39d1f6913..54bac0ec7d 100644 --- a/Library/Homebrew/cask/artifact/shellcompletion.rb +++ b/Library/Homebrew/cask/artifact/shellcompletion.rb @@ -6,11 +6,6 @@ require "cask/artifact/symlinked" module Cask module Artifact class ShellCompletion < Symlinked - sig { params(cask: Cask, source: T.any(String, Pathname)).returns(ShellCompletion) } - def self.from_args(cask, source) - new(cask, source) - end - sig { params(_: T.any(String, Pathname)).returns(Pathname) } def resolve_target(_) raise CaskInvalidError, "Shell completion without shell info" diff --git a/Library/Homebrew/cask/audit.rb b/Library/Homebrew/cask/audit.rb index 0dbd453b93..4f8bae5c14 100644 --- a/Library/Homebrew/cask/audit.rb +++ b/Library/Homebrew/cask/audit.rb @@ -606,7 +606,10 @@ module Cask def audit_rosetta return if (url = cask.url).nil? return unless online? + # Rosetta 2 is only for ARM-capable macOS versions, which are Big Sur (11.x) and later return if Homebrew::SimulateSystem.current_arch != :arm + return if MacOSVersion::SYMBOLS.fetch(Homebrew::SimulateSystem.current_os, "10") < "11" + return if cask.depends_on.macos&.maximum_version.to_s < "11" odebug "Auditing Rosetta 2 requirement" @@ -640,7 +643,7 @@ module Cask # binary stanza can contain shell scripts, so we just continue if lipo fails. next unless result.success? - odebug result.merged_output + odebug "Architectures: #{result.merged_output}" unless /arm64|x86_64/.match?(result.merged_output) add_error "Artifacts architecture is no longer supported by macOS!", @@ -652,7 +655,7 @@ module Cask mentions_rosetta = cask.caveats.include?("requires Rosetta 2") if supports_arm && mentions_rosetta - add_error "Artifacts does not require Rosetta 2 but the caveats say otherwise!", + add_error "Artifacts do not require Rosetta 2 but the caveats say otherwise!", location: url.location elsif !supports_arm && !mentions_rosetta add_error "Artifacts require Rosetta 2 but this is not indicated by the caveats!", diff --git a/Library/Homebrew/cask/dsl.rb b/Library/Homebrew/cask/dsl.rb index 5363e58237..ca35eebe39 100644 --- a/Library/Homebrew/cask/dsl.rb +++ b/Library/Homebrew/cask/dsl.rb @@ -351,6 +351,8 @@ module Cask raise CaskInvalidError.new(cask, "invalid 'version' value: #{arg.inspect}") end + no_autobump! because: :latest_version if arg == :latest + DSL::Version.new(arg) end end @@ -536,6 +538,8 @@ module Cask @livecheck_defined = true @livecheck.instance_eval(&block) + no_autobump! because: :extract_plist if @livecheck.strategy == :extract_plist + @livecheck end # Whether the cask contains a `livecheck` block. This is a legacy alias diff --git a/Library/Homebrew/cask/installer.rb b/Library/Homebrew/cask/installer.rb index 79ffc3dcc7..de73305989 100644 --- a/Library/Homebrew/cask/installer.rb +++ b/Library/Homebrew/cask/installer.rb @@ -11,8 +11,6 @@ require "cask/migrator" require "cask/quarantine" require "cask/tab" -require "cgi" - module Cask # Installer for a {Cask}. class Installer diff --git a/Library/Homebrew/cli/parser.rb b/Library/Homebrew/cli/parser.rb index cebfba76a3..eda01f6274 100644 --- a/Library/Homebrew/cli/parser.rb +++ b/Library/Homebrew/cli/parser.rb @@ -169,7 +169,7 @@ module Homebrew T::Boolean) odisabled( "`brew #{@command_name}'. This command needs to be refactored, as it is written in a style that", - "inherits from `Homebrew::AbstractCommand' ( see https://docs.brew.sh/External-Commands )", + "subclassing of `Homebrew::AbstractCommand' ( see https://docs.brew.sh/External-Commands )", disable_for_developers: false, ) end diff --git a/Library/Homebrew/cmd/bundle.rb b/Library/Homebrew/cmd/bundle.rb index 84e6b3ab23..4dfb7a60f0 100755 --- a/Library/Homebrew/cmd/bundle.rb +++ b/Library/Homebrew/cmd/bundle.rb @@ -102,17 +102,17 @@ module Homebrew switch "--all", description: "`list` all dependencies." switch "--formula", "--brews", - description: "`list` or `dump` Homebrew formula dependencies." + description: "`list`, `dump` or `cleanup` Homebrew formula dependencies." switch "--cask", "--casks", - description: "`list` or `dump` Homebrew cask dependencies." + description: "`list`, `dump` or `cleanup` Homebrew cask dependencies." switch "--tap", "--taps", - description: "`list` or `dump` Homebrew tap dependencies." + description: "`list`, `dump` or `cleanup` Homebrew tap dependencies." switch "--mas", description: "`list` or `dump` Mac App Store dependencies." switch "--whalebrew", description: "`list` or `dump` Whalebrew dependencies." switch "--vscode", - description: "`list` or `dump` VSCode (and forks/variants) extensions." + description: "`list`, `dump` or `cleanup` VSCode (and forks/variants) extensions." switch "--no-vscode", env: :bundle_dump_no_vscode, description: "`dump` without VSCode (and forks/variants) extensions. " \ @@ -226,7 +226,13 @@ module Homebrew exec_editor(Homebrew::Bundle::Brewfile.path(global:, file:)) when "cleanup" require "bundle/commands/cleanup" - Homebrew::Bundle::Commands::Cleanup.run(global:, file:, force:, zap:) + Homebrew::Bundle::Commands::Cleanup.run( + global:, file:, force:, zap:, + brews: args.brews? || no_type_args, + casks: args.casks? || no_type_args, + taps: args.taps? || no_type_args, + vscode: args.vscode? || no_type_args + ) when "check" require "bundle/commands/check" Homebrew::Bundle::Commands::Check.run(global:, file:, no_upgrade:, verbose:) diff --git a/Library/Homebrew/cmd/list.rb b/Library/Homebrew/cmd/list.rb index 4bfdc6e912..d868a233d9 100644 --- a/Library/Homebrew/cmd/list.rb +++ b/Library/Homebrew/cmd/list.rb @@ -215,7 +215,7 @@ module Homebrew sig { void } def list_casks casks = if args.no_named? - cask_paths = Cask::Caskroom.path.children.map do |path| + cask_paths = Cask::Caskroom.path.children.reject(&:file?).map do |path| if path.symlink? real_path = path.realpath real_path.basename.to_s diff --git a/Library/Homebrew/cmd/upgrade.rb b/Library/Homebrew/cmd/upgrade.rb index 7e053982e0..9895706138 100644 --- a/Library/Homebrew/cmd/upgrade.rb +++ b/Library/Homebrew/cmd/upgrade.rb @@ -261,7 +261,7 @@ module Homebrew def upgrade_outdated_casks(casks) return false if args.formula? - Install.ask_casks casks + Install.ask_casks casks if args.ask? Cask::Upgrade.upgrade_casks( *casks, diff --git a/Library/Homebrew/dev-cmd/bump-cask-pr.rb b/Library/Homebrew/dev-cmd/bump-cask-pr.rb index bcf3cb866a..72e20c132e 100644 --- a/Library/Homebrew/dev-cmd/bump-cask-pr.rb +++ b/Library/Homebrew/dev-cmd/bump-cask-pr.rb @@ -49,7 +49,6 @@ module Homebrew description: "Use the specified GitHub organization for forking." conflicts "--dry-run", "--write" - conflicts "--no-audit", "--online" conflicts "--version=", "--version-arm=" conflicts "--version=", "--version-intel=" @@ -85,7 +84,9 @@ module Homebrew method or 'livecheck' block with 'skip'.) EOS - odie "You have too many PRs open: close or merge some first!" if GitHub.too_many_open_prs?(cask.tap) + if !args.write_only? && GitHub.too_many_open_prs?(cask.tap) + odie "You have too many PRs open: close or merge some first!" + end new_version = BumpVersionParser.new( general: args.version, @@ -113,7 +114,7 @@ module Homebrew raise UsageError, "No `--version`, `--url` or `--sha256` argument specified!" end - check_pull_requests(cask, new_version:) + check_pull_requests(cask, new_version:) unless args.write_only? replacement_pairs ||= [] branch_name = "bump-#{cask.token}" @@ -136,7 +137,7 @@ module Homebrew end if new_version.present? - # For simplicity, our naming defers to the arm version if we multiple architectures are specified + # For simplicity, our naming defers to the arm version if multiple architectures are specified branch_version = new_version.arm || new_version.general if branch_version.is_a?(Cask::DSL::Version) commit_version = shortened_version(branch_version, cask:) @@ -171,7 +172,7 @@ module Homebrew pr_title: commit_message, } - GitHub.create_bump_pr(pr_info, args:) + GitHub.create_bump_pr(pr_info, args:) unless args.write_only? end private diff --git a/Library/Homebrew/dev-cmd/bump-formula-pr.rb b/Library/Homebrew/dev-cmd/bump-formula-pr.rb index e585f75d8c..8c417a4f63 100644 --- a/Library/Homebrew/dev-cmd/bump-formula-pr.rb +++ b/Library/Homebrew/dev-cmd/bump-formula-pr.rb @@ -121,7 +121,9 @@ module Homebrew method or 'livecheck' block with 'skip'.) EOS - odie "You have too many PRs open: close or merge some first!" if GitHub.too_many_open_prs?(tap) + if !args.write_only? && GitHub.too_many_open_prs?(tap) + odie "You have too many PRs open: close or merge some first!" + end formula_spec = formula.stable odie "#{formula}: no stable specification found!" if formula_spec.blank? @@ -135,7 +137,7 @@ module Homebrew remote_branch = tap.git_repository.origin_branch_name previous_branch = "-" - check_pull_requests(formula, tap_remote_repo, state: "open") + check_pull_requests(formula, tap_remote_repo, state: "open") unless args.write_only? all_formulae = [] if args.bump_synced.present? @@ -159,6 +161,7 @@ module Homebrew new_url = args.url new_version = args.version + check_new_version(commit_formula, tap_remote_repo, version: new_version) if new_version.present? opoo "This formula has patches that may be resolved upstream." if commit_formula.patchlist.present? @@ -174,6 +177,7 @@ module Homebrew end old_hash = commit_formula_spec.checksum&.hexdigest + new_hash = args.sha256 new_tag = args.tag new_revision = args.revision @@ -213,10 +217,9 @@ module Homebrew elsif new_url.blank? && new_version.blank? raise UsageError, "#{commit_formula}: no `--url` or `--version` argument specified!" else - next unless new_version.present? + new_url ||= PyPI.update_pypi_url(old_url, new_version) if new_version.present? - new_url ||= PyPI.update_pypi_url(old_url, new_version) - if new_url.blank? + if new_url.blank? && new_version.present? new_url = update_url(old_url, old_version, new_version) if new_mirrors.blank? && old_mirrors.present? new_mirrors = old_mirrors.map do |old_mirror| @@ -231,6 +234,9 @@ module Homebrew #{new_url} EOS end + if new_url.blank? + odie "There was an issue generating the updated url, you may need to create the PR manually" + end check_new_version(commit_formula, tap_remote_repo, url: new_url) if new_version.blank? resource_path, forced_version = fetch_resource_and_forced_version(commit_formula, new_version, new_url) Utils::Tar.validate_file(resource_path) @@ -395,10 +401,14 @@ module Homebrew if github_release_data.present? pre = "pre" if github_release_data["prerelease"].present? + # maximum length of PR body is 65,536 characters so let's truncate release notes to half of that. + body = Formatter.truncate(github_release_data["body"], max: 32_768) + formula_pr_message += <<~XML
#{pre}release notes -
#{github_release_data["body"]}
+
#{body}
+

View the full release notes at #{github_release_data["html_url"]}.

XML end @@ -407,7 +417,7 @@ module Homebrew { sourcefile_path: commit_formula.path, old_contents:, - commit_message: "#{commit_formula.name} #{args.version}", + commit_message: "#{commit_formula.name} #{new_formula_version}", additional_files: alias_rename, formula_pr_message:, formula_name: commit_formula.name, @@ -426,7 +436,7 @@ module Homebrew # If `brew audit` fails, revert the changes made to any formula. commits.each do |revert| revert_formula = Formula[revert[:formula_name]] - revert_formula.path.atomic_write(revert[:old_contents]) unless args.dry_run? + revert_formula.path.atomic_write(revert[:old_contents]) if !args.dry_run? && !args.write_only? revert_alias_rename = revert[:additional_files] if revert_alias_rename && (source = revert_alias_rename.first) && (destination = revert_alias_rename.last) FileUtils.mv source, destination @@ -437,6 +447,7 @@ module Homebrew end new_formula_version = T.must(commits.first)[:new_version] + pr_title = if args.bump_synced.nil? "#{formula.name} #{new_formula_version}" else @@ -462,7 +473,7 @@ module Homebrew tap_remote_repo:, pr_message:, } - GitHub.create_bump_pr(pr_info, args:) + GitHub.create_bump_pr(pr_info, args:) unless args.write_only? end private diff --git a/Library/Homebrew/dev-cmd/create.rb b/Library/Homebrew/dev-cmd/create.rb index f89b3287a1..e3c4f660f8 100644 --- a/Library/Homebrew/dev-cmd/create.rb +++ b/Library/Homebrew/dev-cmd/create.rb @@ -20,6 +20,8 @@ module Homebrew EOS switch "--autotools", description: "Create a basic template for an Autotools-style build." + switch "--cabal", + description: "Create a basic template for a Cabal build." switch "--cask", description: "Create a basic template for a cask." switch "--cmake", @@ -59,7 +61,7 @@ module Homebrew switch "-f", "--force", description: "Ignore errors for disallowed formula names and names that shadow aliases." - conflicts "--autotools", "--cmake", "--crystal", "--go", "--meson", "--node", + conflicts "--autotools", "--cabal", "--cmake", "--crystal", "--go", "--meson", "--node", "--perl", "--python", "--ruby", "--rust", "--zig", "--cask" conflicts "--cask", "--HEAD" conflicts "--cask", "--set-license" @@ -163,6 +165,8 @@ module Homebrew :crystal elsif args.go? :go + elsif args.cabal? + :cabal elsif args.meson? :meson elsif args.node? diff --git a/Library/Homebrew/dev-cmd/generate-cask-api.rb b/Library/Homebrew/dev-cmd/generate-cask-api.rb index 6f75828061..40b3a1c7da 100644 --- a/Library/Homebrew/dev-cmd/generate-cask-api.rb +++ b/Library/Homebrew/dev-cmd/generate-cask-api.rb @@ -44,22 +44,25 @@ module Homebrew Cask::Cask.generating_hash! - tap.cask_files.each do |path| - cask = Cask::CaskLoader.load(path) - name = cask.token - json = JSON.pretty_generate(cask.to_hash_with_variations) - cask_source = path.read - html_template_name = html_template(name) + latest_macos = MacOSVersion.new((HOMEBREW_MACOS_NEWEST_UNSUPPORTED.to_i - 1).to_s).to_sym + Homebrew::SimulateSystem.with(os: latest_macos, arch: :arm) do + tap.cask_files.each do |path| + cask = Cask::CaskLoader.load(path) + name = cask.token + json = JSON.pretty_generate(cask.to_hash_with_variations) + cask_source = path.read + html_template_name = html_template(name) - unless args.dry_run? - File.write("_data/cask/#{name.tr("+", "_")}.json", "#{json}\n") - File.write("api/cask/#{name}.json", CASK_JSON_TEMPLATE) - File.write("api/cask-source/#{name}.rb", cask_source) - File.write("cask/#{name}.html", html_template_name) + unless args.dry_run? + File.write("_data/cask/#{name.tr("+", "_")}.json", "#{json}\n") + File.write("api/cask/#{name}.json", CASK_JSON_TEMPLATE) + File.write("api/cask-source/#{name}.rb", cask_source) + File.write("cask/#{name}.html", html_template_name) + end + rescue + onoe "Error while generating data for cask '#{path.stem}'." + raise end - rescue - onoe "Error while generating data for cask '#{path.stem}'." - raise end canonical_json = JSON.pretty_generate(tap.cask_renames) diff --git a/Library/Homebrew/dev-cmd/generate-formula-api.rb b/Library/Homebrew/dev-cmd/generate-formula-api.rb index c87dc2a798..ac8d5dd63b 100644 --- a/Library/Homebrew/dev-cmd/generate-formula-api.rb +++ b/Library/Homebrew/dev-cmd/generate-formula-api.rb @@ -44,20 +44,23 @@ module Homebrew Formulary.enable_factory_cache! Formula.generating_hash! - tap.formula_names.each do |name| - formula = Formulary.factory(name) - name = formula.name - json = JSON.pretty_generate(formula.to_hash_with_variations) - html_template_name = html_template(name) + latest_macos = MacOSVersion.new((HOMEBREW_MACOS_NEWEST_UNSUPPORTED.to_i - 1).to_s).to_sym + Homebrew::SimulateSystem.with(os: latest_macos, arch: :arm) do + tap.formula_names.each do |name| + formula = Formulary.factory(name) + name = formula.name + json = JSON.pretty_generate(formula.to_hash_with_variations) + html_template_name = html_template(name) - unless args.dry_run? - File.write("_data/formula/#{name.tr("+", "_")}.json", "#{json}\n") - File.write("api/formula/#{name}.json", FORMULA_JSON_TEMPLATE) - File.write("formula/#{name}.html", html_template_name) + unless args.dry_run? + File.write("_data/formula/#{name.tr("+", "_")}.json", "#{json}\n") + File.write("api/formula/#{name}.json", FORMULA_JSON_TEMPLATE) + File.write("formula/#{name}.html", html_template_name) + end + rescue + onoe "Error while generating data for formula '#{name}'." + raise end - rescue - onoe "Error while generating data for formula '#{name}'." - raise end canonical_json = JSON.pretty_generate(tap.formula_renames.merge(tap.alias_table)) diff --git a/Library/Homebrew/dev-cmd/prof.rb b/Library/Homebrew/dev-cmd/prof.rb index ac16a53b14..b8f485568f 100644 --- a/Library/Homebrew/dev-cmd/prof.rb +++ b/Library/Homebrew/dev-cmd/prof.rb @@ -2,6 +2,7 @@ # frozen_string_literal: true require "abstract_command" +require "fileutils" module Homebrew module DevCmd diff --git a/Library/Homebrew/dev-cmd/tap-new.rb b/Library/Homebrew/dev-cmd/tap-new.rb index 5d04a15c6c..b1b7e5278f 100644 --- a/Library/Homebrew/dev-cmd/tap-new.rb +++ b/Library/Homebrew/dev-cmd/tap-new.rb @@ -126,7 +126,7 @@ module Homebrew echo "::add-mask::${base64_token}" echo "token=${base64_token}" >> "${GITHUB_OUTPUT}" <% end -%> - - run: brew test-bot --only-formulae<% if root_url %> --root-url='<%= root_url %>'<% end %> + - run: brew test-bot --only-formulae#{" --root-url=#{root_url}" if root_url} if: github.event_name == 'pull_request' <% if args.github_packages? -%> env: diff --git a/Library/Homebrew/dev-cmd/typecheck.rb b/Library/Homebrew/dev-cmd/typecheck.rb index 3f16dae317..9cf201b8bc 100644 --- a/Library/Homebrew/dev-cmd/typecheck.rb +++ b/Library/Homebrew/dev-cmd/typecheck.rb @@ -60,6 +60,7 @@ module Homebrew HOMEBREW_LIBRARY_PATH.cd do if update workers = args.debug? ? ["--workers=1"] : [] + safe_system "bundle", "exec", "tapioca", "annotations" safe_system "bundle", "exec", "tapioca", "dsl", *workers # Prefer adding args here: Library/Homebrew/sorbet/tapioca/config.yml tapioca_args = args.update_all? ? ["--all"] : [] diff --git a/Library/Homebrew/dev-cmd/update-maintainers.rb b/Library/Homebrew/dev-cmd/update-maintainers.rb index 0b5dd62980..e1ca6a550f 100644 --- a/Library/Homebrew/dev-cmd/update-maintainers.rb +++ b/Library/Homebrew/dev-cmd/update-maintainers.rb @@ -21,12 +21,22 @@ module Homebrew sig { override.void } def run + # Needed for Manpages.regenerate_man_pages below + Homebrew.install_bundler_gems!(groups: ["man"]) + # We assume that only public members wish to be included in the README public_members = GitHub.public_member_usernames("Homebrew") maintainers = GitHub.members_by_team("Homebrew", "maintainers") + # Not all PLC members are Homebrew GitHub organisation members any more + non_maintainer_plc_members = { + colindean: "Colin Dean", + mozzadrella: "Vanessa Gennarelli", + }.transform_keys(&:to_s) + public_members += non_maintainer_plc_members.keys + members = { - plc: GitHub.members_by_team("Homebrew", "plc"), + plc: GitHub.members_by_team("Homebrew", "plc").merge(non_maintainer_plc_members), tsc: GitHub.members_by_team("Homebrew", "tsc"), maintainers:, } diff --git a/Library/Homebrew/download_strategy.rb b/Library/Homebrew/download_strategy.rb index 82cb409a5b..d9a6e86290 100644 --- a/Library/Homebrew/download_strategy.rb +++ b/Library/Homebrew/download_strategy.rb @@ -5,7 +5,6 @@ require "json" require "time" require "unpack_strategy" require "lazy_object" -require "cgi" require "lock_file" require "system_command" @@ -384,9 +383,12 @@ class AbstractFileDownloadStrategy < AbstractDownloadStrategy if url.match?(URI::DEFAULT_PARSER.make_regexp) uri = URI(url) - if uri.query - query_params = CGI.parse(uri.query) - query_params["response-content-disposition"].each do |param| + if (uri_query = uri.query.presence) + URI.decode_www_form(uri_query).each do |key, param| + components[:query] << param if search_query + + next if key != "response-content-disposition" + query_basename = param[/attachment;\s*filename=(["']?)(.+)\1/i, 2] return File.basename(query_basename) if query_basename end @@ -397,10 +399,6 @@ class AbstractFileDownloadStrategy < AbstractDownloadStrategy URI::DEFAULT_PARSER.unescape(part).presence end end - - if search_query && (uri_query = uri.query.presence) - components[:query] = URI.decode_www_form(uri_query).map { _2 } - end else components[:path] = [url] end @@ -705,7 +703,12 @@ class CurlGitHubPackagesDownloadStrategy < CurlDownloadStrategy meta[:headers] ||= [] # GitHub Packages authorization header. # HOMEBREW_GITHUB_PACKAGES_AUTH set in brew.sh - meta[:headers] << "Authorization: #{HOMEBREW_GITHUB_PACKAGES_AUTH}" + # If using a private GHCR mirror with no Authentication set then do not add the header. In all other cases add it. + if !Homebrew::EnvConfig.artifact_domain.presence || + Homebrew::EnvConfig.docker_registry_basic_auth_token.presence || + Homebrew::EnvConfig.docker_registry_token.presence + meta[:headers] << "Authorization: #{HOMEBREW_GITHUB_PACKAGES_AUTH}" + end super end diff --git a/Library/Homebrew/formula-analytics/requirements.txt b/Library/Homebrew/formula-analytics/requirements.txt index 4932a9d0ce..ea19e51c7e 100644 --- a/Library/Homebrew/formula-analytics/requirements.txt +++ b/Library/Homebrew/formula-analytics/requirements.txt @@ -8,9 +8,9 @@ certifi==2025.4.26 \ --hash=sha256:0a816057ea3cdefcef70270d2c515e4506bbc954f417fa5ade2021213bb8f0c6 \ --hash=sha256:30350364dfe371162649852c63336a15c70c6510c2ad5015b21c2345311805f3 # via influxdb3-python -influxdb3-python==0.12.0 \ - --hash=sha256:991f756528280b376db162e26ad80096168917f294d62f449a70257e65014c03 \ - --hash=sha256:d82ec4193257e49ba7fee1dee940c951c949a8557d0cf2f7b9f817f940ebcf34 +influxdb3-python==0.13.0 \ + --hash=sha256:616ee767286a81b6f575ea3de097bc095db724262586231ca8d7567dd2377a30 \ + --hash=sha256:c039638fcb44dd7c9433ab19e8f05bb782fa13989cb8c74d90e1291ebcc67b3b # via -r requirements.in pyarrow==20.0.0 \ --hash=sha256:00138f79ee1b5aca81e2bdedb91e3739b987245e11fa3c826f9e57c5d102fb75 \ @@ -91,7 +91,7 @@ urllib3==2.4.0 \ # via influxdb3-python # The following packages are considered to be unsafe in a requirements file: -setuptools==80.3.1 \ - --hash=sha256:31e2c58dbb67c99c289f51c16d899afedae292b978f8051efaf6262d8212f927 \ - --hash=sha256:ea8e00d7992054c4c592aeb892f6ad51fe1b4d90cc6947cc45c45717c40ec537 +setuptools==80.8.0 \ + --hash=sha256:49f7af965996f26d43c8ae34539c8d99c5042fbff34302ea151eaa9c207cd257 \ + --hash=sha256:95a60484590d24103af13b686121328cc2736bee85de8936383111e421b9edc0 # via influxdb3-python diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index f1fc47661e..c07a6f6292 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -2126,7 +2126,7 @@ class Formula bash: bash_completion/base_name, zsh: zsh_completion/"_#{base_name}", fish: fish_completion/"#{base_name}.fish", - pwsh: pwsh_completion/"#{base_name}.ps1", + pwsh: pwsh_completion/"_#{base_name}.ps1", } shells.each do |shell| diff --git a/Library/Homebrew/formula_creator.rb b/Library/Homebrew/formula_creator.rb index 6bd6b0fdde..0d7507938e 100644 --- a/Library/Homebrew/formula_creator.rb +++ b/Library/Homebrew/formula_creator.rb @@ -84,7 +84,10 @@ module Homebrew r.owner = self filepath = r.fetch html_doctype_prefix = " - <% if @mode == :cmake %> + <% if @mode == :cabal %> + depends_on "cabal-install" => :build + depends_on "ghc" => :build + <% elsif @mode == :cmake %> depends_on "cmake" => :build <% elsif @mode == :crystal %> depends_on "crystal" => :build @@ -172,7 +178,10 @@ module Homebrew <% end %> def install - <% if @mode == :cmake %> + <% if @mode == :cabal %> + system "cabal", "v2-update" + system "cabal", "v2-install", *std_cabal_v2_args + <% elsif @mode == :cmake %> system "cmake", "-S", ".", "-B", "build", *std_cmake_args system "cmake", "--build", "build" system "cmake", "--install", "build" @@ -216,11 +225,14 @@ module Homebrew <% elsif @mode == :python %> virtualenv_install_with_resources <% elsif @mode == :ruby %> + ENV["BUNDLE_VERSION"] = "system" # Avoid installing Bundler into the keg ENV["GEM_HOME"] = libexec - system "bundle", "install", "-without", "development", "test" + system "bundle", "config", "set", "without", "development", "test" + system "bundle", "install" system "gem", "build", "\#{name}.gemspec" system "gem", "install", "\#{name}-\#{version}.gem" + bin.install libexec/"bin/\#{name}" bin.env_script_all_files(libexec/"bin", GEM_HOME: ENV["GEM_HOME"]) <% elsif @mode == :rust %> diff --git a/Library/Homebrew/livecheck/strategy/bitbucket.rb b/Library/Homebrew/livecheck/strategy/bitbucket.rb index 6624e07490..23ad1f7ec5 100644 --- a/Library/Homebrew/livecheck/strategy/bitbucket.rb +++ b/Library/Homebrew/livecheck/strategy/bitbucket.rb @@ -68,14 +68,14 @@ module Homebrew # `/get/` archives are Git tag snapshots, so we need to check that tab # instead of the main `/downloads/` page if match[:dl_type] == "get" - values[:url] = "https://bitbucket.org/#{match[:path]}/downloads/?tab=tags" + values[:url] = "https://bitbucket.org/#{match[:path]}/downloads/?tab=tags&iframe=true&spa=0" # Example tag regexes: # * `/]*?class="name"[^>]*?>\s*v?(\d+(?:\.\d+)+)\s*?]*?class="name"[^>]*?>\s*abc-v?(\d+(?:\.\d+)+)\s*?]*?class="name"[^>]*?>\s*#{regex_prefix}v?(\d+(?:\.\d+)+)\s*?=" || !version_specified? + return @version.max if @version.respond_to?(:to_ary) + + @version + end + def allows?(other) return true unless version_specified? diff --git a/Library/Homebrew/rubocops/cask/constants/stanza.rb b/Library/Homebrew/rubocops/cask/constants/stanza.rb index 7a1f5f803a..400aa7cc17 100644 --- a/Library/Homebrew/rubocops/cask/constants/stanza.rb +++ b/Library/Homebrew/rubocops/cask/constants/stanza.rb @@ -40,6 +40,9 @@ module RuboCop :installer, :binary, :manpage, + :bash_completion, + :fish_completion, + :zsh_completion, :colorpicker, :dictionary, :font, diff --git a/Library/Homebrew/rubocops/patches.rb b/Library/Homebrew/rubocops/patches.rb index 781117d9f1..4cc7a74066 100644 --- a/Library/Homebrew/rubocops/patches.rb +++ b/Library/Homebrew/rubocops/patches.rb @@ -59,6 +59,15 @@ module RuboCop problem "GitHub patches should end with .patch, not .diff: #{patch_url}" end + bitbucket_regex = %r{bitbucket\.org/([^/]+)/([^/]+)/commits/([a-f0-9]+)/raw}i + if regex_match_group(patch_url_node, bitbucket_regex) + owner, repo, commit = patch_url_node.source.match(bitbucket_regex).captures + correct_url = "https://api.bitbucket.org/2.0/repositories/#{owner}/#{repo}/diff/#{commit}" + problem "Bitbucket patches should use the api url: #{correct_url}" do |corrector| + corrector.replace(patch_url_node.source_range, %Q("#{correct_url}")) + end + end + # Only .diff passes `--full-index` to `git diff` and there is no documented way # to get .patch to behave the same for GitLab. if regex_match_group(patch_url_node, %r{.*gitlab.*/commit/[a-fA-F0-9]*\.patch}) diff --git a/Library/Homebrew/rubocops/shared/url_helper.rb b/Library/Homebrew/rubocops/shared/url_helper.rb index 1d5e6a32ff..0a49816f13 100644 --- a/Library/Homebrew/rubocops/shared/url_helper.rb +++ b/Library/Homebrew/rubocops/shared/url_helper.rb @@ -35,6 +35,12 @@ module RuboCop def audit_url(type, urls, mirrors, livecheck_url: false) @type = type + # URLs must be ASCII; IDNs must be punycode + ascii_pattern = /[^\p{ASCII}]+/ + audit_urls(urls, ascii_pattern) do |_, url| + problem "Please use the ASCII (Punycode encoded host, URL-encoded path and query) version of #{url}." + end + # GNU URLs; doesn't apply to mirrors gnu_pattern = %r{^(?:https?|ftp)://ftpmirror\.gnu\.org/(.*)} audit_urls(urls, gnu_pattern) do |match, url| diff --git a/Library/Homebrew/sorbet/rbi/annotations/.gitattributes b/Library/Homebrew/sorbet/rbi/annotations/.gitattributes new file mode 100644 index 0000000000..d2eacd2c61 --- /dev/null +++ b/Library/Homebrew/sorbet/rbi/annotations/.gitattributes @@ -0,0 +1 @@ +**/*.rbi linguist-vendored=true diff --git a/Library/Homebrew/sorbet/rbi/annotations/minitest.rbi b/Library/Homebrew/sorbet/rbi/annotations/minitest.rbi new file mode 100644 index 0000000000..64a89286ee --- /dev/null +++ b/Library/Homebrew/sorbet/rbi/annotations/minitest.rbi @@ -0,0 +1,119 @@ +# typed: true + +# DO NOT EDIT MANUALLY +# This file was pulled from a central RBI files repository. +# Please run `bin/tapioca annotations` to update it. + +module Minitest::Assertions + sig { params(test: T.anything, msg: T.anything).returns(TrueClass) } + def assert(test, msg = nil); end + + sig { params(obj: T.anything, msg: T.anything).returns(TrueClass) } + def assert_empty(obj, msg = nil); end + + sig { params(exp: T.anything, act: T.anything, msg: T.anything).returns(TrueClass) } + def assert_equal(exp, act, msg = nil); end + + sig { params(exp: T.anything, act: T.anything, delta: Numeric, msg: T.anything).returns(TrueClass) } + def assert_in_delta(exp, act, delta = T.unsafe(nil), msg = nil); end + + sig { params(a: T.anything, b: T.anything, epsilon: Numeric, msg: T.anything).returns(TrueClass) } + def assert_in_epsilon(a, b, epsilon = T.unsafe(nil), msg = nil); end + + sig { params(collection: T.anything, obj: T.anything, msg: T.anything).returns(TrueClass) } + def assert_includes(collection, obj, msg = nil); end + + sig { params(cls: T.anything, obj: T.anything, msg: T.anything).returns(TrueClass) } + def assert_instance_of(cls, obj, msg = nil); end + + sig { params(cls: T.anything, obj: T.anything, msg: T.anything).returns(TrueClass) } + def assert_kind_of(cls, obj, msg = nil); end + + sig { params(matcher: T.any(String, Regexp), obj: T.anything, msg: T.anything).returns(MatchData) } + def assert_match(matcher, obj, msg = nil); end + + sig { params(obj: T.anything, msg: T.anything).returns(TrueClass) } + def assert_nil(obj, msg = nil); end + + sig { params(o1: T.anything, op: T.any(Symbol, String), o2: T.anything, msg: T.anything).returns(TrueClass) } + def assert_operator(o1, op, o2 = T.unsafe(nil), msg = nil); end + + sig { params(stdout: T.nilable(T.any(String, Regexp)), stderr: T.nilable(T.any(String, Regexp)), block: T.proc.void).returns(T::Boolean) } + def assert_output(stdout = nil, stderr = nil, &block); end + + sig { params(path: T.any(String, Pathname), msg: T.anything).returns(TrueClass) } + def assert_path_exists(path, msg = nil); end + + sig { params(block: T.proc.void).returns(TrueClass) } + def assert_pattern(&block); end + + sig { params(o1: T.anything, op: T.any(String, Symbol), msg: T.anything).returns(TrueClass) } + def assert_predicate(o1, op, msg = nil); end + + sig { params(exp: NilClass, block: T.proc.void).returns(StandardError) } + sig { type_parameters(:T).params(exp: T.any(T::Class[T.type_parameter(:T)], Regexp, String), block: T.proc.void).returns(T.type_parameter(:T)) } + def assert_raises(*exp, &block); end + + sig { params(obj: T.anything, meth: T.any(String, Symbol), msg: T.anything, include_all: T::Boolean).returns(TrueClass) } + def assert_respond_to(obj, meth, msg = nil, include_all: false); end + + sig { params(exp: T.anything, act: T.anything, msg: T.anything).returns(TrueClass) } + def assert_same(exp, act, msg = nil); end + + sig { params(send_ary: T::Array[T.anything], m: T.anything).returns(T::Boolean) } + def assert_send(send_ary, m = nil); end + + sig { params(block: T.proc.void).returns(T::Boolean) } + def assert_silent(&block); end + + sig { params(sym: Symbol, msg: T.anything, block: T.proc.void).returns(T.anything) } + def assert_throws(sym, msg = nil, &block); end + + sig { params(test: T.anything, msg: T.anything).returns(TrueClass) } + def refute(test, msg = nil); end + + sig { params(obj: T.anything, msg: T.anything).returns(TrueClass) } + def refute_empty(obj, msg = nil); end + + sig { params(exp: T.anything, act: T.anything, msg: T.anything).returns(TrueClass) } + def refute_equal(exp, act, msg = nil); end + + sig { params(exp: T.anything, act: T.anything, delta: Numeric, msg: T.anything).returns(TrueClass) } + def refute_in_delta(exp, act, delta = T.unsafe(nil), msg = nil); end + + sig { params(a: T.anything, b: T.anything, epsilon: Numeric, msg: T.anything).returns(TrueClass) } + def refute_in_epsilon(a, b, epsilon = T.unsafe(nil), msg = nil); end + + sig { params(collection: T.anything, obj: T.anything, msg: T.anything).returns(TrueClass) } + def refute_includes(collection, obj, msg = nil); end + + sig { params(cls: T.anything, obj: T.anything, msg: T.anything).returns(TrueClass) } + def refute_instance_of(cls, obj, msg = nil); end + + sig { params(cls: T.anything, obj: T.anything, msg: T.anything).returns(TrueClass) } + def refute_kind_of(cls, obj, msg = nil); end + + sig { params(matcher: T.any(String, Regexp), obj: T.anything, msg: T.anything).returns(TrueClass) } + def refute_match(matcher, obj, msg = nil); end + + sig { params(obj: T.anything, msg: T.anything).returns(TrueClass) } + def refute_nil(obj, msg = nil); end + + sig { params(block: T.proc.void).returns(TrueClass) } + def refute_pattern(&block); end + + sig { params(o1: T.anything, op: T.any(Symbol, String), o2: T.anything, msg: T.anything).returns(TrueClass) } + def refute_operator(o1, op, o2 = T.unsafe(nil), msg = nil); end + + sig { params(path: T.any(String, Pathname), msg: T.anything).returns(TrueClass) } + def refute_path_exists(path, msg = nil); end + + sig { params(o1: T.anything, op: T.any(String, Symbol), msg: T.anything).returns(TrueClass) } + def refute_predicate(o1, op, msg = nil); end + + sig { params(obj: T.anything, meth: T.any(String, Symbol), msg: T.anything, include_all: T::Boolean).returns(TrueClass) } + def refute_respond_to(obj, meth, msg = nil, include_all: false); end + + sig { params(exp: T.anything, act: T.anything, msg: T.anything).returns(TrueClass) } + def refute_same(exp, act, msg = nil); end +end diff --git a/Library/Homebrew/sorbet/rbi/annotations/rainbow.rbi b/Library/Homebrew/sorbet/rbi/annotations/rainbow.rbi new file mode 100644 index 0000000000..0d2cb4e48a --- /dev/null +++ b/Library/Homebrew/sorbet/rbi/annotations/rainbow.rbi @@ -0,0 +1,269 @@ +# typed: true + +# DO NOT EDIT MANUALLY +# This file was pulled from a central RBI files repository. +# Please run `bin/tapioca annotations` to update it. + +module Rainbow + # @shim: https://github.com/sickill/rainbow/blob/master/lib/rainbow.rb#L10-L12 + sig { returns(T::Boolean) } + attr_accessor :enabled + + class Color + sig { returns(Symbol) } + attr_reader :ground + + sig { params(ground: Symbol, values: T.any([Integer], [Integer, Integer, Integer])).returns(Color) } + def self.build(ground, values); end + + sig { params(hex: String).returns([Integer, Integer, Integer]) } + def self.parse_hex_color(hex); end + + class Indexed < Rainbow::Color + sig { returns(Integer) } + attr_reader :num + + sig { params(ground: Symbol, num: Integer).void } + def initialize(ground, num); end + + sig { returns(T::Array[Integer]) } + def codes; end + end + + class Named < Rainbow::Color::Indexed + NAMES = T.let(nil, T::Hash[Symbol, Integer]) + + sig { params(ground: Symbol, name: Symbol).void } + def initialize(ground, name); end + + sig { returns(T::Array[Symbol]) } + def self.color_names; end + + sig { returns(String) } + def self.valid_names; end + end + + class RGB < Rainbow::Color::Indexed + sig { returns(Integer) } + attr_reader :r, :g, :b + + sig { params(ground: Symbol, values: Integer).void } + def initialize(ground, *values); end + + sig { returns(T::Array[Integer]) } + def codes; end + + sig { params(value: Numeric).returns(Integer) } + def self.to_ansi_domain(value); end + end + + class X11Named < Rainbow::Color::RGB + include Rainbow::X11ColorNames + + sig { params(ground: Symbol, name: Symbol).void } + def initialize(ground, name); end + + sig { returns(T::Array[Symbol]) } + def self.color_names; end + + sig { returns(String) } + def self.valid_names; end + end + end + + sig { returns(Wrapper) } + def self.global; end + + sig { returns(T::Boolean) } + def self.enabled; end + + sig { params(value: T::Boolean).returns(T::Boolean) } + def self.enabled=(value); end + + sig { params(string: String).returns(String) } + def self.uncolor(string); end + + class NullPresenter < String + sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(NullPresenter) } + def color(*values); end + + sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(NullPresenter) } + def foreground(*values); end + + sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(NullPresenter) } + def fg(*values); end + + sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(NullPresenter) } + def background(*values); end + + sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(NullPresenter) } + def bg(*values); end + + sig { returns(NullPresenter) } + def reset; end + + sig { returns(NullPresenter) } + def bright; end + + sig { returns(NullPresenter) } + def faint; end + + sig { returns(NullPresenter) } + def italic; end + + sig { returns(NullPresenter) } + def underline; end + + sig { returns(NullPresenter) } + def blink; end + + sig { returns(NullPresenter) } + def inverse; end + + sig { returns(NullPresenter) } + def hide; end + + sig { returns(NullPresenter) } + def cross_out; end + + sig { returns(NullPresenter) } + def black; end + + sig { returns(NullPresenter) } + def red; end + + sig { returns(NullPresenter) } + def green; end + + sig { returns(NullPresenter) } + def yellow; end + + sig { returns(NullPresenter) } + def blue; end + + sig { returns(NullPresenter) } + def magenta; end + + sig { returns(NullPresenter) } + def cyan; end + + sig { returns(NullPresenter) } + def white; end + + sig { returns(NullPresenter) } + def bold; end + + sig { returns(NullPresenter) } + def dark; end + + sig { returns(NullPresenter) } + def strike; end + end + + class Presenter < String + TERM_EFFECTS = T.let(nil, T::Hash[Symbol, Integer]) + + sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(Presenter) } + def color(*values); end + + sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(Presenter) } + def foreground(*values); end + + sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(Presenter) } + def fg(*values); end + + sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(Presenter) } + def background(*values); end + + sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(Presenter) } + def bg(*values); end + + sig { returns(Presenter) } + def reset; end + + sig { returns(Presenter) } + def bright; end + + sig { returns(Presenter) } + def faint; end + + sig { returns(Presenter) } + def italic; end + + sig { returns(Presenter) } + def underline; end + + sig { returns(Presenter) } + def blink; end + + sig { returns(Presenter) } + def inverse; end + + sig { returns(Presenter) } + def hide; end + + sig { returns(Presenter) } + def cross_out; end + + sig { returns(Presenter) } + def black; end + + sig { returns(Presenter) } + def red; end + + sig { returns(Presenter) } + def green; end + + sig { returns(Presenter) } + def yellow; end + + sig { returns(Presenter) } + def blue; end + + sig { returns(Presenter) } + def magenta; end + + sig { returns(Presenter) } + def cyan; end + + sig { returns(Presenter) } + def white; end + + sig { returns(Presenter) } + def bold; end + + sig { returns(Presenter) } + def dark; end + + sig { returns(Presenter) } + def strike; end + end + + class StringUtils + sig { params(string: String, codes: T::Array[Integer]).returns(String) } + def self.wrap_with_sgr(string, codes); end + + sig { params(string: String).returns(String) } + def self.uncolor(string); end + end + + VERSION = T.let(nil, String) + + class Wrapper + sig { returns(T::Boolean) } + attr_accessor :enabled + + sig { params(enabled: T::Boolean).void } + def initialize(enabled = true); end + + sig { params(string: String).returns(T.any(Rainbow::Presenter, Rainbow::NullPresenter)) } + def wrap(string); end + end + + module X11ColorNames + NAMES = T.let(nil, T::Hash[Symbol, [Integer, Integer, Integer]]) + end +end + +sig { params(string: String).returns(Rainbow::Presenter) } +def Rainbow(string); end diff --git a/Library/Homebrew/sorbet/rbi/dsl/homebrew/dev_cmd/create.rbi b/Library/Homebrew/sorbet/rbi/dsl/homebrew/dev_cmd/create.rbi index 150ac9e871..2912c9a025 100644 --- a/Library/Homebrew/sorbet/rbi/dsl/homebrew/dev_cmd/create.rbi +++ b/Library/Homebrew/sorbet/rbi/dsl/homebrew/dev_cmd/create.rbi @@ -17,6 +17,9 @@ class Homebrew::DevCmd::Create::Args < Homebrew::CLI::Args sig { returns(T::Boolean) } def autotools?; end + sig { returns(T::Boolean) } + def cabal?; end + sig { returns(T::Boolean) } def cask?; end diff --git a/Library/Homebrew/sorbet/rbi/dsl/rubo_cop/cask/ast/stanza.rbi b/Library/Homebrew/sorbet/rbi/dsl/rubo_cop/cask/ast/stanza.rbi index 80511ce997..a8c6e4f8af 100644 --- a/Library/Homebrew/sorbet/rbi/dsl/rubo_cop/cask/ast/stanza.rbi +++ b/Library/Homebrew/sorbet/rbi/dsl/rubo_cop/cask/ast/stanza.rbi @@ -27,6 +27,9 @@ class RuboCop::Cask::AST::Stanza sig { returns(T::Boolean) } def auto_updates?; end + sig { returns(T::Boolean) } + def bash_completion?; end + sig { returns(T::Boolean) } def binary?; end @@ -51,6 +54,9 @@ class RuboCop::Cask::AST::Stanza sig { returns(T::Boolean) } def dictionary?; end + sig { returns(T::Boolean) } + def fish_completion?; end + sig { returns(T::Boolean) } def font?; end @@ -191,4 +197,7 @@ class RuboCop::Cask::AST::Stanza sig { returns(T::Boolean) } def zap?; end + + sig { returns(T::Boolean) } + def zsh_completion?; end end diff --git a/Library/Homebrew/sorbet/rbi/gems/parallel_tests@5.1.0.rbi b/Library/Homebrew/sorbet/rbi/gems/parallel_tests@5.2.0.rbi similarity index 83% rename from Library/Homebrew/sorbet/rbi/gems/parallel_tests@5.1.0.rbi rename to Library/Homebrew/sorbet/rbi/gems/parallel_tests@5.2.0.rbi index 1212b5c716..045411b7f9 100644 --- a/Library/Homebrew/sorbet/rbi/gems/parallel_tests@5.1.0.rbi +++ b/Library/Homebrew/sorbet/rbi/gems/parallel_tests@5.2.0.rbi @@ -78,36 +78,36 @@ class ParallelTests::CLI # source://parallel_tests//lib/parallel_tests/cli.rb#189 def any_test_failed?(test_results); end - # source://parallel_tests//lib/parallel_tests/cli.rb#374 + # source://parallel_tests//lib/parallel_tests/cli.rb#375 def append_test_options(options, argv); end - # source://parallel_tests//lib/parallel_tests/cli.rb#415 + # source://parallel_tests//lib/parallel_tests/cli.rb#416 def detailed_duration(seconds); end - # source://parallel_tests//lib/parallel_tests/cli.rb#389 + # source://parallel_tests//lib/parallel_tests/cli.rb#390 def execute_command_in_parallel(command, num_processes, options); end # source://parallel_tests//lib/parallel_tests/cli.rb#56 def execute_in_parallel(items, num_processes, options); end - # source://parallel_tests//lib/parallel_tests/cli.rb#363 + # source://parallel_tests//lib/parallel_tests/cli.rb#364 def extract_file_paths(argv); end - # source://parallel_tests//lib/parallel_tests/cli.rb#369 + # source://parallel_tests//lib/parallel_tests/cli.rb#370 def extract_test_options(argv); end - # source://parallel_tests//lib/parallel_tests/cli.rb#422 + # source://parallel_tests//lib/parallel_tests/cli.rb#423 def final_fail_message; end # @return [Boolean] # - # source://parallel_tests//lib/parallel_tests/cli.rb#432 + # source://parallel_tests//lib/parallel_tests/cli.rb#433 def first_is_1?; end # source://parallel_tests//lib/parallel_tests/cli.rb#31 def handle_interrupt; end - # source://parallel_tests//lib/parallel_tests/cli.rb#382 + # source://parallel_tests//lib/parallel_tests/cli.rb#383 def load_runner(type); end # source://parallel_tests//lib/parallel_tests/cli.rb#138 @@ -128,7 +128,7 @@ class ParallelTests::CLI # source://parallel_tests//lib/parallel_tests/cli.rb#148 def report_results(test_results, options); end - # source://parallel_tests//lib/parallel_tests/cli.rb#410 + # source://parallel_tests//lib/parallel_tests/cli.rb#411 def report_time_taken(&block); end # source://parallel_tests//lib/parallel_tests/cli.rb#130 @@ -142,12 +142,12 @@ class ParallelTests::CLI # CI systems often fail when there is no output for a long time, so simulate some output # - # source://parallel_tests//lib/parallel_tests/cli.rb#438 + # source://parallel_tests//lib/parallel_tests/cli.rb#439 def simulate_output_for_ci(simulate); end # @return [Boolean] # - # source://parallel_tests//lib/parallel_tests/cli.rb#428 + # source://parallel_tests//lib/parallel_tests/cli.rb#429 def use_colors?; end end @@ -168,31 +168,34 @@ class ParallelTests::Grouper private - # source://parallel_tests//lib/parallel_tests/grouper.rb#113 + # source://parallel_tests//lib/parallel_tests/grouper.rb#120 def add_to_group(group, item, size); end - # source://parallel_tests//lib/parallel_tests/grouper.rb#118 + # source://parallel_tests//lib/parallel_tests/grouper.rb#125 def group_by_features_with_steps(tests, options); end - # source://parallel_tests//lib/parallel_tests/grouper.rb#123 + # source://parallel_tests//lib/parallel_tests/grouper.rb#130 def group_by_scenarios(tests, options = T.unsafe(nil)); end - # source://parallel_tests//lib/parallel_tests/grouper.rb#128 + # source://parallel_tests//lib/parallel_tests/grouper.rb#135 def group_features_by_size(items, groups_to_fill); end - # source://parallel_tests//lib/parallel_tests/grouper.rb#95 + # source://parallel_tests//lib/parallel_tests/grouper.rb#102 def isolate_count(options); end - # source://parallel_tests//lib/parallel_tests/grouper.rb#136 + # source://parallel_tests//lib/parallel_tests/grouper.rb#143 def items_to_group(items); end - # source://parallel_tests//lib/parallel_tests/grouper.rb#105 + # source://parallel_tests//lib/parallel_tests/grouper.rb#112 def largest_first(files); end - # source://parallel_tests//lib/parallel_tests/grouper.rb#109 + # source://parallel_tests//lib/parallel_tests/grouper.rb#116 def smallest_group(groups); end # source://parallel_tests//lib/parallel_tests/grouper.rb#51 + def specified_groups(options); end + + # source://parallel_tests//lib/parallel_tests/grouper.rb#58 def specify_groups(items, num_groups, options, groups); end end end diff --git a/Library/Homebrew/sorbet/rbi/gems/rbi@0.3.2.rbi b/Library/Homebrew/sorbet/rbi/gems/rbi@0.3.3.rbi similarity index 95% rename from Library/Homebrew/sorbet/rbi/gems/rbi@0.3.2.rbi rename to Library/Homebrew/sorbet/rbi/gems/rbi@0.3.3.rbi index 2952f6c1dc..f60986ffae 100644 --- a/Library/Homebrew/sorbet/rbi/gems/rbi@0.3.2.rbi +++ b/Library/Homebrew/sorbet/rbi/gems/rbi@0.3.3.rbi @@ -650,7 +650,7 @@ class RBI::File # : (?out: (IO | StringIO), ?indent: Integer, ?print_locs: bool, ?max_line_length: Integer?) -> void # - # source://rbi//lib/rbi/printer.rb#813 + # source://rbi//lib/rbi/printer.rb#817 sig do params( out: T.any(::IO, ::StringIO), @@ -663,13 +663,13 @@ class RBI::File # : (?out: (IO | StringIO), ?indent: Integer, ?print_locs: bool) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#1112 + # source://rbi//lib/rbi/rbs_printer.rb#1116 sig { params(out: T.any(::IO, ::StringIO), indent: ::Integer, print_locs: T::Boolean).void } def rbs_print(out: T.unsafe(nil), indent: T.unsafe(nil), print_locs: T.unsafe(nil)); end # : (?indent: Integer, ?print_locs: bool) -> String # - # source://rbi//lib/rbi/rbs_printer.rb#1118 + # source://rbi//lib/rbi/rbs_printer.rb#1122 sig { params(indent: ::Integer, print_locs: T::Boolean).returns(::String) } def rbs_string(indent: T.unsafe(nil), print_locs: T.unsafe(nil)); end @@ -699,7 +699,7 @@ class RBI::File # : (?indent: Integer, ?print_locs: bool, ?max_line_length: Integer?) -> String # - # source://rbi//lib/rbi/printer.rb#819 + # source://rbi//lib/rbi/printer.rb#823 sig { params(indent: ::Integer, print_locs: T::Boolean, max_line_length: T.nilable(::Integer)).returns(::String) } def string(indent: T.unsafe(nil), print_locs: T.unsafe(nil), max_line_length: T.unsafe(nil)); end end @@ -796,7 +796,7 @@ class RBI::GroupNodesError < ::RBI::Error; end # Sorbet's misc. # -# source://rbi//lib/rbi/model.rb#1067 +# source://rbi//lib/rbi/model.rb#1069 class RBI::Helper < ::RBI::NodeWithComments include ::RBI::Indexable @@ -804,7 +804,7 @@ class RBI::Helper < ::RBI::NodeWithComments # # @return [Helper] a new instance of Helper # - # source://rbi//lib/rbi/model.rb#1072 + # source://rbi//lib/rbi/model.rb#1074 sig do params( name: ::String, @@ -831,13 +831,13 @@ class RBI::Helper < ::RBI::NodeWithComments # : String # - # source://rbi//lib/rbi/model.rb#1069 + # source://rbi//lib/rbi/model.rb#1071 sig { returns(::String) } def name; end # : -> String # - # source://rbi//lib/rbi/model.rb#1080 + # source://rbi//lib/rbi/model.rb#1082 sig { override.returns(::String) } def to_s; end end @@ -1355,7 +1355,7 @@ class RBI::Method < ::RBI::NodeWithComments def visibility=(_arg0); end end -# source://rbi//lib/rbi/model.rb#1111 +# source://rbi//lib/rbi/model.rb#1113 class RBI::MixesInClassMethods < ::RBI::Mixin include ::RBI::Indexable @@ -1363,7 +1363,7 @@ class RBI::MixesInClassMethods < ::RBI::Mixin # # @return [MixesInClassMethods] a new instance of MixesInClassMethods # - # source://rbi//lib/rbi/model.rb#1113 + # source://rbi//lib/rbi/model.rb#1115 sig do params( name: ::String, @@ -1391,7 +1391,7 @@ class RBI::MixesInClassMethods < ::RBI::Mixin # : -> String # - # source://rbi//lib/rbi/model.rb#1120 + # source://rbi//lib/rbi/model.rb#1122 sig { override.returns(::String) } def to_s; end end @@ -1554,7 +1554,7 @@ class RBI::Node # : (?out: (IO | StringIO), ?indent: Integer, ?print_locs: bool, ?max_line_length: Integer?) -> void # - # source://rbi//lib/rbi/printer.rb#828 + # source://rbi//lib/rbi/printer.rb#832 sig do params( out: T.any(::IO, ::StringIO), @@ -1567,7 +1567,7 @@ class RBI::Node # : (?out: (IO | StringIO), ?indent: Integer, ?print_locs: bool, ?positional_names: bool) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#1127 + # source://rbi//lib/rbi/rbs_printer.rb#1131 sig do params( out: T.any(::IO, ::StringIO), @@ -1580,7 +1580,7 @@ class RBI::Node # : (?indent: Integer, ?print_locs: bool, ?positional_names: bool) -> String # - # source://rbi//lib/rbi/rbs_printer.rb#1133 + # source://rbi//lib/rbi/rbs_printer.rb#1137 sig { params(indent: ::Integer, print_locs: T::Boolean, positional_names: T::Boolean).returns(::String) } def rbs_string(indent: T.unsafe(nil), print_locs: T.unsafe(nil), positional_names: T.unsafe(nil)); end @@ -1602,7 +1602,7 @@ class RBI::Node # : (?indent: Integer, ?print_locs: bool, ?max_line_length: Integer?) -> String # - # source://rbi//lib/rbi/printer.rb#834 + # source://rbi//lib/rbi/printer.rb#838 sig { params(indent: ::Integer, print_locs: T::Boolean, max_line_length: T.nilable(::Integer)).returns(::String) } def string(indent: T.unsafe(nil), print_locs: T.unsafe(nil), max_line_length: T.unsafe(nil)); end end @@ -1776,145 +1776,145 @@ class RBI::Parser end end -# source://rbi//lib/rbi/parser.rb#954 +# source://rbi//lib/rbi/parser.rb#970 class RBI::Parser::HeredocLocationVisitor < ::Prism::Visitor # : (Prism::Source source, Integer begin_offset, Integer end_offset) -> void # # @return [HeredocLocationVisitor] a new instance of HeredocLocationVisitor # - # source://rbi//lib/rbi/parser.rb#956 + # source://rbi//lib/rbi/parser.rb#972 sig { params(source: ::Prism::Source, begin_offset: ::Integer, end_offset: ::Integer).void } def initialize(source, begin_offset, end_offset); end # : -> Prism::Location # - # source://rbi//lib/rbi/parser.rb#985 + # source://rbi//lib/rbi/parser.rb#1003 sig { returns(::Prism::Location) } def location; end # : (Prism::InterpolatedStringNode node) -> void # - # source://rbi//lib/rbi/parser.rb#975 - sig { params(node: ::Prism::InterpolatedStringNode).void } + # source://rbi//lib/rbi/parser.rb#993 + sig { override.params(node: ::Prism::InterpolatedStringNode).void } def visit_interpolated_string_node(node); end # : (Prism::StringNode node) -> void # - # source://rbi//lib/rbi/parser.rb#965 - sig { params(node: ::Prism::StringNode).void } + # source://rbi//lib/rbi/parser.rb#982 + sig { override.params(node: ::Prism::StringNode).void } def visit_string_node(node); end private # : (Prism::StringNode | Prism::InterpolatedStringNode node) -> void # - # source://rbi//lib/rbi/parser.rb#996 + # source://rbi//lib/rbi/parser.rb#1014 sig { params(node: T.any(::Prism::InterpolatedStringNode, ::Prism::StringNode)).void } def handle_string_node(node); end end -# source://rbi//lib/rbi/parser.rb#871 +# source://rbi//lib/rbi/parser.rb#885 class RBI::Parser::SigBuilder < ::RBI::Parser::Visitor # : (String content, file: String) -> void # # @return [SigBuilder] a new instance of SigBuilder # - # source://rbi//lib/rbi/parser.rb#876 + # source://rbi//lib/rbi/parser.rb#890 sig { params(content: ::String, file: ::String).void } def initialize(content, file:); end # : Sig # - # source://rbi//lib/rbi/parser.rb#873 + # source://rbi//lib/rbi/parser.rb#887 sig { returns(::RBI::Sig) } def current; end # : (Prism::AssocNode node) -> void # - # source://rbi//lib/rbi/parser.rb#946 + # source://rbi//lib/rbi/parser.rb#962 sig { override.params(node: ::Prism::AssocNode).void } def visit_assoc_node(node); end # : (Prism::CallNode node) -> void # - # source://rbi//lib/rbi/parser.rb#884 + # source://rbi//lib/rbi/parser.rb#898 sig { override.params(node: ::Prism::CallNode).void } def visit_call_node(node); end end -# source://rbi//lib/rbi/parser.rb#154 +# source://rbi//lib/rbi/parser.rb#164 class RBI::Parser::TreeBuilder < ::RBI::Parser::Visitor # : (String source, comments: Array[Prism::Comment], file: String) -> void # # @return [TreeBuilder] a new instance of TreeBuilder # - # source://rbi//lib/rbi/parser.rb#162 + # source://rbi//lib/rbi/parser.rb#172 sig { params(source: ::String, comments: T::Array[::Prism::Comment], file: ::String).void } def initialize(source, comments:, file:); end # : Prism::Node? # - # source://rbi//lib/rbi/parser.rb#159 + # source://rbi//lib/rbi/parser.rb#169 sig { returns(T.nilable(::Prism::Node)) } def last_node; end # : Tree # - # source://rbi//lib/rbi/parser.rb#156 + # source://rbi//lib/rbi/parser.rb#166 sig { returns(::RBI::Tree) } def tree; end # : (Prism::CallNode node) -> void # - # source://rbi//lib/rbi/parser.rb#351 + # source://rbi//lib/rbi/parser.rb#361 sig { params(node: ::Prism::CallNode).void } def visit_call_node(node); end # : (Prism::ClassNode node) -> void # - # source://rbi//lib/rbi/parser.rb#175 + # source://rbi//lib/rbi/parser.rb#185 sig { override.params(node: ::Prism::ClassNode).void } def visit_class_node(node); end # : ((Prism::ConstantWriteNode | Prism::ConstantPathWriteNode) node) -> void # - # source://rbi//lib/rbi/parser.rb#226 + # source://rbi//lib/rbi/parser.rb#236 sig { params(node: T.any(::Prism::ConstantPathWriteNode, ::Prism::ConstantWriteNode)).void } def visit_constant_assign(node); end # : (Prism::ConstantPathWriteNode node) -> void # - # source://rbi//lib/rbi/parser.rb#219 + # source://rbi//lib/rbi/parser.rb#229 sig { override.params(node: ::Prism::ConstantPathWriteNode).void } def visit_constant_path_write_node(node); end # : (Prism::ConstantWriteNode node) -> void # - # source://rbi//lib/rbi/parser.rb#211 + # source://rbi//lib/rbi/parser.rb#221 sig { override.params(node: ::Prism::ConstantWriteNode).void } def visit_constant_write_node(node); end # : (Prism::DefNode node) -> void # - # source://rbi//lib/rbi/parser.rb#281 + # source://rbi//lib/rbi/parser.rb#291 sig { override.params(node: ::Prism::DefNode).void } def visit_def_node(node); end # : (Prism::ModuleNode node) -> void # - # source://rbi//lib/rbi/parser.rb#303 + # source://rbi//lib/rbi/parser.rb#313 sig { override.params(node: ::Prism::ModuleNode).void } def visit_module_node(node); end # : (Prism::ProgramNode node) -> void # - # source://rbi//lib/rbi/parser.rb#322 + # source://rbi//lib/rbi/parser.rb#332 sig { override.params(node: ::Prism::ProgramNode).void } def visit_program_node(node); end # : (Prism::SingletonClassNode node) -> void # - # source://rbi//lib/rbi/parser.rb#334 + # source://rbi//lib/rbi/parser.rb#344 sig { override.params(node: ::Prism::SingletonClassNode).void } def visit_singleton_class_node(node); end @@ -1923,7 +1923,7 @@ class RBI::Parser::TreeBuilder < ::RBI::Parser::Visitor # Collect all the remaining comments within a node # : (Prism::Node node) -> void # - # source://rbi//lib/rbi/parser.rb#525 + # source://rbi//lib/rbi/parser.rb#539 # Collect all the remaining comments within a node sig { params(node: ::Prism::Node).void } def collect_dangling_comments(node); end @@ -1931,62 +1931,62 @@ class RBI::Parser::TreeBuilder < ::RBI::Parser::Visitor # Collect all the remaining comments after visiting the tree # : -> void # - # source://rbi//lib/rbi/parser.rb#543 + # source://rbi//lib/rbi/parser.rb#557 # Collect all the remaining comments after visiting the tree sig { void } def collect_orphan_comments; end # : -> Tree # - # source://rbi//lib/rbi/parser.rb#566 + # source://rbi//lib/rbi/parser.rb#580 sig { returns(::RBI::Tree) } def current_scope; end # : -> Array[Sig] # - # source://rbi//lib/rbi/parser.rb#571 + # source://rbi//lib/rbi/parser.rb#585 sig { returns(T::Array[::RBI::Sig]) } def current_sigs; end # : (Array[Sig] sigs) -> Array[Comment] # - # source://rbi//lib/rbi/parser.rb#578 + # source://rbi//lib/rbi/parser.rb#592 sig { params(sigs: T::Array[::RBI::Sig]).returns(T::Array[::RBI::Comment]) } def detach_comments_from_sigs(sigs); end # : (Prism::Node node) -> Array[Comment] # - # source://rbi//lib/rbi/parser.rb#590 + # source://rbi//lib/rbi/parser.rb#604 sig { params(node: ::Prism::Node).returns(T::Array[::RBI::Comment]) } def node_comments(node); end # : (Prism::Comment node) -> Comment # - # source://rbi//lib/rbi/parser.rb#608 + # source://rbi//lib/rbi/parser.rb#622 sig { params(node: ::Prism::Comment).returns(::RBI::Comment) } def parse_comment(node); end # : (Prism::Node? node) -> Array[Param] # - # source://rbi//lib/rbi/parser.rb#647 + # source://rbi//lib/rbi/parser.rb#661 sig { params(node: T.nilable(::Prism::Node)).returns(T::Array[::RBI::Param]) } def parse_params(node); end # : (Prism::Node? node) -> Array[Arg] # - # source://rbi//lib/rbi/parser.rb#621 + # source://rbi//lib/rbi/parser.rb#635 sig { params(node: T.nilable(::Prism::Node)).returns(T::Array[::RBI::Arg]) } def parse_send_args(node); end # : (Prism::CallNode node) -> Sig # - # source://rbi//lib/rbi/parser.rb#721 + # source://rbi//lib/rbi/parser.rb#735 sig { params(node: ::Prism::CallNode).returns(::RBI::Sig) } def parse_sig(node); end # : ((Prism::ConstantWriteNode | Prism::ConstantPathWriteNode) node) -> Struct? # - # source://rbi//lib/rbi/parser.rb#730 + # source://rbi//lib/rbi/parser.rb#744 sig do params( node: T.any(::Prism::ConstantPathWriteNode, ::Prism::ConstantWriteNode) @@ -1996,25 +1996,25 @@ class RBI::Parser::TreeBuilder < ::RBI::Parser::Visitor # : (Prism::CallNode send) -> void # - # source://rbi//lib/rbi/parser.rb#778 + # source://rbi//lib/rbi/parser.rb#792 sig { params(send: ::Prism::CallNode).void } def parse_tstruct_field(send); end # : (String name, Prism::Node node) -> Visibility # - # source://rbi//lib/rbi/parser.rb#815 + # source://rbi//lib/rbi/parser.rb#829 sig { params(name: ::String, node: ::Prism::Node).returns(::RBI::Visibility) } def parse_visibility(name, node); end # : -> void # - # source://rbi//lib/rbi/parser.rb#829 + # source://rbi//lib/rbi/parser.rb#843 sig { void } def separate_header_comments; end # : -> void # - # source://rbi//lib/rbi/parser.rb#839 + # source://rbi//lib/rbi/parser.rb#853 sig { void } def set_root_tree_loc; end @@ -2022,7 +2022,7 @@ class RBI::Parser::TreeBuilder < ::RBI::Parser::Visitor # # @return [Boolean] # - # source://rbi//lib/rbi/parser.rb#858 + # source://rbi//lib/rbi/parser.rb#872 sig { params(node: T.nilable(::Prism::Node)).returns(T::Boolean) } def t_enum_value?(node); end @@ -2030,7 +2030,7 @@ class RBI::Parser::TreeBuilder < ::RBI::Parser::Visitor # # @return [Boolean] # - # source://rbi//lib/rbi/parser.rb#853 + # source://rbi//lib/rbi/parser.rb#867 sig { params(node: T.nilable(::Prism::Node)).returns(T::Boolean) } def type_variable_definition?(node); end end @@ -2070,6 +2070,22 @@ class RBI::Parser::Visitor < ::Prism::Visitor # source://rbi//lib/rbi/parser.rb#138 sig { params(node: ::Prism::Node).returns(::String) } def node_string!(node); end + + # : (Prism::Node? node) -> bool + # + # @return [Boolean] + # + # source://rbi//lib/rbi/parser.rb#154 + sig { params(node: T.nilable(::Prism::Node)).returns(T::Boolean) } + def self?(node); end + + # : (Prism::Node? node) -> bool + # + # @return [Boolean] + # + # source://rbi//lib/rbi/parser.rb#159 + sig { params(node: T.nilable(::Prism::Node)).returns(T::Boolean) } + def t_sig_without_runtime?(node); end end # source://rbi//lib/rbi/printer.rb#7 @@ -2218,7 +2234,7 @@ class RBI::Printer < ::RBI::Visitor # : (Sig node) -> void # - # source://rbi//lib/rbi/printer.rb#734 + # source://rbi//lib/rbi/printer.rb#736 sig { params(node: ::RBI::Sig).void } def print_sig_as_block(node); end @@ -2236,7 +2252,7 @@ class RBI::Printer < ::RBI::Visitor # : (Sig node) -> Array[String] # - # source://rbi//lib/rbi/printer.rb#792 + # source://rbi//lib/rbi/printer.rb#796 sig { params(node: ::RBI::Sig).returns(T::Array[::String]) } def sig_modifiers(node); end @@ -2806,7 +2822,7 @@ class RBI::RBSPrinter < ::RBI::Visitor # : (RBI::Method node, Sig sig) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#384 + # source://rbi//lib/rbi/rbs_printer.rb#388 sig { params(node: ::RBI::Method, sig: ::RBI::Sig).void } def print_method_sig(node, sig); end @@ -2842,7 +2858,7 @@ class RBI::RBSPrinter < ::RBI::Visitor # : (Arg node) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#581 + # source://rbi//lib/rbi/rbs_printer.rb#585 sig { override.params(node: ::RBI::Arg).void } def visit_arg(node); end @@ -2878,7 +2894,7 @@ class RBI::RBSPrinter < ::RBI::Visitor # : (BlockParam node) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#513 + # source://rbi//lib/rbi/rbs_printer.rb#517 sig { override.params(node: ::RBI::BlockParam).void } def visit_block_param(node); end @@ -2896,7 +2912,7 @@ class RBI::RBSPrinter < ::RBI::Visitor # : (ConflictTree node) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#717 + # source://rbi//lib/rbi/rbs_printer.rb#721 sig { override.params(node: ::RBI::ConflictTree).void } def visit_conflict_tree(node); end @@ -2908,7 +2924,7 @@ class RBI::RBSPrinter < ::RBI::Visitor # : (Extend node) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#525 + # source://rbi//lib/rbi/rbs_printer.rb#529 sig { override.params(node: ::RBI::Extend).void } def visit_extend(node); end @@ -2920,43 +2936,43 @@ class RBI::RBSPrinter < ::RBI::Visitor # : (Group node) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#690 + # source://rbi//lib/rbi/rbs_printer.rb#694 sig { override.params(node: ::RBI::Group).void } def visit_group(node); end # : (Helper node) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#678 + # source://rbi//lib/rbi/rbs_printer.rb#682 sig { override.params(node: ::RBI::Helper).void } def visit_helper(node); end # : (Include node) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#519 + # source://rbi//lib/rbi/rbs_printer.rb#523 sig { override.params(node: ::RBI::Include).void } def visit_include(node); end # : (KwArg node) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#587 + # source://rbi//lib/rbi/rbs_printer.rb#591 sig { override.params(node: ::RBI::KwArg).void } def visit_kw_arg(node); end # : (KwOptParam node) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#501 + # source://rbi//lib/rbi/rbs_printer.rb#505 sig { override.params(node: ::RBI::KwOptParam).void } def visit_kw_opt_param(node); end # : (KwParam node) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#495 + # source://rbi//lib/rbi/rbs_printer.rb#499 sig { override.params(node: ::RBI::KwParam).void } def visit_kw_param(node); end # : (KwRestParam node) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#507 + # source://rbi//lib/rbi/rbs_printer.rb#511 sig { override.params(node: ::RBI::KwRestParam).void } def visit_kw_rest_param(node); end @@ -2968,13 +2984,13 @@ class RBI::RBSPrinter < ::RBI::Visitor # : (MixesInClassMethods node) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#684 + # source://rbi//lib/rbi/rbs_printer.rb#688 sig { override.params(node: ::RBI::MixesInClassMethods).void } def visit_mixes_in_class_methods(node); end # : (Mixin node) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#530 + # source://rbi//lib/rbi/rbs_printer.rb#534 sig { params(node: ::RBI::Mixin).void } def visit_mixin(node); end @@ -2986,43 +3002,43 @@ class RBI::RBSPrinter < ::RBI::Visitor # : (OptParam node) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#475 + # source://rbi//lib/rbi/rbs_printer.rb#479 sig { override.params(node: ::RBI::OptParam).void } def visit_opt_param(node); end # : (Private node) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#560 + # source://rbi//lib/rbi/rbs_printer.rb#564 sig { override.params(node: ::RBI::Private).void } def visit_private(node); end # : (Protected node) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#554 + # source://rbi//lib/rbi/rbs_printer.rb#558 sig { override.params(node: ::RBI::Protected).void } def visit_protected(node); end # : (Public node) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#548 + # source://rbi//lib/rbi/rbs_printer.rb#552 sig { override.params(node: ::RBI::Public).void } def visit_public(node); end # : (ReqParam node) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#465 + # source://rbi//lib/rbi/rbs_printer.rb#469 sig { override.params(node: ::RBI::ReqParam).void } def visit_req_param(node); end # : (RequiresAncestor node) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#711 + # source://rbi//lib/rbi/rbs_printer.rb#715 sig { override.params(node: ::RBI::RequiresAncestor).void } def visit_requires_ancestor(node); end # : (RestParam node) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#485 + # source://rbi//lib/rbi/rbs_printer.rb#489 sig { override.params(node: ::RBI::RestParam).void } def visit_rest_param(node); end @@ -3040,7 +3056,7 @@ class RBI::RBSPrinter < ::RBI::Visitor # : (ScopeConflict node) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#727 + # source://rbi//lib/rbi/rbs_printer.rb#731 sig { override.params(node: ::RBI::ScopeConflict).void } def visit_scope_conflict(node); end @@ -3052,19 +3068,19 @@ class RBI::RBSPrinter < ::RBI::Visitor # : (Send node) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#575 + # source://rbi//lib/rbi/rbs_printer.rb#579 sig { override.params(node: ::RBI::Send).void } def visit_send(node); end # : (Sig node) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#446 + # source://rbi//lib/rbi/rbs_printer.rb#450 sig { params(node: ::RBI::Sig).void } def visit_sig(node); end # : (SigParam node) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#459 + # source://rbi//lib/rbi/rbs_printer.rb#463 sig { params(node: ::RBI::SigParam).void } def visit_sig_param(node); end @@ -3082,19 +3098,19 @@ class RBI::RBSPrinter < ::RBI::Visitor # : (TEnum node) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#644 + # source://rbi//lib/rbi/rbs_printer.rb#648 sig { override.params(node: ::RBI::TEnum).void } def visit_tenum(node); end # : (TEnumBlock node) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#650 + # source://rbi//lib/rbi/rbs_printer.rb#654 sig { override.params(node: ::RBI::TEnumBlock).void } def visit_tenum_block(node); end # : (TEnumValue node) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#656 + # source://rbi//lib/rbi/rbs_printer.rb#660 sig { override.params(node: ::RBI::TEnumValue).void } def visit_tenum_value(node); end @@ -3106,37 +3122,37 @@ class RBI::RBSPrinter < ::RBI::Visitor # : (TStruct node) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#593 + # source://rbi//lib/rbi/rbs_printer.rb#597 sig { override.params(node: ::RBI::TStruct).void } def visit_tstruct(node); end # : (TStructConst node) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#628 + # source://rbi//lib/rbi/rbs_printer.rb#632 sig { override.params(node: ::RBI::TStructConst).void } def visit_tstruct_const(node); end # : (TStructProp node) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#636 + # source://rbi//lib/rbi/rbs_printer.rb#640 sig { override.params(node: ::RBI::TStructProp).void } def visit_tstruct_prop(node); end # : (TypeMember node) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#672 + # source://rbi//lib/rbi/rbs_printer.rb#676 sig { override.params(node: ::RBI::TypeMember).void } def visit_type_member(node); end # : (Visibility node) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#565 + # source://rbi//lib/rbi/rbs_printer.rb#569 sig { params(node: ::RBI::Visibility).void } def visit_visibility(node); end # : (VisibilityGroup node) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#697 + # source://rbi//lib/rbi/rbs_printer.rb#701 sig { override.params(node: ::RBI::VisibilityGroup).void } def visit_visibility_group(node); end @@ -3146,7 +3162,7 @@ class RBI::RBSPrinter < ::RBI::Visitor # # @return [Boolean] # - # source://rbi//lib/rbi/rbs_printer.rb#830 + # source://rbi//lib/rbi/rbs_printer.rb#834 sig { params(node: ::RBI::Node).returns(T::Boolean) } def oneline?(node); end @@ -3155,7 +3171,7 @@ class RBI::RBSPrinter < ::RBI::Visitor # Returns `nil` is the string is not a `T.let`. # : (String? code) -> String? # - # source://rbi//lib/rbi/rbs_printer.rb#864 + # source://rbi//lib/rbi/rbs_printer.rb#868 # Parse a string containing a `T.let(x, X)` and extract the type # Returns `nil` is the string is not a `T.let`. sig { params(code: T.nilable(::String)).returns(T.nilable(::String)) } @@ -3163,37 +3179,37 @@ class RBI::RBSPrinter < ::RBI::Visitor # : ((Type | String) type) -> Type # - # source://rbi//lib/rbi/rbs_printer.rb#852 + # source://rbi//lib/rbi/rbs_printer.rb#856 sig { params(type: T.any(::RBI::Type, ::String)).returns(::RBI::Type) } def parse_type(type); end # : (Node node) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#743 + # source://rbi//lib/rbi/rbs_printer.rb#747 sig { params(node: ::RBI::Node).void } def print_blank_line_before(node); end # : (Node node) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#762 + # source://rbi//lib/rbi/rbs_printer.rb#766 sig { params(node: ::RBI::Node).void } def print_loc(node); end # : (Param node, last: bool) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#804 + # source://rbi//lib/rbi/rbs_printer.rb#808 sig { params(node: ::RBI::Param, last: T::Boolean).void } def print_param_comment_leading_space(node, last:); end # : (Method node, SigParam param) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#768 + # source://rbi//lib/rbi/rbs_printer.rb#772 sig { params(node: ::RBI::Method, param: ::RBI::SigParam).void } def print_sig_param(node, param); end # : (SigParam node, last: bool) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#822 + # source://rbi//lib/rbi/rbs_printer.rb#826 sig { params(node: ::RBI::SigParam, last: T::Boolean).void } def print_sig_param_comment_leading_space(node, last:); end end @@ -3228,7 +3244,7 @@ class RBI::ReqParam < ::RBI::Param def ==(other); end end -# source://rbi//lib/rbi/model.rb#1125 +# source://rbi//lib/rbi/model.rb#1127 class RBI::RequiresAncestor < ::RBI::NodeWithComments include ::RBI::Indexable @@ -3236,7 +3252,7 @@ class RBI::RequiresAncestor < ::RBI::NodeWithComments # # @return [RequiresAncestor] a new instance of RequiresAncestor # - # source://rbi//lib/rbi/model.rb#1130 + # source://rbi//lib/rbi/model.rb#1132 sig { params(name: ::String, loc: T.nilable(::RBI::Loc), comments: T::Array[::RBI::Comment]).void } def initialize(name, loc: T.unsafe(nil), comments: T.unsafe(nil)); end @@ -3248,13 +3264,13 @@ class RBI::RequiresAncestor < ::RBI::NodeWithComments # : String # - # source://rbi//lib/rbi/model.rb#1127 + # source://rbi//lib/rbi/model.rb#1129 sig { returns(::String) } def name; end # : -> String # - # source://rbi//lib/rbi/model.rb#1137 + # source://rbi//lib/rbi/model.rb#1139 sig { override.returns(::String) } def to_s; end end @@ -3741,7 +3757,7 @@ class RBI::Rewriters::Merge::Conflict < ::T::Struct def to_s; end class << self - # source://sorbet-runtime/0.5.12026/lib/types/struct.rb#13 + # source://sorbet-runtime/0.5.12079/lib/types/struct.rb#13 def inherited(s); end end end @@ -4086,7 +4102,7 @@ class RBI::Rewriters::RemoveKnownDefinitions::Operation < ::T::Struct def to_s; end class << self - # source://sorbet-runtime/0.5.12026/lib/types/struct.rb#13 + # source://sorbet-runtime/0.5.12079/lib/types/struct.rb#13 def inherited(s); end end end @@ -4326,7 +4342,7 @@ end # # source://rbi//lib/rbi/model.rb#848 class RBI::Sig < ::RBI::NodeWithComments - # : (?params: Array[SigParam], ?return_type: (Type | String), ?is_abstract: bool, ?is_override: bool, ?is_overridable: bool, ?is_final: bool, ?allow_incompatible_override: bool, ?type_params: Array[String], ?checked: Symbol?, ?loc: Loc?, ?comments: Array[Comment]) ?{ (Sig node) -> void } -> void + # : (?params: Array[SigParam], ?return_type: (Type | String), ?is_abstract: bool, ?is_override: bool, ?is_overridable: bool, ?is_final: bool, ?allow_incompatible_override: bool, ?without_runtime: bool, ?type_params: Array[String], ?checked: Symbol?, ?loc: Loc?, ?comments: Array[Comment]) ?{ (Sig node) -> void } -> void # # @return [Sig] a new instance of Sig # @@ -4340,6 +4356,7 @@ class RBI::Sig < ::RBI::NodeWithComments is_overridable: T::Boolean, is_final: T::Boolean, allow_incompatible_override: T::Boolean, + without_runtime: T::Boolean, type_params: T::Array[::String], checked: T.nilable(::Symbol), loc: T.nilable(::RBI::Loc), @@ -4347,23 +4364,23 @@ class RBI::Sig < ::RBI::NodeWithComments block: T.nilable(T.proc.params(node: ::RBI::Sig).void) ).void end - def initialize(params: T.unsafe(nil), return_type: T.unsafe(nil), is_abstract: T.unsafe(nil), is_override: T.unsafe(nil), is_overridable: T.unsafe(nil), is_final: T.unsafe(nil), allow_incompatible_override: T.unsafe(nil), type_params: T.unsafe(nil), checked: T.unsafe(nil), loc: T.unsafe(nil), comments: T.unsafe(nil), &block); end + def initialize(params: T.unsafe(nil), return_type: T.unsafe(nil), is_abstract: T.unsafe(nil), is_override: T.unsafe(nil), is_overridable: T.unsafe(nil), is_final: T.unsafe(nil), allow_incompatible_override: T.unsafe(nil), without_runtime: T.unsafe(nil), type_params: T.unsafe(nil), checked: T.unsafe(nil), loc: T.unsafe(nil), comments: T.unsafe(nil), &block); end # : (SigParam param) -> void # - # source://rbi//lib/rbi/model.rb#893 + # source://rbi//lib/rbi/model.rb#895 sig { params(param: ::RBI::SigParam).void } def <<(param); end # : (Object other) -> bool # - # source://rbi//lib/rbi/model.rb#903 + # source://rbi//lib/rbi/model.rb#905 sig { params(other: ::Object).returns(T::Boolean) } def ==(other); end # : (String name, (Type | String) type) -> void # - # source://rbi//lib/rbi/model.rb#898 + # source://rbi//lib/rbi/model.rb#900 sig { params(name: ::String, type: T.any(::RBI::Type, ::String)).void } def add_param(name, type); end @@ -4462,15 +4479,27 @@ class RBI::Sig < ::RBI::NodeWithComments # source://rbi//lib/rbi/model.rb#859 sig { returns(T::Array[::String]) } def type_params; end + + # : bool + # + # source://rbi//lib/rbi/model.rb#856 + # @return [Boolean] + def without_runtime; end + + # : bool + # + # source://rbi//lib/rbi/model.rb#856 + # @return [Boolean] + def without_runtime=(_arg0); end end -# source://rbi//lib/rbi/model.rb#912 +# source://rbi//lib/rbi/model.rb#914 class RBI::SigParam < ::RBI::NodeWithComments # : (String name, (Type | String) type, ?loc: Loc?, ?comments: Array[Comment]) ?{ (SigParam node) -> void } -> void # # @return [SigParam] a new instance of SigParam # - # source://rbi//lib/rbi/model.rb#920 + # source://rbi//lib/rbi/model.rb#922 sig do params( name: ::String, @@ -4484,19 +4513,19 @@ class RBI::SigParam < ::RBI::NodeWithComments # : (Object other) -> bool # - # source://rbi//lib/rbi/model.rb#928 + # source://rbi//lib/rbi/model.rb#930 sig { params(other: ::Object).returns(T::Boolean) } def ==(other); end # : String # - # source://rbi//lib/rbi/model.rb#914 + # source://rbi//lib/rbi/model.rb#916 sig { returns(::String) } def name; end # : (Type | String) # - # source://rbi//lib/rbi/model.rb#917 + # source://rbi//lib/rbi/model.rb#919 sig { returns(T.any(::RBI::Type, ::String)) } def type; end end @@ -4596,13 +4625,13 @@ end # Sorbet's T::Enum # -# source://rbi//lib/rbi/model.rb#1014 +# source://rbi//lib/rbi/model.rb#1016 class RBI::TEnum < ::RBI::Class # : (String name, ?loc: Loc?, ?comments: Array[Comment]) ?{ (TEnum klass) -> void } -> void # # @return [TEnum] a new instance of TEnum # - # source://rbi//lib/rbi/model.rb#1016 + # source://rbi//lib/rbi/model.rb#1018 sig do params( name: ::String, @@ -4614,13 +4643,13 @@ class RBI::TEnum < ::RBI::Class def initialize(name, loc: T.unsafe(nil), comments: T.unsafe(nil), &block); end end -# source://rbi//lib/rbi/model.rb#1022 +# source://rbi//lib/rbi/model.rb#1024 class RBI::TEnumBlock < ::RBI::Scope # : (?loc: Loc?, ?comments: Array[Comment]) ?{ (TEnumBlock node) -> void } -> void # # @return [TEnumBlock] a new instance of TEnumBlock # - # source://rbi//lib/rbi/model.rb#1024 + # source://rbi//lib/rbi/model.rb#1026 sig do params( loc: T.nilable(::RBI::Loc), @@ -4632,7 +4661,7 @@ class RBI::TEnumBlock < ::RBI::Scope # : -> String # - # source://rbi//lib/rbi/model.rb#1031 + # source://rbi//lib/rbi/model.rb#1033 sig { override.returns(::String) } def fully_qualified_name; end @@ -4644,12 +4673,12 @@ class RBI::TEnumBlock < ::RBI::Scope # : -> String # - # source://rbi//lib/rbi/model.rb#1037 + # source://rbi//lib/rbi/model.rb#1039 sig { override.returns(::String) } def to_s; end end -# source://rbi//lib/rbi/model.rb#1042 +# source://rbi//lib/rbi/model.rb#1044 class RBI::TEnumValue < ::RBI::NodeWithComments include ::RBI::Indexable @@ -4657,7 +4686,7 @@ class RBI::TEnumValue < ::RBI::NodeWithComments # # @return [TEnumValue] a new instance of TEnumValue # - # source://rbi//lib/rbi/model.rb#1047 + # source://rbi//lib/rbi/model.rb#1049 sig do params( name: ::String, @@ -4670,7 +4699,7 @@ class RBI::TEnumValue < ::RBI::NodeWithComments # : -> String # - # source://rbi//lib/rbi/model.rb#1054 + # source://rbi//lib/rbi/model.rb#1056 sig { returns(::String) } def fully_qualified_name; end @@ -4682,26 +4711,26 @@ class RBI::TEnumValue < ::RBI::NodeWithComments # : String # - # source://rbi//lib/rbi/model.rb#1044 + # source://rbi//lib/rbi/model.rb#1046 sig { returns(::String) } def name; end # : -> String # - # source://rbi//lib/rbi/model.rb#1060 + # source://rbi//lib/rbi/model.rb#1062 sig { override.returns(::String) } def to_s; end end # Sorbet's T::Struct # -# source://rbi//lib/rbi/model.rb#935 +# source://rbi//lib/rbi/model.rb#937 class RBI::TStruct < ::RBI::Class # : (String name, ?loc: Loc?, ?comments: Array[Comment]) ?{ (TStruct klass) -> void } -> void # # @return [TStruct] a new instance of TStruct # - # source://rbi//lib/rbi/model.rb#937 + # source://rbi//lib/rbi/model.rb#939 sig do params( name: ::String, @@ -4713,7 +4742,7 @@ class RBI::TStruct < ::RBI::Class def initialize(name, loc: T.unsafe(nil), comments: T.unsafe(nil), &block); end end -# source://rbi//lib/rbi/model.rb#970 +# source://rbi//lib/rbi/model.rb#972 class RBI::TStructConst < ::RBI::TStructField include ::RBI::Indexable @@ -4721,7 +4750,7 @@ class RBI::TStructConst < ::RBI::TStructField # # @return [TStructConst] a new instance of TStructConst # - # source://rbi//lib/rbi/model.rb#972 + # source://rbi//lib/rbi/model.rb#974 sig do params( name: ::String, @@ -4744,7 +4773,7 @@ class RBI::TStructConst < ::RBI::TStructField # : -> Array[String] # - # source://rbi//lib/rbi/model.rb#979 + # source://rbi//lib/rbi/model.rb#981 sig { override.returns(T::Array[::String]) } def fully_qualified_names; end @@ -4756,14 +4785,14 @@ class RBI::TStructConst < ::RBI::TStructField # : -> String # - # source://rbi//lib/rbi/model.rb#986 + # source://rbi//lib/rbi/model.rb#988 sig { override.returns(::String) } def to_s; end end # @abstract It cannot be directly instantiated. Subclasses must implement the `abstract` methods below. # -# source://rbi//lib/rbi/model.rb#943 +# source://rbi//lib/rbi/model.rb#945 class RBI::TStructField < ::RBI::NodeWithComments abstract! @@ -4771,7 +4800,7 @@ class RBI::TStructField < ::RBI::NodeWithComments # # @return [TStructField] a new instance of TStructField # - # source://rbi//lib/rbi/model.rb#959 + # source://rbi//lib/rbi/model.rb#961 sig do params( name: ::String, @@ -4793,48 +4822,48 @@ class RBI::TStructField < ::RBI::NodeWithComments # : String? # - # source://rbi//lib/rbi/model.rb#956 + # source://rbi//lib/rbi/model.rb#958 sig { returns(T.nilable(::String)) } def default; end # : String? # - # source://rbi//lib/rbi/model.rb#956 + # source://rbi//lib/rbi/model.rb#958 # @return [String, nil] def default=(_arg0); end # @abstract # - # source://rbi//lib/rbi/model.rb#967 + # source://rbi//lib/rbi/model.rb#969 sig { abstract.returns(T::Array[::String]) } def fully_qualified_names; end # : String # - # source://rbi//lib/rbi/model.rb#950 + # source://rbi//lib/rbi/model.rb#952 sig { returns(::String) } def name; end # : String # - # source://rbi//lib/rbi/model.rb#950 + # source://rbi//lib/rbi/model.rb#952 # @return [String] def name=(_arg0); end # : (Type | String) # - # source://rbi//lib/rbi/model.rb#953 + # source://rbi//lib/rbi/model.rb#955 sig { returns(T.any(::RBI::Type, ::String)) } def type; end # : (Type | String) # - # source://rbi//lib/rbi/model.rb#953 + # source://rbi//lib/rbi/model.rb#955 # @return [Type, String] def type=(_arg0); end end -# source://rbi//lib/rbi/model.rb#991 +# source://rbi//lib/rbi/model.rb#993 class RBI::TStructProp < ::RBI::TStructField include ::RBI::Indexable @@ -4842,7 +4871,7 @@ class RBI::TStructProp < ::RBI::TStructField # # @return [TStructProp] a new instance of TStructProp # - # source://rbi//lib/rbi/model.rb#993 + # source://rbi//lib/rbi/model.rb#995 sig do params( name: ::String, @@ -4865,7 +4894,7 @@ class RBI::TStructProp < ::RBI::TStructField # : -> Array[String] # - # source://rbi//lib/rbi/model.rb#1000 + # source://rbi//lib/rbi/model.rb#1002 sig { override.returns(T::Array[::String]) } def fully_qualified_names; end @@ -4877,7 +4906,7 @@ class RBI::TStructProp < ::RBI::TStructField # : -> String # - # source://rbi//lib/rbi/model.rb#1007 + # source://rbi//lib/rbi/model.rb#1009 sig { override.returns(::String) } def to_s; end end @@ -5183,7 +5212,7 @@ class RBI::Type # : -> String # - # source://rbi//lib/rbi/rbs_printer.rb#1142 + # source://rbi//lib/rbi/rbs_printer.rb#1146 sig { returns(::String) } def rbs_string; end @@ -6115,7 +6144,7 @@ class RBI::Type::Void < ::RBI::Type def to_rbi; end end -# source://rbi//lib/rbi/model.rb#1085 +# source://rbi//lib/rbi/model.rb#1087 class RBI::TypeMember < ::RBI::NodeWithComments include ::RBI::Indexable @@ -6123,7 +6152,7 @@ class RBI::TypeMember < ::RBI::NodeWithComments # # @return [TypeMember] a new instance of TypeMember # - # source://rbi//lib/rbi/model.rb#1090 + # source://rbi//lib/rbi/model.rb#1092 sig do params( name: ::String, @@ -6137,7 +6166,7 @@ class RBI::TypeMember < ::RBI::NodeWithComments # : -> String # - # source://rbi//lib/rbi/model.rb#1098 + # source://rbi//lib/rbi/model.rb#1100 sig { returns(::String) } def fully_qualified_name; end @@ -6149,150 +6178,150 @@ class RBI::TypeMember < ::RBI::NodeWithComments # : String # - # source://rbi//lib/rbi/model.rb#1087 + # source://rbi//lib/rbi/model.rb#1089 sig { returns(::String) } def name; end # : -> String # - # source://rbi//lib/rbi/model.rb#1106 + # source://rbi//lib/rbi/model.rb#1108 sig { override.returns(::String) } def to_s; end # : String # - # source://rbi//lib/rbi/model.rb#1087 + # source://rbi//lib/rbi/model.rb#1089 # @return [String] def value; end end -# source://rbi//lib/rbi/rbs_printer.rb#885 +# source://rbi//lib/rbi/rbs_printer.rb#889 class RBI::TypePrinter # : -> void # # @return [TypePrinter] a new instance of TypePrinter # - # source://rbi//lib/rbi/rbs_printer.rb#890 + # source://rbi//lib/rbi/rbs_printer.rb#894 sig { void } def initialize; end # : String # - # source://rbi//lib/rbi/rbs_printer.rb#887 + # source://rbi//lib/rbi/rbs_printer.rb#891 sig { returns(::String) } def string; end # : (Type node) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#895 + # source://rbi//lib/rbi/rbs_printer.rb#899 sig { params(node: ::RBI::Type).void } def visit(node); end # : (Type::All type) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#1010 + # source://rbi//lib/rbi/rbs_printer.rb#1014 sig { params(type: ::RBI::Type::All).void } def visit_all(type); end # : (Type::Any type) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#1020 + # source://rbi//lib/rbi/rbs_printer.rb#1024 sig { params(type: ::RBI::Type::Any).void } def visit_any(type); end # : (Type::Anything type) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#960 + # source://rbi//lib/rbi/rbs_printer.rb#964 sig { params(type: ::RBI::Type::Anything).void } def visit_anything(type); end # : (Type::AttachedClass type) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#985 + # source://rbi//lib/rbi/rbs_printer.rb#989 sig { params(type: ::RBI::Type::AttachedClass).void } def visit_attached_class(type); end # : (Type::Boolean type) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#944 + # source://rbi//lib/rbi/rbs_printer.rb#948 sig { params(type: ::RBI::Type::Boolean).void } def visit_boolean(type); end # : (Type::Class type) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#1087 + # source://rbi//lib/rbi/rbs_printer.rb#1091 sig { params(type: ::RBI::Type::Class).void } def visit_class(type); end # : (Type::ClassOf type) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#1003 + # source://rbi//lib/rbi/rbs_printer.rb#1007 sig { params(type: ::RBI::Type::ClassOf).void } def visit_class_of(type); end # : (Type::Generic type) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#949 + # source://rbi//lib/rbi/rbs_printer.rb#953 sig { params(type: ::RBI::Type::Generic).void } def visit_generic(type); end # : (Type::Nilable type) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#990 + # source://rbi//lib/rbi/rbs_printer.rb#994 sig { params(type: ::RBI::Type::Nilable).void } def visit_nilable(type); end # : (Type::NoReturn type) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#970 + # source://rbi//lib/rbi/rbs_printer.rb#974 sig { params(type: ::RBI::Type::NoReturn).void } def visit_no_return(type); end # : (Type::Proc type) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#1060 + # source://rbi//lib/rbi/rbs_printer.rb#1064 sig { params(type: ::RBI::Type::Proc).void } def visit_proc(type); end # : (Type::SelfType type) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#980 + # source://rbi//lib/rbi/rbs_printer.rb#984 sig { params(type: ::RBI::Type::SelfType).void } def visit_self_type(type); end # : (Type::Shape type) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#1040 + # source://rbi//lib/rbi/rbs_printer.rb#1044 sig { params(type: ::RBI::Type::Shape).void } def visit_shape(type); end # : (Type::Simple type) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#939 + # source://rbi//lib/rbi/rbs_printer.rb#943 sig { params(type: ::RBI::Type::Simple).void } def visit_simple(type); end # : (Type::Tuple type) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#1030 + # source://rbi//lib/rbi/rbs_printer.rb#1034 sig { params(type: ::RBI::Type::Tuple).void } def visit_tuple(type); end # : (Type::TypeParameter type) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#1082 + # source://rbi//lib/rbi/rbs_printer.rb#1086 sig { params(type: ::RBI::Type::TypeParameter).void } def visit_type_parameter(type); end # : (Type::Untyped type) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#975 + # source://rbi//lib/rbi/rbs_printer.rb#979 sig { params(type: ::RBI::Type::Untyped).void } def visit_untyped(type); end # : (Type::Void type) -> void # - # source://rbi//lib/rbi/rbs_printer.rb#965 + # source://rbi//lib/rbi/rbs_printer.rb#969 sig { params(type: ::RBI::Type::Void).void } def visit_void(type); end @@ -6300,7 +6329,7 @@ class RBI::TypePrinter # : (String type_name) -> String # - # source://rbi//lib/rbi/rbs_printer.rb#1096 + # source://rbi//lib/rbi/rbs_printer.rb#1100 sig { params(type_name: ::String).returns(::String) } def translate_t_type(type_name); end end diff --git a/Library/Homebrew/sorbet/rbi/gems/rbs@3.9.2.rbi b/Library/Homebrew/sorbet/rbi/gems/rbs@3.9.4.rbi similarity index 100% rename from Library/Homebrew/sorbet/rbi/gems/rbs@3.9.2.rbi rename to Library/Homebrew/sorbet/rbi/gems/rbs@3.9.4.rbi diff --git a/Library/Homebrew/sorbet/rbi/gems/rubocop@1.75.5.rbi b/Library/Homebrew/sorbet/rbi/gems/rubocop@1.75.6.rbi similarity index 99% rename from Library/Homebrew/sorbet/rbi/gems/rubocop@1.75.5.rbi rename to Library/Homebrew/sorbet/rbi/gems/rubocop@1.75.6.rbi index a434735a02..7f307d4617 100644 --- a/Library/Homebrew/sorbet/rbi/gems/rubocop@1.75.5.rbi +++ b/Library/Homebrew/sorbet/rbi/gems/rubocop@1.75.6.rbi @@ -16291,64 +16291,64 @@ class RuboCop::Cop::Layout::SpaceInsideArrayLiteralBrackets < ::RuboCop::Cop::Ba private - # source://rubocop//lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb#118 + # source://rubocop//lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb#119 def array_brackets(node); end - # source://rubocop//lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb#104 + # source://rubocop//lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb#105 def autocorrect(corrector, node); end - # source://rubocop//lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb#226 + # source://rubocop//lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb#227 def compact(corrector, bracket, side); end - # source://rubocop//lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb#212 + # source://rubocop//lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb#213 def compact_corrections(corrector, node, left, right); end - # source://rubocop//lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb#204 + # source://rubocop//lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb#205 def compact_offense(node, token, side: T.unsafe(nil)); end - # source://rubocop//lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb#166 + # source://rubocop//lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb#167 def compact_offenses(node, left, right, start_ok, end_ok); end - # source://rubocop//lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb#127 + # source://rubocop//lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb#128 def empty_config; end # @return [Boolean] # - # source://rubocop//lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb#135 + # source://rubocop//lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb#136 def end_has_own_line?(token); end - # source://rubocop//lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb#142 + # source://rubocop//lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb#143 def index_for(node, token); end - # source://rubocop//lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb#150 + # source://rubocop//lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb#151 def issue_offenses(node, left, right, start_ok, end_ok); end - # source://rubocop//lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb#146 + # source://rubocop//lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb#147 def line_and_column_for(token); end # @return [Boolean] # - # source://rubocop//lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb#187 + # source://rubocop//lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb#188 def multi_dimensional_array?(node, token, side: T.unsafe(nil)); end # @return [Boolean] # - # source://rubocop//lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb#198 + # source://rubocop//lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb#199 def next_to_bracket?(token, side: T.unsafe(nil)); end # @return [Boolean] # - # source://rubocop//lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb#162 + # source://rubocop//lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb#163 def next_to_comment?(node, token); end # @return [Boolean] # - # source://rubocop//lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb#131 + # source://rubocop//lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb#132 def next_to_newline?(node, token); end # @return [Boolean] # - # source://rubocop//lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb#179 + # source://rubocop//lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb#180 def qualifies_for_compact?(node, token, side: T.unsafe(nil)); end end @@ -19155,81 +19155,110 @@ RuboCop::Cop::Lint::DuplicateMatchPattern::MSG = T.let(T.unsafe(nil), String) # end # # alias bar foo +# @example AllCops:ActiveSupportExtensionsEnabled: false (default) # -# source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#42 +# # good +# def foo +# 1 +# end +# +# delegate :foo, to: :bar +# @example AllCops:ActiveSupportExtensionsEnabled: true +# +# # bad +# def foo +# 1 +# end +# +# delegate :foo, to: :bar +# +# # good +# def foo +# 1 +# end +# +# delegate :baz, to: :bar +# +# source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#67 class RuboCop::Cop::Lint::DuplicateMethods < ::RuboCop::Cop::Base # @return [DuplicateMethods] a new instance of DuplicateMethods # - # source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#46 + # source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#72 def initialize(config = T.unsafe(nil), options = T.unsafe(nil)); end - # source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#84 + # source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#110 def alias_method?(param0 = T.unsafe(nil)); end - # source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#72 + # source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#115 + def delegate_method?(param0 = T.unsafe(nil)); end + + # source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#98 def method_alias?(param0 = T.unsafe(nil)); end - # source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#76 + # source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#102 def on_alias(node); end - # source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#52 + # source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#78 def on_def(node); end - # source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#60 + # source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#86 def on_defs(node); end - # source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#90 + # source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#122 def on_send(node); end - # source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#89 + # source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#120 def sym_name(param0 = T.unsafe(nil)); end private - # source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#102 + # source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#138 def check_const_receiver(node, name, const_name); end - # source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#109 + # source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#145 def check_self_receiver(node, name); end - # source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#193 + # source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#235 def found_attr(node, args, readable: T.unsafe(nil), writable: T.unsafe(nil)); end - # source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#121 + # source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#163 def found_instance_method(node, name); end - # source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#144 + # source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#186 def found_method(node, method_name); end - # source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#134 + # source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#176 def found_sclass_method(node, name); end - # source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#171 + # source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#213 def location(node); end - # source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#203 + # source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#245 def lookup_constant(node, const_name); end - # source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#116 + # source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#152 def message_for_dup(node, method_name, key); end - # source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#163 + # source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#205 def method_key(node, method_name); end - # source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#179 + # source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#221 def on_attr(node, attr_name, args); end - # source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#221 + # source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#157 + def on_delegate(node, method_names); end + + # source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#263 def qualified_name(enclosing, namespace, mod_name); end - # source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#235 + # source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#277 def source_location(node); end end -# source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#43 +# source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#68 RuboCop::Cop::Lint::DuplicateMethods::MSG = T.let(T.unsafe(nil), String) -# source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#44 +# source://rubocop//lib/rubocop/cop/lint/duplicate_methods.rb#69 RuboCop::Cop::Lint::DuplicateMethods::RESTRICT_ON_SEND = T.let(T.unsafe(nil), Array) # Checks for duplicate elements in `Regexp` character classes. @@ -26740,7 +26769,7 @@ class RuboCop::Cop::Lint::UselessAssignment < ::RuboCop::Cop::Base # source://rubocop//lib/rubocop/cop/lint/useless_assignment.rb#51 def after_leaving_scope(scope, _variable_table); end - # source://rubocop//lib/rubocop/cop/lint/useless_assignment.rb#165 + # source://rubocop//lib/rubocop/cop/lint/useless_assignment.rb#167 def autocorrect(corrector, assignment); end # @return [Boolean] @@ -26751,42 +26780,42 @@ class RuboCop::Cop::Lint::UselessAssignment < ::RuboCop::Cop::Base # source://rubocop//lib/rubocop/cop/lint/useless_assignment.rb#56 def check_for_unused_assignments(variable); end - # source://rubocop//lib/rubocop/cop/lint/useless_assignment.rb#149 + # source://rubocop//lib/rubocop/cop/lint/useless_assignment.rb#151 def collect_variable_like_names(scope); end # source://rubocop//lib/rubocop/cop/lint/useless_assignment.rb#82 def message_for_useless_assignment(assignment); end - # source://rubocop//lib/rubocop/cop/lint/useless_assignment.rb#110 + # source://rubocop//lib/rubocop/cop/lint/useless_assignment.rb#112 def message_specification(assignment, variable); end - # source://rubocop//lib/rubocop/cop/lint/useless_assignment.rb#120 + # source://rubocop//lib/rubocop/cop/lint/useless_assignment.rb#122 def multiple_assignment_message(variable_name); end # source://rubocop//lib/rubocop/cop/lint/useless_assignment.rb#88 def offense_range(assignment); end - # source://rubocop//lib/rubocop/cop/lint/useless_assignment.rb#125 + # source://rubocop//lib/rubocop/cop/lint/useless_assignment.rb#127 def operator_assignment_message(scope, assignment); end - # source://rubocop//lib/rubocop/cop/lint/useless_assignment.rb#182 + # source://rubocop//lib/rubocop/cop/lint/useless_assignment.rb#184 def remove_exception_assignment_part(corrector, node); end - # source://rubocop//lib/rubocop/cop/lint/useless_assignment.rb#206 + # source://rubocop//lib/rubocop/cop/lint/useless_assignment.rb#208 def remove_local_variable_assignment_part(corrector, node); end - # source://rubocop//lib/rubocop/cop/lint/useless_assignment.rb#195 + # source://rubocop//lib/rubocop/cop/lint/useless_assignment.rb#197 def remove_trailing_character_from_operator(corrector, node); end - # source://rubocop//lib/rubocop/cop/lint/useless_assignment.rb#191 + # source://rubocop//lib/rubocop/cop/lint/useless_assignment.rb#193 def rename_variable_with_underscore(corrector, node); end - # source://rubocop//lib/rubocop/cop/lint/useless_assignment.rb#199 + # source://rubocop//lib/rubocop/cop/lint/useless_assignment.rb#201 def replace_named_capture_group_with_non_capturing_group(corrector, node, variable_name); end # TODO: More precise handling (rescue, ensure, nested begin, etc.) # - # source://rubocop//lib/rubocop/cop/lint/useless_assignment.rb#139 + # source://rubocop//lib/rubocop/cop/lint/useless_assignment.rb#141 def return_value_node_of_scope(scope); end # @return [Boolean] @@ -26794,12 +26823,12 @@ class RuboCop::Cop::Lint::UselessAssignment < ::RuboCop::Cop::Base # source://rubocop//lib/rubocop/cop/lint/useless_assignment.rb#96 def sequential_assignment?(node); end - # source://rubocop//lib/rubocop/cop/lint/useless_assignment.rb#132 + # source://rubocop//lib/rubocop/cop/lint/useless_assignment.rb#134 def similar_name_message(variable); end # @return [Boolean] # - # source://rubocop//lib/rubocop/cop/lint/useless_assignment.rb#158 + # source://rubocop//lib/rubocop/cop/lint/useless_assignment.rb#160 def variable_like_method_invocation?(node); end class << self @@ -36128,26 +36157,26 @@ RuboCop::Cop::Style::CommentedKeyword::SUBCLASS_DEFINITION = T.let(T.unsafe(nil) # # good # x.between?(min, max) # -# source://rubocop//lib/rubocop/cop/style/comparable_between.rb#23 +# source://rubocop//lib/rubocop/cop/style/comparable_between.rb#26 class RuboCop::Cop::Style::ComparableBetween < ::RuboCop::Cop::Base extend ::RuboCop::Cop::AutoCorrector - # source://rubocop//lib/rubocop/cop/style/comparable_between.rb#38 + # source://rubocop//lib/rubocop/cop/style/comparable_between.rb#41 def logical_comparison_between_by_max_first?(param0 = T.unsafe(nil)); end - # source://rubocop//lib/rubocop/cop/style/comparable_between.rb#29 + # source://rubocop//lib/rubocop/cop/style/comparable_between.rb#32 def logical_comparison_between_by_min_first?(param0 = T.unsafe(nil)); end - # source://rubocop//lib/rubocop/cop/style/comparable_between.rb#46 + # source://rubocop//lib/rubocop/cop/style/comparable_between.rb#49 def on_and(node); end private - # source://rubocop//lib/rubocop/cop/style/comparable_between.rb#62 + # source://rubocop//lib/rubocop/cop/style/comparable_between.rb#65 def register_offense(node, min_and_value, max_and_value); end end -# source://rubocop//lib/rubocop/cop/style/comparable_between.rb#26 +# source://rubocop//lib/rubocop/cop/style/comparable_between.rb#29 RuboCop::Cop::Style::ComparableBetween::MSG = T.let(T.unsafe(nil), String) # Enforces the use of `Comparable#clamp` instead of comparison by minimum and maximum. @@ -36757,6 +36786,7 @@ RuboCop::Cop::Style::Copyright::AUTOCORRECT_EMPTY_WARNING = T.let(T.unsafe(nil), RuboCop::Cop::Style::Copyright::MSG = T.let(T.unsafe(nil), String) # Checks for inheritance from `Data.define` to avoid creating the anonymous parent class. +# Inheriting from `Data.define` adds a superfluous level in inheritance tree. # # @example # # bad @@ -36766,6 +36796,9 @@ RuboCop::Cop::Style::Copyright::MSG = T.let(T.unsafe(nil), String) # end # end # +# Person.ancestors +# # => [Person, #, Data, (...)] +# # # good # Person = Data.define(:first_name, :last_name) do # def age @@ -36773,28 +36806,31 @@ RuboCop::Cop::Style::Copyright::MSG = T.let(T.unsafe(nil), String) # end # end # -# source://rubocop//lib/rubocop/cop/style/data_inheritance.rb#26 +# Person.ancestors +# # => [Person, Data, (...)] +# +# source://rubocop//lib/rubocop/cop/style/data_inheritance.rb#33 class RuboCop::Cop::Style::DataInheritance < ::RuboCop::Cop::Base include ::RuboCop::Cop::RangeHelp extend ::RuboCop::Cop::AutoCorrector extend ::RuboCop::Cop::TargetRubyVersion - # source://rubocop//lib/rubocop/cop/style/data_inheritance.rb#48 + # source://rubocop//lib/rubocop/cop/style/data_inheritance.rb#55 def data_define?(param0 = T.unsafe(nil)); end - # source://rubocop//lib/rubocop/cop/style/data_inheritance.rb#36 + # source://rubocop//lib/rubocop/cop/style/data_inheritance.rb#43 def on_class(node); end private - # source://rubocop//lib/rubocop/cop/style/data_inheritance.rb#55 + # source://rubocop//lib/rubocop/cop/style/data_inheritance.rb#62 def correct_parent(parent, corrector); end - # source://rubocop//lib/rubocop/cop/style/data_inheritance.rb#65 + # source://rubocop//lib/rubocop/cop/style/data_inheritance.rb#72 def range_for_empty_class_body(class_node, data_define); end end -# source://rubocop//lib/rubocop/cop/style/data_inheritance.rb#31 +# source://rubocop//lib/rubocop/cop/style/data_inheritance.rb#38 RuboCop::Cop::Style::DataInheritance::MSG = T.let(T.unsafe(nil), String) # Checks for consistent usage of the `DateTime` class over the @@ -41461,6 +41497,17 @@ RuboCop::Cop::Style::IfInsideElse::MSG = T.let(T.unsafe(nil), String) # end # ---- # +# The code `def method_name = body if condition` is considered a bad case by +# `Style/AmbiguousEndlessMethodDefinition` cop. So, to respect the user's intention to use +# an endless method definition in the `if` body, the following code is allowed: +# +# [source,ruby] +# ---- +# if condition +# def method_name = body +# end +# ---- +# # NOTE: It is allowed when `defined?` argument has an undefined value, # because using the modifier form causes the following incompatibility: # @@ -41499,7 +41546,7 @@ RuboCop::Cop::Style::IfInsideElse::MSG = T.let(T.unsafe(nil), String) # do_something # end # -# source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#63 +# source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#74 class RuboCop::Cop::Style::IfUnlessModifier < ::RuboCop::Cop::Base include ::RuboCop::Cop::Alignment include ::RuboCop::Cop::LineLengthHelp @@ -41509,120 +41556,125 @@ class RuboCop::Cop::Style::IfUnlessModifier < ::RuboCop::Cop::Base include ::RuboCop::Cop::CommentsHelp extend ::RuboCop::Cop::AutoCorrector - # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#80 + # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#92 def on_if(node); end private - # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#171 + # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#191 def allowed_patterns; end # @return [Boolean] # - # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#231 + # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#251 def another_statement_on_same_line?(node); end - # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#132 + # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#152 def autocorrect(corrector, node); end - # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#285 + # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#305 def comment_on_node_line(node); end # @return [Boolean] # - # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#104 + # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#124 def defined_argument_is_undefined?(if_node, defined_node); end - # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#96 + # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#116 def defined_nodes(condition); end - # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#272 + # @return [Boolean] + # + # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#112 + def endless_method?(body); end + + # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#292 def extract_heredoc_from(last_argument); end # @return [Boolean] # - # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#215 + # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#235 def line_length_enabled_at_line?(line); end - # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#124 + # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#144 def message(node); end # @return [Boolean] # - # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#219 + # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#239 def named_capture_in_condition?(node); end # @return [Boolean] # - # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#223 + # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#243 def non_eligible_node?(node); end # @return [Boolean] # - # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#227 + # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#247 def non_simple_if_unless?(node); end - # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#114 + # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#134 def pattern_matching_nodes(condition); end - # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#289 + # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#309 def remove_comment(corrector, _node, comment); end - # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#279 + # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#299 def remove_heredoc(corrector, heredoc); end - # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#141 + # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#161 def replacement_for_modifier_form(corrector, node); end - # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#265 + # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#285 def to_modifier_form_with_move_comment(node, indentation, comment); end - # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#245 + # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#265 def to_normal_form(node, indentation); end - # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#253 + # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#273 def to_normal_form_with_heredoc(node, indentation, heredoc); end # @return [Boolean] # - # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#165 + # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#185 def too_long_due_to_comment_after_modifier?(node, comment); end # @return [Boolean] # - # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#160 + # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#180 def too_long_due_to_modifier?(node); end # @return [Boolean] # - # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#206 + # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#226 def too_long_line_based_on_allow_uri?(line); end # @return [Boolean] # - # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#189 + # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#209 def too_long_line_based_on_config?(range, line); end # @return [Boolean] # - # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#198 + # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#218 def too_long_line_based_on_ignore_cop_directives?(range, line); end # @return [Boolean] # - # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#176 + # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#196 def too_long_single_line?(node); end class << self - # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#76 + # source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#87 def autocorrect_incompatible_with; end end end -# source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#71 +# source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#82 RuboCop::Cop::Style::IfUnlessModifier::MSG_USE_MODIFIER = T.let(T.unsafe(nil), String) -# source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#74 +# source://rubocop//lib/rubocop/cop/style/if_unless_modifier.rb#85 RuboCop::Cop::Style::IfUnlessModifier::MSG_USE_NORMAL = T.let(T.unsafe(nil), String) # Checks for if and unless statements used as modifiers of other if or @@ -44585,10 +44637,10 @@ class RuboCop::Cop::Style::MultilineIfModifier < ::RuboCop::Cop::Base private - # source://rubocop//lib/rubocop/cop/style/multiline_if_modifier.rb#43 + # source://rubocop//lib/rubocop/cop/style/multiline_if_modifier.rb#45 def indented_body(body, node); end - # source://rubocop//lib/rubocop/cop/style/multiline_if_modifier.rb#35 + # source://rubocop//lib/rubocop/cop/style/multiline_if_modifier.rb#37 def to_normal_if(node); end end @@ -52677,7 +52729,7 @@ class RuboCop::Cop::Style::SoleNestedConditional < ::RuboCop::Cop::Base # @return [Boolean] # - # source://rubocop//lib/rubocop/cop/style/sole_nested_conditional.rb#199 + # source://rubocop//lib/rubocop/cop/style/sole_nested_conditional.rb#201 def allow_modifier?; end # source://rubocop//lib/rubocop/cop/style/sole_nested_conditional.rb#81 @@ -52717,7 +52769,7 @@ class RuboCop::Cop::Style::SoleNestedConditional < ::RuboCop::Cop::Base # source://rubocop//lib/rubocop/cop/style/sole_nested_conditional.rb#182 def parenthesize_method?(node); end - # source://rubocop//lib/rubocop/cop/style/sole_nested_conditional.rb#192 + # source://rubocop//lib/rubocop/cop/style/sole_nested_conditional.rb#194 def parenthesized_method_arguments(node); end # @return [Boolean] @@ -53148,76 +53200,75 @@ RuboCop::Cop::Style::StringChars::RESTRICT_ON_SEND = T.let(T.unsafe(nil), Array) # # source://rubocop//lib/rubocop/cop/style/string_concatenation.rb#53 class RuboCop::Cop::Style::StringConcatenation < ::RuboCop::Cop::Base - include ::RuboCop::Cop::RangeHelp extend ::RuboCop::Cop::AutoCorrector - # source://rubocop//lib/rubocop/cop/style/string_concatenation.rb#68 + # source://rubocop//lib/rubocop/cop/style/string_concatenation.rb#67 def on_new_investigation; end - # source://rubocop//lib/rubocop/cop/style/string_concatenation.rb#72 + # source://rubocop//lib/rubocop/cop/style/string_concatenation.rb#71 def on_send(node); end - # source://rubocop//lib/rubocop/cop/style/string_concatenation.rb#61 + # source://rubocop//lib/rubocop/cop/style/string_concatenation.rb#60 def string_concatenation?(param0 = T.unsafe(nil)); end private - # source://rubocop//lib/rubocop/cop/style/string_concatenation.rb#159 + # source://rubocop//lib/rubocop/cop/style/string_concatenation.rb#158 def adjust_str(node); end - # source://rubocop//lib/rubocop/cop/style/string_concatenation.rb#115 + # source://rubocop//lib/rubocop/cop/style/string_concatenation.rb#114 def collect_parts(node, parts = T.unsafe(nil)); end # @return [Boolean] # - # source://rubocop//lib/rubocop/cop/style/string_concatenation.rb#140 + # source://rubocop//lib/rubocop/cop/style/string_concatenation.rb#139 def corrected_ancestor?(node); end - # source://rubocop//lib/rubocop/cop/style/string_concatenation.rb#107 + # source://rubocop//lib/rubocop/cop/style/string_concatenation.rb#106 def find_topmost_plus_node(node); end - # source://rubocop//lib/rubocop/cop/style/string_concatenation.rb#163 + # source://rubocop//lib/rubocop/cop/style/string_concatenation.rb#162 def handle_quotes(parts); end # @return [Boolean] # - # source://rubocop//lib/rubocop/cop/style/string_concatenation.rb#134 + # source://rubocop//lib/rubocop/cop/style/string_concatenation.rb#133 def heredoc?(node); end # @return [Boolean] # - # source://rubocop//lib/rubocop/cop/style/string_concatenation.rb#97 + # source://rubocop//lib/rubocop/cop/style/string_concatenation.rb#96 def line_end_concatenation?(node); end - # source://rubocop//lib/rubocop/cop/style/string_concatenation.rb#173 + # source://rubocop//lib/rubocop/cop/style/string_concatenation.rb#172 def mode; end # @return [Boolean] # - # source://rubocop//lib/rubocop/cop/style/string_concatenation.rb#126 + # source://rubocop//lib/rubocop/cop/style/string_concatenation.rb#125 def plus_node?(node); end - # source://rubocop//lib/rubocop/cop/style/string_concatenation.rb#85 + # source://rubocop//lib/rubocop/cop/style/string_concatenation.rb#84 def register_offense(topmost_plus_node, parts); end - # source://rubocop//lib/rubocop/cop/style/string_concatenation.rb#144 + # source://rubocop//lib/rubocop/cop/style/string_concatenation.rb#143 def replacement(parts); end # @return [Boolean] # - # source://rubocop//lib/rubocop/cop/style/string_concatenation.rb#169 + # source://rubocop//lib/rubocop/cop/style/string_concatenation.rb#168 def single_quoted?(str_node); end # @return [Boolean] # - # source://rubocop//lib/rubocop/cop/style/string_concatenation.rb#130 + # source://rubocop//lib/rubocop/cop/style/string_concatenation.rb#129 def uncorrectable?(part); end end -# source://rubocop//lib/rubocop/cop/style/string_concatenation.rb#57 +# source://rubocop//lib/rubocop/cop/style/string_concatenation.rb#56 RuboCop::Cop::Style::StringConcatenation::MSG = T.let(T.unsafe(nil), String) -# source://rubocop//lib/rubocop/cop/style/string_concatenation.rb#58 +# source://rubocop//lib/rubocop/cop/style/string_concatenation.rb#57 RuboCop::Cop::Style::StringConcatenation::RESTRICT_ON_SEND = T.let(T.unsafe(nil), Array) # Checks for the use of strings as keys in hashes. The use of @@ -53454,7 +53505,8 @@ RuboCop::Cop::Style::Strip::MSG = T.let(T.unsafe(nil), String) # source://rubocop//lib/rubocop/cop/style/strip.rb#21 RuboCop::Cop::Style::Strip::RESTRICT_ON_SEND = T.let(T.unsafe(nil), Array) -# Checks for inheritance from Struct.new. +# Checks for inheritance from `Struct.new`. Inheriting from `Struct.new` +# adds a superfluous level in inheritance tree. # # @example # # bad @@ -53464,6 +53516,9 @@ RuboCop::Cop::Style::Strip::RESTRICT_ON_SEND = T.let(T.unsafe(nil), Array) # end # end # +# Person.ancestors +# # => [Person, #, Struct, (...)] +# # # good # Person = Struct.new(:first_name, :last_name) do # def age @@ -53471,27 +53526,30 @@ RuboCop::Cop::Style::Strip::RESTRICT_ON_SEND = T.let(T.unsafe(nil), Array) # end # end # -# source://rubocop//lib/rubocop/cop/style/struct_inheritance.rb#26 +# Person.ancestors +# # => [Person, Struct, (...)] +# +# source://rubocop//lib/rubocop/cop/style/struct_inheritance.rb#33 class RuboCop::Cop::Style::StructInheritance < ::RuboCop::Cop::Base include ::RuboCop::Cop::RangeHelp extend ::RuboCop::Cop::AutoCorrector - # source://rubocop//lib/rubocop/cop/style/struct_inheritance.rb#33 + # source://rubocop//lib/rubocop/cop/style/struct_inheritance.rb#40 def on_class(node); end - # source://rubocop//lib/rubocop/cop/style/struct_inheritance.rb#45 + # source://rubocop//lib/rubocop/cop/style/struct_inheritance.rb#52 def struct_constructor?(param0 = T.unsafe(nil)); end private - # source://rubocop//lib/rubocop/cop/style/struct_inheritance.rb#52 + # source://rubocop//lib/rubocop/cop/style/struct_inheritance.rb#59 def correct_parent(parent, corrector); end - # source://rubocop//lib/rubocop/cop/style/struct_inheritance.rb#62 + # source://rubocop//lib/rubocop/cop/style/struct_inheritance.rb#69 def range_for_empty_class_body(class_node, struct_new); end end -# source://rubocop//lib/rubocop/cop/style/struct_inheritance.rb#30 +# source://rubocop//lib/rubocop/cop/style/struct_inheritance.rb#37 RuboCop::Cop::Style::StructInheritance::MSG = T.let(T.unsafe(nil), String) # Checks for redundant argument forwarding when calling super with arguments identical to @@ -58818,13 +58876,13 @@ class RuboCop::Formatter::DisabledConfigFormatter < ::RuboCop::Formatter::BaseFo # source://rubocop//lib/rubocop/formatter/disabled_config_formatter.rb#165 def cop_config_params(default_cfg, cfg); end - # source://rubocop//lib/rubocop/formatter/disabled_config_formatter.rb#185 + # source://rubocop//lib/rubocop/formatter/disabled_config_formatter.rb#186 def default_config(cop_name); end - # source://rubocop//lib/rubocop/formatter/disabled_config_formatter.rb#229 + # source://rubocop//lib/rubocop/formatter/disabled_config_formatter.rb#230 def excludes(offending_files, cop_name, parent); end - # source://rubocop//lib/rubocop/formatter/disabled_config_formatter.rb#200 + # source://rubocop//lib/rubocop/formatter/disabled_config_formatter.rb#201 def filtered_config(cfg); end # Returns true if the given arr include the given elm or if any of the @@ -58832,17 +58890,17 @@ class RuboCop::Formatter::DisabledConfigFormatter < ::RuboCop::Formatter::BaseFo # # @return [Boolean] # - # source://rubocop//lib/rubocop/formatter/disabled_config_formatter.rb#277 + # source://rubocop//lib/rubocop/formatter/disabled_config_formatter.rb#278 def include_or_match?(arr, elm); end # @return [Boolean] # - # source://rubocop//lib/rubocop/formatter/disabled_config_formatter.rb#250 + # source://rubocop//lib/rubocop/formatter/disabled_config_formatter.rb#251 def merge_mode_for_exclude?(cfg); end # @return [Boolean] # - # source://rubocop//lib/rubocop/formatter/disabled_config_formatter.rb#271 + # source://rubocop//lib/rubocop/formatter/disabled_config_formatter.rb#272 def no_exclude_limit?; end # source://rubocop//lib/rubocop/formatter/disabled_config_formatter.rb#102 @@ -58851,19 +58909,19 @@ class RuboCop::Formatter::DisabledConfigFormatter < ::RuboCop::Formatter::BaseFo # source://rubocop//lib/rubocop/formatter/disabled_config_formatter.rb#137 def output_cop_comments(output_buffer, cfg, cop_name, offense_count); end - # source://rubocop//lib/rubocop/formatter/disabled_config_formatter.rb#189 + # source://rubocop//lib/rubocop/formatter/disabled_config_formatter.rb#190 def output_cop_config(output_buffer, cfg, cop_name); end # source://rubocop//lib/rubocop/formatter/disabled_config_formatter.rb#172 def output_cop_param_comments(output_buffer, params, default_cfg); end - # source://rubocop//lib/rubocop/formatter/disabled_config_formatter.rb#219 + # source://rubocop//lib/rubocop/formatter/disabled_config_formatter.rb#220 def output_exclude_list(output_buffer, offending_files, cop_name); end - # source://rubocop//lib/rubocop/formatter/disabled_config_formatter.rb#254 + # source://rubocop//lib/rubocop/formatter/disabled_config_formatter.rb#255 def output_exclude_path(output_buffer, exclude_path, parent); end - # source://rubocop//lib/rubocop/formatter/disabled_config_formatter.rb#208 + # source://rubocop//lib/rubocop/formatter/disabled_config_formatter.rb#209 def output_offending_files(output_buffer, cfg, cop_name); end # source://rubocop//lib/rubocop/formatter/disabled_config_formatter.rb#96 @@ -58871,7 +58929,7 @@ class RuboCop::Formatter::DisabledConfigFormatter < ::RuboCop::Formatter::BaseFo # @return [Boolean] # - # source://rubocop//lib/rubocop/formatter/disabled_config_formatter.rb#267 + # source://rubocop//lib/rubocop/formatter/disabled_config_formatter.rb#268 def safe_autocorrect?(config); end # source://rubocop//lib/rubocop/formatter/disabled_config_formatter.rb#116 diff --git a/Library/Homebrew/sorbet/rbi/gems/ruby-lsp@0.23.17.rbi b/Library/Homebrew/sorbet/rbi/gems/ruby-lsp@0.23.21.rbi similarity index 100% rename from Library/Homebrew/sorbet/rbi/gems/ruby-lsp@0.23.17.rbi rename to Library/Homebrew/sorbet/rbi/gems/ruby-lsp@0.23.21.rbi diff --git a/Library/Homebrew/sorbet/rbi/gems/spoom@1.6.1.rbi b/Library/Homebrew/sorbet/rbi/gems/spoom@1.6.3.rbi similarity index 90% rename from Library/Homebrew/sorbet/rbi/gems/spoom@1.6.1.rbi rename to Library/Homebrew/sorbet/rbi/gems/spoom@1.6.3.rbi index 3439a2b3c0..47d8116a53 100644 --- a/Library/Homebrew/sorbet/rbi/gems/spoom@1.6.1.rbi +++ b/Library/Homebrew/sorbet/rbi/gems/spoom@1.6.3.rbi @@ -56,33 +56,30 @@ module Spoom::Cli::Helper # : (String string) -> String # - # source://spoom//lib/spoom/cli/helper.rb#147 + # source://spoom//lib/spoom/cli/helper.rb#149 sig { params(string: ::String).returns(::String) } def blue(string); end # Collect files from `paths`, defaulting to `exec_path` - # : (Array[String] paths) -> Array[String] + # : (Array[String] paths, ?include_rbi_files: bool) -> Array[String] # # source://spoom//lib/spoom/cli/helper.rb#85 - # Collect files from `paths`, defaulting to `exec_path` - sig { params(paths: T::Array[::String]).returns(T::Array[::String]) } - def collect_files(paths); end + sig { params(paths: T::Array[::String], include_rbi_files: T::Boolean).returns(T::Array[::String]) } + def collect_files(paths, include_rbi_files: T.unsafe(nil)); end # Is the `--color` option true? # : -> bool # # @return [Boolean] # - # source://spoom//lib/spoom/cli/helper.rb#111 - # Is the `--color` option true? + # source://spoom//lib/spoom/cli/helper.rb#113 sig { returns(T::Boolean) } def color?; end # Colorize a string if `color?` # : (String string, *Color color) -> String # - # source://spoom//lib/spoom/cli/helper.rb#140 - # Colorize a string if `color?` + # source://spoom//lib/spoom/cli/helper.rb#142 sig { params(string: ::String, color: ::Spoom::Color).returns(::String) } def colorize(string, *color); end @@ -90,7 +87,6 @@ module Spoom::Cli::Helper # : -> Context # # source://spoom//lib/spoom/cli/helper.rb#58 - # Returns the context at `--path` (by default the current working directory) sig { returns(::Spoom::Context) } def context; end @@ -98,13 +94,12 @@ module Spoom::Cli::Helper # : -> Context # # source://spoom//lib/spoom/cli/helper.rb#64 - # Raise if `spoom` is not ran inside a context with a `sorbet/config` file sig { returns(::Spoom::Context) } def context_requiring_sorbet!; end # : (String string) -> String # - # source://spoom//lib/spoom/cli/helper.rb#152 + # source://spoom//lib/spoom/cli/helper.rb#154 sig { params(string: ::String).returns(::String) } def cyan(string); end @@ -112,31 +107,30 @@ module Spoom::Cli::Helper # : -> String # # source://spoom//lib/spoom/cli/helper.rb#79 - # Return the path specified through `--path` sig { returns(::String) } def exec_path; end # : (String string) -> String # - # source://spoom//lib/spoom/cli/helper.rb#157 + # source://spoom//lib/spoom/cli/helper.rb#159 sig { params(string: ::String).returns(::String) } def gray(string); end # : (String string) -> String # - # source://spoom//lib/spoom/cli/helper.rb#162 + # source://spoom//lib/spoom/cli/helper.rb#164 sig { params(string: ::String).returns(::String) } def green(string); end # : (String string) -> String # - # source://spoom//lib/spoom/cli/helper.rb#116 + # source://spoom//lib/spoom/cli/helper.rb#118 sig { params(string: ::String).returns(::String) } def highlight(string); end # : (String string) -> String # - # source://spoom//lib/spoom/cli/helper.rb#167 + # source://spoom//lib/spoom/cli/helper.rb#169 sig { params(string: ::String).returns(::String) } def red(string); end @@ -144,7 +138,6 @@ module Spoom::Cli::Helper # : (String message) -> void # # source://spoom//lib/spoom/cli/helper.rb#19 - # Print `message` on `$stdout` sig { params(message: ::String).void } def say(message); end @@ -154,8 +147,6 @@ module Spoom::Cli::Helper # : (String message, ?status: String?, ?nl: bool) -> void # # source://spoom//lib/spoom/cli/helper.rb#32 - # Print `message` on `$stderr` - # The message is prefixed by a status (default: `Error`). sig { params(message: ::String, status: T.nilable(::String), nl: T::Boolean).void } def say_error(message, status: T.unsafe(nil), nl: T.unsafe(nil)); end @@ -165,14 +156,12 @@ module Spoom::Cli::Helper # : (String message, ?status: String?, ?nl: bool) -> void # # source://spoom//lib/spoom/cli/helper.rb#46 - # Print `message` on `$stderr` - # The message is prefixed by a status (default: `Warning`). sig { params(message: ::String, status: T.nilable(::String), nl: T::Boolean).void } def say_warning(message, status: T.unsafe(nil), nl: T.unsafe(nil)); end # : (String string) -> String # - # source://spoom//lib/spoom/cli/helper.rb#172 + # source://spoom//lib/spoom/cli/helper.rb#174 sig { params(string: ::String).returns(::String) } def yellow(string); end end @@ -380,21 +369,21 @@ class Spoom::Cli::Srb::Sigs < ::Thor include ::Spoom::Colorize include ::Spoom::Cli::Helper - # source://spoom//lib/spoom/cli/srb/sigs.rb#197 + # source://spoom//lib/spoom/cli/srb/sigs.rb#198 def exec(context, command); end - # source://spoom//lib/spoom/cli/srb/sigs.rb#68 + # source://spoom//lib/spoom/cli/srb/sigs.rb#69 def export(output_path = T.unsafe(nil)); end def help(command = T.unsafe(nil), subcommand = T.unsafe(nil)); end - # source://spoom//lib/spoom/cli/srb/sigs.rb#49 + # source://spoom//lib/spoom/cli/srb/sigs.rb#50 def strip(*paths); end - # source://spoom//lib/spoom/cli/srb/sigs.rb#174 + # source://spoom//lib/spoom/cli/srb/sigs.rb#175 def transform_files(files, &block); end - # source://spoom//lib/spoom/cli/srb/sigs.rb#20 + # source://spoom//lib/spoom/cli/srb/sigs.rb#21 def translate(*paths); end end @@ -403,15 +392,15 @@ class Spoom::Cli::Srb::Tc < ::Thor include ::Spoom::Colorize include ::Spoom::Cli::Helper - # source://spoom//lib/spoom/cli/srb/tc.rb#132 + # source://spoom//lib/spoom/cli/srb/tc.rb#147 def colorize_message(message); end - # source://spoom//lib/spoom/cli/srb/tc.rb#123 + # source://spoom//lib/spoom/cli/srb/tc.rb#138 def format_error(error, format); end def help(command = T.unsafe(nil), subcommand = T.unsafe(nil)); end - # source://spoom//lib/spoom/cli/srb/tc.rb#27 + # source://spoom//lib/spoom/cli/srb/tc.rb#28 def tc(*paths_to_select); end end @@ -472,8 +461,6 @@ end # It is used to manipulate files and run commands in the context of this directory. # # source://spoom//lib/spoom/context/bundle.rb#5 -# An abstraction to a Ruby project context -# A context maps to a directory in the file system. class Spoom::Context include ::Spoom::Context::Bundle include ::Spoom::Context::Exec @@ -490,9 +477,6 @@ class Spoom::Context # @return [Context] a new instance of Context # # source://spoom//lib/spoom/context.rb#47 - # Create a new context about `absolute_path` - # The directory will not be created if it doesn't exist. - # Call `#make!` to create it. sig { params(absolute_path: ::String).void } def initialize(absolute_path); end @@ -500,7 +484,6 @@ class Spoom::Context # : String # # source://spoom//lib/spoom/context.rb#40 - # The absolute path to the directory this context is about sig { returns(::String) } def absolute_path; end @@ -512,9 +495,6 @@ class Spoom::Context # : (?String? name) -> instance # # source://spoom//lib/spoom/context.rb#33 - # Create a new context in the system's temporary directory - # `name` is used as prefix to the temporary directory name. - # The directory will be created if it doesn't exist. sig { params(name: T.nilable(::String)).returns(T.attached_class) } def mktmp!(name = T.unsafe(nil)); end end @@ -530,7 +510,6 @@ module Spoom::Context::Bundle # : (String command, ?version: String?, ?capture_err: bool) -> ExecResult # # source://spoom//lib/spoom/context/bundle.rb#32 - # Run a command with `bundle` in this context directory sig { params(command: ::String, version: T.nilable(::String), capture_err: T::Boolean).returns(::Spoom::ExecResult) } def bundle(command, version: T.unsafe(nil), capture_err: T.unsafe(nil)); end @@ -538,7 +517,6 @@ module Spoom::Context::Bundle # : (String command, ?version: String?, ?capture_err: bool) -> ExecResult # # source://spoom//lib/spoom/context/bundle.rb#45 - # Run a command `bundle exec` in this context directory sig { params(command: ::String, version: T.nilable(::String), capture_err: T::Boolean).returns(::Spoom::ExecResult) } def bundle_exec(command, version: T.unsafe(nil), capture_err: T.unsafe(nil)); end @@ -546,7 +524,6 @@ module Spoom::Context::Bundle # : (?version: String?, ?capture_err: bool) -> ExecResult # # source://spoom//lib/spoom/context/bundle.rb#39 - # Run `bundle install` in this context directory sig { params(version: T.nilable(::String), capture_err: T::Boolean).returns(::Spoom::ExecResult) } def bundle_install!(version: T.unsafe(nil), capture_err: T.unsafe(nil)); end @@ -556,8 +533,6 @@ module Spoom::Context::Bundle # : (String gem) -> Gem::Version? # # source://spoom//lib/spoom/context/bundle.rb#61 - # Get `gem` version from the `Gemfile.lock` content - # Returns `nil` if `gem` cannot be found in the Gemfile. sig { params(gem: ::String).returns(T.nilable(::Gem::Version)) } def gem_version_from_gemfile_lock(gem); end @@ -571,7 +546,6 @@ module Spoom::Context::Bundle # : -> String? # # source://spoom//lib/spoom/context/bundle.rb#14 - # Read the contents of the Gemfile in this context directory sig { returns(T.nilable(::String)) } def read_gemfile; end @@ -579,7 +553,6 @@ module Spoom::Context::Bundle # : -> String? # # source://spoom//lib/spoom/context/bundle.rb#20 - # Read the contents of the Gemfile.lock in this context directory sig { returns(T.nilable(::String)) } def read_gemfile_lock; end @@ -587,7 +560,6 @@ module Spoom::Context::Bundle # : (String contents, ?append: bool) -> void # # source://spoom//lib/spoom/context/bundle.rb#26 - # Set the `contents` of the Gemfile in this context directory sig { params(contents: ::String, append: T::Boolean).void } def write_gemfile!(contents, append: T.unsafe(nil)); end end @@ -602,7 +574,6 @@ module Spoom::Context::Exec # : (String command, ?capture_err: bool) -> ExecResult # # source://spoom//lib/spoom/context/exec.rb#32 - # Run a command in this context directory sig { params(command: ::String, capture_err: T::Boolean).returns(::Spoom::ExecResult) } def exec(command, capture_err: T.unsafe(nil)); end end @@ -617,7 +588,6 @@ module Spoom::Context::FileSystem # : (String relative_path) -> String # # source://spoom//lib/spoom/context/file_system.rb#14 - # Returns the absolute path to `relative_path` in the context's directory sig { params(relative_path: ::String).returns(::String) } def absolute_path_to(relative_path); end @@ -639,8 +609,6 @@ module Spoom::Context::FileSystem # : -> void # # source://spoom//lib/spoom/context/file_system.rb#98 - # Delete this context and its content - # Warning: it will `rm -rf` the context directory on the file system. sig { void } def destroy!; end @@ -650,7 +618,6 @@ module Spoom::Context::FileSystem # @return [Boolean] # # source://spoom//lib/spoom/context/file_system.rb#20 - # Does the context directory at `absolute_path` exist and is a directory? sig { returns(T::Boolean) } def exist?; end @@ -660,7 +627,6 @@ module Spoom::Context::FileSystem # @return [Boolean] # # source://spoom//lib/spoom/context/file_system.rb#58 - # Does `relative_path` point to an existing file in this context directory? sig { params(relative_path: ::String).returns(T::Boolean) } def file?(relative_path); end @@ -668,7 +634,6 @@ module Spoom::Context::FileSystem # : (?String pattern) -> Array[String] # # source://spoom//lib/spoom/context/file_system.rb#33 - # List all files in this context matching `pattern` sig { params(pattern: ::String).returns(T::Array[::String]) } def glob(pattern = T.unsafe(nil)); end @@ -676,7 +641,6 @@ module Spoom::Context::FileSystem # : -> Array[String] # # source://spoom//lib/spoom/context/file_system.rb#41 - # List all files at the top level of this context directory sig { returns(T::Array[::String]) } def list; end @@ -684,7 +648,6 @@ module Spoom::Context::FileSystem # : -> void # # source://spoom//lib/spoom/context/file_system.rb#26 - # Create the context directory at `absolute_path` sig { void } def mkdir!; end @@ -692,7 +655,6 @@ module Spoom::Context::FileSystem # : (String from_relative_path, String to_relative_path) -> void # # source://spoom//lib/spoom/context/file_system.rb#88 - # Move the file or directory from `from_relative_path` to `to_relative_path` sig { params(from_relative_path: ::String, to_relative_path: ::String).void } def move!(from_relative_path, to_relative_path); end @@ -702,8 +664,6 @@ module Spoom::Context::FileSystem # : (String relative_path) -> String # # source://spoom//lib/spoom/context/file_system.rb#66 - # Return the contents of the file at `relative_path` in this context directory - # Will raise if the file doesn't exist. sig { params(relative_path: ::String).returns(::String) } def read(relative_path); end @@ -711,7 +671,6 @@ module Spoom::Context::FileSystem # : (String relative_path) -> void # # source://spoom//lib/spoom/context/file_system.rb#82 - # Remove the path at `relative_path` (recursive + force) in this context directory sig { params(relative_path: ::String).void } def remove!(relative_path); end @@ -721,8 +680,6 @@ module Spoom::Context::FileSystem # : (String relative_path, ?String contents, ?append: bool) -> void # # source://spoom//lib/spoom/context/file_system.rb#74 - # Write `contents` in the file at `relative_path` in this context directory - # Append to the file if `append` is true. sig { params(relative_path: ::String, contents: ::String, append: T::Boolean).void } def write!(relative_path, contents = T.unsafe(nil), append: T.unsafe(nil)); end end @@ -737,7 +694,6 @@ module Spoom::Context::Git # : (String command) -> ExecResult # # source://spoom//lib/spoom/context/git.rb#38 - # Run a command prefixed by `git` in this context directory sig { params(command: ::String).returns(::Spoom::ExecResult) } def git(command); end @@ -745,7 +701,6 @@ module Spoom::Context::Git # : (?ref: String) -> ExecResult # # source://spoom//lib/spoom/context/git.rb#57 - # Run `git checkout` in this context directory sig { params(ref: ::String).returns(::Spoom::ExecResult) } def git_checkout!(ref: T.unsafe(nil)); end @@ -753,7 +708,6 @@ module Spoom::Context::Git # : (String branch_name, ?ref: String?) -> ExecResult # # source://spoom//lib/spoom/context/git.rb#63 - # Run `git checkout -b ` in this context directory sig { params(branch_name: ::String, ref: T.nilable(::String)).returns(::Spoom::ExecResult) } def git_checkout_new_branch!(branch_name, ref: T.unsafe(nil)); end @@ -761,7 +715,6 @@ module Spoom::Context::Git # : (?message: String, ?time: Time, ?allow_empty: bool) -> ExecResult # # source://spoom//lib/spoom/context/git.rb#73 - # Run `git add . && git commit` in this context directory sig { params(message: ::String, time: ::Time, allow_empty: T::Boolean).returns(::Spoom::ExecResult) } def git_commit!(message: T.unsafe(nil), time: T.unsafe(nil), allow_empty: T.unsafe(nil)); end @@ -769,7 +722,6 @@ module Spoom::Context::Git # : -> String? # # source://spoom//lib/spoom/context/git.rb#84 - # Get the current git branch in this context directory sig { returns(T.nilable(::String)) } def git_current_branch; end @@ -777,7 +729,6 @@ module Spoom::Context::Git # : (*String arg) -> ExecResult # # source://spoom//lib/spoom/context/git.rb#93 - # Run `git diff` in this context directory sig { params(arg: ::String).returns(::Spoom::ExecResult) } def git_diff(*arg); end @@ -788,9 +739,6 @@ module Spoom::Context::Git # : (?branch: String?) -> ExecResult # # source://spoom//lib/spoom/context/git.rb#47 - # Run `git init` in this context directory - # Warning: passing a branch will run `git init -b ` which is only available in git 2.28+. - # In older versions, use `git_init!` followed by `git("checkout -b ")`. sig { params(branch: T.nilable(::String)).returns(::Spoom::ExecResult) } def git_init!(branch: T.unsafe(nil)); end @@ -798,7 +746,6 @@ module Spoom::Context::Git # : (?short_sha: bool) -> Spoom::Git::Commit? # # source://spoom//lib/spoom/context/git.rb#99 - # Get the last commit in the currently checked out branch sig { params(short_sha: T::Boolean).returns(T.nilable(::Spoom::Git::Commit)) } def git_last_commit(short_sha: T.unsafe(nil)); end @@ -812,7 +759,6 @@ module Spoom::Context::Git # : (String remote, String ref, ?force: bool) -> ExecResult # # source://spoom//lib/spoom/context/git.rb#116 - # Run `git push ` in this context directory sig { params(remote: ::String, ref: ::String, force: T::Boolean).returns(::Spoom::ExecResult) } def git_push!(remote, ref, force: T.unsafe(nil)); end @@ -828,7 +774,6 @@ module Spoom::Context::Git # @return [Boolean] # # source://spoom//lib/spoom/context/git.rb#127 - # Is there uncommitted changes in this context directory? sig { params(path: ::String).returns(T::Boolean) } def git_workdir_clean?(path: T.unsafe(nil)); end end @@ -845,7 +790,6 @@ module Spoom::Context::Sorbet # @return [Boolean] # # source://spoom//lib/spoom/context/sorbet.rb#106 - # Does this context has a `sorbet/config` file? sig { returns(T::Boolean) } def has_sorbet_config?; end @@ -853,7 +797,6 @@ module Spoom::Context::Sorbet # : (String relative_path) -> String? # # source://spoom//lib/spoom/context/sorbet.rb#129 - # Read the strictness sigil from the file at `relative_path` (returns `nil` if no sigil) sig { params(relative_path: ::String).returns(T.nilable(::String)) } def read_file_strictness(relative_path); end @@ -861,7 +804,6 @@ module Spoom::Context::Sorbet # : -> String # # source://spoom//lib/spoom/context/sorbet.rb#117 - # Read the contents of `sorbet/config` in this context directory sig { returns(::String) } def read_sorbet_config; end @@ -875,7 +817,6 @@ module Spoom::Context::Sorbet # : -> Spoom::Git::Commit? # # source://spoom//lib/spoom/context/sorbet.rb#135 - # Get the commit introducing the `sorbet/config` file sig { returns(T.nilable(::Spoom::Git::Commit)) } def sorbet_intro_commit; end @@ -883,7 +824,6 @@ module Spoom::Context::Sorbet # : -> Spoom::Git::Commit? # # source://spoom//lib/spoom/context/sorbet.rb#147 - # Get the commit removing the `sorbet/config` file sig { returns(T.nilable(::Spoom::Git::Commit)) } def sorbet_removal_commit; end @@ -891,7 +831,6 @@ module Spoom::Context::Sorbet # : (*String arg, ?sorbet_bin: String?, ?capture_err: bool) -> ExecResult # # source://spoom//lib/spoom/context/sorbet.rb#14 - # Run `bundle exec srb` in this context directory sig { params(arg: ::String, sorbet_bin: T.nilable(::String), capture_err: T::Boolean).returns(::Spoom::ExecResult) } def srb(*arg, sorbet_bin: T.unsafe(nil), capture_err: T.unsafe(nil)); end @@ -899,7 +838,6 @@ module Spoom::Context::Sorbet # : (?with_config: Spoom::Sorbet::Config?, ?include_rbis: bool) -> Array[String] # # source://spoom//lib/spoom/context/sorbet.rb#58 - # List all files typechecked by Sorbet from its `config` sig { params(with_config: T.nilable(::Spoom::Sorbet::Config), include_rbis: T::Boolean).returns(T::Array[::String]) } def srb_files(with_config: T.unsafe(nil), include_rbis: T.unsafe(nil)); end @@ -907,7 +845,6 @@ module Spoom::Context::Sorbet # : (String strictness, ?with_config: Spoom::Sorbet::Config?, ?include_rbis: bool) -> Array[String] # # source://spoom//lib/spoom/context/sorbet.rb#91 - # List all files typechecked by Sorbet from its `config` that matches `strictness` sig do params( strictness: ::String, @@ -945,7 +882,6 @@ module Spoom::Context::Sorbet # : (String contents, ?append: bool) -> void # # source://spoom//lib/spoom/context/sorbet.rb#123 - # Set the `contents` of `sorbet/config` in this context directory sig { params(contents: ::String, append: T::Boolean).void } def write_sorbet_config!(contents, append: T.unsafe(nil)); end end @@ -1001,7 +937,6 @@ class Spoom::Coverage::Cards::Card < ::Spoom::Coverage::Template # : String? # # source://spoom//lib/spoom/coverage/report.rb#94 - # @return [String, nil] def body; end # : String? @@ -1011,6 +946,8 @@ class Spoom::Coverage::Cards::Card < ::Spoom::Coverage::Template def title; end end +# : String +# # source://spoom//lib/spoom/coverage/report.rb#91 Spoom::Coverage::Cards::Card::TEMPLATE = T.let(T.unsafe(nil), String) @@ -1094,6 +1031,8 @@ class Spoom::Coverage::Cards::Snapshot < ::Spoom::Coverage::Cards::Card def snapshot; end end +# : String +# # source://spoom//lib/spoom/coverage/report.rb#123 Spoom::Coverage::Cards::Snapshot::TEMPLATE = T.let(T.unsafe(nil), String) @@ -1332,7 +1271,7 @@ class Spoom::Coverage::D3::ColorPalette < ::T::Struct prop :strong, ::String class << self - # source://sorbet-runtime/0.5.12026/lib/types/struct.rb#13 + # source://sorbet-runtime/0.5.12079/lib/types/struct.rb#13 def inherited(s); end end end @@ -1726,6 +1665,8 @@ class Spoom::Coverage::Page < ::Spoom::Coverage::Template def title; end end +# : String +# # source://spoom//lib/spoom/coverage/report.rb#43 Spoom::Coverage::Page::TEMPLATE = T.let(T.unsafe(nil), String) @@ -1810,7 +1751,7 @@ class Spoom::Coverage::Snapshot < ::T::Struct sig { params(obj: T::Hash[::String, T.untyped]).returns(::Spoom::Coverage::Snapshot) } def from_obj(obj); end - # source://sorbet-runtime/0.5.12026/lib/types/struct.rb#13 + # source://sorbet-runtime/0.5.12079/lib/types/struct.rb#13 def inherited(s); end end end @@ -1855,7 +1796,6 @@ class Spoom::Coverage::Template # @return [Template] a new instance of Template # # source://spoom//lib/spoom/coverage/report.rb#17 - # Create a new template from an Erb file path sig { params(template: ::String).void } def initialize(template:); end @@ -1883,13 +1823,13 @@ module Spoom::Deadcode class << self # : (Context context) -> Array[singleton(Plugins::Base)] # - # source://spoom//lib/spoom/deadcode/plugins.rb#73 + # source://spoom//lib/spoom/deadcode/plugins.rb#67 sig { params(context: ::Spoom::Context).returns(T::Array[T.class_of(Spoom::Deadcode::Plugins::Base)]) } def load_custom_plugins(context); end # : (Context context) -> Set[singleton(Plugins::Base)] # - # source://spoom//lib/spoom/deadcode/plugins.rb#59 + # source://spoom//lib/spoom/deadcode/plugins.rb#53 sig { params(context: ::Spoom::Context).returns(T::Set[T.class_of(Spoom::Deadcode::Plugins::Base)]) } def plugins_from_gemfile_lock(context); end end @@ -1922,7 +1862,6 @@ class Spoom::Deadcode::Definition < ::T::Struct # @return [Boolean] # # source://spoom//lib/spoom/deadcode/definition.rb#71 - # Status sig { returns(T::Boolean) } def alive?; end @@ -1931,7 +1870,6 @@ class Spoom::Deadcode::Definition < ::T::Struct # @return [Boolean] # # source://spoom//lib/spoom/deadcode/definition.rb#39 - # Kind sig { returns(T::Boolean) } def attr_reader?; end @@ -2000,12 +1938,11 @@ class Spoom::Deadcode::Definition < ::T::Struct # : (*untyped args) -> String # # source://spoom//lib/spoom/deadcode/definition.rb#98 - # Utils sig { params(args: T.untyped).returns(::String) } def to_json(*args); end class << self - # source://sorbet-runtime/0.5.12026/lib/types/struct.rb#13 + # source://sorbet-runtime/0.5.12079/lib/types/struct.rb#13 def inherited(s); end end end @@ -2122,7 +2059,6 @@ class Spoom::Deadcode::Index # : (String name) -> Array[Definition] # # source://spoom//lib/spoom/deadcode/index.rb#210 - # Utils sig { params(name: ::String).returns(T::Array[::Spoom::Deadcode::Definition]) } def definitions_for_name(name); end @@ -2132,8 +2068,6 @@ class Spoom::Deadcode::Index # : -> void # # source://spoom//lib/spoom/deadcode/index.rb#118 - # Mark all definitions having a reference of the same name as `alive` - # To be called once all the files have been indexed and all the definitions and references discovered. sig { void } def finalize!; end @@ -2152,7 +2086,6 @@ class Spoom::Deadcode::Index # : (String file, ?plugins: Array[Plugins::Base]) -> void # # source://spoom//lib/spoom/deadcode/index.rb#35 - # Indexing sig { params(file: ::String, plugins: T::Array[::Spoom::Deadcode::Plugins::Base]).void } def index_file(file, plugins: T.unsafe(nil)); end @@ -2233,7 +2166,9 @@ class Spoom::Deadcode::Indexer < ::Spoom::Visitor def visit_call_node(node); end end -# source://spoom//lib/spoom/deadcode/plugins.rb#36 +# : Set[singleton(Plugins::Base)] +# +# source://spoom//lib/spoom/deadcode/plugins.rb#33 Spoom::Deadcode::PLUGINS_FOR_GEM = T.let(T.unsafe(nil), Hash) # source://spoom//lib/spoom/deadcode/plugins/base.rb#8 @@ -2261,13 +2196,13 @@ end class Spoom::Deadcode::Plugins::ActionPack < ::Spoom::Deadcode::Plugins::Base # : (Model::Method definition) -> void # - # source://spoom//lib/spoom/deadcode/plugins/actionpack.rb#30 + # source://spoom//lib/spoom/deadcode/plugins/actionpack.rb#27 sig { override.params(definition: ::Spoom::Model::Method).void } def on_define_method(definition); end # : (Send send) -> void # - # source://spoom//lib/spoom/deadcode/plugins/actionpack.rb#39 + # source://spoom//lib/spoom/deadcode/plugins/actionpack.rb#36 sig { override.params(send: ::Spoom::Deadcode::Send).void } def on_send(send); end end @@ -2291,18 +2226,22 @@ end class Spoom::Deadcode::Plugins::ActiveRecord < ::Spoom::Deadcode::Plugins::Base # : (Send send) -> void # - # source://spoom//lib/spoom/deadcode/plugins/active_record.rb#73 + # source://spoom//lib/spoom/deadcode/plugins/active_record.rb#64 sig { override.params(send: ::Spoom::Deadcode::Send).void } def on_send(send); end end -# source://spoom//lib/spoom/deadcode/plugins/active_record.rb#62 +# : Array[String] +# +# source://spoom//lib/spoom/deadcode/plugins/active_record.rb#56 Spoom::Deadcode::Plugins::ActiveRecord::ARRAY_METHODS = T.let(T.unsafe(nil), Array) # source://spoom//lib/spoom/deadcode/plugins/active_record.rb#18 Spoom::Deadcode::Plugins::ActiveRecord::CALLBACKS = T.let(T.unsafe(nil), Array) -# source://spoom//lib/spoom/deadcode/plugins/active_record.rb#47 +# : Array[String] +# +# source://spoom//lib/spoom/deadcode/plugins/active_record.rb#44 Spoom::Deadcode::Plugins::ActiveRecord::CRUD_METHODS = T.let(T.unsafe(nil), Array) # source://spoom//lib/spoom/deadcode/plugins/active_support.rb#7 @@ -2314,6 +2253,8 @@ class Spoom::Deadcode::Plugins::ActiveSupport < ::Spoom::Deadcode::Plugins::Base def on_send(send); end end +# : Array[String] +# # source://spoom//lib/spoom/deadcode/plugins/active_support.rb#19 Spoom::Deadcode::Plugins::ActiveSupport::SETUP_AND_TEARDOWN_METHODS = T.let(T.unsafe(nil), Array) @@ -2341,7 +2282,6 @@ class Spoom::Deadcode::Plugins::Base # : (Model::Attr definition) -> void # # source://spoom//lib/spoom/deadcode/plugins/base.rb#155 - # Do not override this method, use `on_define_accessor` instead. sig { params(definition: ::Spoom::Model::Attr).void } def internal_on_define_accessor(definition); end @@ -2349,7 +2289,6 @@ class Spoom::Deadcode::Plugins::Base # : (Model::Class definition) -> void # # source://spoom//lib/spoom/deadcode/plugins/base.rb#179 - # Do not override this method, use `on_define_class` instead. sig { params(definition: ::Spoom::Model::Class).void } def internal_on_define_class(definition); end @@ -2357,7 +2296,6 @@ class Spoom::Deadcode::Plugins::Base # : (Model::Constant definition) -> void # # source://spoom//lib/spoom/deadcode/plugins/base.rb#209 - # Do not override this method, use `on_define_constant` instead. sig { params(definition: ::Spoom::Model::Constant).void } def internal_on_define_constant(definition); end @@ -2365,7 +2303,6 @@ class Spoom::Deadcode::Plugins::Base # : (Model::Method definition) -> void # # source://spoom//lib/spoom/deadcode/plugins/base.rb#235 - # Do not override this method, use `on_define_method` instead. sig { params(definition: ::Spoom::Model::Method).void } def internal_on_define_method(definition); end @@ -2373,7 +2310,6 @@ class Spoom::Deadcode::Plugins::Base # : (Model::Module definition) -> void # # source://spoom//lib/spoom/deadcode/plugins/base.rb#261 - # Do not override this method, use `on_define_module` instead. sig { params(definition: ::Spoom::Model::Module).void } def internal_on_define_module(definition); end @@ -2393,17 +2329,6 @@ class Spoom::Deadcode::Plugins::Base # : (Model::Attr definition) -> void # # source://spoom//lib/spoom/deadcode/plugins/base.rb#149 - # Called when an accessor is defined. - # Will be called when the indexer processes a `attr_reader`, `attr_writer` or `attr_accessor` node. - # Note that when this method is called, the definition for the node has already been added to the index. - # It is still possible to ignore it from the plugin: - # ~~~rb - # class MyPlugin < Spoom::Deadcode::Plugins::Base - # def on_define_accessor(definition) - # @index.ignore(definition) if symbol_def.name == "foo" - # end - # end - # ~~~ sig { params(definition: ::Spoom::Model::Attr).void } def on_define_accessor(definition); end @@ -2423,17 +2348,6 @@ class Spoom::Deadcode::Plugins::Base # : (Model::Class definition) -> void # # source://spoom//lib/spoom/deadcode/plugins/base.rb#173 - # Called when a class is defined. - # Will be called when the indexer processes a `class` node. - # Note that when this method is called, the definition for the node has already been added to the index. - # It is still possible to ignore it from the plugin: - # ~~~rb - # class MyPlugin < Spoom::Deadcode::Plugins::Base - # def on_define_class(definition) - # @index.ignore(definition) if definition.name == "Foo" - # end - # end - # ~~~ sig { params(definition: ::Spoom::Model::Class).void } def on_define_class(definition); end @@ -2453,17 +2367,6 @@ class Spoom::Deadcode::Plugins::Base # : (Model::Constant definition) -> void # # source://spoom//lib/spoom/deadcode/plugins/base.rb#203 - # Called when a constant is defined. - # Will be called when the indexer processes a `CONST =` node. - # Note that when this method is called, the definition for the node has already been added to the index. - # It is still possible to ignore it from the plugin: - # ~~~rb - # class MyPlugin < Spoom::Deadcode::Plugins::Base - # def on_define_constant(definition) - # @index.ignore(definition) if definition.name == "FOO" - # end - # end - # ~~~ sig { params(definition: ::Spoom::Model::Constant).void } def on_define_constant(definition); end @@ -2483,17 +2386,6 @@ class Spoom::Deadcode::Plugins::Base # : (Model::Method definition) -> void # # source://spoom//lib/spoom/deadcode/plugins/base.rb#229 - # Called when a method is defined. - # Will be called when the indexer processes a `def` or `defs` node. - # Note that when this method is called, the definition for the node has already been added to the index. - # It is still possible to ignore it from the plugin: - # ~~~rb - # class MyPlugin < Spoom::Deadcode::Plugins::Base - # def on_define_method(definition) - # @index.ignore(definition) if definition.name == "foo" - # end - # end - # ~~~ sig { params(definition: ::Spoom::Model::Method).void } def on_define_method(definition); end @@ -2513,17 +2405,6 @@ class Spoom::Deadcode::Plugins::Base # : (Model::Module definition) -> void # # source://spoom//lib/spoom/deadcode/plugins/base.rb#255 - # Called when a module is defined. - # Will be called when the indexer processes a `module` node. - # Note that when this method is called, the definition for the node has already been added to the index. - # It is still possible to ignore it from the plugin: - # ~~~rb - # class MyPlugin < Spoom::Deadcode::Plugins::Base - # def on_define_module(definition) - # @index.ignore(definition) if definition.name == "Foo" - # end - # end - # ~~~ sig { params(definition: ::Spoom::Model::Module).void } def on_define_module(definition); end @@ -2543,17 +2424,6 @@ class Spoom::Deadcode::Plugins::Base # : (Send send) -> void # # source://spoom//lib/spoom/deadcode/plugins/base.rb#281 - # Called when a send is being processed - # ~~~rb - # class MyPlugin < Spoom::Deadcode::Plugins::Base - # def on_send(send) - # return unless send.name == "dsl_method" - # return if send.args.empty? - # method_name = send.args.first.slice.delete_prefix(":") - # @index.reference_method(method_name, send.node, send.loc) - # end - # end - # ~~~ sig { params(send: ::Spoom::Deadcode::Send).void } def on_send(send); end @@ -2562,7 +2432,6 @@ class Spoom::Deadcode::Plugins::Base # : (String name) -> String # # source://spoom//lib/spoom/deadcode/plugins/base.rb#349 - # Plugin utils sig { params(name: ::String).returns(::String) } def camelize(name); end @@ -2631,7 +2500,6 @@ class Spoom::Deadcode::Plugins::Base # @return [Boolean] # # source://spoom//lib/spoom/deadcode/plugins/base.rb#290 - # DSL support sig { params(definition: ::Spoom::Model::Namespace, superclass_name: ::String).returns(T::Boolean) } def subclass_of?(definition, superclass_name); end @@ -2652,17 +2520,6 @@ class Spoom::Deadcode::Plugins::Base # : (*(String | Regexp) names) -> void # # source://spoom//lib/spoom/deadcode/plugins/base.rb#49 - # Mark classes directly subclassing a class matching `names` as ignored. - # Names can be either strings or regexps: - # ~~~rb - # class MyPlugin < Spoom::Deadcode::Plugins::Base - # ignore_classes_inheriting_from( - # "Foo", - # "Bar", - # /Baz.*/, - # ) - # end - # ~~~ sig { params(names: T.any(::Regexp, ::String)).void } def ignore_classes_inheriting_from(*names); end @@ -2682,17 +2539,6 @@ class Spoom::Deadcode::Plugins::Base # : (*(String | Regexp) names) -> void # # source://spoom//lib/spoom/deadcode/plugins/base.rb#31 - # Mark classes matching `names` as ignored. - # Names can be either strings or regexps: - # ~~~rb - # class MyPlugin < Spoom::Deadcode::Plugins::Base - # ignore_class_names( - # "Foo", - # "Bar", - # /Baz.*/, - # ) - # end - # ~~~ sig { params(names: T.any(::Regexp, ::String)).void } def ignore_classes_named(*names); end @@ -2712,17 +2558,6 @@ class Spoom::Deadcode::Plugins::Base # : (*(String | Regexp) names) -> void # # source://spoom//lib/spoom/deadcode/plugins/base.rb#67 - # Mark constants matching `names` as ignored. - # Names can be either strings or regexps: - # ~~~rb - # class MyPlugin < Spoom::Deadcode::Plugins::Base - # ignore_class_names( - # "FOO", - # "BAR", - # /BAZ.*/, - # ) - # end - # ~~~ sig { params(names: T.any(::Regexp, ::String)).void } def ignore_constants_named(*names); end @@ -2742,17 +2577,6 @@ class Spoom::Deadcode::Plugins::Base # : (*(String | Regexp) names) -> void # # source://spoom//lib/spoom/deadcode/plugins/base.rb#85 - # Mark methods matching `names` as ignored. - # Names can be either strings or regexps: - # ~~~rb - # class MyPlugin < Spoom::Deadcode::Plugins::Base - # ignore_method_names( - # "foo", - # "bar", - # /baz.*/, - # ) - # end - # ~~~ sig { params(names: T.any(::Regexp, ::String)).void } def ignore_methods_named(*names); end @@ -2772,17 +2596,6 @@ class Spoom::Deadcode::Plugins::Base # : (*(String | Regexp) names) -> void # # source://spoom//lib/spoom/deadcode/plugins/base.rb#103 - # Mark modules matching `names` as ignored. - # Names can be either strings or regexps: - # ~~~rb - # class MyPlugin < Spoom::Deadcode::Plugins::Base - # ignore_class_names( - # "Foo", - # "Bar", - # /Baz.*/, - # ) - # end - # ~~~ sig { params(names: T.any(::Regexp, ::String)).void } def ignore_modules_named(*names); end @@ -2897,6 +2710,8 @@ class Spoom::Deadcode::Plugins::Rubocop < ::Spoom::Deadcode::Plugins::Base def on_define_method(definition); end end +# : Set[String] +# # source://spoom//lib/spoom/deadcode/plugins/rubocop.rb#8 Spoom::Deadcode::Plugins::Rubocop::RUBOCOP_CONSTANTS = T.let(T.unsafe(nil), Set) @@ -2979,13 +2794,13 @@ end # source://spoom//lib/spoom/deadcode/remover.rb#7 class Spoom::Deadcode::Remover::Error < ::Spoom::Error; end -# source://spoom//lib/spoom/deadcode/remover.rb#362 +# source://spoom//lib/spoom/deadcode/remover.rb#366 class Spoom::Deadcode::Remover::NodeContext # : (String source, Hash[Integer, Prism::Comment] comments, Prism::Node node, Array[Prism::Node] nesting) -> void # # @return [NodeContext] a new instance of NodeContext # - # source://spoom//lib/spoom/deadcode/remover.rb#373 + # source://spoom//lib/spoom/deadcode/remover.rb#377 sig do params( source: ::String, @@ -2998,49 +2813,48 @@ class Spoom::Deadcode::Remover::NodeContext # : (Prism::Node node) -> Array[Prism::Comment] # - # source://spoom//lib/spoom/deadcode/remover.rb#487 + # source://spoom//lib/spoom/deadcode/remover.rb#491 sig { params(node: ::Prism::Node).returns(T::Array[::Prism::Comment]) } def attached_comments(node); end # : -> Prism::CallNode? # - # source://spoom//lib/spoom/deadcode/remover.rb#515 + # source://spoom//lib/spoom/deadcode/remover.rb#519 sig { returns(T.nilable(::Prism::CallNode)) } def attached_sig; end # : -> Array[Prism::Node] # - # source://spoom//lib/spoom/deadcode/remover.rb#502 + # source://spoom//lib/spoom/deadcode/remover.rb#506 sig { returns(T::Array[::Prism::Node]) } def attached_sigs; end # : Hash[Integer, Prism::Comment] # - # source://spoom//lib/spoom/deadcode/remover.rb#364 + # source://spoom//lib/spoom/deadcode/remover.rb#368 sig { returns(T::Hash[::Integer, ::Prism::Comment]) } def comments; end # : (Integer start_line, Integer end_line) -> Array[Prism::Comment] # - # source://spoom//lib/spoom/deadcode/remover.rb#475 + # source://spoom//lib/spoom/deadcode/remover.rb#479 sig { params(start_line: ::Integer, end_line: ::Integer).returns(T::Array[::Prism::Comment]) } def comments_between_lines(start_line, end_line); end # : Array[Prism::Node] # - # source://spoom//lib/spoom/deadcode/remover.rb#370 + # source://spoom//lib/spoom/deadcode/remover.rb#374 sig { returns(T::Array[::Prism::Node]) } def nesting; end # : Array[Prism::Node] # - # source://spoom//lib/spoom/deadcode/remover.rb#370 - # @return [Array] + # source://spoom//lib/spoom/deadcode/remover.rb#374 def nesting=(_arg0); end # : -> Prism::Node? # - # source://spoom//lib/spoom/deadcode/remover.rb#425 + # source://spoom//lib/spoom/deadcode/remover.rb#429 sig { returns(T.nilable(::Prism::Node)) } def next_node; end @@ -3048,13 +2862,13 @@ class Spoom::Deadcode::Remover::NodeContext # # @raise [Error] # - # source://spoom//lib/spoom/deadcode/remover.rb#414 + # source://spoom//lib/spoom/deadcode/remover.rb#418 sig { returns(T::Array[::Prism::Node]) } def next_nodes; end # : Prism::Node # - # source://spoom//lib/spoom/deadcode/remover.rb#367 + # source://spoom//lib/spoom/deadcode/remover.rb#371 sig { returns(::Prism::Node) } def node; end @@ -3062,7 +2876,7 @@ class Spoom::Deadcode::Remover::NodeContext # # @raise [Error] # - # source://spoom//lib/spoom/deadcode/remover.rb#389 + # source://spoom//lib/spoom/deadcode/remover.rb#393 sig { returns(::Spoom::Deadcode::Remover::NodeContext) } def parent_context; end @@ -3070,13 +2884,13 @@ class Spoom::Deadcode::Remover::NodeContext # # @raise [Error] # - # source://spoom//lib/spoom/deadcode/remover.rb#381 + # source://spoom//lib/spoom/deadcode/remover.rb#385 sig { returns(::Prism::Node) } def parent_node; end # : -> Prism::Node? # - # source://spoom//lib/spoom/deadcode/remover.rb#409 + # source://spoom//lib/spoom/deadcode/remover.rb#413 sig { returns(T.nilable(::Prism::Node)) } def previous_node; end @@ -3084,13 +2898,13 @@ class Spoom::Deadcode::Remover::NodeContext # # @raise [Error] # - # source://spoom//lib/spoom/deadcode/remover.rb#398 + # source://spoom//lib/spoom/deadcode/remover.rb#402 sig { returns(T::Array[::Prism::Node]) } def previous_nodes; end # : -> NodeContext? # - # source://spoom//lib/spoom/deadcode/remover.rb#430 + # source://spoom//lib/spoom/deadcode/remover.rb#434 sig { returns(T.nilable(::Spoom::Deadcode::Remover::NodeContext)) } def sclass_context; end @@ -3098,7 +2912,7 @@ class Spoom::Deadcode::Remover::NodeContext # # @return [Boolean] # - # source://spoom//lib/spoom/deadcode/remover.rb#463 + # source://spoom//lib/spoom/deadcode/remover.rb#467 sig { params(node: T.nilable(::Prism::Node)).returns(T::Boolean) } def sorbet_extend_sig?(node); end @@ -3106,43 +2920,43 @@ class Spoom::Deadcode::Remover::NodeContext # # @return [Boolean] # - # source://spoom//lib/spoom/deadcode/remover.rb#458 + # source://spoom//lib/spoom/deadcode/remover.rb#462 sig { params(node: T.nilable(::Prism::Node)).returns(T::Boolean) } def sorbet_signature?(node); end end -# source://spoom//lib/spoom/deadcode/remover.rb#530 +# source://spoom//lib/spoom/deadcode/remover.rb#534 class Spoom::Deadcode::Remover::NodeFinder < ::Spoom::Visitor # : (Location location, Definition::Kind? kind) -> void # # @return [NodeFinder] a new instance of NodeFinder # - # source://spoom//lib/spoom/deadcode/remover.rb#598 + # source://spoom//lib/spoom/deadcode/remover.rb#599 sig { params(location: ::Spoom::Location, kind: T.nilable(::Spoom::Deadcode::Definition::Kind)).void } def initialize(location, kind); end # : Prism::Node? # - # source://spoom//lib/spoom/deadcode/remover.rb#592 + # source://spoom//lib/spoom/deadcode/remover.rb#593 sig { returns(T.nilable(::Prism::Node)) } def node; end # : Array[Prism::Node] # - # source://spoom//lib/spoom/deadcode/remover.rb#595 + # source://spoom//lib/spoom/deadcode/remover.rb#596 sig { returns(T::Array[::Prism::Node]) } def nodes_nesting; end # : (Prism::Node? node) -> void # - # source://spoom//lib/spoom/deadcode/remover.rb#608 + # source://spoom//lib/spoom/deadcode/remover.rb#609 sig { override.params(node: T.nilable(::Prism::Node)).void } def visit(node); end class << self # : (String source, Location location, Definition::Kind? kind) -> NodeContext # - # source://spoom//lib/spoom/deadcode/remover.rb#533 + # source://spoom//lib/spoom/deadcode/remover.rb#537 sig do params( source: ::String, @@ -3156,7 +2970,7 @@ class Spoom::Deadcode::Remover::NodeFinder < ::Spoom::Visitor # # @return [Boolean] # - # source://spoom//lib/spoom/deadcode/remover.rb#567 + # source://spoom//lib/spoom/deadcode/remover.rb#568 sig { params(node: ::Prism::Node, kind: ::Spoom::Deadcode::Definition::Kind).returns(T::Boolean) } def node_match_kind?(node, kind); end end @@ -3194,13 +3008,13 @@ class Spoom::Deadcode::Remover::NodeRemover # : (NodeContext context) -> void # - # source://spoom//lib/spoom/deadcode/remover.rb#149 + # source://spoom//lib/spoom/deadcode/remover.rb#151 sig { params(context: ::Spoom::Deadcode::Remover::NodeContext).void } def delete_attr_accessor(context); end # : (Integer start_char, Integer end_char) -> void # - # source://spoom//lib/spoom/deadcode/remover.rb#321 + # source://spoom//lib/spoom/deadcode/remover.rb#325 sig { params(start_char: ::Integer, end_char: ::Integer).void } def delete_chars(start_char, end_char); end @@ -3212,19 +3026,19 @@ class Spoom::Deadcode::Remover::NodeRemover # : (Integer start_line, Integer end_line) -> void # - # source://spoom//lib/spoom/deadcode/remover.rb#314 + # source://spoom//lib/spoom/deadcode/remover.rb#318 sig { params(start_line: ::Integer, end_line: ::Integer).void } def delete_lines(start_line, end_line); end # : (NodeContext context) -> void # - # source://spoom//lib/spoom/deadcode/remover.rb#251 + # source://spoom//lib/spoom/deadcode/remover.rb#255 sig { params(context: ::Spoom::Deadcode::Remover::NodeContext).void } def delete_node_and_comments_and_sigs(context); end # : (Prism::Node node, NodeContext send_context, was_removed: bool) -> void # - # source://spoom//lib/spoom/deadcode/remover.rb#208 + # source://spoom//lib/spoom/deadcode/remover.rb#212 sig do params( node: ::Prism::Node, @@ -3236,13 +3050,13 @@ class Spoom::Deadcode::Remover::NodeRemover # : (Integer start_char, Integer end_char, String replacement) -> void # - # source://spoom//lib/spoom/deadcode/remover.rb#326 + # source://spoom//lib/spoom/deadcode/remover.rb#330 sig { params(start_char: ::Integer, end_char: ::Integer, replacement: ::String).void } def replace_chars(start_char, end_char, replacement); end # : (Prism::CallNode node, name: String, kind: Definition::Kind?) -> String # - # source://spoom//lib/spoom/deadcode/remover.rb#331 + # source://spoom//lib/spoom/deadcode/remover.rb#335 sig do params( node: ::Prism::CallNode, @@ -3283,7 +3097,7 @@ class Spoom::Deadcode::Send < ::T::Struct def each_arg_assoc(&block); end class << self - # source://sorbet-runtime/0.5.12026/lib/types/struct.rb#13 + # source://sorbet-runtime/0.5.12079/lib/types/struct.rb#13 def inherited(s); end end end @@ -3305,7 +3119,7 @@ class Spoom::ExecResult < ::T::Struct def to_s; end class << self - # source://sorbet-runtime/0.5.12026/lib/types/struct.rb#13 + # source://sorbet-runtime/0.5.12079/lib/types/struct.rb#13 def inherited(s); end end end @@ -3325,12 +3139,6 @@ class Spoom::FileCollector # @return [FileCollector] a new instance of FileCollector # # source://spoom//lib/spoom/file_collector.rb#18 - # Initialize a new file collector - # If `allow_extensions` is empty, all files are collected. - # If `allow_extensions` is an array of extensions, only files with one of these extensions are collected. - # If `allow_mime_types` is empty, all files are collected. - # If `allow_mime_types` is an array of mimetypes, files without an extension are collected if their mimetype is in - # the list. sig do params( allow_extensions: T::Array[::String], @@ -3419,8 +3227,6 @@ class Spoom::FileTree # : (String path) -> Node # # source://spoom//lib/spoom/file_tree.rb#23 - # Add a `path` to the tree - # This will create all nodes until the root of `path`. sig { params(path: ::String).returns(::Spoom::FileTree::Node) } def add_path(path); end @@ -3428,7 +3234,6 @@ class Spoom::FileTree # : (T::Enumerable[String] paths) -> void # # source://spoom//lib/spoom/file_tree.rb#15 - # Add all `paths` to the tree sig { params(paths: T::Enumerable[::String]).void } def add_paths(paths); end @@ -3436,7 +3241,6 @@ class Spoom::FileTree # : -> Array[Node] # # source://spoom//lib/spoom/file_tree.rb#43 - # All the nodes in this tree sig { returns(T::Array[::Spoom::FileTree::Node]) } def nodes; end @@ -3444,7 +3248,6 @@ class Spoom::FileTree # : (Context context) -> Hash[Node, Float] # # source://spoom//lib/spoom/file_tree.rb#57 - # Return a map of typing scores for each node in the tree sig { params(context: ::Spoom::Context).returns(T::Hash[::Spoom::FileTree::Node, ::Float]) } def nodes_strictness_scores(context); end @@ -3452,7 +3255,6 @@ class Spoom::FileTree # : -> Array[String] # # source://spoom//lib/spoom/file_tree.rb#51 - # All the paths in this tree sig { returns(T::Array[::String]) } def paths; end @@ -3460,7 +3262,6 @@ class Spoom::FileTree # : (Context context) -> Hash[String, Float] # # source://spoom//lib/spoom/file_tree.rb#65 - # Return a map of typing scores for each path in the tree sig { params(context: ::Spoom::Context).returns(T::Hash[::String, ::Float]) } def paths_strictness_scores(context); end @@ -3474,7 +3275,6 @@ class Spoom::FileTree # : -> Array[Node] # # source://spoom//lib/spoom/file_tree.rb#37 - # All root nodes sig { returns(T::Array[::Spoom::FileTree::Node]) } def roots; end end @@ -3580,12 +3380,11 @@ class Spoom::FileTree::Node < ::T::Struct # : -> String # # source://spoom//lib/spoom/file_tree.rb#88 - # Full path to this node from root sig { returns(::String) } def path; end class << self - # source://sorbet-runtime/0.5.12026/lib/types/struct.rb#13 + # source://sorbet-runtime/0.5.12079/lib/types/struct.rb#13 def inherited(s); end end end @@ -3595,7 +3394,6 @@ end # See `FileTree#print` # # source://spoom//lib/spoom/file_tree.rb#204 -# An internal class used to print a FileTree class Spoom::FileTree::Printer < ::Spoom::FileTree::Visitor # : (Hash[FileTree::Node, String?] strictnesses, ?out: (IO | StringIO), ?colors: bool) -> void # @@ -3668,14 +3466,13 @@ class Spoom::Git::Commit < ::T::Struct def timestamp; end class << self - # source://sorbet-runtime/0.5.12026/lib/types/struct.rb#13 + # source://sorbet-runtime/0.5.12079/lib/types/struct.rb#13 def inherited(s); end # Parse a line formatted as `%h %at` into a `Commit` # : (String string) -> Commit? # # source://spoom//lib/spoom/context/git.rb#10 - # Parse a line formatted as `%h %at` into a `Commit` sig { params(string: ::String).returns(T.nilable(::Spoom::Git::Commit)) } def parse_line(string); end end @@ -3729,7 +3526,6 @@ class Spoom::LSP::Client # @raise [Error::AlreadyOpen] # # source://spoom//lib/spoom/sorbet/lsp.rb#70 - # LSP requests sig { params(workspace_path: ::String).void } def open(workspace_path); end @@ -3819,7 +3615,7 @@ class Spoom::LSP::Diagnostic < ::T::Struct sig { params(json: T::Hash[T.untyped, T.untyped]).returns(::Spoom::LSP::Diagnostic) } def from_json(json); end - # source://sorbet-runtime/0.5.12026/lib/types/struct.rb#13 + # source://sorbet-runtime/0.5.12079/lib/types/struct.rb#13 def inherited(s); end end end @@ -3860,7 +3656,7 @@ class Spoom::LSP::DocumentSymbol < ::T::Struct sig { params(json: T::Hash[T.untyped, T.untyped]).returns(::Spoom::LSP::DocumentSymbol) } def from_json(json); end - # source://sorbet-runtime/0.5.12026/lib/types/struct.rb#13 + # source://sorbet-runtime/0.5.12079/lib/types/struct.rb#13 def inherited(s); end end end @@ -3934,7 +3730,7 @@ class Spoom::LSP::Hover < ::T::Struct sig { params(json: T::Hash[T.untyped, T.untyped]).returns(::Spoom::LSP::Hover) } def from_json(json); end - # source://sorbet-runtime/0.5.12026/lib/types/struct.rb#13 + # source://sorbet-runtime/0.5.12079/lib/types/struct.rb#13 def inherited(s); end end end @@ -3965,7 +3761,7 @@ class Spoom::LSP::Location < ::T::Struct sig { params(json: T::Hash[T.untyped, T.untyped]).returns(::Spoom::LSP::Location) } def from_json(json); end - # source://sorbet-runtime/0.5.12026/lib/types/struct.rb#13 + # source://sorbet-runtime/0.5.12079/lib/types/struct.rb#13 def inherited(s); end end end @@ -3975,7 +3771,6 @@ end # The language server protocol always uses `"2.0"` as the `jsonrpc` version. # # source://spoom//lib/spoom/sorbet/lsp/base.rb#12 -# A general message as defined by JSON-RPC. class Spoom::LSP::Message # : -> void # @@ -4003,7 +3798,6 @@ end # A processed notification message must not send a response back. They work like events. # # source://spoom//lib/spoom/sorbet/lsp/base.rb#54 -# A notification message. class Spoom::LSP::Notification < ::Spoom::LSP::Message # : (String method, Hash[untyped, untyped] params) -> void # @@ -4052,7 +3846,7 @@ class Spoom::LSP::Position < ::T::Struct sig { params(json: T::Hash[T.untyped, T.untyped]).returns(::Spoom::LSP::Position) } def from_json(json); end - # source://sorbet-runtime/0.5.12026/lib/types/struct.rb#13 + # source://sorbet-runtime/0.5.12079/lib/types/struct.rb#13 def inherited(s); end end end @@ -4096,7 +3890,7 @@ class Spoom::LSP::Range < ::T::Struct sig { params(json: T::Hash[T.untyped, T.untyped]).returns(::Spoom::LSP::Range) } def from_json(json); end - # source://sorbet-runtime/0.5.12026/lib/types/struct.rb#13 + # source://sorbet-runtime/0.5.12079/lib/types/struct.rb#13 def inherited(s); end end end @@ -4106,7 +3900,6 @@ end # Every processed request must send a response back to the sender of the request. # # source://spoom//lib/spoom/sorbet/lsp/base.rb#35 -# A request message to describe a request between the client and the server. class Spoom::LSP::Request < ::Spoom::LSP::Message # : (Integer id, String method, Hash[untyped, untyped] params) -> void # @@ -4187,18 +3980,18 @@ class Spoom::LSP::SignatureHelp < ::T::Struct sig { params(json: T::Hash[T.untyped, T.untyped]).returns(::Spoom::LSP::SignatureHelp) } def from_json(json); end - # source://sorbet-runtime/0.5.12026/lib/types/struct.rb#13 + # source://sorbet-runtime/0.5.12079/lib/types/struct.rb#13 def inherited(s); end end end -# source://spoom//lib/spoom/sorbet/lsp/structures.rb#295 +# source://spoom//lib/spoom/sorbet/lsp/structures.rb#292 class Spoom::LSP::SymbolPrinter < ::Spoom::Printer # : (?out: (IO | StringIO), ?colors: bool, ?indent_level: Integer, ?prefix: String?) -> void # # @return [SymbolPrinter] a new instance of SymbolPrinter # - # source://spoom//lib/spoom/sorbet/lsp/structures.rb#303 + # source://spoom//lib/spoom/sorbet/lsp/structures.rb#300 sig do params( out: T.any(::IO, ::StringIO), @@ -4211,43 +4004,42 @@ class Spoom::LSP::SymbolPrinter < ::Spoom::Printer # : (String uri) -> String # - # source://spoom//lib/spoom/sorbet/lsp/structures.rb#325 + # source://spoom//lib/spoom/sorbet/lsp/structures.rb#322 sig { params(uri: ::String).returns(::String) } def clean_uri(uri); end # : String? # - # source://spoom//lib/spoom/sorbet/lsp/structures.rb#300 + # source://spoom//lib/spoom/sorbet/lsp/structures.rb#297 sig { returns(T.nilable(::String)) } def prefix; end # : String? # - # source://spoom//lib/spoom/sorbet/lsp/structures.rb#300 - # @return [String, nil] + # source://spoom//lib/spoom/sorbet/lsp/structures.rb#297 def prefix=(_arg0); end # : (Array[PrintableSymbol] objects) -> void # - # source://spoom//lib/spoom/sorbet/lsp/structures.rb#333 + # source://spoom//lib/spoom/sorbet/lsp/structures.rb#330 sig { params(objects: T::Array[::Spoom::LSP::PrintableSymbol]).void } def print_list(objects); end # : (PrintableSymbol? object) -> void # - # source://spoom//lib/spoom/sorbet/lsp/structures.rb#313 + # source://spoom//lib/spoom/sorbet/lsp/structures.rb#310 sig { params(object: T.nilable(::Spoom::LSP::PrintableSymbol)).void } def print_object(object); end # : (Array[PrintableSymbol] objects) -> void # - # source://spoom//lib/spoom/sorbet/lsp/structures.rb#320 + # source://spoom//lib/spoom/sorbet/lsp/structures.rb#317 sig { params(objects: T::Array[::Spoom::LSP::PrintableSymbol]).void } def print_objects(objects); end # : Set[Integer] # - # source://spoom//lib/spoom/sorbet/lsp/structures.rb#297 + # source://spoom//lib/spoom/sorbet/lsp/structures.rb#294 sig { returns(T::Set[::Integer]) } def seen; end end @@ -4282,13 +4074,11 @@ class Spoom::Location # : Integer? # # source://spoom//lib/spoom/location.rb#58 - # @return [Integer, nil] def end_column; end # : Integer? # # source://spoom//lib/spoom/location.rb#58 - # @return [Integer, nil] def end_line; end # : String @@ -4308,7 +4098,6 @@ class Spoom::Location # : Integer? # # source://spoom//lib/spoom/location.rb#58 - # @return [Integer, nil] def start_column; end # : Integer? @@ -4361,8 +4150,6 @@ class Spoom::Model # @raise [Error] # # source://spoom//lib/spoom/model/model.rb#244 - # Get a symbol by it's full name - # Raises an error if the symbol is not found sig { params(full_name: ::String).returns(::Spoom::Model::Symbol) } def [](full_name); end @@ -4378,8 +4165,6 @@ class Spoom::Model # : (String full_name) -> Symbol # # source://spoom//lib/spoom/model/model.rb#255 - # Register a new symbol by it's full name - # If the symbol already exists, it will be returned. sig { params(full_name: ::String).returns(::Spoom::Model::Symbol) } def register_symbol(full_name); end @@ -4405,7 +4190,6 @@ class Spoom::Model # : Hash[String, Symbol] # # source://spoom//lib/spoom/model/model.rb#229 - # All the symbols registered in this model sig { returns(T::Hash[::String, ::Spoom::Model::Symbol]) } def symbols; end @@ -4454,49 +4238,49 @@ class Spoom::Model::Builder < ::Spoom::Model::NamespaceVisitor # : (Prism::CallNode node) -> void # - # source://spoom//lib/spoom/model/builder.rb#165 + # source://spoom//lib/spoom/model/builder.rb#162 sig { override.params(node: ::Prism::CallNode).void } def visit_call_node(node); end # : (Prism::ClassNode node) -> void # - # source://spoom//lib/spoom/model/builder.rb#29 + # source://spoom//lib/spoom/model/builder.rb#26 sig { override.params(node: ::Prism::ClassNode).void } def visit_class_node(node); end # : (Prism::ConstantPathWriteNode node) -> void # - # source://spoom//lib/spoom/model/builder.rb#82 + # source://spoom//lib/spoom/model/builder.rb#79 sig { override.params(node: ::Prism::ConstantPathWriteNode).void } def visit_constant_path_write_node(node); end # : (Prism::ConstantWriteNode node) -> void # - # source://spoom//lib/spoom/model/builder.rb#105 + # source://spoom//lib/spoom/model/builder.rb#102 sig { override.params(node: ::Prism::ConstantWriteNode).void } def visit_constant_write_node(node); end # : (Prism::DefNode node) -> void # - # source://spoom//lib/spoom/model/builder.rb#144 + # source://spoom//lib/spoom/model/builder.rb#141 sig { override.params(node: ::Prism::DefNode).void } def visit_def_node(node); end # : (Prism::ModuleNode node) -> void # - # source://spoom//lib/spoom/model/builder.rb#64 + # source://spoom//lib/spoom/model/builder.rb#61 sig { override.params(node: ::Prism::ModuleNode).void } def visit_module_node(node); end # : (Prism::MultiWriteNode node) -> void # - # source://spoom//lib/spoom/model/builder.rb#121 + # source://spoom//lib/spoom/model/builder.rb#118 sig { override.params(node: ::Prism::MultiWriteNode).void } def visit_multi_write_node(node); end # : (Prism::SingletonClassNode node) -> void # - # source://spoom//lib/spoom/model/builder.rb#46 + # source://spoom//lib/spoom/model/builder.rb#43 sig { override.params(node: ::Prism::SingletonClassNode).void } def visit_singleton_class_node(node); end @@ -4504,25 +4288,25 @@ class Spoom::Model::Builder < ::Spoom::Model::NamespaceVisitor # : -> Array[Sig] # - # source://spoom//lib/spoom/model/builder.rb#256 + # source://spoom//lib/spoom/model/builder.rb#253 sig { returns(T::Array[::Spoom::Model::Sig]) } def collect_sigs; end # : -> Visibility # - # source://spoom//lib/spoom/model/builder.rb#251 + # source://spoom//lib/spoom/model/builder.rb#248 sig { returns(::Spoom::Model::Visibility) } def current_visibility; end # : (Prism::Node node) -> Array[Comment] # - # source://spoom//lib/spoom/model/builder.rb#268 + # source://spoom//lib/spoom/model/builder.rb#265 sig { params(node: ::Prism::Node).returns(T::Array[::Spoom::Model::Comment]) } def node_comments(node); end # : (Prism::Node node) -> Location # - # source://spoom//lib/spoom/model/builder.rb#263 + # source://spoom//lib/spoom/model/builder.rb#260 sig { params(node: ::Prism::Node).returns(::Spoom::Location) } def node_location(node); end end @@ -4554,7 +4338,6 @@ class Spoom::Model::Class < ::Spoom::Model::Namespace # : String? # # source://spoom//lib/spoom/model/model.rb#134 - # @return [String, nil] def superclass_name=(_arg0); end end @@ -4748,8 +4531,6 @@ end # Methods could be accessors, instance or class methods, aliases, etc. # # source://spoom//lib/spoom/model/reference.rb#10 -# A reference to something that looks like a constant or a method -# Constants could be classes, modules, or actual constants. class Spoom::Model::Reference < ::T::Struct const :kind, ::Spoom::Model::Reference::Kind const :name, ::String @@ -4778,7 +4559,7 @@ class Spoom::Model::Reference < ::T::Struct sig { params(name: ::String, location: ::Spoom::Location).returns(::Spoom::Model::Reference) } def constant(name, location); end - # source://sorbet-runtime/0.5.12026/lib/types/struct.rb#13 + # source://sorbet-runtime/0.5.12079/lib/types/struct.rb#13 def inherited(s); end # : (String name, Spoom::Location location) -> Reference @@ -4997,9 +4778,6 @@ class Spoom::Model::SingletonClass < ::Spoom::Model::Namespace; end # e.g. `foo` method can be defined both as a method and as an attribute accessor. # # source://spoom//lib/spoom/model/model.rb#27 -# A Symbol is a uniquely named entity in the Ruby codebase -# A symbol can have multiple definitions, e.g. a class can be reopened. -# Sometimes a symbol can have multiple definitions of different types, class Spoom::Model::Symbol # : (String full_name) -> void # @@ -5013,7 +4791,6 @@ class Spoom::Model::Symbol # : Array[SymbolDef] # # source://spoom//lib/spoom/model/model.rb#34 - # The definitions of this symbol (where it exists in the code) sig { returns(T::Array[::Spoom::Model::SymbolDef]) } def definitions; end @@ -5021,7 +4798,6 @@ class Spoom::Model::Symbol # : String # # source://spoom//lib/spoom/model/model.rb#30 - # The full, unique name of this symbol sig { returns(::String) } def full_name; end @@ -5029,7 +4805,6 @@ class Spoom::Model::Symbol # : -> String # # source://spoom//lib/spoom/model/model.rb#44 - # The short name of this symbol sig { returns(::String) } def name; end @@ -5048,8 +4823,6 @@ end # @abstract It cannot be directly instantiated. Subclasses must implement the `abstract` methods below. # # source://spoom//lib/spoom/model/model.rb#66 -# A SymbolDef is a definition of a Symbol -# It can be a class, module, constant, method, etc. class Spoom::Model::SymbolDef abstract! @@ -5072,7 +4845,6 @@ class Spoom::Model::SymbolDef # : Array[Comment] # # source://spoom//lib/spoom/model/model.rb#85 - # The comments associated with this definition sig { returns(T::Array[::Spoom::Model::Comment]) } def comments; end @@ -5080,7 +4852,6 @@ class Spoom::Model::SymbolDef # : -> String # # source://spoom//lib/spoom/model/model.rb#100 - # The full name of the symbol this definition belongs to sig { returns(::String) } def full_name; end @@ -5088,7 +4859,6 @@ class Spoom::Model::SymbolDef # : Location # # source://spoom//lib/spoom/model/model.rb#81 - # The actual code location of this definition sig { returns(::Spoom::Location) } def location; end @@ -5096,7 +4866,6 @@ class Spoom::Model::SymbolDef # : -> String # # source://spoom//lib/spoom/model/model.rb#106 - # The short name of the symbol this definition belongs to sig { returns(::String) } def name; end @@ -5104,7 +4873,6 @@ class Spoom::Model::SymbolDef # : Namespace? # # source://spoom//lib/spoom/model/model.rb#77 - # The enclosing namespace this definition belongs to sig { returns(T.nilable(::Spoom::Model::Namespace)) } def owner; end @@ -5112,7 +4880,6 @@ class Spoom::Model::SymbolDef # : Symbol # # source://spoom//lib/spoom/model/model.rb#73 - # The symbol this definition belongs to sig { returns(::Spoom::Model::Symbol) } def symbol; end end @@ -5144,8 +4911,6 @@ class Spoom::ParseError < ::Spoom::Error; end # It can be used to represent a hierarchy of classes or modules, the dependencies between gems, etc. # # source://spoom//lib/spoom/poset.rb#9 -# A Poset is a set of elements with a partial order relation. -# The partial order relation is a binary relation that is reflexive, antisymmetric, and transitive. class Spoom::Poset extend T::Generic @@ -5167,8 +4932,6 @@ class Spoom::Poset # @raise [Error] # # source://spoom//lib/spoom/poset.rb#25 - # Get the POSet element for a given value - # Raises if the element is not found sig { params(value: E).returns(Spoom::Poset::Element[E]) } def [](value); end @@ -5180,10 +4943,6 @@ class Spoom::Poset # : (E from, E to) -> void # # source://spoom//lib/spoom/poset.rb#53 - # Add a direct edge from one element to another - # Transitive edges (transitive closure) are automatically computed. - # Adds the elements if they don't exist. - # If the direct edge already exists, nothing is done. sig { params(from: E, to: E).void } def add_direct_edge(from, to); end @@ -5191,7 +4950,6 @@ class Spoom::Poset # : (E value) -> Element[E] # # source://spoom//lib/spoom/poset.rb#34 - # Add an element to the POSet sig { params(value: E).returns(Spoom::Poset::Element[E]) } def add_element(value); end @@ -5201,7 +4959,6 @@ class Spoom::Poset # @return [Boolean] # # source://spoom//lib/spoom/poset.rb#100 - # Is there a direct edge from `from` to `to`? sig { params(from: E, to: E).returns(T::Boolean) } def direct_edge?(from, to); end @@ -5211,7 +4968,6 @@ class Spoom::Poset # @return [Boolean] # # source://spoom//lib/spoom/poset.rb#91 - # Is there an edge (direct or indirect) from `from` to `to`? sig { params(from: E, to: E).returns(T::Boolean) } def edge?(from, to); end @@ -5221,7 +4977,6 @@ class Spoom::Poset # @return [Boolean] # # source://spoom//lib/spoom/poset.rb#43 - # Is the given value a element in the POSet? sig { params(value: E).returns(T::Boolean) } def element?(value); end @@ -5229,7 +4984,6 @@ class Spoom::Poset # : (?direct: bool, ?transitive: bool) -> void # # source://spoom//lib/spoom/poset.rb#106 - # Show the POSet as a DOT graph using xdot (used for debugging) sig { params(direct: T::Boolean, transitive: T::Boolean).void } def show_dot(direct: T.unsafe(nil), transitive: T.unsafe(nil)); end @@ -5237,7 +4991,6 @@ class Spoom::Poset # : (?direct: bool, ?transitive: bool) -> String # # source://spoom//lib/spoom/poset.rb#115 - # Return the POSet as a DOT graph sig { params(direct: T::Boolean, transitive: T::Boolean).returns(::String) } def to_dot(direct: T.unsafe(nil), transitive: T.unsafe(nil)); end end @@ -5269,7 +5022,6 @@ class Spoom::Poset::Element # : -> Array[E] # # source://spoom//lib/spoom/poset.rb#178 - # Direct and indirect ancestors of this element sig { returns(T::Array[E]) } def ancestors; end @@ -5277,7 +5029,6 @@ class Spoom::Poset::Element # : -> Array[E] # # source://spoom//lib/spoom/poset.rb#184 - # Direct children of this element sig { returns(T::Array[E]) } def children; end @@ -5285,7 +5036,6 @@ class Spoom::Poset::Element # : -> Array[E] # # source://spoom//lib/spoom/poset.rb#190 - # Direct and indirect descendants of this element sig { returns(T::Array[E]) } def descendants; end @@ -5293,15 +5043,12 @@ class Spoom::Poset::Element # : Set[Element[E]] # # source://spoom//lib/spoom/poset.rb#147 - # Edges (direct and indirect) from this element to other elements in the same POSet - # @return [Set] def dfroms; end # Edges (direct and indirect) from this element to other elements in the same POSet # : Set[Element[E]] # # source://spoom//lib/spoom/poset.rb#147 - # Edges (direct and indirect) from this element to other elements in the same POSet sig { returns(T::Set[Spoom::Poset::Element[E]]) } def dtos; end @@ -5309,15 +5056,12 @@ class Spoom::Poset::Element # : Set[Element[E]] # # source://spoom//lib/spoom/poset.rb#147 - # Edges (direct and indirect) from this element to other elements in the same POSet - # @return [Set] def froms; end # Direct parents of this element # : -> Array[E] # # source://spoom//lib/spoom/poset.rb#172 - # Direct parents of this element sig { returns(T::Array[E]) } def parents; end @@ -5325,15 +5069,12 @@ class Spoom::Poset::Element # : Set[Element[E]] # # source://spoom//lib/spoom/poset.rb#147 - # Edges (direct and indirect) from this element to other elements in the same POSet - # @return [Set] def tos; end # The value held by this element # : E # # source://spoom//lib/spoom/poset.rb#143 - # The value held by this element sig { returns(E) } def value; end end @@ -5357,7 +5098,6 @@ class Spoom::Printer # : (String string, *Spoom::Color color) -> String # # source://spoom//lib/spoom/printer.rb#75 - # Colorize `string` with color if `@colors` sig { params(string: ::String, color: ::Spoom::Color).returns(::String) } def colorize(string, *color); end @@ -5365,7 +5105,6 @@ class Spoom::Printer # : -> void # # source://spoom//lib/spoom/printer.rb#28 - # Decrease indent level sig { void } def dedent; end @@ -5373,7 +5112,6 @@ class Spoom::Printer # : -> void # # source://spoom//lib/spoom/printer.rb#22 - # Increase indent level sig { void } def indent; end @@ -5386,14 +5124,12 @@ class Spoom::Printer # : (IO | StringIO) # # source://spoom//lib/spoom/printer.rb#11 - # @return [IO, StringIO] def out=(_arg0); end # Print `string` into `out` # : (String? string) -> void # # source://spoom//lib/spoom/printer.rb#34 - # Print `string` into `out` sig { params(string: T.nilable(::String)).void } def print(string); end @@ -5403,8 +5139,6 @@ class Spoom::Printer # : (String? string, *Color color) -> void # # source://spoom//lib/spoom/printer.rb#44 - # Print `string` colored with `color` into `out` - # Does not use colors unless `@colors`. sig { params(string: T.nilable(::String), color: ::Spoom::Color).void } def print_colored(string, *color); end @@ -5412,7 +5146,6 @@ class Spoom::Printer # : (String? string) -> void # # source://spoom//lib/spoom/printer.rb#59 - # Print `string` with indent and newline sig { params(string: T.nilable(::String)).void } def printl(string); end @@ -5420,7 +5153,6 @@ class Spoom::Printer # : -> void # # source://spoom//lib/spoom/printer.rb#53 - # Print a new line into `out` sig { void } def printn; end @@ -5428,11 +5160,12 @@ class Spoom::Printer # : -> void # # source://spoom//lib/spoom/printer.rb#69 - # Print an indent space into `out` sig { void } def printt; end end +# : String +# # source://spoom//lib/spoom.rb#8 Spoom::SPOOM_PATH = T.let(T.unsafe(nil), String) @@ -5504,7 +5237,6 @@ class Spoom::Sorbet::Assertions::AssignNode # : Prism::Node # # source://spoom//lib/spoom/sorbet/assertions.rb#130 - # @return [Prism::Node] def type; end # : Prism::Node @@ -5547,7 +5279,6 @@ class Spoom::Sorbet::Assertions::Locator < ::Spoom::Visitor # @return [Boolean] # # source://spoom//lib/spoom/sorbet/assertions.rb#223 - # Is this node a `T` or `::T` constant? sig { params(node: T.nilable(::Prism::Node)).returns(T::Boolean) } def t?(node); end @@ -5557,7 +5288,6 @@ class Spoom::Sorbet::Assertions::Locator < ::Spoom::Visitor # @return [Boolean] # # source://spoom//lib/spoom/sorbet/assertions.rb#236 - # Is this node a `T.let` or `T.cast`? sig { params(node: ::Prism::CallNode).returns(T::Boolean) } def t_annotation?(node); end @@ -5697,6 +5427,8 @@ class Spoom::Sorbet::Assertions::Locator < ::Spoom::Visitor def visit_multi_write_node(node); end end +# : Array[Symbol] +# # source://spoom//lib/spoom/sorbet/assertions.rb#147 Spoom::Sorbet::Assertions::Locator::ANNOTATION_METHODS = T.let(T.unsafe(nil), Array) @@ -5723,6 +5455,8 @@ class Spoom::Sorbet::Assertions::Locator::HeredocVisitor < ::Spoom::Visitor def visit(node); end end +# : String +# # source://spoom//lib/spoom/sorbet.rb#33 Spoom::Sorbet::BIN_PATH = T.let(T.unsafe(nil), String) @@ -5751,19 +5485,6 @@ Spoom::Sorbet::CONFIG_PATH = T.let(T.unsafe(nil), String) # ``` # # source://spoom//lib/spoom/sorbet/config.rb#26 -# Parse Sorbet config files -# Parses a Sorbet config file: -# ```ruby -# config = Spoom::Sorbet::Config.parse_file("sorbet/config") -# puts config.paths # "." -# Parses a Sorbet config string: -# config = Spoom::Sorbet::Config.parse_string(<<~CONFIG) -# a -# --file=b -# --ignore=c -# CONFIG -# puts config.paths # "a", "b" -# puts config.ignore # "c" class Spoom::Sorbet::Config # : -> void # @@ -5776,13 +5497,11 @@ class Spoom::Sorbet::Config # : Array[String] # # source://spoom//lib/spoom/sorbet/config.rb#30 - # @return [Array] def allowed_extensions; end # : Array[String] # # source://spoom//lib/spoom/sorbet/config.rb#30 - # @return [Array] def allowed_extensions=(_arg0); end # : -> Config @@ -5794,13 +5513,11 @@ class Spoom::Sorbet::Config # : Array[String] # # source://spoom//lib/spoom/sorbet/config.rb#30 - # @return [Array] def ignore; end # : Array[String] # # source://spoom//lib/spoom/sorbet/config.rb#30 - # @return [Array] def ignore=(_arg0); end # : bool @@ -5812,7 +5529,6 @@ class Spoom::Sorbet::Config # : bool # # source://spoom//lib/spoom/sorbet/config.rb#33 - # @return [Boolean] def no_stdlib=(_arg0); end # Returns self as a string of options that can be passed to Sorbet @@ -5830,16 +5546,6 @@ class Spoom::Sorbet::Config # : -> String # # source://spoom//lib/spoom/sorbet/config.rb#66 - # Returns self as a string of options that can be passed to Sorbet - # Example: - # ~~~rb - # config = Sorbet::Config.new - # config.paths << "/foo" - # config.paths << "/bar" - # config.ignore << "/baz" - # config.allowed_extensions << ".rb" - # puts config.options_string # "/foo /bar --ignore /baz --allowed-extension .rb" - # ~~~ sig { returns(::String) } def options_string; end @@ -5852,7 +5558,6 @@ class Spoom::Sorbet::Config # : Array[String] # # source://spoom//lib/spoom/sorbet/config.rb#30 - # @return [Array] def paths=(_arg0); end class << self @@ -5878,6 +5583,8 @@ class Spoom::Sorbet::Config end end +# : Array[String] +# # source://spoom//lib/spoom/sorbet/config.rb#27 Spoom::Sorbet::Config::DEFAULT_ALLOWED_EXTENSIONS = T.let(T.unsafe(nil), Array) @@ -5904,21 +5611,27 @@ class Spoom::Sorbet::Error::Killed < ::Spoom::Sorbet::Error; end # source://spoom//lib/spoom/sorbet.rb#17 class Spoom::Sorbet::Error::Segfault < ::Spoom::Sorbet::Error; end -# source://spoom//lib/spoom/sorbet/errors.rb#6 +# source://spoom//lib/spoom/sorbet/errors.rb#8 module Spoom::Sorbet::Errors class << self # : (Array[Error] errors) -> Array[Error] # - # source://spoom//lib/spoom/sorbet/errors.rb#11 + # source://spoom//lib/spoom/sorbet/errors.rb#13 sig { params(errors: T::Array[::Spoom::Sorbet::Errors::Error]).returns(T::Array[::Spoom::Sorbet::Errors::Error]) } def sort_errors_by_code(errors); end + + # : (Array[Error]) -> REXML::Document + # + # source://spoom//lib/spoom/sorbet/errors.rb#18 + sig { params(errors: T::Array[::Spoom::Sorbet::Errors::Error]).returns(::REXML::Document) } + def to_junit_xml(errors); end end end -# source://spoom//lib/spoom/sorbet/errors.rb#7 +# source://spoom//lib/spoom/sorbet/errors.rb#9 Spoom::Sorbet::Errors::DEFAULT_ERROR_URL_BASE = T.let(T.unsafe(nil), String) -# source://spoom//lib/spoom/sorbet/errors.rb#121 +# source://spoom//lib/spoom/sorbet/errors.rb#149 class Spoom::Sorbet::Errors::Error include ::Comparable @@ -5926,7 +5639,7 @@ class Spoom::Sorbet::Errors::Error # # @return [Error] a new instance of Error # - # source://spoom//lib/spoom/sorbet/errors.rb#138 + # source://spoom//lib/spoom/sorbet/errors.rb#166 sig do params( file: T.nilable(::String), @@ -5941,71 +5654,73 @@ class Spoom::Sorbet::Errors::Error # By default errors are sorted by location # : (untyped other) -> Integer # - # source://spoom//lib/spoom/sorbet/errors.rb#149 - # By default errors are sorted by location + # source://spoom//lib/spoom/sorbet/errors.rb#177 sig { params(other: T.untyped).returns(::Integer) } def <=>(other); end # : Integer? # - # source://spoom//lib/spoom/sorbet/errors.rb#128 - # @return [Integer, nil] + # source://spoom//lib/spoom/sorbet/errors.rb#156 def code; end # : String? # - # source://spoom//lib/spoom/sorbet/errors.rb#125 + # source://spoom//lib/spoom/sorbet/errors.rb#153 sig { returns(T.nilable(::String)) } def file; end # Other files associated with the error # : Set[String] # - # source://spoom//lib/spoom/sorbet/errors.rb#135 - # Other files associated with the error + # source://spoom//lib/spoom/sorbet/errors.rb#163 sig { returns(T::Set[::String]) } def files_from_error_sections; end # : Integer? # - # source://spoom//lib/spoom/sorbet/errors.rb#128 + # source://spoom//lib/spoom/sorbet/errors.rb#156 sig { returns(T.nilable(::Integer)) } def line; end # : String? # - # source://spoom//lib/spoom/sorbet/errors.rb#125 - # @return [String, nil] + # source://spoom//lib/spoom/sorbet/errors.rb#153 def message; end # : Array[String] # - # source://spoom//lib/spoom/sorbet/errors.rb#131 + # source://spoom//lib/spoom/sorbet/errors.rb#159 sig { returns(T::Array[::String]) } def more; end + # : -> REXML::Element + # + # source://spoom//lib/spoom/sorbet/errors.rb#189 + sig { returns(::REXML::Element) } + def to_junit_xml_element; end + # : -> String # - # source://spoom//lib/spoom/sorbet/errors.rb#156 + # source://spoom//lib/spoom/sorbet/errors.rb#184 sig { returns(::String) } def to_s; end end # Parse errors from Sorbet output # -# source://spoom//lib/spoom/sorbet/errors.rb#16 +# source://spoom//lib/spoom/sorbet/errors.rb#47 class Spoom::Sorbet::Errors::Parser # : (?error_url_base: String) -> void # # @return [Parser] a new instance of Parser # - # source://spoom//lib/spoom/sorbet/errors.rb#39 + # source://spoom//lib/spoom/sorbet/errors.rb#67 sig { params(error_url_base: ::String).void } def initialize(error_url_base: T.unsafe(nil)); end # : (String output) -> Array[Error] # - # source://spoom//lib/spoom/sorbet/errors.rb#46 + # source://spoom//lib/spoom/sorbet/errors.rb#74 sig { params(output: ::String).returns(T::Array[::Spoom::Sorbet::Errors::Error]) } def parse(output); end @@ -6015,7 +5730,7 @@ class Spoom::Sorbet::Errors::Parser # # @raise [ParseError] # - # source://spoom//lib/spoom/sorbet/errors.rb#110 + # source://spoom//lib/spoom/sorbet/errors.rb#138 sig { params(line: ::String).void } def append_error(line); end @@ -6023,19 +5738,19 @@ class Spoom::Sorbet::Errors::Parser # # @raise [ParseError] # - # source://spoom//lib/spoom/sorbet/errors.rb#102 + # source://spoom//lib/spoom/sorbet/errors.rb#130 sig { void } def close_error; end # : (String error_url_base) -> Regexp # - # source://spoom//lib/spoom/sorbet/errors.rb#69 + # source://spoom//lib/spoom/sorbet/errors.rb#97 sig { params(error_url_base: ::String).returns(::Regexp) } def error_line_match_regexp(error_url_base); end # : (String line) -> Error? # - # source://spoom//lib/spoom/sorbet/errors.rb#86 + # source://spoom//lib/spoom/sorbet/errors.rb#114 sig { params(line: ::String).returns(T.nilable(::Spoom::Sorbet::Errors::Error)) } def match_error_line(line); end @@ -6043,28 +5758,32 @@ class Spoom::Sorbet::Errors::Parser # # @raise [ParseError] # - # source://spoom//lib/spoom/sorbet/errors.rb#95 + # source://spoom//lib/spoom/sorbet/errors.rb#123 sig { params(error: ::Spoom::Sorbet::Errors::Error).void } def open_error(error); end class << self # : (String output, ?error_url_base: String) -> Array[Error] # - # source://spoom//lib/spoom/sorbet/errors.rb#32 + # source://spoom//lib/spoom/sorbet/errors.rb#60 sig { params(output: ::String, error_url_base: ::String).returns(T::Array[::Spoom::Sorbet::Errors::Error]) } def parse_string(output, error_url_base: T.unsafe(nil)); end end end -# source://spoom//lib/spoom/sorbet/errors.rb#19 +# source://spoom//lib/spoom/sorbet/errors.rb#50 Spoom::Sorbet::Errors::Parser::HEADER = T.let(T.unsafe(nil), Array) -# source://spoom//lib/spoom/sorbet/errors.rb#17 +# source://spoom//lib/spoom/sorbet/errors.rb#48 class Spoom::Sorbet::Errors::Parser::ParseError < ::Spoom::Error; end +# : String +# # source://spoom//lib/spoom/sorbet.rb#31 Spoom::Sorbet::GEM_PATH = T.let(T.unsafe(nil), String) +# : String +# # source://spoom//lib/spoom/sorbet.rb#32 Spoom::Sorbet::GEM_VERSION = T.let(T.unsafe(nil), String) @@ -6106,16 +5825,14 @@ module Spoom::Sorbet::Sigils # changes the sigil in the file at the passed path to the specified new strictness # : ((String | Pathname) path, String new_strictness) -> bool # - # source://spoom//lib/spoom/sorbet/sigils.rb#68 - # changes the sigil in the file at the passed path to the specified new strictness + # source://spoom//lib/spoom/sorbet/sigils.rb#65 sig { params(path: T.any(::Pathname, ::String), new_strictness: ::String).returns(T::Boolean) } def change_sigil_in_file(path, new_strictness); end # changes the sigil to have a new strictness in a list of files # : (Array[String] path_list, String new_strictness) -> Array[String] # - # source://spoom//lib/spoom/sorbet/sigils.rb#79 - # changes the sigil to have a new strictness in a list of files + # source://spoom//lib/spoom/sorbet/sigils.rb#76 sig { params(path_list: T::Array[::String], new_strictness: ::String).returns(T::Array[::String]) } def change_sigil_in_files(path_list, new_strictness); end @@ -6123,33 +5840,28 @@ module Spoom::Sorbet::Sigils # * returns nil if no sigil # : ((String | Pathname) path) -> String? # - # source://spoom//lib/spoom/sorbet/sigils.rb#59 - # returns a string containing the strictness of a sigil in a file at the passed path - # * returns nil if no sigil + # source://spoom//lib/spoom/sorbet/sigils.rb#56 sig { params(path: T.any(::Pathname, ::String)).returns(T.nilable(::String)) } def file_strictness(path); end # returns the full sigil comment string for the passed strictness # : (String strictness) -> String # - # source://spoom//lib/spoom/sorbet/sigils.rb#34 - # returns the full sigil comment string for the passed strictness + # source://spoom//lib/spoom/sorbet/sigils.rb#31 sig { params(strictness: ::String).returns(::String) } def sigil_string(strictness); end # returns the strictness of a sigil in the passed file content string (nil if no sigil) # : (String content) -> String? # - # source://spoom//lib/spoom/sorbet/sigils.rb#46 - # returns the strictness of a sigil in the passed file content string (nil if no sigil) + # source://spoom//lib/spoom/sorbet/sigils.rb#43 sig { params(content: ::String).returns(T.nilable(::String)) } def strictness_in_content(content); end # returns a string which is the passed content but with the sigil updated to a new strictness # : (String content, String new_strictness) -> String # - # source://spoom//lib/spoom/sorbet/sigils.rb#52 - # returns a string which is the passed content but with the sigil updated to a new strictness + # source://spoom//lib/spoom/sorbet/sigils.rb#49 sig { params(content: ::String, new_strictness: ::String).returns(::String) } def update_sigil(content, new_strictness); end @@ -6158,14 +5870,15 @@ module Spoom::Sorbet::Sigils # # @return [Boolean] # - # source://spoom//lib/spoom/sorbet/sigils.rb#40 - # returns true if the passed string is a valid strictness (else false) + # source://spoom//lib/spoom/sorbet/sigils.rb#37 sig { params(strictness: ::String).returns(T::Boolean) } def valid_strictness?(strictness); end end end -# source://spoom//lib/spoom/sorbet/sigils.rb#29 +# : Array[String] +# +# source://spoom//lib/spoom/sorbet/sigils.rb#26 Spoom::Sorbet::Sigils::SIGIL_REGEXP = T.let(T.unsafe(nil), Regexp) # source://spoom//lib/spoom/sorbet/sigils.rb#11 @@ -6248,7 +5961,7 @@ class Spoom::Sorbet::Sigs::RBIToRBSTranslator # : (RBI::Sig sig, RBI::Attr node, positional_names: bool) -> String # - # source://spoom//lib/spoom/sorbet/sigs.rb#173 + # source://spoom//lib/spoom/sorbet/sigs.rb#178 sig { params(sig: ::RBI::Sig, node: ::RBI::Attr, positional_names: T::Boolean).returns(::String) } def translate_attr_sig(sig, node, positional_names: T.unsafe(nil)); end @@ -6260,12 +5973,12 @@ class Spoom::Sorbet::Sigs::RBIToRBSTranslator end end -# source://spoom//lib/spoom/sorbet/sigs.rb#182 +# source://spoom//lib/spoom/sorbet/sigs.rb#187 class Spoom::Sorbet::Sigs::RBSToRBITranslator class << self # : (RBI::RBSComment comment, (RBI::Method | RBI::Attr) node) -> String? # - # source://spoom//lib/spoom/sorbet/sigs.rb#187 + # source://spoom//lib/spoom/sorbet/sigs.rb#192 sig { params(comment: ::RBI::RBSComment, node: T.any(::RBI::Attr, ::RBI::Method)).returns(T.nilable(::String)) } def translate(comment, node); end @@ -6273,13 +5986,13 @@ class Spoom::Sorbet::Sigs::RBSToRBITranslator # : (RBI::RBSComment comment, RBI::Attr node) -> String # - # source://spoom//lib/spoom/sorbet/sigs.rb#228 + # source://spoom//lib/spoom/sorbet/sigs.rb#235 sig { params(comment: ::RBI::RBSComment, node: ::RBI::Attr).returns(::String) } def translate_attr_sig(comment, node); end # : (RBI::RBSComment rbs_comment, RBI::Method node) -> String # - # source://spoom//lib/spoom/sorbet/sigs.rb#201 + # source://spoom//lib/spoom/sorbet/sigs.rb#206 sig { params(rbs_comment: ::RBI::RBSComment, node: ::RBI::Method).returns(::String) } def translate_method_sig(rbs_comment, node); end end @@ -6287,26 +6000,27 @@ end # From https://github.com/Shopify/ruby-lsp/blob/9154bfc6ef/lib/ruby_lsp/document.rb#L127 # -# source://spoom//lib/spoom/sorbet/sigs.rb#248 +# source://spoom//lib/spoom/sorbet/sigs.rb#255 class Spoom::Sorbet::Sigs::Scanner # : (String source) -> void # # @return [Scanner] a new instance of Scanner # - # source://spoom//lib/spoom/sorbet/sigs.rb#252 + # source://spoom//lib/spoom/sorbet/sigs.rb#259 sig { params(source: ::String).void } def initialize(source); end # Finds the character index inside the source string for a given line and column # : (Integer line, Integer character) -> Integer # - # source://spoom//lib/spoom/sorbet/sigs.rb#260 - # Finds the character index inside the source string for a given line and column + # source://spoom//lib/spoom/sorbet/sigs.rb#267 sig { params(line: ::Integer, character: ::Integer).returns(::Integer) } def find_char_position(line, character); end end -# source://spoom//lib/spoom/sorbet/sigs.rb#249 +# : Integer +# +# source://spoom//lib/spoom/sorbet/sigs.rb#256 Spoom::Sorbet::Sigs::Scanner::LINE_BREAK = T.let(T.unsafe(nil), Integer) # source://spoom//lib/spoom/sorbet/sigs.rb#88 @@ -6352,7 +6066,6 @@ class Spoom::Timeline # : (Array[Time] dates) -> Array[Git::Commit] # # source://spoom//lib/spoom/timeline.rb#34 - # Return one commit for each date in `dates` sig { params(dates: T::Array[::Time]).returns(T::Array[::Spoom::Git::Commit]) } def commits_for_dates(dates); end @@ -6360,7 +6073,6 @@ class Spoom::Timeline # : -> Array[Time] # # source://spoom//lib/spoom/timeline.rb#21 - # Return all months between `from` and `to` sig { returns(T::Array[::Time]) } def months; end @@ -6368,7 +6080,6 @@ class Spoom::Timeline # : -> Array[Git::Commit] # # source://spoom//lib/spoom/timeline.rb#15 - # Return one commit for each month between `from` and `to` sig { returns(T::Array[::Spoom::Git::Commit]) } def ticks; end end diff --git a/Library/Homebrew/sorbet/rbi/gems/vernier@1.7.0.rbi b/Library/Homebrew/sorbet/rbi/gems/vernier@1.7.1.rbi similarity index 100% rename from Library/Homebrew/sorbet/rbi/gems/vernier@1.7.0.rbi rename to Library/Homebrew/sorbet/rbi/gems/vernier@1.7.1.rbi diff --git a/Library/Homebrew/tap.rb b/Library/Homebrew/tap.rb index 2cf80ed4a5..bf83e7ee29 100644 --- a/Library/Homebrew/tap.rb +++ b/Library/Homebrew/tap.rb @@ -590,8 +590,9 @@ class Tap end return unless remote - current_upstream_head = T.must(git_repository.origin_branch_name) - return if requested_remote.blank? && git_repository.origin_has_branch?(current_upstream_head) + current_upstream_head = git_repository.origin_branch_name + return if current_upstream_head.present? && requested_remote.blank? && + git_repository.origin_has_branch?(current_upstream_head) args = %w[fetch] args << "--quiet" if quiet @@ -600,6 +601,8 @@ class Tap safe_system "git", "-C", path, *args git_repository.set_head_origin_auto + current_upstream_head ||= T.must(git_repository.origin_branch_name) + new_upstream_head = T.must(git_repository.origin_branch_name) return if new_upstream_head == current_upstream_head @@ -985,19 +988,21 @@ class Tap # Array with autobump names sig { returns(T::Array[String]) } def autobump - autobump_packages = if core_cask_tap? - Homebrew::API::Cask.all_casks - elsif core_tap? - Homebrew::API::Formula.all_formulae - else - {} - end + # TODO: uncomment when official taps are prepared to use new autobump system + # + # autobump_packages = if core_cask_tap? + # Homebrew::API::Cask.all_casks + # elsif core_tap? + # Homebrew::API::Formula.all_formulae + # else + # {} + # end + # + # @autobump ||= autobump_packages.select do |_, p| + # p["autobump"] == true && !p["skip_livecheck"] && !(p["deprecated"] || p["disabled"]) + # end.keys - @autobump ||= autobump_packages.select do |_, p| - p["autobump"] == true && !p["skip_livecheck"] && !(p["deprecated"] || p["disabled"]) - end.keys - - if @autobump.empty? + if @autobump.blank? @autobump = if (autobump_file = path/HOMEBREW_TAP_AUTOBUMP_FILE).file? autobump_file.readlines(chomp: true) else diff --git a/Library/Homebrew/test/bundle/commands/cleanup_spec.rb b/Library/Homebrew/test/bundle/commands/cleanup_spec.rb index d234f07b1e..e85f78ddc7 100644 --- a/Library/Homebrew/test/bundle/commands/cleanup_spec.rb +++ b/Library/Homebrew/test/bundle/commands/cleanup_spec.rb @@ -158,6 +158,12 @@ RSpec.describe Homebrew::Bundle::Commands::Cleanup do expect(described_class).to receive(:system_output_no_stderr).and_return("") expect { described_class.run(force: true) }.to output(/Uninstalled 2 casks/).to_stdout end + + it "does not uninstall casks if --brews is disabled" do + expect(Kernel).not_to receive(:system) + expect(described_class).to receive(:system_output_no_stderr).and_return("") + expect { described_class.run(force: true, casks: false) }.not_to output.to_stdout + end end context "when there are casks to zap" do @@ -174,6 +180,12 @@ RSpec.describe Homebrew::Bundle::Commands::Cleanup do expect(described_class).to receive(:system_output_no_stderr).and_return("") expect { described_class.run(force: true, zap: true) }.to output(/Uninstalled 2 casks/).to_stdout end + + it "does not uninstall casks if --casks is disabled" do + expect(Kernel).not_to receive(:system) + expect(described_class).to receive(:system_output_no_stderr).and_return("") + expect { described_class.run(force: true, zap: true, casks: false) }.not_to output.to_stdout + end end context "when there are formulae to uninstall" do @@ -190,6 +202,12 @@ RSpec.describe Homebrew::Bundle::Commands::Cleanup do expect(described_class).to receive(:system_output_no_stderr).and_return("") expect { described_class.run(force: true) }.to output(/Uninstalled 2 formulae/).to_stdout end + + it "does not uninstall formulae if --casks is disabled" do + expect(Kernel).not_to receive(:system) + expect(described_class).to receive(:system_output_no_stderr).and_return("") + expect { described_class.run(force: true, brews: false) }.not_to output.to_stdout + end end context "when there are taps to untap" do @@ -206,6 +224,12 @@ RSpec.describe Homebrew::Bundle::Commands::Cleanup do expect(described_class).to receive(:system_output_no_stderr).and_return("") described_class.run(force: true) end + + it "does not untap taps if --taps is disabled" do + expect(Kernel).not_to receive(:system) + expect(described_class).to receive(:system_output_no_stderr).and_return("") + described_class.run(force: true, taps: false) + end end context "when there are VSCode extensions to uninstall" do @@ -223,6 +247,12 @@ RSpec.describe Homebrew::Bundle::Commands::Cleanup do expect(described_class).to receive(:system_output_no_stderr).and_return("") described_class.run(force: true) end + + it "does not uninstall extensions if --vscode is disabled" do + expect(Kernel).not_to receive(:system) + expect(described_class).to receive(:system_output_no_stderr).and_return("") + described_class.run(force: true, vscode: false) + end end context "when there are casks and formulae to uninstall and taps to untap but without passing `--force`" do diff --git a/Library/Homebrew/test/bundle/dsl_spec.rb b/Library/Homebrew/test/bundle/dsl_spec.rb index 636bda3334..27f47bffd3 100644 --- a/Library/Homebrew/test/bundle/dsl_spec.rb +++ b/Library/Homebrew/test/bundle/dsl_spec.rb @@ -60,6 +60,20 @@ RSpec.describe Homebrew::Bundle::Dsl do end end + context "with multiple cask_args" do + subject(:dsl) do + dsl_from_string <<~EOS + cask_args appdir: '/global-apps' + cask_args require_sha: true + cask_args appdir: '~/my-apps' + EOS + end + + it "merges the arguments" do + expect(dsl.cask_arguments).to eql(appdir: "~/my-apps", require_sha: true) + end + end + context "with invalid input" do it "handles completely invalid code" do expect { dsl_from_string "abcdef" }.to raise_error(RuntimeError) diff --git a/Library/Homebrew/test/formatter_spec.rb b/Library/Homebrew/test/formatter_spec.rb index e02451a594..ba866ee8f5 100644 --- a/Library/Homebrew/test/formatter_spec.rb +++ b/Library/Homebrew/test/formatter_spec.rb @@ -110,4 +110,18 @@ RSpec.describe Formatter do expect(described_class.format_help_text(text, width: 80)).to eq expected end end + + describe "::truncate" do + it "returns the original string if it's shorter than max length" do + expect(described_class.truncate("short", max: 10)).to eq("short") + end + + it "truncates strings longer than max length" do + expect(described_class.truncate("this is a long string", max: 10)).to eq("this is...") + end + + it "uses custom omission string" do + expect(described_class.truncate("this is a long string", max: 10, omission: " [...]")).to eq("this [...]") + end + end end diff --git a/Library/Homebrew/test/livecheck/strategy/bitbucket_spec.rb b/Library/Homebrew/test/livecheck/strategy/bitbucket_spec.rb index a0a9c3eb47..3e3e0070bc 100644 --- a/Library/Homebrew/test/livecheck/strategy/bitbucket_spec.rb +++ b/Library/Homebrew/test/livecheck/strategy/bitbucket_spec.rb @@ -16,11 +16,11 @@ RSpec.describe Homebrew::Livecheck::Strategy::Bitbucket do let(:generated) do { get: { - url: "https://bitbucket.org/abc/def/downloads/?tab=tags", + url: "https://bitbucket.org/abc/def/downloads/?tab=tags&iframe=true&spa=0", regex: /]*?class="name"[^>]*?>\s*v?(\d+(?:\.\d+)+)\s*?=") + exact_requirement = described_class.new([:big_sur], comparator: "==") + range_requirement = described_class.new([[:catalina, :big_sur]], comparator: "==") + expect(no_requirement.maximum_version).to eq macos_newest_allowed + expect(max_requirement.maximum_version).to eq big_sur_major + expect(min_requirement.maximum_version).to eq macos_newest_allowed + expect(exact_requirement.maximum_version).to eq big_sur_major + expect(range_requirement.maximum_version).to eq big_sur_major + end + specify "#allows?" do no_requirement = described_class.new max_requirement = described_class.new([:mojave], comparator: "<=") diff --git a/Library/Homebrew/test/rubocops/patches_spec.rb b/Library/Homebrew/test/rubocops/patches_spec.rb index 45a2acbb91..9f568fd453 100644 --- a/Library/Homebrew/test/rubocops/patches_spec.rb +++ b/Library/Homebrew/test/rubocops/patches_spec.rb @@ -39,6 +39,7 @@ RSpec.describe RuboCop::Cop::FormulaAudit::Patches do "http://bugs.debian.org/cgi-bin/bugreport.cgi?msg=5;filename=patch-libunac1.txt;att=1;bug=623340", "https://patch-diff.githubusercontent.com/raw/foo/foo-bar/pull/100.patch", "https://github.com/dlang/dub/commit/2c916b1a7999a050ac4970c3415ff8f91cd487aa.patch", + "https://bitbucket.org/multicoreware/x265_git/commits/b354c009a60bcd6d7fc04014e200a1ee9c45c167/raw", ] patch_urls.each do |patch_url| source = <<~EOS @@ -78,6 +79,12 @@ RSpec.describe RuboCop::Cop::FormulaAudit::Patches do expect_offense_hash(message: <<~EOS.chomp, severity: :convention, line: 5, column: 4, source:) FormulaAudit/Patches: GitHub patches should use the full_index parameter: #{patch_url}?full_index=1 EOS + elsif patch_url.start_with?("https://bitbucket.org/") + commit = "b354c009a60bcd6d7fc04014e200a1ee9c45c167" + fixed_url = "https://api.bitbucket.org/2.0/repositories/multicoreware/x265_git/diff/#{commit}" + expect_offense_hash(message: <<~EOS.chomp, severity: :convention, line: 5, column: 4, source:) + FormulaAudit/Patches: Bitbucket patches should use the api url: #{fixed_url} + EOS end expected_offense.zip([inspect_source(source).last]).each do |expected, actual| expect(actual.message).to eq(expected[:message]) diff --git a/Library/Homebrew/test/rubocops/urls_spec.rb b/Library/Homebrew/test/rubocops/urls_spec.rb index 80bf49199a..fab6d84ada 100644 --- a/Library/Homebrew/test/rubocops/urls_spec.rb +++ b/Library/Homebrew/test/rubocops/urls_spec.rb @@ -177,6 +177,14 @@ RSpec.describe RuboCop::Cop::FormulaAudit::Urls do "url" => "svn+http://brew.sh/foo/bar", "msg" => "Use of the svn+http:// scheme is deprecated, pass `:using => :svn` instead", "col" => 2, + }, { + "url" => "https://🫠.sh/foo/bar", + "msg" => "Please use the ASCII (Punycode encoded host, URL-encoded path and query) version of https://🫠.sh/foo/bar.", + "col" => 2, + }, { + "url" => "https://ßrew.sh/foo/bar", + "msg" => "Please use the ASCII (Punycode encoded host, URL-encoded path and query) version of https://ßrew.sh/foo/bar.", + "col" => 2, }] end diff --git a/Library/Homebrew/test/utils/github_spec.rb b/Library/Homebrew/test/utils/github_spec.rb index e07f093e7c..d4b6ca2ac6 100644 --- a/Library/Homebrew/test/utils/github_spec.rb +++ b/Library/Homebrew/test/utils/github_spec.rb @@ -71,14 +71,6 @@ RSpec.describe GitHub do ) expect(urls).to eq(["https://api.github.com/repos/Homebrew/homebrew-core/actions/artifacts/1969725476/zip"]) end - - it "supports pattern matching" do - urls = described_class.get_artifact_urls( - described_class.get_workflow_run("Homebrew", "brew", "17068", - workflow_id: "pkg-installer.yml", artifact_pattern: "Homebrew-*.pkg"), - ) - expect(urls).to eq(["https://api.github.com/repos/Homebrew/brew/actions/artifacts/1405050842/zip"]) - end end describe "::pull_request_commits", :needs_network do diff --git a/Library/Homebrew/uninstall.rb b/Library/Homebrew/uninstall.rb index ba03abc04f..c8d0e59ae8 100644 --- a/Library/Homebrew/uninstall.rb +++ b/Library/Homebrew/uninstall.rb @@ -67,7 +67,18 @@ module Homebrew end unversioned_name = f.name.gsub(/@.+$/, "") - maybe_paths = Dir.glob("#{f.etc}/*#{unversioned_name}*") + maybe_paths = Dir.glob("#{f.etc}/#{unversioned_name}*") + excluded_names = Homebrew::API::Formula.all_formulae.keys + maybe_paths = maybe_paths.reject do |path| + # Remove extension only if a file + # (f.e. directory with name "openssl@1.1" will be trimmed to "openssl@1") + basename = if File.directory?(path) + File.basename(path) + else + File.basename(path, ".*") + end + excluded_names.include?(basename) + end maybe_paths -= paths if paths.present? if maybe_paths.present? puts diff --git a/Library/Homebrew/utils/formatter.rb b/Library/Homebrew/utils/formatter.rb index 9815425204..3e7428c80e 100644 --- a/Library/Homebrew/utils/formatter.rb +++ b/Library/Homebrew/utils/formatter.rb @@ -54,6 +54,19 @@ module Formatter label(label, string, :red) end + # Truncate a string to a specific length. + # + # @api internal + sig { params(string: String, max: Integer, omission: String).returns(String) } + def self.truncate(string, max: 30, omission: "...") + return string if string.length <= max + + length_with_room_for_omission = max - omission.length + truncated = string[0, length_with_room_for_omission] + + "#{truncated}#{omission}" + end + # Wraps text to fit within a given number of columns using regular expressions that: # # 1. convert hard-wrapped paragraphs to a single line diff --git a/Library/Homebrew/utils/spdx.rb b/Library/Homebrew/utils/spdx.rb index bf45bf377c..7b8e69e865 100644 --- a/Library/Homebrew/utils/spdx.rb +++ b/Library/Homebrew/utils/spdx.rb @@ -87,7 +87,7 @@ module SPDX return ALLOWED_LICENSE_SYMBOLS.include? license if license.is_a? Symbol license = license.delete_suffix "+" - license_data["licenses"].any? { |spdx_license| spdx_license["licenseId"] == license } + license_data["licenses"].any? { |spdx_license| spdx_license["licenseId"].downcase == license.downcase } end sig { params(license: T.any(String, Symbol)).returns(T::Boolean) } @@ -97,14 +97,14 @@ module SPDX license = license.to_s.delete_suffix "+" license_data["licenses"].none? do |spdx_license| - spdx_license["licenseId"] == license && !spdx_license["isDeprecatedLicenseId"] + spdx_license["licenseId"].downcase == license.downcase && !spdx_license["isDeprecatedLicenseId"] end end sig { params(exception: String).returns(T::Boolean) } def valid_license_exception?(exception) exception_data["exceptions"].any? do |spdx_exception| - spdx_exception["licenseExceptionId"] == exception && !spdx_exception["isDeprecatedLicenseId"] + spdx_exception["licenseExceptionId"].downcase == exception.downcase && !spdx_exception["isDeprecatedLicenseId"] end end diff --git a/Library/Homebrew/vendor/bundle/bundler/setup.rb b/Library/Homebrew/vendor/bundle/bundler/setup.rb index 3ec5337dc4..f58f1245dc 100644 --- a/Library/Homebrew/vendor/bundle/bundler/setup.rb +++ b/Library/Homebrew/vendor/bundle/bundler/setup.rb @@ -45,26 +45,26 @@ $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/coderay-1.1.3/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/csv-3.3.4/lib") -$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/diff-lcs-1.6.1/lib") +$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/diff-lcs-1.6.2/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/docile-1.4.1/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/elftools-1.3.1/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/erubi-1.13.1/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/hana-1.3.7/lib") -$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/extensions/arm64-darwin-20/#{Gem.extension_api_version}/json-2.11.3") -$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/json-2.11.3/lib") +$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/extensions/arm64-darwin-20/#{Gem.extension_api_version}/json-2.12.0") +$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/json-2.12.0/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/regexp_parser-2.10.0/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/simpleidn-0.2.3/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/json_schemer-2.4.0/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/rexml-3.4.1/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/kramdown-2.5.1/lib") -$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/language_server-protocol-3.17.0.4/lib") +$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/language_server-protocol-3.17.0.5/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/lint_roller-1.1.0/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/logger-1.7.0/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/method_source-1.1.0/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/minitest-5.25.5/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/netrc-0.11.0/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/parallel-1.27.0/lib") -$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/parallel_tests-5.1.0/lib") +$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/parallel_tests-5.2.0/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/extensions/arm64-darwin-20/#{Gem.extension_api_version}/racc-1.8.1") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/racc-1.8.1/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/parser-3.3.8.0/lib") @@ -76,10 +76,10 @@ $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/extensions/arm64-darwin-20/#{Gem.extension_api_version}/pycall-1.5.2") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/pycall-1.5.2/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/rainbow-3.1.1/lib") -$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/extensions/arm64-darwin-20/#{Gem.extension_api_version}/rbs-3.9.2") -$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/rbs-3.9.2/lib") -$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/sorbet-runtime-0.5.12067/lib") -$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/rbi-0.3.2/lib") +$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/extensions/arm64-darwin-20/#{Gem.extension_api_version}/rbs-3.9.4") +$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/rbs-3.9.4/lib") +$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/sorbet-runtime-0.5.12117/lib") +$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/rbi-0.3.3/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/extensions/arm64-darwin-20/#{Gem.extension_api_version}/redcarpet-3.6.1") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/redcarpet-3.6.1/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/rspec-support-3.13.3/lib") @@ -95,12 +95,12 @@ $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/ruby-progressbar-1.13.0/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/unicode-emoji-4.0.4/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/unicode-display_width-3.1.4/lib") -$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/rubocop-1.75.5/lib") +$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/rubocop-1.75.6/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/rubocop-md-2.0.1/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/rubocop-performance-1.25.0/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/rubocop-rspec-3.6.0/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/rubocop-sorbet-0.10.0/lib") -$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/ruby-lsp-0.23.17/lib") +$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/ruby-lsp-0.23.21/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/ruby-macho-4.1.0/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/extensions/arm64-darwin-20/#{Gem.extension_api_version}/ruby-prof-1.7.1") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/ruby-prof-1.7.1/lib") @@ -108,16 +108,16 @@ $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/simplecov_json_formatter-0.1.4/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/simplecov-0.22.0/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/simplecov-cobertura-2.1.0/lib") -$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/sorbet-static-0.5.12067-universal-darwin/lib") -$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/sorbet-0.5.12067/lib") -$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/sorbet-static-and-runtime-0.5.12067/lib") +$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/sorbet-static-0.5.12117-universal-darwin/lib") +$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/sorbet-0.5.12117/lib") +$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/sorbet-static-and-runtime-0.5.12117/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/thor-1.3.2/lib") -$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/spoom-1.6.1/lib") +$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/spoom-1.6.3/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/extensions/arm64-darwin-20/#{Gem.extension_api_version}/stackprof-0.2.27") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/stackprof-0.2.27/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/yard-0.9.37/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/yard-sorbet-0.9.0/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/tapioca-0.16.11/lib") -$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/extensions/arm64-darwin-20/#{Gem.extension_api_version}/vernier-1.7.0") -$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/vernier-1.7.0/lib") +$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/extensions/arm64-darwin-20/#{Gem.extension_api_version}/vernier-1.7.1") +$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/vernier-1.7.1/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/warning-1.5.0/lib") diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/sorbet-runtime.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/sorbet-runtime.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/sorbet-runtime.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/sorbet-runtime.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/_types.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/_types.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/_types.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/_types.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/abstract_utils.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/abstract_utils.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/abstract_utils.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/abstract_utils.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/boolean.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/boolean.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/boolean.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/boolean.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/compatibility_patches.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/compatibility_patches.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/compatibility_patches.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/compatibility_patches.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/configuration.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/configuration.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/configuration.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/configuration.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/enum.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/enum.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/enum.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/enum.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/generic.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/generic.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/generic.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/generic.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/helpers.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/helpers.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/helpers.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/helpers.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/non_forcing_constants.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/non_forcing_constants.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/non_forcing_constants.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/non_forcing_constants.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/abstract/data.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/abstract/data.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/abstract/data.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/abstract/data.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/abstract/declare.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/abstract/declare.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/abstract/declare.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/abstract/declare.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/abstract/hooks.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/abstract/hooks.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/abstract/hooks.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/abstract/hooks.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/abstract/validate.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/abstract/validate.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/abstract/validate.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/abstract/validate.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/caller_utils.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/caller_utils.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/caller_utils.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/caller_utils.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/casts.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/casts.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/casts.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/casts.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/class_utils.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/class_utils.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/class_utils.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/class_utils.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/decl_state.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/decl_state.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/decl_state.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/decl_state.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/final.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/final.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/final.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/final.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/methods/_methods.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/methods/_methods.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/methods/_methods.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/methods/_methods.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/methods/call_validation.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/methods/call_validation.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/methods/call_validation.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/methods/call_validation.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/methods/call_validation_2_6.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/methods/call_validation_2_6.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/methods/call_validation_2_6.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/methods/call_validation_2_6.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/methods/call_validation_2_7.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/methods/call_validation_2_7.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/methods/call_validation_2_7.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/methods/call_validation_2_7.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/methods/decl_builder.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/methods/decl_builder.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/methods/decl_builder.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/methods/decl_builder.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/methods/modes.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/methods/modes.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/methods/modes.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/methods/modes.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/methods/signature.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/methods/signature.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/methods/signature.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/methods/signature.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/methods/signature_validation.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/methods/signature_validation.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/methods/signature_validation.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/methods/signature_validation.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/mixins/mixins.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/mixins/mixins.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/mixins/mixins.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/mixins/mixins.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/retry.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/retry.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/retry.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/retry.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/runtime_levels.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/runtime_levels.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/runtime_levels.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/runtime_levels.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/sealed.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/sealed.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/sealed.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/sealed.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/types/not_typed.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/types/not_typed.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/types/not_typed.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/types/not_typed.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/types/simple_pair_union.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/types/simple_pair_union.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/types/simple_pair_union.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/types/simple_pair_union.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/types/string_holder.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/types/string_holder.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/types/string_holder.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/types/string_holder.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/types/type_alias.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/types/type_alias.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/types/type_alias.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/types/type_alias.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/types/void.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/types/void.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/private/types/void.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/private/types/void.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/props/_props.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/props/_props.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/props/_props.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/props/_props.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/props/constructor.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/props/constructor.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/props/constructor.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/props/constructor.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/props/custom_type.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/props/custom_type.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/props/custom_type.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/props/custom_type.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/props/decorator.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/props/decorator.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/props/decorator.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/props/decorator.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/props/errors.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/props/errors.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/props/errors.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/props/errors.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/props/generated_code_validation.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/props/generated_code_validation.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/props/generated_code_validation.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/props/generated_code_validation.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/props/has_lazily_specialized_methods.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/props/has_lazily_specialized_methods.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/props/has_lazily_specialized_methods.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/props/has_lazily_specialized_methods.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/props/optional.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/props/optional.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/props/optional.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/props/optional.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/props/plugin.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/props/plugin.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/props/plugin.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/props/plugin.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/props/pretty_printable.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/props/pretty_printable.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/props/pretty_printable.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/props/pretty_printable.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/props/private/apply_default.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/props/private/apply_default.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/props/private/apply_default.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/props/private/apply_default.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/props/private/deserializer_generator.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/props/private/deserializer_generator.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/props/private/deserializer_generator.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/props/private/deserializer_generator.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/props/private/parser.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/props/private/parser.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/props/private/parser.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/props/private/parser.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/props/private/serde_transform.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/props/private/serde_transform.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/props/private/serde_transform.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/props/private/serde_transform.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/props/private/serializer_generator.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/props/private/serializer_generator.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/props/private/serializer_generator.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/props/private/serializer_generator.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/props/private/setter_factory.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/props/private/setter_factory.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/props/private/setter_factory.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/props/private/setter_factory.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/props/serializable.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/props/serializable.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/props/serializable.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/props/serializable.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/props/type_validation.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/props/type_validation.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/props/type_validation.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/props/type_validation.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/props/utils.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/props/utils.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/props/utils.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/props/utils.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/props/weak_constructor.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/props/weak_constructor.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/props/weak_constructor.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/props/weak_constructor.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/sig.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/sig.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/sig.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/sig.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/struct.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/struct.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/struct.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/struct.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/anything.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/anything.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/anything.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/anything.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/attached_class.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/attached_class.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/attached_class.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/attached_class.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/base.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/base.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/base.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/base.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/class_of.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/class_of.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/class_of.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/class_of.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/enum.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/enum.rb similarity index 77% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/enum.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/enum.rb index 34eb26f51d..cc97cb4c94 100644 --- a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/enum.rb +++ b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/enum.rb @@ -9,7 +9,13 @@ module T::Types attr_reader :values def initialize(values) - @values = values + case values + when Hash + @values = values + else + require "set" unless defined?(Set) + @values = values.to_set + end end def build_type @@ -25,7 +31,7 @@ module T::Types private def subtype_of_single?(other) case other when Enum - (other.values - @values).empty? + (@values - other.values).empty? else false end diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/fixed_array.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/fixed_array.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/fixed_array.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/fixed_array.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/fixed_hash.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/fixed_hash.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/fixed_hash.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/fixed_hash.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/intersection.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/intersection.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/intersection.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/intersection.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/noreturn.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/noreturn.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/noreturn.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/noreturn.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/proc.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/proc.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/proc.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/proc.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/self_type.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/self_type.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/self_type.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/self_type.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/simple.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/simple.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/simple.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/simple.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/t_enum.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/t_enum.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/t_enum.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/t_enum.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/type_member.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/type_member.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/type_member.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/type_member.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/type_parameter.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/type_parameter.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/type_parameter.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/type_parameter.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/type_template.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/type_template.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/type_template.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/type_template.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/type_variable.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/type_variable.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/type_variable.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/type_variable.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/typed_array.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/typed_array.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/typed_array.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/typed_array.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/typed_class.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/typed_class.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/typed_class.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/typed_class.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/typed_enumerable.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/typed_enumerable.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/typed_enumerable.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/typed_enumerable.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/typed_enumerator.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/typed_enumerator.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/typed_enumerator.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/typed_enumerator.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/typed_enumerator_chain.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/typed_enumerator_chain.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/typed_enumerator_chain.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/typed_enumerator_chain.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/typed_enumerator_lazy.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/typed_enumerator_lazy.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/typed_enumerator_lazy.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/typed_enumerator_lazy.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/typed_hash.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/typed_hash.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/typed_hash.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/typed_hash.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/typed_range.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/typed_range.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/typed_range.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/typed_range.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/typed_set.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/typed_set.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/typed_set.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/typed_set.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/union.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/union.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/union.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/union.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/untyped.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/untyped.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/types/untyped.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/types/untyped.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/utils.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/utils.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12067/lib/types/utils.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12117/lib/types/utils.rb diff --git a/Library/Homebrew/vendor/portable-ruby-arm64-darwin b/Library/Homebrew/vendor/portable-ruby-arm64-darwin index 5541eab5ff..be6f2f64eb 100644 --- a/Library/Homebrew/vendor/portable-ruby-arm64-darwin +++ b/Library/Homebrew/vendor/portable-ruby-arm64-darwin @@ -1,2 +1,2 @@ ruby_TAG=arm64_big_sur -ruby_SHA=40e7f5d7514a7e9757facdd39006f7a351d3d7986d3a228be13c8b1c3216727b +ruby_SHA=fd162df7a06190ee800a9e6afd28f4466d33548821a480ba043cd927b44d60f7 diff --git a/Library/Homebrew/vendor/portable-ruby-arm64-linux b/Library/Homebrew/vendor/portable-ruby-arm64-linux index 05179765df..775700f340 100644 --- a/Library/Homebrew/vendor/portable-ruby-arm64-linux +++ b/Library/Homebrew/vendor/portable-ruby-arm64-linux @@ -1,2 +1,2 @@ ruby_TAG=arm64_linux -ruby_SHA=2d6aa10b134b4a3abac7f24c812d06b533b65134cdfd70bba82ee8b902e44f51 +ruby_SHA=0ef476ef3a86632414a79055814ef7e545294a8329939f3fb3b3016decac6cd3 diff --git a/Library/Homebrew/vendor/portable-ruby-version b/Library/Homebrew/vendor/portable-ruby-version index 6cb9d3dd0d..f9892605c7 100644 --- a/Library/Homebrew/vendor/portable-ruby-version +++ b/Library/Homebrew/vendor/portable-ruby-version @@ -1 +1 @@ -3.4.3 +3.4.4 diff --git a/Library/Homebrew/vendor/portable-ruby-x86_64-darwin b/Library/Homebrew/vendor/portable-ruby-x86_64-darwin index 8bfd98819e..ed1f817e2f 100644 --- a/Library/Homebrew/vendor/portable-ruby-x86_64-darwin +++ b/Library/Homebrew/vendor/portable-ruby-x86_64-darwin @@ -1,2 +1,2 @@ ruby_TAG=el_capitan -ruby_SHA=9fd394a40fb1467f89206a9c89c1274d9dc053af688176667a0cac0c3014113f +ruby_SHA=45cea656cc5b5f5b53a9d4fc9e6c88d3a29b3aac862d1a55f1c70df534df5636 diff --git a/Library/Homebrew/vendor/portable-ruby-x86_64-linux b/Library/Homebrew/vendor/portable-ruby-x86_64-linux index 988c1fd455..e7c3143b24 100644 --- a/Library/Homebrew/vendor/portable-ruby-x86_64-linux +++ b/Library/Homebrew/vendor/portable-ruby-x86_64-linux @@ -1,2 +1,2 @@ ruby_TAG=x86_64_linux -ruby_SHA=1764a2629da860b95afc96704725ec7c4cdb333724a9066ccc41ca6c55aa4f62 +ruby_SHA=b5c9268815fbab7b7971307b2871f4206e081218b9deb4625d668d6c3563483b diff --git a/Library/Homebrew/version.rb b/Library/Homebrew/version.rb index acf6d440de..8d455e75fb 100644 --- a/Library/Homebrew/version.rb +++ b/Library/Homebrew/version.rb @@ -346,7 +346,8 @@ class Version sig { params(spec: T.any(String, Pathname), detected_from_url: T::Boolean).returns(Version) } def self.parse(spec, detected_from_url: false) - spec = CGI.unescape(spec.to_s) if detected_from_url + # This type of full-URL decoding is not technically correct but we only need a rough decode for version parsing. + spec = URI.decode_www_form_component(spec.to_s) if detected_from_url spec = Pathname(spec) diff --git a/README.md b/README.md index 98dc15d911..aafa616417 100644 --- a/README.md +++ b/README.md @@ -59,7 +59,7 @@ Homebrew's [Project Leader](https://docs.brew.sh/Homebrew-Governance#6-project-l Homebrew's [Project Leadership Committee](https://docs.brew.sh/Homebrew-Governance#4-project-leadership-committee) is [Colin Dean](https://github.com/colindean), [Michka Popoff](https://github.com/iMichka), [Mike McQuaid](https://github.com/MikeMcQuaid), [Patrick Linnane](https://github.com/p-linnane) and [Vanessa Gennarelli](https://github.com/mozzadrella). -Homebrew's [Technical Steering Committee](https://docs.brew.sh/Homebrew-Governance#7-technical-steering-committee) is [Bo Anderson](https://github.com/Bo98), [FX Coudert](https://github.com/fxcoudert), [Mike McQuaid](https://github.com/MikeMcQuaid) and [Rylan Polster](https://github.com/Rylan12). +Homebrew's [Technical Steering Committee](https://docs.brew.sh/Homebrew-Governance#7-technical-steering-committee) is [Bo Anderson](https://github.com/Bo98), [Issy Long](https://github.com/issyl0), [Michael Cho](https://github.com/cho-m), [Mike McQuaid](https://github.com/MikeMcQuaid) and [Ruoyu Zhong](https://github.com/ZhongRuoyu). Homebrew's maintainers are [Alexander Bayandin](https://github.com/bayandin), [Bevan Kay](https://github.com/bevanjkay), [Bo Anderson](https://github.com/Bo98), [Branch Vincent](https://github.com/branchvincent), [Caleb Xu](https://github.com/alebcay), [Carlo Cabrera](https://github.com/carlocab), [Daeho Ro](https://github.com/daeho-ro), [Douglas Eichelberger](https://github.com/dduugg), [Dustin Rodrigues](https://github.com/dtrodrigues), [Eric Knibbe](https://github.com/EricFromCanada), [FX Coudert](https://github.com/fxcoudert), [Issy Long](https://github.com/issyl0), [Justin Krehel](https://github.com/krehel), [Klaus Hipp](https://github.com/khipp), [Markus Reiter](https://github.com/reitermarkus), [Michael Cho](https://github.com/cho-m), [Michka Popoff](https://github.com/iMichka), [Mike McQuaid](https://github.com/MikeMcQuaid), [Nanda H Krishna](https://github.com/nandahkrishna), [Patrick Linnane](https://github.com/p-linnane), [Rui Chen](https://github.com/chenrui333), [Ruoyu Zhong](https://github.com/ZhongRuoyu), [Rylan Polster](https://github.com/Rylan12), [Sam Ford](https://github.com/samford), [Sean Molenaar](https://github.com/SMillerDev), [Štefan Baebler](https://github.com/stefanb), [Thierry Moisan](https://github.com/Moisan), [Timothy Sutton](https://github.com/timsutton) and [William Woodruff](https://github.com/woodruffw). @@ -85,6 +85,6 @@ Secure password storage and syncing is provided by [1Password for Teams](https:/ [![DNSimple](https://cdn.dnsimple.com/assets/resolving-with-us/logo-light.png)](https://dnsimple.com/resolving/homebrew#gh-light-mode-only) [![DNSimple](https://cdn.dnsimple.com/assets/resolving-with-us/logo-dark.png)](https://dnsimple.com/resolving/homebrew#gh-dark-mode-only) -Homebrew is generously supported by [GitHub](https://github.com/github), [Custom Ink](https://github.com/customink), [Randy Reddig](https://github.com/ydnar), [Codecademy](https://github.com/Codecademy), [Workbrew](https://github.com/Workbrew) and many other users and organisations via [GitHub Sponsors](https://github.com/sponsors/Homebrew). +Homebrew is generously supported by [GitHub](https://github.com/github), [Custom Ink](https://github.com/customink), [Randy Reddig](https://github.com/ydnar), [Codecademy](https://github.com/Codecademy), [mikadelbert](https://github.com/mikadelbert), [Workbrew](https://github.com/Workbrew) and many other users and organisations via [GitHub Sponsors](https://github.com/sponsors/Homebrew). [![GitHub](https://github.com/github.png?size=64)](https://github.com/github) diff --git a/completions/bash/brew b/completions/bash/brew index ff172835c2..7e00bdfa81 100644 --- a/completions/bash/brew +++ b/completions/bash/brew @@ -836,6 +836,7 @@ _brew_create() { __brewcomp " --HEAD --autotools + --cabal --cask --cmake --crystal diff --git a/completions/fish/brew.fish b/completions/fish/brew.fish index ff6e37aa56..0457b6dd6a 100644 --- a/completions/fish/brew.fish +++ b/completions/fish/brew.fish @@ -506,14 +506,14 @@ __fish_brew_complete_sub_cmd 'bundle' 'sh' __fish_brew_complete_sub_cmd 'bundle' 'env' __fish_brew_complete_sub_cmd 'bundle' 'edit' __fish_brew_complete_arg 'bundle' -l all -d '`list` all dependencies' -__fish_brew_complete_arg 'bundle' -l cask -d '`list` or `dump` Homebrew cask dependencies' +__fish_brew_complete_arg 'bundle' -l cask -d '`list`, `dump` or `cleanup` Homebrew cask dependencies' __fish_brew_complete_arg 'bundle' -l check -d 'Check that all dependencies in the Brewfile are installed before running `exec`, `sh`, or `env`' __fish_brew_complete_arg 'bundle' -l cleanup -d '`install` performs cleanup operation, same as running `cleanup --force`. This is enabled by default if `$HOMEBREW_BUNDLE_INSTALL_CLEANUP` is set and `--global` is passed' __fish_brew_complete_arg 'bundle' -l debug -d 'Display any debugging information' __fish_brew_complete_arg 'bundle' -l describe -d '`dump` adds a description comment above each line, unless the dependency does not have a description. This is enabled by default if `$HOMEBREW_BUNDLE_DUMP_DESCRIBE` is set' __fish_brew_complete_arg 'bundle' -l file -d 'Read from or write to the `Brewfile` from this location. Use `--file=-` to pipe to stdin/stdout' __fish_brew_complete_arg 'bundle' -l force -d '`install` runs with `--force`/`--overwrite`. `dump` overwrites an existing `Brewfile`. `cleanup` actually performs its cleanup operations' -__fish_brew_complete_arg 'bundle' -l formula -d '`list` or `dump` Homebrew formula dependencies' +__fish_brew_complete_arg 'bundle' -l formula -d '`list`, `dump` or `cleanup` Homebrew formula dependencies' __fish_brew_complete_arg 'bundle' -l global -d 'Read from or write to the `Brewfile` from `$HOMEBREW_BUNDLE_FILE_GLOBAL` (if set), `${XDG_CONFIG_HOME}/homebrew/Brewfile` (if `$XDG_CONFIG_HOME` is set), `~/.homebrew/Brewfile` or `~/.Brewfile` otherwise' __fish_brew_complete_arg 'bundle' -l help -d 'Show this message' __fish_brew_complete_arg 'bundle' -l install -d 'Run `install` before continuing to other operations e.g. `exec`' @@ -523,11 +523,11 @@ __fish_brew_complete_arg 'bundle' -l no-upgrade -d '`install` does not run `brew __fish_brew_complete_arg 'bundle' -l no-vscode -d '`dump` without VSCode (and forks/variants) extensions. This is enabled by default if `$HOMEBREW_BUNDLE_DUMP_NO_VSCODE` is set' __fish_brew_complete_arg 'bundle' -l quiet -d 'Make some output more quiet' __fish_brew_complete_arg 'bundle' -l services -d 'Temporarily start services while running the `exec` or `sh` command. This is enabled by default if `$HOMEBREW_BUNDLE_SERVICES` is set' -__fish_brew_complete_arg 'bundle' -l tap -d '`list` or `dump` Homebrew tap dependencies' +__fish_brew_complete_arg 'bundle' -l tap -d '`list`, `dump` or `cleanup` Homebrew tap dependencies' __fish_brew_complete_arg 'bundle' -l upgrade -d '`install` runs `brew upgrade` on outdated dependencies, even if `$HOMEBREW_BUNDLE_NO_UPGRADE` is set' __fish_brew_complete_arg 'bundle' -l upgrade-formulae -d '`install` runs `brew upgrade` on any of these comma-separated formulae, even if `$HOMEBREW_BUNDLE_NO_UPGRADE` is set' __fish_brew_complete_arg 'bundle' -l verbose -d '`install` prints output from commands as they are run. `check` lists all missing dependencies' -__fish_brew_complete_arg 'bundle' -l vscode -d '`list` or `dump` VSCode (and forks/variants) extensions' +__fish_brew_complete_arg 'bundle' -l vscode -d '`list`, `dump` or `cleanup` VSCode (and forks/variants) extensions' __fish_brew_complete_arg 'bundle' -l whalebrew -d '`list` or `dump` Whalebrew dependencies' __fish_brew_complete_arg 'bundle' -l zap -d '`cleanup` casks using the `zap` command instead of `uninstall`' @@ -611,6 +611,7 @@ __fish_brew_complete_arg 'contributions' -l verbose -d 'Make some output more ve __fish_brew_complete_cmd 'create' 'Generate a formula or, with `--cask`, a cask for the downloadable file at URL and open it in the editor' __fish_brew_complete_arg 'create' -l HEAD -d 'Indicate that URL points to the package\'s repository rather than a file' __fish_brew_complete_arg 'create' -l autotools -d 'Create a basic template for an Autotools-style build' +__fish_brew_complete_arg 'create' -l cabal -d 'Create a basic template for a Cabal build' __fish_brew_complete_arg 'create' -l cask -d 'Create a basic template for a cask' __fish_brew_complete_arg 'create' -l cmake -d 'Create a basic template for a CMake-style build' __fish_brew_complete_arg 'create' -l crystal -d 'Create a basic template for a Crystal build' @@ -1556,7 +1557,7 @@ __fish_brew_complete_arg 'services' -l file -d 'Use the service file from this l __fish_brew_complete_arg 'services' -l help -d 'Show this message' __fish_brew_complete_arg 'services' -l json -d 'Output as JSON' __fish_brew_complete_arg 'services' -l keep -d 'When stopped, don\'t unregister the service from launching at login (or boot)' -__fish_brew_complete_arg 'services' -l max-wait -d 'Wait at most this many seconds for `stop` to finish stopping a service. Omit this flag or set this to zero (0) seconds to wait indefinitely' +__fish_brew_complete_arg 'services' -l max-wait -d 'Wait at most this many seconds for `stop` to finish stopping a service. Defaults to 60. Set this to zero (0) seconds to wait indefinitely' __fish_brew_complete_arg 'services' -l no-wait -d 'Don\'t wait for `stop` to finish stopping the service' __fish_brew_complete_arg 'services' -l quiet -d 'Make some output more quiet' __fish_brew_complete_arg 'services' -l sudo-service-user -d 'When run as root on macOS, run the service(s) as this user' diff --git a/completions/zsh/_brew b/completions/zsh/_brew index 72453df3d6..8d1d4e3da9 100644 --- a/completions/zsh/_brew +++ b/completions/zsh/_brew @@ -566,7 +566,7 @@ _brew_bump_cask_pr() { '--fork-org[Use the specified GitHub organization for forking]' \ '--help[Show this message]' \ '--message[Prepend message to the default pull request message]' \ - '(--online)--no-audit[Don'\''t run `brew audit` before opening the PR]' \ + '--no-audit[Don'\''t run `brew audit` before opening the PR]' \ '--no-browse[Print the pull request URL instead of opening in a browser]' \ '--no-fork[Don'\''t try to fork the repository]' \ '--no-style[Don'\''t run `brew style --fix` before opening the PR]' \ @@ -649,14 +649,14 @@ _brew_bump_unversioned_casks() { _brew_bundle() { _arguments \ '(--no-vscode)--all[`list` all dependencies]' \ - '--cask[`list` or `dump` Homebrew cask dependencies]' \ + '--cask[`list`, `dump` or `cleanup` Homebrew cask dependencies]' \ '--check[Check that all dependencies in the Brewfile are installed before running `exec`, `sh`, or `env`]' \ '--cleanup[`install` performs cleanup operation, same as running `cleanup --force`. This is enabled by default if `$HOMEBREW_BUNDLE_INSTALL_CLEANUP` is set and `--global` is passed]' \ '--debug[Display any debugging information]' \ '--describe[`dump` adds a description comment above each line, unless the dependency does not have a description. This is enabled by default if `$HOMEBREW_BUNDLE_DUMP_DESCRIBE` is set]' \ '--file[Read from or write to the `Brewfile` from this location. Use `--file=-` to pipe to stdin/stdout]' \ '--force[`install` runs with `--force`/`--overwrite`. `dump` overwrites an existing `Brewfile`. `cleanup` actually performs its cleanup operations]' \ - '--formula[`list` or `dump` Homebrew formula dependencies]' \ + '--formula[`list`, `dump` or `cleanup` Homebrew formula dependencies]' \ '--global[Read from or write to the `Brewfile` from `$HOMEBREW_BUNDLE_FILE_GLOBAL` (if set), `${XDG_CONFIG_HOME}/homebrew/Brewfile` (if `$XDG_CONFIG_HOME` is set), `~/.homebrew/Brewfile` or `~/.Brewfile` otherwise]' \ '--help[Show this message]' \ '(--upgrade)--install[Run `install` before continuing to other operations e.g. `exec`]' \ @@ -666,11 +666,11 @@ _brew_bundle() { '(--all --vscode)--no-vscode[`dump` without VSCode (and forks/variants) extensions. This is enabled by default if `$HOMEBREW_BUNDLE_DUMP_NO_VSCODE` is set]' \ '--quiet[Make some output more quiet]' \ '--services[Temporarily start services while running the `exec` or `sh` command. This is enabled by default if `$HOMEBREW_BUNDLE_SERVICES` is set]' \ - '--tap[`list` or `dump` Homebrew tap dependencies]' \ + '--tap[`list`, `dump` or `cleanup` Homebrew tap dependencies]' \ '(--install)--upgrade[`install` runs `brew upgrade` on outdated dependencies, even if `$HOMEBREW_BUNDLE_NO_UPGRADE` is set]' \ '--upgrade-formulae[`install` runs `brew upgrade` on any of these comma-separated formulae, even if `$HOMEBREW_BUNDLE_NO_UPGRADE` is set]' \ '--verbose[`install` prints output from commands as they are run. `check` lists all missing dependencies]' \ - '(--no-vscode)--vscode[`list` or `dump` VSCode (and forks/variants) extensions]' \ + '(--no-vscode)--vscode[`list`, `dump` or `cleanup` VSCode (and forks/variants) extensions]' \ '--whalebrew[`list` or `dump` Whalebrew dependencies]' \ '--zap[`cleanup` casks using the `zap` command instead of `uninstall`]' \ - subcommand \ @@ -777,28 +777,29 @@ _brew_contributions() { _brew_create() { _arguments \ '(--cask)--HEAD[Indicate that URL points to the package'\''s repository rather than a file]' \ - '(--cmake --crystal --go --meson --node --perl --python --ruby --rust --zig --cask)--autotools[Create a basic template for an Autotools-style build]' \ - '(--autotools --cmake --crystal --go --meson --node --perl --python --ruby --rust --zig --HEAD --set-license)--cask[Create a basic template for a cask]' \ - '(--autotools --crystal --go --meson --node --perl --python --ruby --rust --zig --cask)--cmake[Create a basic template for a CMake-style build]' \ - '(--autotools --cmake --go --meson --node --perl --python --ruby --rust --zig --cask)--crystal[Create a basic template for a Crystal build]' \ + '(--cabal --cmake --crystal --go --meson --node --perl --python --ruby --rust --zig --cask)--autotools[Create a basic template for an Autotools-style build]' \ + '(--autotools --cmake --crystal --go --meson --node --perl --python --ruby --rust --zig --cask)--cabal[Create a basic template for a Cabal build]' \ + '(--autotools --cabal --cmake --crystal --go --meson --node --perl --python --ruby --rust --zig --HEAD --set-license)--cask[Create a basic template for a cask]' \ + '(--autotools --cabal --crystal --go --meson --node --perl --python --ruby --rust --zig --cask)--cmake[Create a basic template for a CMake-style build]' \ + '(--autotools --cabal --cmake --go --meson --node --perl --python --ruby --rust --zig --cask)--crystal[Create a basic template for a Crystal build]' \ '--debug[Display any debugging information]' \ '--force[Ignore errors for disallowed formula names and names that shadow aliases]' \ - '(--autotools --cmake --crystal --meson --node --perl --python --ruby --rust --zig --cask)--go[Create a basic template for a Go build]' \ + '(--autotools --cabal --cmake --crystal --meson --node --perl --python --ruby --rust --zig --cask)--go[Create a basic template for a Go build]' \ '--help[Show this message]' \ - '(--autotools --cmake --crystal --go --node --perl --python --ruby --rust --zig --cask)--meson[Create a basic template for a Meson-style build]' \ + '(--autotools --cabal --cmake --crystal --go --node --perl --python --ruby --rust --zig --cask)--meson[Create a basic template for a Meson-style build]' \ '--no-fetch[Homebrew will not download URL to the cache and will thus not add its SHA-256 to the formula for you, nor will it check the GitHub API for GitHub projects (to fill out its description and homepage)]' \ - '(--autotools --cmake --crystal --go --meson --perl --python --ruby --rust --zig --cask)--node[Create a basic template for a Node build]' \ - '(--autotools --cmake --crystal --go --meson --node --python --ruby --rust --zig --cask)--perl[Create a basic template for a Perl build]' \ - '(--autotools --cmake --crystal --go --meson --node --perl --ruby --rust --zig --cask)--python[Create a basic template for a Python build]' \ + '(--autotools --cabal --cmake --crystal --go --meson --perl --python --ruby --rust --zig --cask)--node[Create a basic template for a Node build]' \ + '(--autotools --cabal --cmake --crystal --go --meson --node --python --ruby --rust --zig --cask)--perl[Create a basic template for a Perl build]' \ + '(--autotools --cabal --cmake --crystal --go --meson --node --perl --ruby --rust --zig --cask)--python[Create a basic template for a Python build]' \ '--quiet[Make some output more quiet]' \ - '(--autotools --cmake --crystal --go --meson --node --perl --python --rust --zig --cask)--ruby[Create a basic template for a Ruby build]' \ - '(--autotools --cmake --crystal --go --meson --node --perl --python --ruby --zig --cask)--rust[Create a basic template for a Rust build]' \ + '(--autotools --cabal --cmake --crystal --go --meson --node --perl --python --rust --zig --cask)--ruby[Create a basic template for a Ruby build]' \ + '(--autotools --cabal --cmake --crystal --go --meson --node --perl --python --ruby --zig --cask)--rust[Create a basic template for a Rust build]' \ '(--cask)--set-license[Explicitly set the license of the new formula]' \ '--set-name[Explicitly set the name of the new formula or cask]' \ '--set-version[Explicitly set the version of the new formula or cask]' \ '--tap[Generate the new formula within the given tap, specified as user`/`repo]' \ '--verbose[Make some output more verbose]' \ - '(--autotools --cmake --crystal --go --meson --node --perl --python --ruby --rust --cask)--zig[Create a basic template for a Zig build]' + '(--autotools --cabal --cmake --crystal --go --meson --node --perl --python --ruby --rust --cask)--zig[Create a basic template for a Zig build]' } # brew debugger @@ -1195,7 +1196,7 @@ _brew_instal() { '(--formula --force)--adopt[Adopt existing artifacts in the destination that are identical to those being installed. Cannot be combined with `--force`]' \ '(--formula)--appdir[Target location for Applications (default: `/Applications`)]' \ '(--cask)--as-dependency[Install but mark as installed as a dependency and not installed on request]' \ - '(--cask)--ask[Ask for confirmation before downloading and installing formulae. Print bottles and dependencies download size and install size]' \ + '--ask[Ask for confirmation before downloading and installing formulae. Print bottles and dependencies download size and install size]' \ '(--formula)--audio-unit-plugindir[Target location for Audio Unit Plugins (default: `~/Library/Audio/Plug-Ins/Components`)]' \ '(--formula)--binaries[Disable/enable linking of helper executables (default: enabled)]' \ '(--cask)--bottle-arch[Optimise bottles for the specified architecture rather than the oldest architecture supported by the version of macOS the bottles are built on]' \ @@ -1245,7 +1246,7 @@ _brew_instal() { '(--casks --binaries --require-sha --quarantine --adopt --skip-cask-deps --zap --appdir --keyboard-layoutdir --colorpickerdir --prefpanedir --qlplugindir --mdimporterdir --dictionarydir --fontdir --servicedir --input-methoddir --internet-plugindir --audio-unit-plugindir --vst-plugindir --vst3-plugindir --screen-saverdir --language)--formula[Treat all named arguments as formulae]' \ '*:formula:__brew_formulae' \ - cask \ - '(--formulae --env --ignore-dependencies --only-dependencies --cc --build-from-source --force-bottle --include-test --HEAD --fetch-HEAD --keep-tmp --debug-symbols --build-bottle --skip-post-install --skip-link --as-dependency --bottle-arch --interactive --git --overwrite --ask)--cask[Treat all named arguments as casks]' \ + '(--formulae --env --ignore-dependencies --only-dependencies --cc --build-from-source --force-bottle --include-test --HEAD --fetch-HEAD --keep-tmp --debug-symbols --build-bottle --skip-post-install --skip-link --as-dependency --bottle-arch --interactive --git --overwrite)--cask[Treat all named arguments as casks]' \ '*:cask:__brew_casks' } @@ -1256,7 +1257,7 @@ _brew_install() { '(--formula --force)--adopt[Adopt existing artifacts in the destination that are identical to those being installed. Cannot be combined with `--force`]' \ '(--formula)--appdir[Target location for Applications (default: `/Applications`)]' \ '(--cask)--as-dependency[Install but mark as installed as a dependency and not installed on request]' \ - '(--cask)--ask[Ask for confirmation before downloading and installing formulae. Print bottles and dependencies download size and install size]' \ + '--ask[Ask for confirmation before downloading and installing formulae. Print bottles and dependencies download size and install size]' \ '(--formula)--audio-unit-plugindir[Target location for Audio Unit Plugins (default: `~/Library/Audio/Plug-Ins/Components`)]' \ '(--formula)--binaries[Disable/enable linking of helper executables (default: enabled)]' \ '(--cask)--bottle-arch[Optimise bottles for the specified architecture rather than the oldest architecture supported by the version of macOS the bottles are built on]' \ @@ -1306,7 +1307,7 @@ _brew_install() { '(--casks --binaries --require-sha --quarantine --adopt --skip-cask-deps --zap --appdir --keyboard-layoutdir --colorpickerdir --prefpanedir --qlplugindir --mdimporterdir --dictionarydir --fontdir --servicedir --input-methoddir --internet-plugindir --audio-unit-plugindir --vst-plugindir --vst3-plugindir --screen-saverdir --language)--formula[Treat all named arguments as formulae]' \ '*:formula:__brew_formulae' \ - cask \ - '(--formulae --env --ignore-dependencies --only-dependencies --cc --build-from-source --force-bottle --include-test --HEAD --fetch-HEAD --keep-tmp --debug-symbols --build-bottle --skip-post-install --skip-link --as-dependency --bottle-arch --interactive --git --overwrite --ask)--cask[Treat all named arguments as casks]' \ + '(--formulae --env --ignore-dependencies --only-dependencies --cc --build-from-source --force-bottle --include-test --HEAD --fetch-HEAD --keep-tmp --debug-symbols --build-bottle --skip-post-install --skip-link --as-dependency --bottle-arch --interactive --git --overwrite)--cask[Treat all named arguments as casks]' \ '*:cask:__brew_casks' } @@ -1746,7 +1747,7 @@ _brew_reinstall() { _arguments \ '(--formula)--adopt[Adopt existing artifacts in the destination that are identical to those being installed. Cannot be combined with `--force`]' \ '(--formula)--appdir[Target location for Applications (default: `/Applications`)]' \ - '(--cask)--ask[Ask for confirmation before downloading and upgrading formulae. Print bottles and dependencies download size, install and net install size]' \ + '--ask[Ask for confirmation before downloading and upgrading formulae. Print bottles and dependencies download size, install and net install size]' \ '(--formula)--audio-unit-plugindir[Target location for Audio Unit Plugins (default: `~/Library/Audio/Plug-Ins/Components`)]' \ '(--formula)--binaries[Disable/enable linking of helper executables (default: enabled)]' \ '(--cask --force-bottle)--build-from-source[Compile formula from source even if a bottle is available]' \ @@ -1785,7 +1786,7 @@ _brew_reinstall() { '(--casks --binaries --require-sha --quarantine --adopt --skip-cask-deps --zap --appdir --keyboard-layoutdir --colorpickerdir --prefpanedir --qlplugindir --mdimporterdir --dictionarydir --fontdir --servicedir --input-methoddir --internet-plugindir --audio-unit-plugindir --vst-plugindir --vst3-plugindir --screen-saverdir --language)--formula[Treat all named arguments as formulae]' \ '*:formula:__brew_formulae' \ - cask \ - '(--formulae --build-from-source --interactive --force-bottle --keep-tmp --debug-symbols --git --ask)--cask[Treat all named arguments as casks]' \ + '(--formulae --build-from-source --interactive --force-bottle --keep-tmp --debug-symbols --git)--cask[Treat all named arguments as casks]' \ '*:cask:__brew_casks' } @@ -1902,7 +1903,7 @@ _brew_services() { '--help[Show this message]' \ '--json[Output as JSON]' \ '--keep[When stopped, don'\''t unregister the service from launching at login (or boot)]' \ - '(--no-wait)--max-wait[Wait at most this many seconds for `stop` to finish stopping a service. Omit this flag or set this to zero (0) seconds to wait indefinitely]' \ + '(--no-wait)--max-wait[Wait at most this many seconds for `stop` to finish stopping a service. Defaults to 60. Set this to zero (0) seconds to wait indefinitely]' \ '(--max-wait)--no-wait[Don'\''t wait for `stop` to finish stopping the service]' \ '--quiet[Make some output more quiet]' \ '--sudo-service-user[When run as root on macOS, run the service(s) as this user]' \ @@ -2325,7 +2326,7 @@ _brew_update_test() { _brew_upgrade() { _arguments \ '(--formula)--appdir[Target location for Applications (default: `/Applications`)]' \ - '(--cask)--ask[Ask for confirmation before downloading and upgrading formulae. Print bottles and dependencies download size, install and net install size]' \ + '--ask[Ask for confirmation before downloading and upgrading formulae. Print bottles and dependencies download size, install and net install size]' \ '(--formula)--audio-unit-plugindir[Target location for Audio Unit Plugins (default: `~/Library/Audio/Plug-Ins/Components`)]' \ '(--formula)--binaries[Disable/enable linking of helper executables (default: enabled)]' \ '(--cask --force-bottle)--build-from-source[Compile formula from source even if a bottle is available]' \ @@ -2368,7 +2369,7 @@ _brew_upgrade() { '(--casks --skip-cask-deps --greedy --greedy-latest --greedy-auto-updates --binaries --require-sha --quarantine --appdir --keyboard-layoutdir --colorpickerdir --prefpanedir --qlplugindir --mdimporterdir --dictionarydir --fontdir --servicedir --input-methoddir --internet-plugindir --audio-unit-plugindir --vst-plugindir --vst3-plugindir --screen-saverdir --language)--formula[Treat all named arguments as formulae. If no named arguments are specified, upgrade only outdated formulae]' \ '*:installed_formula:__brew_installed_formulae' \ - installed_cask \ - '(--formulae --build-from-source --interactive --force-bottle --fetch-HEAD --keep-tmp --debug-symbols --overwrite --ask)--cask[Treat all named arguments as casks. If no named arguments are specified, upgrade only outdated casks]' \ + '(--formulae --build-from-source --interactive --force-bottle --fetch-HEAD --keep-tmp --debug-symbols --overwrite)--cask[Treat all named arguments as casks. If no named arguments are specified, upgrade only outdated casks]' \ '*:installed_cask:__brew_installed_casks' } diff --git a/docs/.mdl_ruleset.rb b/docs/.mdl_ruleset.rb index 7cf80606d7..fab331a825 100644 --- a/docs/.mdl_ruleset.rb +++ b/docs/.mdl_ruleset.rb @@ -8,3 +8,17 @@ rule "HB034", "Bare unstyled URL used" do doc.matching_text_element_lines(%r{(?<=\s)https?://}) end end +rule "HB100", "Full URL for internal link used" do + tags :links, :url + aliases "no-full-urls-for-internal-links" + check do |doc| + doc.matching_lines(%r{\]\(https://docs.brew.sh/.+?\)}) + end +end +rule "HB101", "File extension missing from internal link" do + tags :links, :url + aliases "file-extension-required-for-internal-links" + check do |doc| + doc.matching_lines(/\]\((?!#|\w+:)(?>[^#.)]+)(?!\.\w+)/) + end +end diff --git a/docs/Acceptable-Casks.md b/docs/Acceptable-Casks.md index 2146d0c2e3..5813f17c49 100644 --- a/docs/Acceptable-Casks.md +++ b/docs/Acceptable-Casks.md @@ -36,7 +36,7 @@ These versions also live in the main repository at [Homebrew/homebrew-cask](http ### Regional and Localized -When an app exists in more than one language or has different regional editions, [the `language` stanza should be used to switch between languages or regions](https://docs.brew.sh/Cask-Cookbook#stanza-language). +When an app exists in more than one language or has different regional editions, [the `language` stanza should be used to switch between languages or regions](Cask-Cookbook.md#stanza-language). ### Trial and Freemium versions @@ -111,7 +111,7 @@ Common reasons to reject a cask entirely: * An app from a code repository that is not notable enough (under 30 forks, 30 watchers, 75 stars). * [Electronic Identification (eID) software](https://github.com/Homebrew/homebrew-cask/issues/59021). * App requires [SIP to be disabled](https://github.com/Homebrew/homebrew-cask/pull/41890) to be installed and/or used. -* App installer is a `pkg` that requires [`allow_untrusted: true`](https://docs.brew.sh/Cask-Cookbook#pkg-allow_untrusted). +* App installer is a `pkg` that requires [`allow_untrusted: true`](Cask-Cookbook.md#pkg-allow_untrusted). * App is a trial version, and the only way to acquire the full version is through the Mac App Store. * Similarly (and trickier to spot), the app has moved to the Mac App Store but still provides old versions via direct download. We reject these in all official repositories so users don’t get stuck using an old version, wrongly thinking they’re using the most up-to-date one (which, amongst other things, might be a security risk). * App is unmaintained, i.e. no releases in the last year, or [explicitly discontinued](https://github.com/Homebrew/homebrew-cask/pull/22699). @@ -120,7 +120,7 @@ Common reasons to reject a cask entirely: * Or if the Cask has a download URL that is both behind a login/registration form and from a host that differs from the homepage. * Cask is unreasonably difficult to maintain. Examples have included [Audacity](https://github.com/Homebrew/homebrew-cask/pull/27517) and [older Java development casks](https://github.com/Homebrew/homebrew-cask/issues/57387). * Cask has been rejected before due to an issue we cannot fix, and the new submission doesn’t fix that. An example would be the [first submission of `soapui`](https://github.com/Homebrew/homebrew-cask/pull/4939), whose installation problems were not fixed in the two [subsequent](https://github.com/Homebrew/homebrew-cask/pull/9969) [submissions](https://github.com/Homebrew/homebrew-cask/pull/10606). -* Cask is a duplicate. These submissions mostly occur when the [token reference](https://docs.brew.sh/Cask-Cookbook#token-reference) was not followed. +* Cask is a duplicate. These submissions mostly occur when the [token reference](Cask-Cookbook.md#token-reference) was not followed. * The author has [specifically asked us not to include it](https://github.com/Homebrew/homebrew-cask/pull/5342). * App is both open-source and CLI-only (i.e. it only uses the `binary` artifact). In that case, and [in the spirit of deduplication](https://github.com/Homebrew/homebrew-cask/issues/15603), submit it first to [homebrew/core](https://github.com/Homebrew/homebrew-core) as a formula that builds from source. If it is rejected, you may then try again as a cask (link to the issue from your pull request so we can see the discussion and reasoning for rejection). * App is open-source and has a GUI but no compiled versions (or only old ones) are provided. It’s better to have them in [homebrew/core](https://github.com/Homebrew/homebrew-core) so users don’t get perpetually outdated versions. See [`gedit`](https://github.com/Homebrew/homebrew-cask/pull/23360) for example. diff --git a/docs/Brew-Bundle-and-Brewfile.md b/docs/Brew-Bundle-and-Brewfile.md index 27c7ead3fd..27894a7bcb 100644 --- a/docs/Brew-Bundle-and-Brewfile.md +++ b/docs/Brew-Bundle-and-Brewfile.md @@ -10,7 +10,7 @@ It uses `Brewfile`s to provide a declarative interface for installing/upgrading Rather than specifying the `brew` commands you wish to run, you can specify the state you wish to reach. -See also the [`brew bundle` section of `man brew`](https://docs.brew.sh/Manpage#bundle-subcommand) or `brew bundle --help`. +See also the [`brew bundle` section of `man brew`](Manpage.md#bundle-subcommand) or `brew bundle --help`. ## Basic Usage diff --git a/docs/Brew-Livecheck.md b/docs/Brew-Livecheck.md index e186436ae4..3b4b0d535f 100644 --- a/docs/Brew-Livecheck.md +++ b/docs/Brew-Livecheck.md @@ -1,23 +1,26 @@ --- -last_review_date: "1970-01-01" +last_review_date: 2025-05-28 --- # `brew livecheck` The `brew livecheck` command finds the newest version of a formula or cask's software by checking upstream. Livecheck has [strategies](https://rubydoc.brew.sh/Homebrew/Livecheck/Strategy) to identify versions from various sources, such as Git repositories, websites, etc. -## Behavior +## Behaviour When livecheck isn't given instructions for how to check for upstream versions, it does the following by default: -1. For formulae: Collect the `stable`, `head`, and `homepage` URLs, in that order (resources simply use their `url`). For casks: Collect the `url` and `homepage` URLs, in that order. +1. Collect a list of URLs to check. + * For formulae: use their `stable`, `head`, and `homepage` URLs, in that order. + * For formula resources: use their `url`. + * For casks: use their `url` and `homepage` URLs, in that order. 1. Determine if any strategies apply to the first URL. If not, try the next URL. 1. If a strategy can be applied, use it to check for new versions. 1. Return the newest version (or an error if versions could not be found at any available URLs). -It's sometimes necessary to override this default behavior to create a working check. If a source doesn't provide the newest version, we need to check a different one. If livecheck doesn't correctly match version text, we need to provide an appropriate regex or `strategy` block. +It's sometimes necessary to override this default behaviour to create a working check. If a source doesn't provide the newest version, we need to check a different one. If livecheck doesn't correctly match version text, we need to provide an appropriate regex or `strategy` block. -This can be accomplished by adding a `livecheck` block to the formula/cask/resource. For more information on the available methods, please refer to the [`Livecheck` class documentation](https://rubydoc.brew.sh/Livecheck). +This can be accomplished by adding a `livecheck` block to the formula/cask/resource. For more information on the available methods, please refer to the [`Livecheck` class](https://rubydoc.brew.sh/Livecheck) documentation. ## Creating a check @@ -47,9 +50,9 @@ The `livecheck` block regex restricts matches to a subset of the fetched content * **Regexes should be made case insensitive, whenever possible**, by adding `i` at the end (e.g. `/.../i` or `%r{...}i`). This improves reliability, as the regex will handle changes in letter case without needing modifications. -* **Regexes should only use a capturing group around the version text**. For example, in `/href=.*?example-v?(\d+(?:\.\d+)+)(?:-src)?\.t/i`, we're only using a capturing group around the version test (matching a version like `1.2`, `1.2.3`, etc.) and we're using non-capturing groups elsewhere (e.g. `(?:-src)?`). +* **Regexes should only use a capturing group around the version text**. For example, in `/href=.*?example-v?(\d+(?:\.\d+)+)(?:-src)?\.t/i`, we're only using a capturing group around the version text (matching a version like `1.2`, `1.2.3`, etc.) and we're using non-capturing groups elsewhere (e.g. `(?:-src)?`). -* **Anchor the start/end of the regex, to restrict the scope**. For example, on HTML pages we often match file names or version directories in `href` attribute URLs (e.g. `/href=.*?example[._-]v?(\d+(?:\.\d+)+)\.zip/i`). The general idea is that limiting scope will help exclude unwanted matches. +* **Anchor the start/end of the regex to restrict its scope**. For example, on HTML pages we often match file names or version directories in `href` attribute URLs (e.g. `/href=.*?example[._-]v?(\d+(?:\.\d+)+)\.zip/i`). The general idea is that limiting scope will help exclude unwanted matches. * **Avoid generic catchalls like `.*` or `.+`** in favor of something non-greedy and/or contextually appropriate. For example, to match characters within the bounds of an HTML attribute, use `[^"' >]+?`. @@ -112,9 +115,17 @@ end The referenced formula/cask should be in the same tap, as a reference to a formula/cask from another tap will generate an error if the user doesn't already have it tapped. +A formula resource whose version stays in sync with its parent formula versioning can use the same check with `formula :parent`. + +```ruby +livecheck do + formula :parent +end +``` + ### `POST` requests -Some checks require making a `POST` request and that can be accomplished by adding a `post_form` or `post_json` option to a `livecheck` block `url`. +Some checks require making a `POST` request, which can be accomplished by adding a `post_form` or `post_json` option to a `livecheck` block `url`. ```ruby livecheck do @@ -126,7 +137,7 @@ livecheck do end ``` -`post_form` is used for form data and `post_json` is used for JSON data. livecheck will encode the provided hash value to the appropriate format before making the request. +`post_form` is used for form data and `post_json` is used for JSON data. Livecheck will encode the provided hash value to the appropriate format before making the request. `POST` support only applies to strategies that use `Strategy::page_headers` or `::page_content` (directly or indirectly), so it does not apply to `ExtractPlist`, `Git`, `GithubLatest`, `GithubReleases`, etc. @@ -219,7 +230,7 @@ end A `strategy` block for `GithubLatest` receives the parsed JSON data from the GitHub API for a repository's "latest" release, along with a regex. When a regex is not provided in a `livecheck` block, the strategy's default regex is passed into the `strategy` block instead. -By default, the strategy matches version text in the release's tag or title but a `strategy` block can be used to check any of the fields in the release JSON. The logic in the following `strategy` block is similar to the default behavior but only checks the release tag instead, for the sake of demonstration: +By default, the strategy matches version text in the release's tag or title but a `strategy` block can be used to check any of the fields in the release JSON. The logic in the following `strategy` block is similar to the default behaviour but only checks the release tag instead, for the sake of demonstration: ```ruby livecheck do @@ -240,7 +251,7 @@ You can find more information on the response JSON from this API endpoint in the A `strategy` block for `GithubReleases` receives the parsed JSON data from the GitHub API for a repository's most recent releases, along with a regex. When a regex is not provided in a `livecheck` block, the strategy's default regex is passed into the `strategy` block instead. -By default, the strategy matches version text in each release's tag or title but a `strategy` block can be used to check any of the fields in the release JSON. The logic in the following `strategy` block is similar to the default behavior but only checks the release tag instead, for the sake of demonstration: +By default, the strategy matches version text in each release's tag or title but a `strategy` block can be used to check any of the fields in the release JSON. The logic in the following `strategy` block is similar to the default behaviour but only checks the release tag instead, for the sake of demonstration: ```ruby livecheck do @@ -343,7 +354,7 @@ A `strategy` block for `Sparkle` receives an `item` which has methods for the `v brew find-appcast '/path/to/application.app' ``` -The default pattern for the `Sparkle` strategy is to generate `"#{item.short_version},#{item.version}"` from `sparkle:shortVersionString` and `sparkle:version` if both are set. In the example below, the `url` also includes a download ID which is needed: +The default pattern for the `Sparkle` strategy is to generate `"#{item.short_version},#{item.version}"` from `sparkle:shortVersionString` and `sparkle:version` if both are set. In the example below, the returned value also includes a needed download ID from the `url`: ```ruby livecheck do @@ -363,6 +374,17 @@ livecheck do end ``` +If the value returned by `item` is not the most recent or not what's desired, passing `items` instead will allow iterating over all the items in the feed: + +```ruby +livecheck do + url "https://www.example.com/example.xml" + strategy :sparkle do |items| + items.find { |item| item.channel.nil? }&.short_version + end +end +``` + #### `Xml` `strategy` block A `strategy` block for `Xml` receives an `REXML::Document` object and, if provided, a regex. For example, if the XML contains a `versions` element with nested `version` elements and their inner text contains the version string, we could extract it using a regex as follows: @@ -416,6 +438,18 @@ livecheck do end ``` +### `throttle` + +For software with extremely frequent releases that don't all need to be published as formula/cask updates, livecheck can be set to reduce how many versions it surfaces by using `throttle`. In this example, only versions whose last component is divisible by 10 will be returned. + +```ruby +livecheck do + url :stable + regex(/^v?(\d+(?:\.\d+)+)$/i) + throttle 10 +end +``` + ### `skip` Livecheck automatically skips some formulae/casks for a number of reasons (deprecated, disabled, etc.). However, on rare occasions we need to use a `livecheck` block to do a manual skip. The `skip` method takes a string containing a very brief reason for skipping. diff --git a/docs/Cask-Cookbook.md b/docs/Cask-Cookbook.md index b1f280eb5b..7d750b8ac4 100644 --- a/docs/Cask-Cookbook.md +++ b/docs/Cask-Cookbook.md @@ -1,5 +1,5 @@ --- -last_review_date: "1970-01-01" +last_review_date: 2025-05-18 --- # Cask Cookbook @@ -33,7 +33,7 @@ Exception: `do` blocks such as `postflight` may enclose a block of pure Ruby cod ## Header line details -The Cask name ([``](#token-reference)) on the header line `cask do` should match the cask filename, without the `.rb` extension, enclosed in double quotes. +The cask name ([``](#token-reference)) on the header line `cask do` should match the cask filename, without the `.rb` extension, enclosed in double quotes. There are currently some arbitrary limitations on cask tokens which are in the process of being removed. GitHub Actions will catch any errors during the transition. @@ -41,6 +41,9 @@ There are currently some arbitrary limitations on cask tokens which are in the p Having a common order for stanzas makes casks easier to update and parse. Below is the complete stanza sequence (no cask will have all stanzas). The empty lines shown here are also important, as they help to visually delimit information. + arch + os + version sha256 @@ -67,6 +70,9 @@ Having a common order for stanzas makes casks easier to update and parse. Below installer binary manpage + bash_completion + fish_completion + zsh_completion colorpicker dictionary font @@ -106,21 +112,21 @@ Note that every stanza that has additional parameters (`:symbols` after a `,`) s Each of the following stanzas is required for every cask. -| name | multiple occurrences allowed? | value | -| ---------------------------- | :---------------------------: | ----- | -| [`version`](#stanza-version) | no | Application version. | -| [`sha256`](#stanza-sha256) | no | SHA-256 checksum of the file downloaded from `url`, calculated by the command `shasum -a 256 `. Can be suppressed by using the special value `:no_check`. | -| [`url`](#stanza-url) | no | URL to the `.dmg`/`.zip`/`.tgz`/`.tbz2` file that contains the application. A [comment](#when-url-and-homepage-domains-differ-add-verified) should be added if the domains in the `url` and `homepage` stanzas differ. Block syntax should be used for URLs that change on every visit. | -| [`name`](#stanza-name) | yes | String providing the full and proper name defined by the vendor. | -| [`desc`](#stanza-desc) | no | One-line description of the cask. Shown when running `brew info`. | -| `homepage` | no | Application homepage; used for the `brew home` command. | -| [`livecheck`](#stanza-livecheck) | no | Ruby block describing how to find updates for this cask. Supersedes `appcast`. | -| [`depends_on`](#stanza-depends_on) | yes | List of dependencies and requirements for this cask. | -| [`zap`](#stanza-zap) | yes | Additional procedures for a more complete uninstall, including user files and shared resources. | +| name | multiple occurrences allowed? | value | +| ---------------------------------- | :---------------------------: | ----- | +| [`version`](#stanza-version) | no | Application version, or the special value `:latest`. | +| [`sha256`](#stanza-sha256) | no | SHA-256 checksum of the file downloaded from `url` as calculated by the command `shasum -a 256 `, or the special value `:no_check`. | +| [`url`](#stanza-url) | no | URL to the `.dmg`/`.zip`/`.tgz`/`.tbz2` file that contains the application. A [comment](#when-url-and-homepage-domains-differ-add-verified) should be added if the domains in the `url` and `homepage` stanzas differ. | +| [`name`](#stanza-name) | yes | String providing the full and proper name defined by the vendor. | +| [`desc`](#stanza-desc) | no | One-line description of the cask. Shown when running `brew info`. | +| `homepage` | no | Application homepage; used for the `brew home` command. | +| [`livecheck`](#stanza-livecheck) | no | Ruby block describing how to find updates for this cask. Supersedes `appcast`. | +| [`depends_on`](#stanza-depends_on) | yes | List of dependencies and requirements for this cask. | +| [`zap`](#stanza-zap) | yes | Additional procedures for a more complete uninstall, including user files and shared resources. | ### At least one artifact stanza is also required -Each cask must declare one or more *artifacts* (i.e. something to install). +Each cask must declare one or more [artifacts](https://rubydoc.brew.sh/Cask/Artifact) (i.e. something to install). | name | multiple occurrences allowed? | value | | -------------------------------- | :---------------------------: | ----- | @@ -130,6 +136,9 @@ Each cask must declare one or more *artifacts* (i.e. something to install). | [`installer`](#stanza-installer) | yes | Describes an executable which must be run to complete the installation. | | [`binary`](#stanza-binary) | yes | Relative path to a Binary that should be linked into the `$(brew --prefix)/bin` folder on installation. | | `manpage` | yes | Relative path to a Man Page that should be linked into the respective man page folder on installation, e.g. `/opt/homebrew/share/man/man3` for `my_app.3`. | +| `bash_completion` | yes | Relative path to a Bash completion file that should be linked into the `$(brew --prefix)/etc/bash_completion.d` folder on installation. | +| `fish_completion` | yes | Relative path to a fish completion file that should be linked into the `$(brew --prefix)/share/fish/vendor_completions.d` folder on installation. | +| `zsh_completion` | yes | Relative path to a Zsh completion file that should be linked into the `$(brew --prefix)/share/zsh/site-functions` folder on installation. | | `colorpicker` | yes | Relative path to a ColorPicker plugin that should be moved into the `~/Library/ColorPickers` folder on installation. | | `dictionary` | yes | Relative path to a Dictionary that should be moved into the `~/Library/Dictionaries` folder on installation. | | `font` | yes | Relative path to a Font that should be moved into the `~/Library/Fonts` folder on installation. | @@ -151,11 +160,11 @@ Each cask must declare one or more *artifacts* (i.e. something to install). | name | multiple occurrences allowed? | value | | ------------------------------------------ | :---------------------------: | ----- | -| [`uninstall`](#stanza-uninstall) | yes | Procedures to uninstall a cask. Optional unless the `pkg` stanza is used. | -| [`conflicts_with`](#stanza-conflicts_with) | yes | List of conflicts with this cask (*not yet functional*). | +| [`uninstall`](#stanza-uninstall) | yes | Procedures to uninstall a cask. Optional unless a `pkg` or `installer` artifact stanza is used. | +| [`conflicts_with`](#stanza-conflicts_with) | yes | List of conflicts with this cask. | | [`caveats`](#stanza-caveats) | yes | String or Ruby block providing the user with cask-specific information at install time. | -| [`deprecate!`](#stanza-deprecate--disable) | no | Date as a String in `YYYY-MM-DD` format and a String or Symbol providing a reason. | -| [`disable!`](#stanza-deprecate--disable) | no | Date as a String in `YYYY-MM-DD` format and a String or Symbol providing a reason. | +| [`deprecate!`](#stanza-deprecate--disable) | no | Date as a string in `YYYY-MM-DD` format and a string or symbol providing a reason. | +| [`disable!`](#stanza-deprecate--disable) | no | Date as a string in `YYYY-MM-DD` format and a string or symbol providing a reason. | | `preflight` | yes | Ruby block containing preflight install operations (needed only in very rare cases). | | [`postflight`](#stanza-flight) | yes | Ruby block containing postflight install operations. | | `uninstall_preflight` | yes | Ruby block containing preflight uninstall operations (needed only in very rare cases). | @@ -199,7 +208,7 @@ artifact "sapmachine-jdk-#{version}.jdk", target: "/Library/Java/JavaVirtualMach #### *target* works on most artifact types -The `target:` key works similarly for most cask artifacts, such as `app`, `binary`, `colorpicker`, `dictionary`, `font`, `input_method`, `internet_plugin`, `keyboard_layout`, `prefpane`, `qlplugin`, `mdimporter`, `screen_saver`, `service`, `suite`, `audio_unit_plugin`, `vst_plugin`, `vst3_plugin`, and `artifact`. +The `target:` key works similarly for most cask artifacts, such as `app`, `binary`, `bash_completion`, `fish_completion`, `zsh_completion`, `colorpicker`, `dictionary`, `font`, `input_method`, `internet_plugin`, `keyboard_layout`, `prefpane`, `qlplugin`, `mdimporter`, `screen_saver`, `service`, `suite`, `audio_unit_plugin`, `vst_plugin`, `vst3_plugin`, and `artifact`. #### *target* should only be used in select cases @@ -244,7 +253,7 @@ Behaviour and usage of `target:` is [the same as with `app`](#renaming-the-targe Sometimes there are particularities with the installation of a piece of software that cannot or should not be handled programmatically by Homebrew Cask. In those instances, `caveats` is the way to inform the user. Information in `caveats` is displayed when a cask is invoked with either `install` or `info`. -To avoid flooding users with too many messages (thus desensitising them to the important ones), `caveats` should be used sparingly and exclusively for installation-related matters. If you’re not sure a `caveat` you find pertinent is installation-related or not, ask a maintainer. As a general rule, if your case isn’t already covered in our comprehensive [`caveats Mini-DSL`](#caveats-mini-dsl), it’s unlikely to be accepted. +To avoid flooding users with too many messages (thus desensitising them to the important ones), `caveats` should be used sparingly and exclusively for installation-related matters. If you’re not sure whether a `caveat` you find pertinent is installation-related or not, ask a maintainer. As a general rule, if your case isn’t already covered in our comprehensive [`caveats mini-DSL`](#caveats-mini-dsl), it’s unlikely to be accepted. #### `caveats` as a string @@ -296,52 +305,15 @@ caveats do end ``` -### Stanza: `deprecate!` / `disable!` - -`deprecate!` and `disable!` are used to declare that a cask is no longer functional or supported. -Casks that contain a `deprecate!` stanza can still be installed, but will print a warning message when they are installed or upgraded. -Casks that contain a `disable!` stanza cannot be installed or upgraded and will print an error message. - -The syntax for both stanzas is the same: - -```ruby -deprecate! date: "YYYY-MM-DD", because: "is ..." -disable! date: "YYYY-MM-DD", because: "is ..." - -# Or with a preset reason (see the `because:` argument section below) -deprecate! date: "YYYY-MM-DD", because: :discontinued -disable! date: "YYYY-MM-DD", because: :discontinued -``` - -#### `date:` argument - -The `date:` argument controls when the deprecation or disabling will take effect. -Casks that have a `deprecate!` stanza with a date in the future will not be treated as being deprecated until that date. -Casks that have a `disable!` stanza with a date in the future will be automatically deprecated until that date, at which point they will be disabled. - -#### `because:` argument - -The `because:` argument accepts a reason for the cask being deprecated or disabled. -The info message will be ` is deprecated because it !`, so format the reason to fit that sentence. -For example, `because: "is broken"` will result in ` is deprecated because it is broken!`. - -The `because:` argument can also accept a symbol that corresponds to a preset reason, for example: - -```ruby -deprecate! date: "YYYY-MM-DD", because: :discontinued -``` - -A complete list of allowable symbols can be found in the [`DeprecateDisable` module](https://github.com/Homebrew/brew/blob/master/Library/Homebrew/deprecate_disable.rb). - ### Stanza: `conflicts_with` -`conflicts_with` is used to declare conflicts that keep a cask from installing or working correctly. +`conflicts_with` is used to declare conflicts that prevent a cask from installing or working correctly. #### `conflicts_with` *cask* The value should be another cask token. -Example: the [macFUSE](https://github.com/Homebrew/homebrew-cask/blob/aa461148bbb5119af26b82cccf5003e2b4e50d95/Casks/m/macfuse.rb#L17) cask, which conflicts with `macfuse-dev`. +Example: [macFUSE](https://github.com/Homebrew/homebrew-cask/blob/aa461148bbb5119af26b82cccf5003e2b4e50d95/Casks/m/macfuse.rb#L17), which conflicts with `macfuse-dev`. ```ruby conflicts_with cask: "macfuse-dev" @@ -363,9 +335,17 @@ conflicts_with formula: "macvim" `depends_on` is used to declare dependencies and requirements for a cask. `depends_on` is not consulted until `install` is attempted. +| key | description | +| ---------- | ----------- | +| `cask:` | required Homebrew cask tokens as string or array | +| `formula:` | required Homebrew formula names as string or array | +| `macos:` | macOS release requirements as symbol, array or string comparison expression | +| `arch:` | hardware requirements as symbol or array | +| `java:` | *stub - not yet functional* | + #### `depends_on` *cask* -The value should be another cask token, needed by the current cask. +The value should be one or more tokens of casks needed by the current cask, as a string or array of strings. Example: [NTFSTool](https://github.com/Homebrew/homebrew-cask/blob/aa461148bbb5119af26b82cccf5003e2b4e50d95/Casks/n/ntfstool.rb#L11), which depends on macFUSE. @@ -375,7 +355,7 @@ depends_on cask: "macfuse" #### `depends_on` *formula* -The value should name a Homebrew formula needed by the cask. +The value should be one or more names of formulae needed by the current cask, as a string or array of strings. Example: some distributions are contained in archive formats such as `7z` which are not supported by stock Apple tools. For these cases, a more capable archive reader may be pulled in at install time by declaring a dependency on the `unar` formula: @@ -387,7 +367,7 @@ depends_on formula: "unar" ##### Requiring an exact macOS release -The value for `depends_on macos:` may be a symbol or an array of symbols, listing the exact compatible macOS releases. The available values for macOS releases are defined in the [MacOSVersion class](https://rubydoc.brew.sh/MacOSVersion.html). +The value for `depends_on macos:` may be a symbol or an array of symbols, listing the exact compatible macOS releases. The values for supported macOS releases can be found in the [`MacOSVersion` class](https://rubydoc.brew.sh/MacOSVersion) documentation. Only major releases are covered (10.x numbers containing a single dot or whole numbers since macOS 11). The symbol form is used for readability. The following are all valid ways to enumerate the exact macOS release requirements for a cask: @@ -401,7 +381,7 @@ depends_on macos: [ ##### Setting a minimum macOS release -`depends_on macos:` can also accept a string starting with a comparison operator such as `>=`, followed by an macOS release in the form above. The following is a valid expression meaning “at least macOS Big Sur (11.0)”: +`depends_on macos:` can also accept a string starting with a comparison operator such as `>=`, followed by a macOS release in the form above. The following is a valid expression meaning “at least macOS Big Sur (11.0)”: ```ruby depends_on macos: ">= :big_sur" @@ -411,12 +391,12 @@ A comparison expression cannot be combined with any other form of `depends_on ma #### `depends_on` *arch* -The value for `depends_on arch:` may be a symbol or an array of symbols, listing the hardware compatibility requirements for a cask. The requirement is satisfied at install time if any one of multiple `arch:` values matches the user’s hardware. +The value for `depends_on arch:` may be a symbol or an array of symbols, listing the hardware compatibility requirements for a cask. The requirement is satisfied at install time if any one of the provided `arch:` values matches the user’s hardware. The available symbols for hardware are: -| symbol | meaning | -| ---------- | -------------- | +| symbol | meaning | +| ---------- | ------- | | `:arm64` | Apple Silicon | | `:x86_64` | 64-bit Intel | | `:intel` | 64-bit Intel | @@ -430,19 +410,52 @@ depends_on arch: :x86_64 # same meaning as above depends_on arch: [:x86_64] # same meaning as above ``` -#### `depends_on` parameters +### Stanza: `deprecate!` / `disable!` -| key | description | -| ---------- | ----------- | -| `formula:` | Homebrew formula | -| `cask:` | cask token | -| `macos:` | symbol, array, or string comparison expression defining macOS release requirements | -| `arch:` | symbol or array defining hardware requirements | -| `java:` | *stub - not yet functional* | +`deprecate!` and `disable!` are used to declare that a cask is no longer functional or supported. +Casks that contain a `deprecate!` stanza can still be installed, but will print a warning message when they are installed or upgraded. +Casks that contain a `disable!` stanza cannot be installed or upgraded and will print an error message. + +The syntax for both stanzas is the same: + +```ruby +deprecate! date: "YYYY-MM-DD", because: "is ..." +disable! date: "YYYY-MM-DD", because: "is ..." + +# Or with a preset reason and suggested replacement (see the parameter sections below) +deprecate! date: "YYYY-MM-DD", because: :discontinued, replacement_formula: "another" +disable! date: "YYYY-MM-DD", because: :unmaintained, replacement_cask: "alternative" +``` + +#### `date:` parameter + +The `date:` parameter controls when the deprecation or disabling will take effect. +Casks that have a `deprecate!` stanza with a date in the future will not be treated as being deprecated until that date. +Casks that have a `disable!` stanza with a date in the future will be automatically deprecated until that date, at which point they will become disabled. + +#### `because:` parameter + +The `because:` parameter accepts a reason for the cask being deprecated or disabled. +The info message will be ` is deprecated because it !`, so format the reason to fit that sentence. +For example, `because: "is broken"` will result in ` is deprecated because it is broken!`. + +The `because:` parameter can also accept a symbol that corresponds to a preset reason, for example: + +```ruby +deprecate! date: "YYYY-MM-DD", because: :discontinued +``` + +A complete list of allowable symbols can be found in the [`DeprecateDisable` module](https://rubydoc.brew.sh/DeprecateDisable) documentation. + +#### `replacement_formula:` / `replacement_cask:` parameter + +The `replacement_formula:` and `replacement_cask:` parameters accept a string for suggesting a replacement formula or cask to the user. + +Refer to [Deprecating, Disabling and Removing Casks](Deprecating-Disabling-and-Removing-Casks.md) for more information about the deprecation process for casks. ### Stanza: `desc` -`desc` accepts a single-line UTF-8 string containing a short description of the software. It’s used to help with searchability and disambiguation, thus it must concisely describe what the software does (or what you can accomplish with it). +`desc` accepts a single-line UTF-8 string containing a short description of the software. As it’s used to help with searchability and disambiguation, it must concisely describe what the software does (or what you can accomplish with it). `desc` is not for app slogans! Vendors’ descriptions tend to be filled with generic adjectives such as “modern” and “lightweight”. Those are meaningless marketing fluff (do you ever see apps proudly describing themselves as outdated and bulky?) which must be deleted. It’s fine to use the information on the software’s website as a starting point, but it will require editing in almost all cases. @@ -469,7 +482,7 @@ depends_on arch: [:x86_64] # same meaning as above + desc "Sound and music editor" ``` -* **Do not** include the platform. Casks only work on macOS, so this is redundant information. +* **Do not** include the platform. Casks always work on macOS, so this is redundant information. ```diff - desc "Sound and music editor for macOS" @@ -523,7 +536,7 @@ The following methods may be called to perform standard tasks: | `set_ownership(paths)` | `preflight`, `postflight`, `uninstall_preflight` | Set user and group ownership of `paths`. (Example: [docker-toolbox.rb](https://github.com/Homebrew/homebrew-cask/blob/aa461148bbb5119af26b82cccf5003e2b4e50d95/Casks/d/docker-toolbox.rb#L42)) | | `set_permissions(paths, permissions_str)` | `preflight`, `postflight`, `uninstall_preflight` | Set permissions in `paths` to `permissions_str`. (Example: [ngrok.rb](https://github.com/Homebrew/homebrew-cask/blob/41d91ff669d85343175202adf568e2328486205f/Casks/n/ngrok.rb#L30)) | -`set_ownership(paths)` defaults user ownership to the current user and group ownership to `staff`. These can be changed by passing in extra options: `set_ownership(paths, user: "user", group: "group")`. (Example: [hummingbird.rb](https://github.com/Homebrew/homebrew-cask/blob/aa461148bbb5119af26b82cccf5003e2b4e50d95/Casks/h/hummingbird.rb#L24)) +`set_ownership(paths)` defaults to setting user and group ownership to the current user and `staff`. These can be changed by passing in extra options: `set_ownership(paths, user: "user", group: "group")`. (Example: [hummingbird.rb](https://github.com/Homebrew/homebrew-cask/blob/aa461148bbb5119af26b82cccf5003e2b4e50d95/Casks/h/hummingbird.rb#L24)) ### Stanza: `installer` @@ -533,7 +546,7 @@ The `installer` stanza takes a series of key-value pairs, the first key of which #### `installer` *manual* -`installer manual:` takes a single string value, describing a GUI installer which must be run by the user at a later time. The path may be absolute, or relative to the cask. Example (from [rubymotion.rb](https://github.com/Homebrew/homebrew-cask/blob/aa461148bbb5119af26b82cccf5003e2b4e50d95/Casks/r/rubymotion.rb#L15)): +`installer manual:` takes a single string value for the path to an interactive installer which must be run by the user at a later time. The path may be absolute, or relative to the cask. Example (from [rubymotion.rb](https://github.com/Homebrew/homebrew-cask/blob/aa461148bbb5119af26b82cccf5003e2b4e50d95/Casks/r/rubymotion.rb#L15)): ```ruby installer manual: "RubyMotion Installer.app" @@ -541,7 +554,7 @@ installer manual: "RubyMotion Installer.app" #### `installer` *script* -`installer script:` introduces a series of key-value pairs describing a command which will automate completion of the install. **It should never be used for interactive installations.** The form is similar to [`uninstall script:`](#uninstall-script): +`installer script:` takes a series of key-value pairs describing a command which will automate completion of the install. **It should never be used for interactive installations.** The form is similar to [`uninstall script:`](#uninstall-script): | key | value | | --------------- | ----- | @@ -549,6 +562,8 @@ installer manual: "RubyMotion Installer.app" | `args:` | array of arguments to the install script | | `input:` | array of lines of input to be sent to `stdin` of the script | | `must_succeed:` | set to `false` if the script is allowed to fail | +| `print_stderr:` | set to `false` to suppress `stderr` output | +| `print_stdout:` | set to `false` to suppress `stdout` output | | `sudo:` | set to `true` if the script needs *sudo* | The path may be absolute, or relative to the cask. Example (from [miniforge.rb](https://github.com/Homebrew/homebrew-cask/blob/864f623e2cd17dbde5987a7b3923fdb0b4ac9ee5/Casks/m/miniforge.rb#L23-L26)): @@ -560,7 +575,7 @@ installer script: { } ``` -If the `installer script:` does not require any of the key-values it can point directly to the path of the install script: +If the `installer script:` does not require any of the key-value pairs, it can be given just the path to the install script: ```ruby installer script: "#{staged_path}/install.sh" @@ -624,7 +639,7 @@ The `livecheck` stanza is used to automatically fetch the latest version of a ca Every `livecheck` block must contain a `url`, which can be either a string or a symbol pointing to other URLs in the cask (`:url` or `:homepage`). -Refer to the [`brew livecheck` documentation](Brew-Livecheck.md) for how to write a `livecheck` block. +Refer to the [`brew livecheck`](Brew-Livecheck.md) documentation for how to write a `livecheck` block. ### Stanza: `name` @@ -646,7 +661,7 @@ The first argument to the `pkg` stanza should be a relative path to the `.pkg` f pkg "Unity.pkg" ``` -Subsequent arguments to `pkg` are key/value pairs which modify the install process. Currently supported keys are `allow_untrusted:` and `choices:`. +Subsequent arguments to `pkg` are key-value pairs which modify the install process. Currently supported keys are `allow_untrusted:` and `choices:`. #### `pkg` *allow_untrusted* @@ -717,9 +732,9 @@ shasum --algorithm 256 #### Special value `:no_check` -The special value `sha256 :no_check` is used to turn off SHA checking whenever checksumming is impractical due to the upstream configuration. +The special value `sha256 :no_check` is used to turn off SHA checking whenever checksumming is impractical due to the upstream configuration, e.g. when `url` does not change between releases. -`version :latest` requires `sha256 :no_check`, and this pairing is common. However, `sha256 :no_check` does not require `version :latest`. +`sha256 :no_check` is required by [`version :latest`](#special-value-latest), and this pairing is common. However, `sha256 :no_check` does not require `version :latest`. We use a checksum whenever possible. @@ -739,46 +754,41 @@ The value of `suite` is never an `.app` bundle, but a plain directory. > If you cannot design a working `uninstall` stanza, please submit your cask anyway. The maintainers can help you write an `uninstall` stanza, just ask! -#### `uninstall pkgutil:` is the easiest and most useful +#### `uninstall` is required for casks that install using `pkg` or `installer` -The easiest and most useful `uninstall` directive is [`pkgutil:`](#uninstall-pkgutil). It should cover most use cases. +For most casks, uninstall actions are determined automatically, and an explicit `uninstall` stanza is not needed. However, a cask which uses the [`pkg`](#stanza-pkg) or [`installer`](#stanza-installer) stanzas will **not** know how to uninstall correctly unless an `uninstall` stanza is given. -#### `uninstall` is required for casks that install using `pkg` or `installer manual:` +So, while the [cask DSL](#required-stanzas) does not enforce the requirement, it is much better for users if every `pkg` and `installer` has a corresponding `uninstall`. -For most casks, uninstall actions are determined automatically, and an explicit `uninstall` stanza is not needed. However, a cask which uses the `pkg` or `installer manual:` stanzas will **not** know how to uninstall correctly unless an `uninstall` stanza is given. - -So, while the [cask DSL](#required-stanzas) does not enforce the requirement, it is much better for users if every `pkg` and `installer manual:` has a corresponding `uninstall`. - -The `uninstall` stanza is available for non-`pkg` casks, and is useful for a few corner cases. However, the documentation below concerns the typical case of using `uninstall` to define procedures for a `pkg`. +The `uninstall` stanza is available for other artifact types, and is useful for a few corner cases. However, the documentation below concerns the typical case of using `uninstall` to define procedures for a `pkg`. #### There are multiple uninstall techniques -Since `pkg` installers can do arbitrary things, different techniques are needed to uninstall in each case. You may need to specify one, or several, of the following key/value pairs as arguments to `uninstall`. +Since `pkg` installers can do arbitrary things, different techniques are needed to uninstall in each case. You may need to specify one, or several, of the following key-value pairs as arguments to `uninstall`. + +##### `uninstall pkgutil:` is the easiest and most useful + +The easiest and most useful `uninstall` directive is [`pkgutil:`](#uninstall-pkgutil). It should cover most use cases. #### Summary of keys * **`early_script:`** (string or hash) - like [`script:`](#uninstall-script), but runs early (for special cases, best avoided) * [`launchctl:`](#uninstall-launchctl) (string or array) - IDs of `launchd` jobs to remove * [`quit:`](#uninstall-quit) (string or array) - bundle IDs of running applications to quit (does not run when uninstall is initiated by `brew upgrade` or `brew reinstall`) -* [`signal:`](#uninstall-signal) (array of arrays) - signal numbers and bundle IDs of running applications to send a Unix signal to - for when `quit:` does not work (does not run when uninstall is initiated by `brew upgrade` or `brew reinstall`) +* [`signal:`](#uninstall-signal) (array of arrays) - signal numbers and bundle IDs of running applications to send a Unix signal to, for when `quit:` does not work (does not run when uninstall is initiated by `brew upgrade` or `brew reinstall`) * [`login_item:`](#uninstall-login_item) (string or array) - names of login items to remove * [`kext:`](#uninstall-kext) (string or array) - bundle IDs of kexts to unload from the system -* [`script:`](#uninstall-script) (string or hash) - relative path to an uninstall script to be run via sudo; use hash if args are needed - * `executable:` - relative path to an uninstall script to be run via sudo (required for hash form) - * `args:` - array of arguments to the uninstall script - * `input:` - array of lines of input to be sent to `stdin` of the script - * `must_succeed:` - set to `false` if the script is allowed to fail - * `sudo:` - set to `true` if the script needs *sudo* +* [`script:`](#uninstall-script) (string or hash) - relative path to an uninstall script to be run via *sudo*; use hash if args are needed * [`pkgutil:`](#uninstall-pkgutil) (string, regexp or array of strings and regexps) - strings or regexps matching bundle IDs of packages to uninstall using `pkgutil` * [`delete:`](#uninstall-delete) (string or array) - double-quoted, absolute paths of files or directory trees to remove. Should only be used as a last resort; `pkgutil:` is strongly preferred. -* **`rmdir:`** (string or array) - double-quoted, absolute paths of directories to remove if empty. Works recursively. +* **`rmdir:`** (string or array) - double-quoted, absolute paths of directories to remove if empty; works recursively * [`trash:`](#uninstall-trash) (string or array) - double-quoted, absolute paths of files or directory trees to move to Trash Each `uninstall` technique is applied according to the order above. The order in which `uninstall` keys appear in the cask file is ignored. -For assistance filling in the right values for `uninstall` keys, there are several helper scripts found under `developer/bin` in the Homebrew Cask repository. Each of these scripts responds to the `-help` option with additional documentation. +For assistance filling in the right values for `uninstall` keys, there are several [helper scripts found under `developer/bin`](https://github.com/Homebrew/homebrew-cask/tree/HEAD/developer/bin) in the Homebrew Cask repository. Each of these scripts responds to the `-help` option with additional documentation. -Working out an `uninstall` stanza is easiest when done on a system where the package is currently installed and operational. To operate on an uninstalled `.pkg` file, see [Working With a `.pkg` File Manually](#working-with-a-pkg-file-manually), below. +Working out an `uninstall` stanza is easiest when done on a system where the package is currently installed and operational. To operate on an uninstalled `.pkg` file, see [Working with a `.pkg` file manually](#working-with-a-pkg-file-manually), below. #### `uninstall` *pkgutil* @@ -790,7 +800,7 @@ IDs for the most recently installed packages can be listed using [`list_recent_p "$(brew --repository homebrew/cask)/developer/bin/list_recent_pkg_ids" ``` -`pkgutil:` also accepts a regular expression match against multiple package IDs. The regular expressions are somewhat nonstandard. To test a `pkgutil:` regular expression against currently installed packages, use [`list_pkg_ids_by_regexp`](https://github.com/Homebrew/homebrew-cask/blob/HEAD/developer/bin/list_pkg_ids_by_regexp): +`pkgutil:` also accepts a regular expression to match against multiple package IDs. The regular expressions are somewhat nonstandard. To test a `pkgutil:` regular expression against currently installed packages, use [`list_pkg_ids_by_regexp`](https://github.com/Homebrew/homebrew-cask/blob/HEAD/developer/bin/list_pkg_ids_by_regexp): ```bash "$(brew --repository homebrew/cask)/developer/bin/list_pkg_ids_by_regexp" @@ -838,7 +848,7 @@ Bundle IDs inside an application bundle on disk can be listed using [`list_ids_i `signal:` should only be needed in the rare case that a process does not respond to `quit:`. -Bundle IDs for `signal:` targets may be obtained in the same way as for `quit:`. The value for `signal:` is an array-of-arrays, with each cell containing two elements: the desired Unix signal followed by the corresponding bundle ID. +Bundle IDs for `signal:` targets may be obtained in the same way as for `quit:`. The value for `signal:` is an array of arrays, with each cell containing two elements: the desired Unix signal followed by the corresponding bundle ID. The Unix signal may be given in numeric or string form (see the `kill`(1) man page for more details). @@ -860,7 +870,7 @@ uninstall signal: [ Note that when multiple running processes match the given bundle ID, all matching processes will be signaled. -Unlike `quit:` directives, Unix signals originate from the current user, not from the superuser. This is construed as a safety feature, since the superuser is capable of bringing down the system via signals. However, this inconsistency may also be considered a bug, and should be addressed in some fashion in a future version. +Unlike `quit:` directives, Unix signals originate from the current user, not from the superuser. This is construed as a safety feature, since the superuser is capable of bringing down the system via signals. However, this inconsistency could also be considered a bug, and may be addressed in some fashion in a future version. #### `uninstall` *login_item* @@ -888,7 +898,19 @@ IDs inside a kext bundle on disk can be listed using [`list_id_in_kext`](https:/ #### `uninstall` *script* -`uninstall script:` introduces a series of key-value pairs describing a command which will automate completion of the uninstall. Example (from [virtualbox.rb](https://github.com/Homebrew/homebrew-cask/blob/ef9931087f6e101262bf64119166e2d9cec068f0/Casks/v/virtualbox.rb#L55-L61)): +`uninstall script:` introduces a series of key-value pairs describing a command which will automate completion of the uninstall. The form is similar to [`installer script:`](#installer-script): + +| key | value | +| --------------- | ----- | +| `executable:` | path to an uninstall script to be run | +| `args:` | array of arguments to the uninstall script | +| `input:` | array of lines of input to be sent to `stdin` of the script | +| `must_succeed:` | set to `false` if the script is allowed to fail | +| `print_stderr:` | set to `false` to suppress `stderr` output | +| `print_stdout:` | set to `false` to suppress `stdout` output | +| `sudo:` | set to `true` if the script needs *sudo* | + +The path may be absolute, or relative to the cask. Example (from [virtualbox.rb](https://github.com/Homebrew/homebrew-cask/blob/ef9931087f6e101262bf64119166e2d9cec068f0/Casks/v/virtualbox.rb#L55-L61)): ```ruby uninstall script: { @@ -944,7 +966,7 @@ A fully manual method for finding bundle IDs in a package file follows: 1. Unpack `/path/to/my.pkg` (replace with your package name) with `pkgutil --expand /path/to/my.pkg /tmp/expanded.unpkg`. 2. The unpacked package is a folder. Bundle IDs are contained within files named `PackageInfo`. These files can be found with the command `find /tmp/expanded.unpkg -name PackageInfo`. -3. `PackageInfo` files are XML files, and bundle IDs are found within the `identifier` attributes of `` tags that look like ``, where extraneous attributes have been snipped out and replaced with ellipses. +3. `PackageInfo` files are XML files, and bundle IDs are found within the `identifier` attributes of `` tags that look like `` (where extraneous attributes have been snipped out and replaced with ellipses). 4. Kexts inside packages are also described in `PackageInfo` files. If any kernel extensions are present, the command `find /tmp/expanded.unpkg -name PackageInfo -print0 | xargs -0 grep -i kext` should return a `` tag with a `path` attribute that contains a `.kext` extension, for example ``. 5. Once bundle IDs have been identified, the unpacked package directory can be deleted. @@ -956,17 +978,17 @@ If available, an HTTPS URL is preferred. A plain HTTP URL should only be used in #### Additional `url` parameters -When a plain URL string is insufficient to fetch a file, additional information may be provided to the `curl`-based downloader, in the form of key/value pairs appended to `url`: +When a plain URL string is insufficient to fetch a file, additional information may be provided to the `curl`-based downloader, in the form of key-value pairs appended to `url`: -| key | value | -| ------------------ | ----------- | +| key | value | +| ------------------ | ----- | | `verified:` | string repeating the beginning of `url`, for [verification purposes](#when-url-and-homepage-domains-differ-add-verified) | | `using:` | the symbols `:post` and `:homebrew_curl` are the only legal values | -| `cookies:` | hash of cookies to be set in the download request (Example: [oracle-jdk-javadoc.rb](https://github.com/Homebrew/homebrew-cask/blob/326c44e93aeb8d4dd73acea14a99ae215c75fdd6/Casks/o/oracle-jdk-javadoc.rb#L5-L8)) | -| `referer:` | string holding the URL to set as referer in the download request (Example: [firealpaca.rb](https://github.com/Homebrew/homebrew-cask/blob/c4b3f0742e044ae2a6e114eb6b90068763d0d12b/Casks/f/firealpaca.rb#L5-L6)) | +| `cookies:` | hash of cookies to be set for the download request (Example: [oracle-jdk-javadoc.rb](https://github.com/Homebrew/homebrew-cask/blob/326c44e93aeb8d4dd73acea14a99ae215c75fdd6/Casks/o/oracle-jdk-javadoc.rb#L5-L8)) | +| `referer:` | string holding the URL to set as referer for the download request (Example: [firealpaca.rb](https://github.com/Homebrew/homebrew-cask/blob/c4b3f0742e044ae2a6e114eb6b90068763d0d12b/Casks/f/firealpaca.rb#L5-L6)) | | `header:` | string or array of strings holding the header(s) to set for the download request (Example: [pull-6545](https://github.com/Homebrew/brew/pull/6545#issue-503302353), [issue-15590](https://github.com/Homebrew/brew/issues/15590#issue-1774825542)) | | `user_agent:` | string holding the user agent to set for the download request. Can also be set to the symbol `:fake`, which will use a generic browser-like user agent string. We prefer `:fake` when the server does not require a specific user agent. | -| `data:` | hash of parameters to be set in the POST request (Example: [segger-jlink.rb](https://github.com/Homebrew/homebrew-cask/blob/38ac55614f146d68ae317594f0c119e9acbd7c9e/Casks/s/segger-jlink.rb#L6-L11)) | +| `data:` | hash of parameters to be set for a POST request (Example: [segger-jlink.rb](https://github.com/Homebrew/homebrew-cask/blob/38ac55614f146d68ae317594f0c119e9acbd7c9e/Casks/s/segger-jlink.rb#L6-L11)) | #### When URL and homepage domains differ, add `verified:` @@ -974,11 +996,11 @@ When the domains of `url` and `homepage` differ, the discrepancy should be docum This must be added so a user auditing the cask knows the URL was verified by the Homebrew Cask team as the one provided by the vendor, even though it may look unofficial. It is our responsibility as Homebrew Cask maintainers to verify both the `url` and `homepage` information when first added (or subsequently modified, apart from versioning). -The parameter doesn’t mean you should trust the source blindly, but we only approve casks in which users can easily verify its authenticity with basic means, such as checking the official homepage or public repository. Occasionally, slightly more elaborate techniques may be used, such as inspecting a [`livecheck`](#stanza-livecheck) URL we established as official. Cases where such quick verifications aren’t possible (e.g. when the download URL is behind a registration wall) are [treated in a stricter manner](https://docs.brew.sh/Acceptable-Casks#unofficial-vendorless-and-walled-builds). +The parameter doesn’t mean you should trust the source blindly, but we only approve casks in which users can easily verify its authenticity with basic means, such as checking the official homepage or public repository. Occasionally, slightly more elaborate techniques may be used, such as inspecting a [`livecheck`](#stanza-livecheck) URL we established as official. Cases where such quick verifications aren’t possible (e.g. when the download URL is behind a registration wall) are [treated in a stricter manner](Acceptable-Casks.md#unofficial-vendorless-and-walled-builds). #### Difficulty finding a URL -Web browsers may obscure the direct `url` download location for a variety of reasons. Homebrew Cask supplies a [`list_url_attributes_on_file`](https://github.com/Homebrew/homebrew-cask/blob/HEAD/developer/bin/list_url_attributes_on_file) script which can read extended file attributes to extract the actual source URL of most files downloaded by a browser on macOS. The script usually emits multiple candidate URLs; you may have to test each of them: +Web browsers may obscure the direct `url` of a download for a variety of reasons. Homebrew Cask supplies a [`list_url_attributes_on_file`](https://github.com/Homebrew/homebrew-cask/blob/HEAD/developer/bin/list_url_attributes_on_file) script which can read extended file attributes to extract the actual source URL of most files downloaded by a browser on macOS. The script usually emits multiple candidate URLs; you may have to test each of them: ```bash $(brew --repository homebrew/cask)/developer/bin/list_url_attributes_on_file @@ -986,25 +1008,25 @@ $(brew --repository homebrew/cask)/developer/bin/list_url_attributes_on_file *"` -* An uninstaller tool such as [AppCleaner](https://github.com/Homebrew/homebrew-cask/blob/HEAD/Casks/a/appcleaner.rb). -* Inspection of the usual paths, i.e. `/Library/{'Application Support',LaunchAgents,LaunchDaemons,Frameworks,Logs,Preferences,PrivilegedHelperTools}` and `~/Library/{'Application Support',Caches,Containers,LaunchAgents,Logs,Preferences,'Saved Application State'}`. +* An uninstaller tool such as [AppCleaner](https://formulae.brew.sh/cask/appcleaner) +* Inspection of the usual paths, i.e. `/Library/{'Application Support',LaunchAgents,LaunchDaemons,Frameworks,Logs,Preferences,PrivilegedHelperTools}` and `~/Library/{'Application Support',Caches,Containers,LaunchAgents,Logs,Preferences,'Saved Application State'}` If no additional files are discovered, instead of a zap stanza, include the following comment: @@ -1180,7 +1203,7 @@ If no additional files are discovered, instead of a zap stanza, include the foll ### Handling different system configurations -Casks can deliver specific versions of artifacts depending on the current macOS release or CPU architecture by either tailoring the URL / SHA-256 hash / version, using the [`on_` syntax](Formula-Cookbook.md#handling-different-system-configurations) (which replaces conditional statements using `MacOS.version` or `Hardware::CPU`), or both. +Casks can deliver specific versions of artifacts depending on the current macOS release or CPU architecture by either tailoring the `url` / `sha256` / `version` stanzas, using the [`on_` syntax](Formula-Cookbook.md#handling-different-system-configurations) (which replaces conditional statements using `MacOS.version` or `Hardware::CPU`), or both. If your cask's artifact is offered as separate downloads for Apple Silicon and Intel architectures, they'll presumably be downloadable at distinct URLs that differ only slightly. To adjust the URL depending on the current CPU architecture, supply a hash for each to the `arm:` and `intel:` parameters of `sha256`, and use the special `arch` stanza to define the unique components of the respective URLs for substitution in the `url`. Additional substitutions can be defined by calling `on_arch_conditional` directly. Example (from [libreoffice.rb](https://github.com/Homebrew/homebrew-cask/blob/a4164b8f5084fdaefb6e2e2f4f699270690b7845/Casks/l/libreoffice.rb#L1-L10)): @@ -1247,7 +1270,7 @@ cask "calibre" do end ``` -Such `on_` blocks can be nested and contain other stanzas not listed here. Examples: [calhash.rb](https://github.com/Homebrew/homebrew-cask/blob/HEAD/Casks/c/calhash.rb), [openzfs.rb](https://github.com/Homebrew/homebrew-cask/blob/HEAD/Casks/o/openzfs.rb), [r.rb](https://github.com/Homebrew/homebrew-cask/blob/HEAD/Casks/r/r.rb), [wireshark.rb](https://github.com/Homebrew/homebrew-cask/blob/HEAD/Casks/w/wireshark.rb) +Such `on_` blocks can be nested and contain other stanzas not listed here. However, they should not contain `depends_on macos:` stanzas, which should occur once below the `on_` blocks and encompass all releases listed in the cask. Examples: [calhash.rb](https://github.com/Homebrew/homebrew-cask/blob/HEAD/Casks/c/calhash.rb), [openzfs.rb](https://github.com/Homebrew/homebrew-cask/blob/HEAD/Casks/o/openzfs.rb), [r.rb](https://github.com/Homebrew/homebrew-cask/blob/HEAD/Casks/r/r.rb), [wireshark.rb](https://github.com/Homebrew/homebrew-cask/blob/HEAD/Casks/w/wireshark.rb) ### Switch between languages or regions @@ -1284,12 +1307,12 @@ Variables and methods should not be defined outside the `Utils` namespace, as th This section describes the algorithm implemented in the `generate_cask_token` script, and covers detailed rules and exceptions which are not needed in most cases. * [Purpose](#purpose) -* [Finding the Simplified Name of the Vendor’s Distribution](#finding-the-simplified-name-of-the-vendors-distribution) -* [Converting the Simplified Name To a Token](#converting-the-simplified-name-to-a-token) -* [Cask Filenames](#cask-filenames) -* [Cask Headers](#cask-headers) -* [Cask Token Examples](#cask-token-examples) -* [Special Affixes](#special-affixes) +* [Finding the simplified name of the vendor’s distribution](#finding-the-simplified-name-of-the-vendors-distribution) +* [Converting the simplified name to a token](#converting-the-simplified-name-to-a-token) +* [Cask filenames](#cask-filenames) +* [Cask headers](#cask-headers) +* [Cask token examples](#cask-token-examples) +* [Special affixes](#special-affixes) ### Purpose @@ -1299,7 +1322,7 @@ Software vendors are often inconsistent with their naming. By enforcing strict n * Minimize renaming events * Unambiguously boil down the name of the software into a unique identifier -Details of software names and brands will inevitably be lost in the conversion to a minimal token. To capture the vendor’s full name for a distribution, use the [`name`](#stanza-name) within a cask. `name` accepts an unrestricted UTF-8 string. +Details of software names and brands will inevitably be lost in the conversion to a minimal token. To capture the vendor’s full name for a distribution, use the [`name`](#stanza-name) within a cask, which accepts an unrestricted UTF-8 string. ### Finding the simplified name of the vendor’s distribution @@ -1311,9 +1334,13 @@ Details of software names and brands will inevitably be lost in the conversion t * Remove `.app` from the end. -* Remove from the end: the string “app”, if the vendor styles the name like “Software App.app”. Exception: when “app” is an inseparable part of the name, without which the name would be inherently nonsensical, as in [whatsapp.rb](https://github.com/Homebrew/homebrew-cask/blob/HEAD/Casks/w/whatsapp.rb). +* Remove from the end: the string “app”, if the vendor styles the name like “Software App.app”. -* Remove from the end: version numbers or incremental release designations such as “alpha”, “beta”, or “release candidate”. Strings which distinguish different capabilities or codebases such as “Community Edition” are currently accepted. Exception: when a number is not an incremental release counter, but a differentiator for a different product from a different vendor, as in [kdiff3.rb](https://github.com/Homebrew/homebrew-cask/blob/HEAD/Casks/k/kdiff3.rb). + * Exception: when “app” is an inseparable part of the name, without which the name would be inherently nonsensical, as in [whatsapp.rb](https://github.com/Homebrew/homebrew-cask/blob/HEAD/Casks/w/whatsapp.rb). + +* Remove from the end: version numbers or incremental release designations such as “alpha”, “beta”, or “release candidate”. Strings which distinguish different capabilities or codebases such as “Community Edition” are currently accepted. + + * Exception: when a number is not an incremental release counter, but a differentiator for a different product from a different vendor, as in [kdiff3.rb](https://github.com/Homebrew/homebrew-cask/blob/HEAD/Casks/k/kdiff3.rb). * If the version number is arranged to occur in the middle of the App name, it should also be removed. @@ -1321,15 +1348,19 @@ Details of software names and brands will inevitably be lost in the conversion t * Remove from the end: strings such as “Desktop”, “for Desktop”. -* Remove from the end: strings such as “Mac”, “for Mac”, “for OS X”, “macOS”, “for macOS”. These terms are generally added to ported software such as “MAME OS X.app”. Exception: when the software is not a port, and “Mac” is an inseparable part of the name, without which the name would be inherently nonsensical, as in [PlayOnMac.app](https://github.com/Homebrew/homebrew-cask/blob/HEAD/Casks/p/playonmac.rb). +* Remove from the end: strings such as “Mac”, “for Mac”, “for OS X”, “macOS”, “for macOS”. These terms are generally added to ported software such as “MAME OS X.app”. + + * Exception: when the software is not a port, and “Mac” is an inseparable part of the name, without which the name would be inherently nonsensical, as in [PlayOnMac.app](https://github.com/Homebrew/homebrew-cask/blob/HEAD/Casks/p/playonmac.rb). * Remove from the end: hardware designations such as “for x86”, “32-bit”, “ARM”. -* Remove from the end: software framework names such as “Cocoa”, “Qt”, “Gtk”, “Wx”, “Java”, “Oracle JVM”, etc. Exception: the framework is the product being casked. +* Remove from the end: software framework names such as “Cocoa”, “Qt”, “Gtk”, “Wx”, “Java”, “Oracle JVM”, etc. + + * Exception: the framework is the product being casked. * Remove from the end: localization strings such as “en-US”. -* If the result of that process is a generic term, such as “Macintosh Installer”, try prepending the name of the vendor or developer, followed by a hyphen. If that doesn’t work, then just create the best name you can, based on the vendor’s web page. +* If the result of this process is a generic term, such as “Macintosh Installer”, try prepending the name of the vendor or developer, followed by a hyphen. If that doesn’t work, then just create the best name you can, based on the vendor’s web page. * If the result conflicts with the name of an existing cask, make yours unique by prepending the name of the vendor or developer, followed by a hyphen. Example: [unison.rb](https://github.com/Homebrew/homebrew-cask/blob/HEAD/Casks/u/unison.rb) and [panic-unison.rb](https://github.com/Homebrew/homebrew-cask/blob/HEAD/Casks/p/panic-unison.rb). @@ -1352,7 +1383,7 @@ Details of software names and brands will inevitably be lost in the conversion t #### Simplified names of `pkg`-based installers -* The Simplified Name of a `pkg` may be more tricky to determine than that of an App. If a `pkg` installs an App, then use that App name with the rules above. If not, just create the best name you can, based on the vendor’s web page. +* The simplified name of a `pkg` may be more tricky to determine than that of an App. If a `pkg` installs an App, then use that App name with the rules above. If not, just create the best name you can, based on the vendor’s web page. #### Simplified names of non-App software @@ -1362,9 +1393,9 @@ Details of software names and brands will inevitably be lost in the conversion t ### Converting the simplified name to a token -The token is the primary identifier for a package in this project. It’s the unique string users refer to when operating on the cask. +As the token is the primary identifier for casks, it’s the unique string users refer to when operating on them. -To convert the App’s Simplified Name (above) to a token: +To convert the App’s simplified name (above) to a token: * Convert all letters to lower case. * Expand the `+` symbol into a separated English word: `-plus-`. @@ -1376,19 +1407,19 @@ To convert the App’s Simplified Name (above) to a token: * Digits stay digits. * Delete any character which is not alphanumeric or a hyphen. * Collapse a series of multiple hyphens into one hyphen. -* Delete a leading or trailing hyphen. +* Delete any leading or trailing hyphens. -### Casks pinned to specific versions +#### Casks pinned to specific versions -Casks pinned to a specific version of the application (i.e. [`carbon-copy-cloner@5`](https://github.com/Homebrew/homebrew-cask/blob/1b8f44198e5e184c597ee07454a1e10f97f36b15/Casks/c/carbon-copy-cloner%405.rb)) should use the same token as the standard cask with a suffix of `@`. For Carbon Copy Cloner (`carbon-copy-cloner`), pinned to version 5, the token should be `carbon-copy-cloner@5`. -### Casks pinned to development channels +#### Casks pinned to development channels -Casks that use an development "channel", such as betas, should use the same token as the standard cask with a suffix of `@`. For Google Chrome (`google-chrome`), using the "beta" channel, the token should be `google-chrome@beta`. +Casks that use a development "channel", such as betas, should use the same token as the standard cask with a suffix of `@`. For Google Chrome (`google-chrome`), using the "beta" channel, the token should be `google-chrome@beta`. ### Cask filenames -Casks are stored in a Ruby file named after the token, with the file extension `.rb`. +Casks are defined in a Ruby file named after the token, with the file extension `.rb`. ### Cask headers @@ -1399,7 +1430,7 @@ The token is also given in the header line for each cask. These illustrate most of the rules for generating a token: | App Name on Disk | Simplified App Name | Cask Token | Filename | -|------------------------|---------------------|------------------|----------------------| +| ---------------------- | ------------------- | ---------------- | -------- | | `Audio Hijack Pro.app` | Audio Hijack Pro | audio-hijack-pro | `audio-hijack-pro.rb` | | `VLC.app` | VLC | vlc | `vlc.rb` | | `BetterTouchTool.app` | BetterTouchTool | bettertouchtool | `bettertouchtool.rb` | @@ -1408,11 +1439,11 @@ These illustrate most of the rules for generating a token: For versioned/development channel casks: -| Standard Cask Token | Derivative | Cask Token | Filename | -|------------------------|---------------------|-----------------------|----------------------| -| `google-chrome` | Beta Channel | `google-chrome@beta` | `google-chrome@beta.rb` | -| `vlc` | Nightly Channel | `vlc@nightly` | `vlc@nightly.rb` | -| `carbon-copy-cloner` | Pinned to version 5 | `carbon-copy-cloner@5`| `carbon-copy-cloner@5.rb` | +| Standard Cask Token | Derivative | Cask Token | Filename | +| -------------------- | ------------------- | ---------------------- | -------- | +| `google-chrome` | Beta channel | `google-chrome@beta` | `google-chrome@beta.rb` | +| `vlc` | Nightly channel | `vlc@nightly` | `vlc@nightly.rb` | +| `carbon-copy-cloner` | Pinned to version 5 | `carbon-copy-cloner@5` | `carbon-copy-cloner@5.rb` | ### Special affixes @@ -1420,7 +1451,7 @@ A few situations require a prefix or suffix to be added to the token. #### Token overlap -When the token for a new cask would otherwise conflict with the token of an already existing cask, the nature of that overlap dictates the token, potentially for both casks. See [Forks and Apps with Conflicting Names](Acceptable-Casks.md#forks-and-apps-with-conflicting-names) for information on how to proceed. +When the token for a new cask would otherwise conflict with the token of an already existing cask, the nature of that overlap dictates the token, potentially for both casks. See [Forks and apps with conflicting names](Acceptable-Casks.md#forks-and-apps-with-conflicting-names) for information on how to proceed. #### Potentially misleading name diff --git a/docs/Common-Issues.md b/docs/Common-Issues.md index 30d29ae5de..257555e8e1 100644 --- a/docs/Common-Issues.md +++ b/docs/Common-Issues.md @@ -229,7 +229,7 @@ Help us by [submitting a fix](https://github.com/Homebrew/homebrew-cask/blob/HEA ### Cask - source is not there -First, you need to identify which artifact is not being handled correctly anymore. It’s explicit in the error message: if it says `It seems the App source…'` then the problem is with the [`app`](https://docs.brew.sh/Cask-Cookbook#stanza-app) stanza. This pattern is the same across [all artifacts](https://docs.brew.sh/Cask-Cookbook#at-least-one-artifact-stanza-is-also-required). +First, you need to identify which artifact is not being handled correctly anymore. It’s explicit in the error message: if it says `It seems the App source…'` then the problem is with the [`app`](Cask-Cookbook.md#stanza-app) stanza. This pattern is the same across [all artifacts](Cask-Cookbook.md#at-least-one-artifact-stanza-is-also-required). Fixing this error is typically easy, and requires only a bit of time on your part. Start by downloading the package for the cask: `brew fetch `. The last line of output will inform you of the location of the download. Navigate there and manually unpack it. As an example, let's say the structure inside the archive is as follows: @@ -246,19 +246,19 @@ Now, if we find this when looking at the cask with `brew cat `: The cask expects `SomeApp.app` to be in the top directory of the archive (see how it says simply `SomeApp.app`) but the developer has since moved it to be inside a `Files` directory. All we have to do is update that line of the cask to follow the new structure: `app "Files/SomeApp.app"`. -Note that occasionally the app’s name changes completely (from `SomeApp.app` to `OtherApp.app`, let's say). In these instances, the filename of the cask itself, as well as its token, must also change. Consult the [`token reference`](https://docs.brew.sh/Cask-Cookbook#token-reference) for complete instructions on the new name. +Note that occasionally the app’s name changes completely (from `SomeApp.app` to `OtherApp.app`, let's say). In these instances, the filename of the cask itself, as well as its token, must also change. Consult the [`token reference`](Cask-Cookbook.md#token-reference) for complete instructions on the new name. Help us by [submitting a fix](https://github.com/Homebrew/homebrew-cask/blob/HEAD/CONTRIBUTING.md#updating-a-cask). If you get stumped, [open an issue](https://github.com/Homebrew/homebrew-cask/issues/new?template=01_bug_report.md) explaining your steps so far and where you’re having trouble. ### Cask - wrong number of arguments -Make sure the issue really lies with your macOS version. To do so, try to install the software manually. If it is incompatible with your macOS version, it will tell you. In that case, there is nothing we can do to help you install the software, but we can add a [`depends_on macos:`](https://docs.brew.sh/Cask-Cookbook#depends_on-macos) stanza to prevent the cask from being installed on incompatible macOS versions. +Make sure the issue really lies with your macOS version. To do so, try to install the software manually. If it is incompatible with your macOS version, it will tell you. In that case, there is nothing we can do to help you install the software, but we can add a [`depends_on macos:`](Cask-Cookbook.md#depends_on-macos) stanza to prevent the cask from being installed on incompatible macOS versions. Help us by [submitting a fix](https://github.com/Homebrew/homebrew-cask/blob/HEAD/CONTRIBUTING.md#updating-a-cask). If you get stumped, [open an issue](https://github.com/Homebrew/homebrew-cask/issues/new?template=01_bug_report.md) explaining your steps so far and where you’re having trouble. ## Other local issues -If your Homebrew installation gets messed up (and fixing the issues found by `brew doctor` doesn't solve the problem), reinstalling Homebrew may help to reset to a normal state. To easily reinstall Homebrew, use `brew bundle` to automatically restore your installed formulae and casks. To do so, run `brew bundle dump`, [uninstall](https://docs.brew.sh/FAQ#how-do-i-uninstall-homebrew), [reinstall](https://docs.brew.sh/Installation) and run `brew bundle install`. +If your Homebrew installation gets messed up (and fixing the issues found by `brew doctor` doesn't solve the problem), reinstalling Homebrew may help to reset to a normal state. To easily reinstall Homebrew, use `brew bundle` to automatically restore your installed formulae and casks. To do so, run `brew bundle dump`, [uninstall](FAQ.md#how-do-i-uninstall-homebrew), [reinstall](Installation.md) and run `brew bundle install`. ## Possible `curl` issues diff --git a/docs/Deprecating-Disabling-and-Removing-Casks.md b/docs/Deprecating-Disabling-and-Removing-Casks.md index 9e89ae14b3..375e19ed53 100644 --- a/docs/Deprecating-Disabling-and-Removing-Casks.md +++ b/docs/Deprecating-Disabling-and-Removing-Casks.md @@ -1,5 +1,5 @@ --- -last_review_date: "1970-01-01" +last_review_date: 2025-05-15 --- # Deprecating, Disabling and Removing Casks @@ -10,9 +10,9 @@ There are many reasons why casks may be deprecated, disabled or removed. This do These general rules of thumb can be followed: -- `deprecate!` should be used for casks that _should_ no longer be used. -- `disable!` should be used for casks that _cannot_ be used. -- Casks that are no longer acceptable in `homebrew/cask` or have been disabled for over a year _should_ be removed. +1. `deprecate!` should be used for casks that _should_ no longer be used. +2. `disable!` should be used for casks that _cannot_ be used. +3. Casks that are no longer acceptable in `homebrew/cask` or have been disabled for over a year _should_ be removed. ## Deprecation @@ -24,10 +24,10 @@ The most common reasons for deprecation are when the upstream project is depreca Casks should only be deprecated if at least one of the following are true: -- the software installed by the cask cannot be run on any of our supported macOS versions +- the software installed by the cask cannot be run on any supported OS versions - the cask has outstanding CVEs - the cask has [zero installs in the last 90 days](https://formulae.brew.sh/analytics/cask-install/90d/) -- the software installed by the cask has been discontinued upstream +- the software installed by the cask has been discontinued or abandoned upstream To deprecate a cask, add a `deprecate!` call. This call should include a deprecation date in the ISO 8601 format and a deprecation reason: @@ -39,43 +39,43 @@ The `date` parameter should be set to the date that the deprecation period shoul The `because` parameter can be a preset reason (using a symbol) or a custom reason. See the [Deprecate and Disable Reasons](#deprecate-and-disable-reasons) section below for more details about the `because` parameter. -An optional `replacement` parameter may also be specified to suggest a replacement formula or cask to the user. The value of the parameter is a string. +An optional `replacement_formula` or `replacement_cask` parameter may also be specified to suggest a replacement formula or cask to the user. The value of the parameter is a string. ```ruby -deprecate! date: "YYYY-MM-DD", because: :reason, replacement: "foo" +deprecate! date: "YYYY-MM-DD", because: :reason, replacement_formula: "foo" ``` ## Disabling If a user attempts to install a disabled cask, they will be shown an error message and the install will fail. -A cask should be disabled to indicate to users that the cask cannot be used and will be removed in the future. Disabled cask are those that could not be installed successfully any longer. +A cask should be disabled to indicate to users that the cask cannot be used and will be removed in the future. Disabled casks are those that can no longer be successfully installed. The most common reasons for disabling a cask are: -- it cannot be installed on any of our supported macOS versions +- it cannot be installed on any supported OS versions - it has been deprecated for a long time - the upstream URL has been removed -Popular casks (e.g. have more than 300 [analytics installs in the last 90 days](https://formulae.brew.sh/analytics/cask-install/90d/)) should not be disabled without a deprecation period of at least six months unless they cannot be installed on all macOS versions and issue is unable be fixed (e.g. download URL no longer works and a mirror cannot be sourced). +Popular casks (e.g. have more than 300 [analytics installs in the last 90 days](https://formulae.brew.sh/analytics/cask-install/90d/)) should not be disabled without a deprecation period of at least six months unless they cannot be installed on any supported OS versions and the issue is unfixable (e.g. download URL no longer works and a mirror cannot be sourced). -Unpopular casks (e.g. have fewer than 300 [analytics installs in the last 90 days](https://formulae.brew.sh/analytics/cask-install/90d/)) can be disabled immediately for any of the reasons above. +Unpopular casks (e.g. have fewer than 300 [analytics installs in the last 90 days](https://formulae.brew.sh/analytics/cask-install/90d/)) can be disabled immediately for any of the reasons above, e.g. the upstream URL has been removed. They can be manually removed three months after their disable date. -To disable a cask, add a `disable!` call. This call should include a deprecation date (in the ISO 8601 format) and a deprecation reason: +To disable a cask, add a `disable!` call. This call should include a deprecation date in the ISO 8601 format and a deprecation reason: ```ruby disable! date: "YYYY-MM-DD", because: :reason ``` -The `date` parameter should be set to the date that the reason for disabling came into effect. If there is no clear date but the cask needs to be disabled, use today's date. If the `date` parameter is set to a date in the future, the cask will be deprecated until that date (on which the cask will become disabled). +The `date` parameter should be set to the date that the reason for disabling came into effect. If there is no clear date but the cask needs to be disabled, use today's date. If the `date` parameter is set to a date in the future, the cask will be deprecated until that date (upon which the cask will become disabled). The `because` parameter can be a preset reason (using a symbol) or a custom reason. See the [Deprecate and Disable Reasons](#deprecate-and-disable-reasons) section below for more details about the `because` parameter. -Similar to deprecated casks, an optional `replacement` parameter may also be specified for disabled casks to suggest a replacement formula or cask to the user. The value of the parameter is a string. +Similar to deprecated casks, an optional `replacement_formula` or `replacement_cask` parameter may also be specified for disabled casks to suggest a replacement formula or cask to the user. The value of the parameter is a string. ```ruby -disable! date: "YYYY-MM-DD", because: :reason, replacement: "foo" +disable! date: "YYYY-MM-DD", because: :reason, replacement_cask: "foo" ``` ## Removal @@ -88,11 +88,14 @@ A cask should be removed if it does not meet our criteria for [acceptable casks] When a cask is deprecated or disabled, a reason explaining the action must be provided. -There are two ways to indicate the reason. The preferred way is to use a pre-existing symbol to indicate the reason. The available symbols are listed below and can be found in the [`DeprecateDisable` module](https://github.com/Homebrew/brew/blob/master/Library/Homebrew/deprecate_disable.rb): +There are two ways to indicate the reason. The preferred way is to use a pre-existing symbol to indicate the reason. The available symbols are listed below and can be found in the [`DeprecateDisable` module](https://rubydoc.brew.sh/DeprecateDisable.html): - `:discontinued`: the cask is discontinued upstream +- `:moved_to_mas`: the cask is now exclusively distributed on the Mac App Store - `:no_longer_available`: the cask is no longer available upstream +- `:no_longer_meets_criteria`: the cask no longer meets the criteria for acceptable casks - `:unmaintained`: the cask is not maintained upstream +- `:unsigned`: the cask is unsigned or does not meet signature requirements These reasons can be specified by their symbols (the comments show the message that will be displayed to users): diff --git a/docs/Deprecating-Disabling-and-Removing-Formulae.md b/docs/Deprecating-Disabling-and-Removing-Formulae.md index de34a93582..1168076645 100644 --- a/docs/Deprecating-Disabling-and-Removing-Formulae.md +++ b/docs/Deprecating-Disabling-and-Removing-Formulae.md @@ -1,5 +1,5 @@ --- -last_review_date: "1970-01-01" +last_review_date: 2025-05-15 --- # Deprecating, Disabling and Removing Formulae @@ -10,9 +10,9 @@ There are many reasons why formulae may be deprecated, disabled or removed. This These general rules of thumb can be followed: -- `deprecate!` should be used for formulae that _should_ no longer be used. -- `disable!` should be used for formulae that _cannot_ be used. -- Formulae that are no longer acceptable in `homebrew/core` or have been disabled for over a year _should_ be removed. +1. `deprecate!` should be used for formulae that _should_ no longer be used. +2. `disable!` should be used for formulae that _cannot_ be used. +3. Formulae that are no longer acceptable in `homebrew/core` or have been disabled for over a year _should_ be removed. ## Deprecation @@ -20,18 +20,18 @@ If a user attempts to install a deprecated formula, they will be shown a warning A formula should be deprecated to indicate to users that the formula should not be used and will be disabled in the future. Deprecated formulae should continue to be maintained by the Homebrew maintainers so they still build from source and their bottles continue to work (even if unmaintained upstream). If this is not possible, they should be disabled. -The most common reasons for deprecation are when the upstream project is deprecated, unmaintained, or archived. +The most common reasons for deprecation are when the upstream project is deprecated, unmaintained or archived. Formulae should only be deprecated if at least one of the following are true: -- the formula does not build on any of our supported macOS versions and on Linux +- the formula does not build on any supported OS versions - the formula has outstanding CVEs - the formula has [zero installs in the last 90 days](https://formulae.brew.sh/analytics/install/90d/) - the software installed by the formula has been discontinued or abandoned upstream -Formulae with dependents should not be deprecated until or when all dependents are also deprecated. +Formulae with dependents should not be deprecated unless all dependents are also deprecated. -To deprecate a formula, add a `deprecate!` call. This call should include a deprecation date (in the ISO 8601 format) and a deprecation reason: +To deprecate a formula, add a `deprecate!` call. This call should include a deprecation date in the ISO 8601 format and a deprecation reason: ```ruby deprecate! date: "YYYY-MM-DD", because: :reason @@ -41,10 +41,10 @@ The `date` parameter should be set to the date that the deprecation period shoul The `because` parameter can be a preset reason (using a symbol) or a custom reason. See the [Deprecate and Disable Reasons](#deprecate-and-disable-reasons) section below for more details about the `because` parameter. -An optional `replacement` parameter may also be specified to suggest a replacement formula or cask to the user. The value of the parameter is a string. +An optional `replacement_formula` or `replacement_cask` parameter may also be specified to suggest a replacement formula or cask to the user. The value of the parameter is a string. ```ruby -deprecate! date: "YYYY-MM-DD", because: :reason, replacement: "foo" +deprecate! date: "YYYY-MM-DD", because: :reason, replacement_formula: "foo" ``` ## Disabling @@ -55,13 +55,13 @@ A formula should be disabled to indicate to users that the formula cannot be use The most common reasons for disabling a formula are: -- it cannot be built from source on all supported OS versions (meaning no new bottles can be built) +- it cannot be built from source on any supported OS versions (meaning no new bottles can be built) - it has been deprecated for a long time - the project has no license Popular formulae (e.g. have more than 1000 [analytics installs in the last 90 days](https://formulae.brew.sh/analytics/install/90d/)) should not be disabled without a deprecation period of at least six months even if e.g. they do not build from source and do not have a license. -Unpopular formulae (e.g. have fewer than 1000 [analytics installs in the last 90 days](https://formulae.brew.sh/analytics/install/90d/)) can be disabled immediately for any of the reasons above e.g. they cannot be built from source on any supported macOS version or Linux. +Unpopular formulae (e.g. have fewer than 1000 [analytics installs in the last 90 days](https://formulae.brew.sh/analytics/install/90d/)) can be disabled immediately for any of the reasons above, e.g. they cannot be built from source on any supported macOS version or Linux. They can be manually removed three months after their disable date. To disable a formula, add a `disable!` call. This call should include a deprecation date in the ISO 8601 format and a deprecation reason: @@ -70,14 +70,14 @@ To disable a formula, add a `disable!` call. This call should include a deprecat disable! date: "YYYY-MM-DD", because: :reason ``` -The `date` parameter should be set to the date that the reason for disabling came into effect. If there is no clear date but the formula needs to be disabled, use today's date. If the `date` parameter is set to a date in the future, the formula will be deprecated until that date (on which the formula will become disabled). +The `date` parameter should be set to the date that the reason for disabling came into effect. If there is no clear date but the formula needs to be disabled, use today's date. If the `date` parameter is set to a date in the future, the formula will be deprecated until that date (upon which the formula will become disabled). The `because` parameter can be a preset reason (using a symbol) or a custom reason. See the [Deprecate and Disable Reasons](#deprecate-and-disable-reasons) section below for more details about the `because` parameter. -Similar to deprecated formulae, an optional `replacement` parameter may also be specified for disabled formulae to suggest a replacement formula or cask to the user. The value of the parameter is a string. +Similar to deprecated formulae, an optional `replacement_formula` or `replacement_cask` parameter may also be specified for disabled formulae to suggest a replacement formula or cask to the user. The value of the parameter is a string. ```ruby -disable! date: "YYYY-MM-DD", because: :reason, replacement: "foo" +disable! date: "YYYY-MM-DD", because: :reason, replacement_cask: "foo" ``` ## Removal @@ -90,13 +90,13 @@ A formula should be removed if it does not meet our criteria for [acceptable for When a formula is deprecated or disabled, a reason explaining the action must be provided. -There are two ways to indicate the reason. The preferred way is to use a pre-existing symbol to indicate the reason. The available symbols are listed below and can be found in the [`DeprecateDisable` module](https://github.com/Homebrew/brew/blob/master/Library/Homebrew/deprecate_disable.rb): +There are two ways to indicate the reason. The preferred way is to use a pre-existing symbol to indicate the reason. The available symbols are listed below and can be found in the [`DeprecateDisable` module](https://rubydoc.brew.sh/DeprecateDisable.html): - `:does_not_build`: the formula cannot be built from source on any supported macOS version or Linux. - `:no_license`: we cannot identify a license for the formula - `:repo_archived`: the upstream repository has been archived and no replacement is pointed to that we can use - `:repo_removed`: the upstream repository has been removed and no replacement is mentioned on the homepage that we can use -- `:unmaintained`: the project appears to be abandoned i.e. it has had no commits for at least a year and has critical bugs or CVE that have been reported and gone resolved longer. Note: some software is "done"; a lack of activity does not imply a need for removal. +- `:unmaintained`: the project appears to be abandoned, i.e. it has had no commits for at least a year and has critical bugs or CVEs that have been reported and left unresolved for longer. **Note:** some software is "done"; a lack of activity does not imply a need for removal. - `:unsupported`: Homebrew's compilation of the software is not supported by the upstream developers (e.g. upstream only supports macOS versions older than 10.15) - `:deprecated_upstream`: the project is deprecated upstream and no replacement is pointed to that we can use - `:versioned_formula`: the formula is a versioned formula and no longer [meets the requirements](Versions.md). diff --git a/docs/FAQ.md b/docs/FAQ.md index 99cb87f333..6dca0305e5 100644 --- a/docs/FAQ.md +++ b/docs/FAQ.md @@ -222,7 +222,7 @@ There are a few ideas to fix this problem: So we let software be. Anything installed with Homebrew Cask should behave the same as if it were installed manually. But since we also want to support software that doesn’t self-upgrade, we add [`auto_updates true`](https://github.com/Homebrew/homebrew-cask/blob/aa461148bbb5119af26b82cccf5003e2b4e50d95/Casks/a/alfred.rb#L18) to casks for software that does, which excludes them from `brew upgrade`. -Casks which use [`version :latest`](https://docs.brew.sh/Cask-Cookbook#version-latest) are also excluded, because we have no way to track their installed version. It helps to ask the developers of such software to provide versioned releases (i.e. include the version in the path of the download `url`). +Casks which use [`version :latest`](Cask-Cookbook.md#special-value-latest) are also excluded, because we have no way to track their installed version. It helps to ask the developers of such software to provide versioned releases (i.e. include the version in the path of the download `url`). If you still want to force software to be upgraded via Homebrew Cask, you can reference it specifically in the `upgrade` command: diff --git a/docs/Formula-Cookbook.md b/docs/Formula-Cookbook.md index 94d1285545..f26de4266e 100644 --- a/docs/Formula-Cookbook.md +++ b/docs/Formula-Cookbook.md @@ -43,7 +43,7 @@ Packages are installed according to their formulae. Read over a simple one, e.g. Make sure you run `brew update` before you start. This ensures your Homebrew installation is a Git repository. -To create or edit formulae locally, you'll need to first [tap `homebrew/core`](https://docs.brew.sh/FAQ#can-i-edit-formulae-myself) if you haven't previously. This clones the Homebrew/homebrew-core Git repository to `$(brew --repository homebrew/core)`. As you're developing, you'll also need to set `HOMEBREW_NO_INSTALL_FROM_API=1` in your shell environment or before any `install`, `reinstall` or `upgrade` commands to force `brew` to use the local repository instead of the API. +To create or edit formulae locally, you'll need to first [tap `homebrew/core`](FAQ.md#can-i-edit-formulae-myself) if you haven't previously. This clones the Homebrew/homebrew-core Git repository to `$(brew --repository homebrew/core)`. As you're developing, you'll also need to set `HOMEBREW_NO_INSTALL_FROM_API=1` in your shell environment or before any `install`, `reinstall` or `upgrade` commands to force `brew` to use the local repository instead of the API. Before submitting a new formula make sure your package: @@ -433,7 +433,7 @@ If you have already forked Homebrew on GitHub, then you can manually push (just git push https://github.com/myname/homebrew-core/ ``` -Now, [open a pull request](https://docs.brew.sh/How-To-Open-a-Homebrew-Pull-Request) for your changes. +Now, [open a pull request](How-To-Open-a-Homebrew-Pull-Request.md) for your changes. * One formula per commit; one commit per formula. * Keep merge commits out of the pull request. diff --git a/docs/Homebrew-and-Python.md b/docs/Homebrew-and-Python.md index d8283b3ccc..525d92fd68 100644 --- a/docs/Homebrew-and-Python.md +++ b/docs/Homebrew-and-Python.md @@ -11,7 +11,7 @@ Homebrew will install the necessary Python 3 version that is needed to make your ## Python 3 Homebrew provides formulae for the newest and maintained releases of Python 3 (`python@3.y`) (). -We keep older `python@3.y` versions according to our [versioned formulae guidelines](https://docs.brew.sh/Versions). +We keep older `python@3.y` versions according to our [versioned formulae guidelines](Versions.md). **Important:** Python may be upgraded to a newer version at any time. Consider using a version manager such as `pyenv` if you require stability of minor or patch versions for virtual environments. diff --git a/docs/Homebrew-on-Linux.md b/docs/Homebrew-on-Linux.md index 015ef2736d..f10dff9693 100644 --- a/docs/Homebrew-on-Linux.md +++ b/docs/Homebrew-on-Linux.md @@ -61,11 +61,11 @@ To install build tools, paste at a terminal prompt: sudo apt-get install build-essential procps curl file git ``` -- **Fedora, CentOS, or Red Hat** +- **Fedora, CentOS Stream, or RHEL** ```sh - sudo yum groupinstall 'Development Tools' - sudo yum install procps-ng curl file git + sudo dnf group install 'Development Tools' + sudo dnf install procps-ng curl file ``` - **Arch Linux** @@ -76,7 +76,7 @@ To install build tools, paste at a terminal prompt: ### ARM32 (Tier 3 Support) -Homebrew can run on 32-bit ARM (e.g. Raspberry Pi and others), but as they lack bottles (binary packages) they are a [Tier 3 supported platform](https://docs.brew.sh/Support-Tiers#tier-3) +Homebrew can run on 32-bit ARM systems (e.g. Raspberry Pi and others), but as they lack bottles (binary packages) they are a [Tier 3 supported platform](Support-Tiers.md#tier-3). You may need to install your own Ruby using your system package manager, a PPA, or `rbenv/ruby-build` as we don't distribute a Homebrew Portable Ruby for ARM32. diff --git a/docs/How-To-Open-a-Homebrew-Pull-Request.md b/docs/How-To-Open-a-Homebrew-Pull-Request.md index 0cff912297..8b0ca8a04b 100644 --- a/docs/How-To-Open-a-Homebrew-Pull-Request.md +++ b/docs/How-To-Open-a-Homebrew-Pull-Request.md @@ -10,11 +10,11 @@ The type of change you want to make influences which of Homebrew's main reposito ## Submit a new version of an existing formula -1. Use [`brew bump-formula-pr`](Manpage#bump-formula-pr-options-formula) to do everything (i.e. forking, committing, pushing) with a single command. Run `brew bump-formula-pr --help` to learn more. +1. Use [`brew bump-formula-pr`](Manpage.md#bump-formula-pr-options-formula) to do everything (i.e. forking, committing, pushing) with a single command. Run `brew bump-formula-pr --help` to learn more. ## Submit a new version of an existing cask -1. Use [`brew bump-cask-pr`](Manpage#bump-cask-pr-options-cask) to do everything (i.e. forking, committing, pushing) with a single command. Run `brew bump-cask-pr --help` to learn more. +1. Use [`brew bump-cask-pr`](Manpage.md#bump-cask-pr-options-cask) to do everything (i.e. forking, committing, pushing) with a single command. Run `brew bump-cask-pr --help` to learn more. ## Set up your own fork of the Homebrew repository @@ -38,7 +38,7 @@ The type of change you want to make influences which of Homebrew's main reposito ### Formulae-related pull request -Before creating a new formula, please read [Acceptable Formulae](https://docs.brew.sh/Acceptable-Formulae). +Before creating a new formula, please read [Acceptable Formulae](Acceptable-Formulae.md). 1. [Fork the Homebrew/homebrew-core repository on GitHub](https://github.com/Homebrew/homebrew-core/fork). * This creates a personal remote repository that you can push to. This is needed because only Homebrew maintainers have push access to the main repositories. @@ -64,7 +64,7 @@ Before creating a new formula, please read [Acceptable Formulae](https://docs.br ### Cask-related pull request -Before creating a new cask, please read [Acceptable Casks](https://docs.brew.sh/Acceptable-Casks). +Before creating a new cask, please read [Acceptable Casks](Acceptable-Casks.md). 1. [Fork the Homebrew/homebrew-cask repository on GitHub](https://github.com/Homebrew/homebrew-cask/fork). * This creates a personal remote repository that you can push to. This is needed because only Homebrew maintainers have push access to the main repositories. @@ -110,7 +110,7 @@ To make changes on a new branch and submit it for review, create a GitHub pull r git checkout -b origin/master ``` -4. Make your changes. For formulae or casks, use `brew edit` or your favourite text editor, following all the guidelines in the [Formula Cookbook](Formula-Cookbook.md) or [Cask Cookbook](Cask-Cookbook.md). +4. Make your changes. For formulae or casks, use `brew edit` or your favourite text editor, using the guidelines in the [Formula Cookbook](Formula-Cookbook.md) or [Cask Cookbook](Cask-Cookbook.md) for reference. * If there's a `bottle do` block in the formula, don't remove or change it; we'll update it when we merge your PR. 5. Test your changes by running the following, and ensure they all pass without issue. For changed formulae and casks, make sure you do the `brew audit` step after your changed formula/cask has been installed. diff --git a/docs/How-To-Organize-AGM.md b/docs/How-To-Organize-AGM.md index 33a71beafa..e27bdc90f3 100644 --- a/docs/How-To-Organize-AGM.md +++ b/docs/How-To-Organize-AGM.md @@ -74,7 +74,7 @@ using this quick command:_ * This is primarily to enable members to begin planning travel by asking for time off, requesting employer reimbursement, arranging childcare or pet sitters, - [applying for a visa](https://5195.f2w.bosa.be/en/themes/entry/border-control/visa/visa-type-c) + [applying for a visa](https://5195.f2w.bosa.be/en/themes/entry/border-control/visa/visa-type-c-visa-short-stay) which may [take 2–7 weeks](https://dofi.ibz.be/en/themes/third-country-nationals/short-stay/processing-time-visa-application), etc. diff --git a/docs/Installation.md b/docs/Installation.md index fc2412b421..618925e1bd 100644 --- a/docs/Installation.md +++ b/docs/Installation.md @@ -104,12 +104,12 @@ eval "$(/bin/brew shellenv)" ``` Replace `` with the directory where Homebrew is installed on your system. -You can find Homebrew's default install location [in this FAQ entry](https://docs.brew.sh/FAQ#why-should-i-install-homebrew-in-the-default-location). +You can find Homebrew's default install location in [this FAQ entry](FAQ.md#why-should-i-install-homebrew-in-the-default-location). -For more insight, re-run the installer or inspect [the installer's source](https://github.com/Homebrew/install/blob/deacfa6a6e62e5f4002baf9e1fac7a96e9aa5d41/install.sh#L1072-L1088) +For more insight, re-run the installer or inspect [the installer's source](https://github.com/Homebrew/install/blob/956abfa01f0d1dba285e6d3da86587ed428f19fe/install.sh#L1075-L1091) to see how the installer constructs the path it recommends. -See [Tips and Tricks > Loading Homebrew from the same dotfiles on different operating systems](Tips-and-Tricks.md#loading-homebrew-from-the-same-dotfiles-on-different-operating-systems) +See [this tip in Tips and Tricks](Tips-and-Tricks.md#load-homebrew-from-the-same-dotfiles-on-different-operating-systems) for another way to handle this across multiple operating systems. ## Uninstallation diff --git a/docs/Manpage.md b/docs/Manpage.md index e3d40b24e7..861f6d0e92 100644 --- a/docs/Manpage.md +++ b/docs/Manpage.md @@ -278,15 +278,15 @@ flags which will help with finding keg-only dependencies like `openssl`, `--formula` -: `list` or `dump` Homebrew formula dependencies. +: `list`, `dump` or `cleanup` Homebrew formula dependencies. `--cask` -: `list` or `dump` Homebrew cask dependencies. +: `list`, `dump` or `cleanup` Homebrew cask dependencies. `--tap` -: `list` or `dump` Homebrew tap dependencies. +: `list`, `dump` or `cleanup` Homebrew tap dependencies. `--mas` @@ -298,7 +298,7 @@ flags which will help with finding keg-only dependencies like `openssl`, `--vscode` -: `list` or `dump` VSCode (and forks/variants) extensions. +: `list`, `dump` or `cleanup` VSCode (and forks/variants) extensions. `--no-vscode` @@ -779,6 +779,11 @@ upgrade *`formula`* if it is already installed but outdated. : Show what would be installed, but do not actually install anything. +`--ask` + +: Ask for confirmation before downloading and installing formulae. Print bottles + and dependencies download size and install size. + `--formula` : Treat all named arguments as formulae. @@ -873,11 +878,6 @@ upgrade *`formula`* if it is already installed but outdated. : Delete files that already exist in the prefix while linking. -`--ask` - -: Ask for confirmation before downloading and installing formulae. Print bottles - and dependencies download size and install size. - `--cask` : Treat all named arguments as casks. @@ -1245,6 +1245,11 @@ for the reinstalled formulae or, every 30 days, for all formulae. : Print the verification and post-install steps. +`--ask` + +: Ask for confirmation before downloading and upgrading formulae. Print bottles + and dependencies download size, install and net install size. + `--formula` : Treat all named arguments as formulae. @@ -1276,11 +1281,6 @@ for the reinstalled formulae or, every 30 days, for all formulae. : Create a Git repository, useful for creating patches to the software. -`--ask` - -: Ask for confirmation before downloading and upgrading formulae. Print bottles - and dependencies download size, install and net install size. - `--cask` : Treat all named arguments as casks. @@ -1435,8 +1435,8 @@ If `sudo` is passed, operate on `/Library/LaunchDaemons` or `--max-wait` -: Wait at most this many seconds for `stop` to finish stopping a service. Omit - this flag or set this to zero (0) seconds to wait indefinitely. +: Wait at most this many seconds for `stop` to finish stopping a service. + Defaults to 60. Set this to zero (0) seconds to wait indefinitely. `--all` @@ -1679,6 +1679,11 @@ for the upgraded formulae or, every 30 days, for all formulae. : Show what would be upgraded, but do not actually upgrade anything. +`--ask` + +: Ask for confirmation before downloading and upgrading formulae. Print bottles + and dependencies download size, install and net install size. + `--formula` : Treat all named arguments as formulae. If no named arguments are specified, @@ -1717,11 +1722,6 @@ for the upgraded formulae or, every 30 days, for all formulae. : Delete files that already exist in the prefix while linking. -`--ask` - -: Ask for confirmation before downloading and upgrading formulae. Print bottles - and dependencies download size, install and net install size. - `--cask` : Treat all named arguments as casks. If no named arguments are specified, @@ -2414,6 +2414,10 @@ see: : Create a basic template for an Autotools-style build. +`--cabal` + +: Create a basic template for a Cabal build. + `--cask` : Create a basic template for a cask. @@ -4443,8 +4447,8 @@ Homebrew's Project Leader is Mike McQuaid. Homebrew's Project Leadership Committee is Colin Dean, Michka Popoff, Mike McQuaid, Patrick Linnane and Vanessa Gennarelli. -Homebrew's Technical Steering Committee is Bo Anderson, FX Coudert, Mike McQuaid -and Rylan Polster. +Homebrew's Technical Steering Committee is Bo Anderson, Issy Long, Michael Cho, +Mike McQuaid and Ruoyu Zhong. Homebrew's maintainers are Alexander Bayandin, Bevan Kay, Bo Anderson, Branch Vincent, Caleb Xu, Carlo Cabrera, Daeho Ro, Douglas Eichelberger, Dustin diff --git a/docs/New-Maintainer-Checklist.md b/docs/New-Maintainer-Checklist.md index 1661901b9c..80ec6acd8a 100644 --- a/docs/New-Maintainer-Checklist.md +++ b/docs/New-Maintainer-Checklist.md @@ -82,7 +82,7 @@ Now sit back, relax and let the new maintainers handle more of our contributions ## PLC -If a maintainer or member is elected to the Homebrew's [Project Leadership Committee](https://docs.brew.sh/Homebrew-Governance#4-project-leadership-committee): +If a maintainer or member is elected to the Homebrew's [Project Leadership Committee](Homebrew-Governance.md#4-project-leadership-committee): - Invite them to the [**@Homebrew/plc** team](https://github.com/orgs/Homebrew/teams/plc/members) - Make them [billing managers](https://github.com/organizations/Homebrew/settings/billing) and [moderators](https://github.com/organizations/Homebrew/settings/moderators) on the Homebrew GitHub organisation @@ -92,7 +92,7 @@ When they cease to be a PLC member, revoke or downgrade their access to all of t ## TSC -If a maintainer is elected to the Homebrew's [Technical Steering Committee](https://docs.brew.sh/Homebrew-Governance#7-technical-steering-committee): +If a maintainer is elected to the Homebrew's [Technical Steering Committee](Homebrew-Governance.md#7-technical-steering-committee): - Invite them to the [**@Homebrew/tsc** team](https://github.com/orgs/Homebrew/teams/tsc/members) - Make them [billing managers](https://github.com/organizations/Homebrew/settings/billing) and [moderators](https://github.com/organizations/Homebrew/settings/moderators) on the Homebrew GitHub organisation @@ -111,7 +111,7 @@ When they cease to be an owner, revoke or downgrade their access to all of the a ## Members -People who are either not eligible or willing to be Homebrew maintainers but have shown continued involvement in the Homebrew community may be admitted by a majority vote of the [Project Leadership Committee](https://docs.brew.sh/Homebrew-Governance#4-project-leadership-committee). +People who are either not eligible or willing to be Homebrew maintainers but have shown continued involvement in the Homebrew community may be admitted by a majority vote of the [Project Leadership Committee](Homebrew-Governance.md#4-project-leadership-committee). When admitted as members: diff --git a/docs/Prose-Style-Guidelines.md b/docs/Prose-Style-Guidelines.md index ad64206f5a..c5e2907884 100644 --- a/docs/Prose-Style-Guidelines.md +++ b/docs/Prose-Style-Guidelines.md @@ -1,5 +1,5 @@ --- -last_review_date: "2025-02-08" +last_review_date: 2025-05-22 --- # Prose Style Guidelines @@ -23,7 +23,7 @@ Homebrew's audience includes users with a wide range of education and experience We strive for "correct" but not "fancy" usage. Think newspaper article, not academic paper. -This is a set of guidelines to be applied using human judgement, not a set of hard and fast rules. It is like [Garner's Modern American Usage](https://en.wikipedia.org/wiki/Garner's_Modern_American_Usage). It is less like the [Ruby Style Guide](https://github.com/rubocop-hq/ruby-style-guide#the-ruby-style-guide). All guidelines here are open to interpretation and discussion. 100% conformance to these guidelines is *not* a goal. +This is a set of guidelines to be applied using human judgement, not a set of hard and fast rules. It is more like [Garner's Modern American Usage](https://en.wikipedia.org/wiki/Garner's_Modern_American_Usage) and less like the [Ruby Style Guide](https://github.com/rubocop-hq/ruby-style-guide#the-ruby-style-guide). All guidelines here are open to interpretation and discussion. 100% conformance to these guidelines is *not* a goal. The intent of this document is to help authors make decisions about clarity, style, and consistency. It is not to help settle arguments about who knows English better. Don't use this document to be a jerk. @@ -53,6 +53,8 @@ We prefer: * Use a subordinate list item instead of dropping a multi-sentence paragraph-long item into a list of sentence fragments * Prefer Markdown over other markup formats unless their specific features are needed * GitHub Flavoured Markdown. GitHub's implementation is the standard, period. +* Link to other documentation pages with relative links to the Markdown filename rather than the full URL + * e.g. `FAQ.md` instead of `https://docs.brew.sh/FAQ` ### Typographical conventions diff --git a/docs/Rakefile b/docs/Rakefile index 9d58bcb719..5411ccfa0a 100644 --- a/docs/Rakefile +++ b/docs/Rakefile @@ -34,8 +34,9 @@ task test: :build do ], ignore_urls: [ "/", - %r{https://formulae.brew.sh"}, + %r{https://formulae.brew.sh}, %r{https://github.com/}, + %r{https://homebrew.1password.com/}, "https://legacy.python.org/dev/peps/pep-0453/#recommendations-for-downstream-distributors", ], cache: { diff --git a/docs/Support-Tiers.md b/docs/Support-Tiers.md index 2f5baf9193..5a98f0c72e 100644 --- a/docs/Support-Tiers.md +++ b/docs/Support-Tiers.md @@ -22,7 +22,7 @@ A Tier 1 supported configuration is one in which: For Tier 1 support, Homebrew on macOS must be all of: - running on official Apple hardware (e.g. not a "Hackintosh" or VM) -- running a version of macOS supported by Apple on that hardware +- running the latest patch release of a macOS version supported by Apple on that hardware - running a version of macOS with Homebrew CI coverage (i.e. the latest stable or prerelease version, two preceding versions) - installed in the default prefix (i.e. `/opt/homebrew` on Apple Silicon, `/usr/local` on Intel x86_64) - running on a supported architecture (i.e. Apple Silicon or Intel x86_64) diff --git a/docs/Tips-and-Tricks.md b/docs/Tips-and-Tricks.md index 198f1b914f..b3aedef367 100644 --- a/docs/Tips-and-Tricks.md +++ b/docs/Tips-and-Tricks.md @@ -143,7 +143,7 @@ export HOMEBREW_ARTIFACT_DOMAIN_NO_FALLBACK=1 export HOMEBREW_DOCKER_REGISTRY_BASIC_AUTH_TOKEN="$(printf 'anonymous:' | base64)" ``` -## Loading Homebrew from the same dotfiles on different operating systems +## Load Homebrew from the same dotfiles on different operating systems Some users may want to use the same shell initialization files on macOS and Linux. Use this to detect the likely Homebrew installation directory and load Homebrew when it's found. diff --git a/docs/Typechecking.md b/docs/Typechecking.md index a7599ea936..216b79f396 100644 --- a/docs/Typechecking.md +++ b/docs/Typechecking.md @@ -1,12 +1,12 @@ --- -last_review_date: "2025-02-08" +last_review_date: 2025-05-22 --- # Type Checking With Sorbet -The majority of the code in Homebrew is written in Ruby which is a dynamic language. To avail the benefits of static type checking, we have set up Sorbet in our codebase which provides the benefits of static type checking to dynamic languages like Ruby. +The majority of the code in Homebrew is written in Ruby which is a dynamic language. To avail the benefits of static type checking, we have set up [Sorbet](https://sorbet.org/) in our codebase which provides the benefits of static type checking to dynamic languages like Ruby. -The [Sorbet Documentation] is a good place to get started if you want to dive deeper into Sorbet and its abilities. +The [Sorbet Documentation](https://sorbet.org/docs/overview) is a good place to get started if you want to dive deeper into Sorbet and its abilities. ## Sorbet in the Homebrew Codebase @@ -34,45 +34,41 @@ For more information on how to express more complex types, refer to the official ### Ruby interface files (`.rbi`) -[RBI files](https://sorbet.org/docs/rbi) help Sorbet learn about constants, ancestors and methods defined in ways it doesn’t understand natively. We can also create an RBI file to help Sorbet understand dynamic definitions. Some of these files are autogenerated (see the next section) and some are manually written ([example]). +[RBI files](https://sorbet.org/docs/rbi) help Sorbet learn about constants, ancestors and methods defined in ways it doesn't understand natively. We can also create an RBI file to help Sorbet understand dynamic definitions. Some of these files are automatically generated (see the next section) and some are manually written, e.g. [`extend/on_system.rbi`](https://github.com/Homebrew/brew/blob/975fe8a83fd57a8d8e790ec6fb10c2f13f705d02/Library/Homebrew/extend/on_system.rbi). -There are also a very small number of files that Homebrew loads before sorbet-runtime, such as `utils/gems.rb`. Those files cannot have type signatures alongside the code itself, so RBI files are used there instead to retain static type checking. - -[example]: https://github.com/Homebrew/brew/blob/9d4000b15cb6ffa8c11f49372f7016d05aaa0851/Library/Homebrew/extend/ENV.rbi +There are also a very small number of files that Homebrew loads before `sorbet-runtime`, such as `utils/gems.rb`. Those files cannot have type signatures alongside the code itself, so RBI files are used there instead to retain static type checking. ### The [`Library/Homebrew/sorbet`] directory [`Library/Homebrew/sorbet`]: https://github.com/Homebrew/brew/tree/master/Library/Homebrew/sorbet -- The `rbi` directory contains all Ruby Interface (`.rbi`) files auto-generated by running `brew typecheck --update`: +The `rbi` directory contains all Ruby Interface (`.rbi`) files auto-generated by running `brew typecheck --update`: - - `gems`: RBI files for all gems are generated using [Tapioca](https://github.com/Shopify/tapioca#tapioca). - - `dsl`: RBI files autogenerated by our [Tapioca compilers](https://github.com/Homebrew/brew/tree/master/Library/Homebrew/sorbet/tapioca/compilers). - - `upstream.rbi`: This file is not auto-generated and is a manually written file that contains temporary workarounds for upstream Sorbet issues. This file is typically empty. +- `gems`: RBI files for all gems are generated using [Tapioca](https://github.com/Shopify/tapioca#tapioca). +- `dsl`: RBI files auto-generated by our [Tapioca compilers](https://github.com/Homebrew/brew/tree/master/Library/Homebrew/sorbet/tapioca/compilers). +- `upstream.rbi`: This file is manually written and contains temporary workarounds for upstream Sorbet issues. It is typically empty. -- The `config` file is a newline-separated list of arguments to pass to `srb tc`, the same as if they’d been passed on the command line. Arguments in the config file are always passed first, followed by arguments provided on the command line. We use it to ignore Gem directories which we do not wish to type check. +The `tapioca` directory contains configuration files and compilers for Tapioca, allowing Sorbet to type check the dynamically generated components of the codebase. -- Every Ruby file in the codebase has a magic `# typed: ` comment at the top, where `` is one of [Sorbet's strictness levels], usually `false`, `true` or `strict`. The `false` files only report errors related to the syntax, constant resolution and correctness of the method signatures, but no type errors. Our long-term goal is to move all `false` files to `true` and start reporting type errors on those files as well. Therefore, when adding new files, you should ideally mark it with `# typed: true` and work out any resulting type errors. - -[Sorbet's strictness levels]: https://sorbet.org/docs/static#file-level-granularity-strictness-levels +The `config` file is a newline-separated list of arguments to pass to `srb tc`, the same as if they'd been passed on the command line. Arguments in the config file are always passed first, followed by arguments provided on the command line. We use it to ignore e.g. gem directories which we do not wish to type check. ## Using `brew typecheck` -When run without any arguments, `brew typecheck`, will run considering the strictness levels set in each of the individual Ruby files in the core Homebrew codebase. However, when it is run on a specific file or directory, more errors may show up since Sorbet cannot resolve constants defined outside the scope of the specified file. These problems can be solved with RBI files. Currently `brew typecheck` provides `--quiet`, `--file`, `--dir` and `--ignore` options but you can explore more options with `srb tc --help` and pass them with `srb tc`. +Every Ruby file in the codebase has a magic `# typed: ` comment at the top, where `` is one of [Sorbet's strictness levels](https://sorbet.org/docs/static#file-level-granularity-strictness-levels), usually `false`, `true` or `strict`. The `false` files only report errors related to the syntax, constant resolution and correctness of the method signatures, but no type errors. Our long-term goal is to move all `false` files to `true` and start reporting type errors on those files as well. Therefore, when adding new files, you should ideally mark it with `# typed: true` and work out any resulting type errors. + +When run without any arguments, `brew typecheck` will run considering the strictness levels set in each of the individual Ruby files in the core Homebrew codebase. However, when run on a specific file or directory, more errors may show up since Sorbet cannot resolve constants defined outside the scope of the specified file. These problems can be solved with RBI files. Currently `brew typecheck` provides `--quiet`, `--file`, `--dir` and `--ignore` options, but you can explore more options with `srb tc --help` and pass them with `srb tc`. ## Resolving Type Errors -Sorbet reports type errors along with an error reference code, which can be used to look up more information on how to debug the error, or what causes the error in the [Sorbet Documentation]. Here is how to debug some common type errors: +Sorbet reports type errors along with an error reference code, which can be used to look up more information on how to debug the error, or what causes the error in the [Sorbet Documentation](https://sorbet.org/docs/overview). Here's how to debug some common type errors: - Using `T.reveal_type`: in files which are `true` or higher, by wrapping a variable or method call in `T.reveal_type`, Sorbet will show us what type it thinks that variable has in the output of `srb tc`. This is particularly useful when writing [method signatures](https://sorbet.org/docs/sigs) and debugging. Make sure to remove this line from your code before committing your changes, since this is just a debugging tool. - One of the most frequent errors that we've encountered is `7003: Method does not exist.` Since Ruby is a very dynamic language, methods can be defined in ways Sorbet cannot see statically. In such cases, check if the method exists at runtime; if not, then Sorbet has caught a future bug! But, it is also possible that even though a method exists at runtime, Sorbet cannot see it. In such cases, we use [`.rbi` files](#ruby-interface-files-rbi). -- Since Sorbet does not automatically assume that Kernel is to be included in Modules, we may encounter many errors while trying to use methods like `puts`, `ohai`, `odebug` etc. There are generally two approaches to fixing this: +- Since Sorbet does not automatically assume that `Kernel` is to be included in modules, we may encounter many errors while trying to use methods like `puts`, `ohai`, `odebug` etc. There are generally two approaches to fixing this: - - If you are using `module_function` but never run `include ModuleName` anywhere, remove the `module_definition` and convert all methods to class methods (prepend the name with `self.`) - - If you do include the module elsewhere, add a `requires_ancestor` to the module defining what types of classes this module can be included in. This may be as simple as a `requires_ancestor { Kernel }`, which most classes are a descendant from. + - If you are using `module_function` but never run `include ModuleName` anywhere, remove the `module_definition` and convert all methods to class methods (prepend the name with `self.`). + - If you do include the module elsewhere, add a `requires_ancestor` to the module defining what types of classes this module can be included in. This may be as simple as a `requires_ancestor { Kernel }`, which most classes are descended from. - The tips above are very generic and apply to lots of cases. For some common gotchas when using Sorbet, refer to the [Sorbet Error Reference](https://sorbet.org/docs/error-reference) and [FAQ](https://sorbet.org/docs/faq). - -[Sorbet Documentation]: https://sorbet.org/docs/overview diff --git a/docs/vale-styles/Homebrew/README.md b/docs/vale-styles/Homebrew/README.md index 1b087e5b53..12de474ec9 100644 --- a/docs/vale-styles/Homebrew/README.md +++ b/docs/vale-styles/Homebrew/README.md @@ -1,7 +1,7 @@ --- -last_review_date: "1970-01-01" +last_review_date: 2025-05-22 --- # Vale Styles -Based on Homebrew's [Prose Style Guidelines](http://docs.brew.sh/Prose-Style-Guidelines.html). +Based on Homebrew's [Prose Style Guidelines](/docs/Prose-Style-Guidelines.md). diff --git a/manpages/brew.1 b/manpages/brew.1 index db1cb6c5a6..1d84a042df 100644 --- a/manpages/brew.1 +++ b/manpages/brew.1 @@ -169,13 +169,13 @@ Temporarily start services while running the \fBexec\fP or \fBsh\fP command\. Th \fBlist\fP all dependencies\. .TP \fB\-\-formula\fP -\fBlist\fP or \fBdump\fP Homebrew formula dependencies\. +\fBlist\fP, \fBdump\fP or \fBcleanup\fP Homebrew formula dependencies\. .TP \fB\-\-cask\fP -\fBlist\fP or \fBdump\fP Homebrew cask dependencies\. +\fBlist\fP, \fBdump\fP or \fBcleanup\fP Homebrew cask dependencies\. .TP \fB\-\-tap\fP -\fBlist\fP or \fBdump\fP Homebrew tap dependencies\. +\fBlist\fP, \fBdump\fP or \fBcleanup\fP Homebrew tap dependencies\. .TP \fB\-\-mas\fP \fBlist\fP or \fBdump\fP Mac App Store dependencies\. @@ -184,7 +184,7 @@ Temporarily start services while running the \fBexec\fP or \fBsh\fP command\. Th \fBlist\fP or \fBdump\fP Whalebrew dependencies\. .TP \fB\-\-vscode\fP -\fBlist\fP or \fBdump\fP VSCode (and forks/variants) extensions\. +\fBlist\fP, \fBdump\fP or \fBcleanup\fP VSCode (and forks/variants) extensions\. .TP \fB\-\-no\-vscode\fP \fBdump\fP without VSCode (and forks/variants) extensions\. This is enabled by default if \fB$HOMEBREW_BUNDLE_DUMP_NO_VSCODE\fP is set\. @@ -487,6 +487,9 @@ Print the verification and post\-install steps\. \fB\-n\fP, \fB\-\-dry\-run\fP Show what would be installed, but do not actually install anything\. .TP +\fB\-\-ask\fP +Ask for confirmation before downloading and installing formulae\. Print bottles and dependencies download size and install size\. +.TP \fB\-\-formula\fP Treat all named arguments as formulae\. .TP @@ -544,9 +547,6 @@ Create a Git repository, useful for creating patches to the software\. \fB\-\-overwrite\fP Delete files that already exist in the prefix while linking\. .TP -\fB\-\-ask\fP -Ask for confirmation before downloading and installing formulae\. Print bottles and dependencies download size and install size\. -.TP \fB\-\-cask\fP Treat all named arguments as casks\. .TP @@ -775,6 +775,9 @@ Install without checking for previously installed keg\-only or non\-migrated ver \fB\-v\fP, \fB\-\-verbose\fP Print the verification and post\-install steps\. .TP +\fB\-\-ask\fP +Ask for confirmation before downloading and upgrading formulae\. Print bottles and dependencies download size, install and net install size\. +.TP \fB\-\-formula\fP Treat all named arguments as formulae\. .TP @@ -796,9 +799,6 @@ Generate debug symbols on build\. Source will be retained in a cache directory\. \fB\-g\fP, \fB\-\-git\fP Create a Git repository, useful for creating patches to the software\. .TP -\fB\-\-ask\fP -Ask for confirmation before downloading and upgrading formulae\. Print bottles and dependencies download size, install and net install size\. -.TP \fB\-\-cask\fP Treat all named arguments as casks\. .TP @@ -902,7 +902,7 @@ Use the service file from this location to \fBstart\fP the service\. When run as root on macOS, run the service(s) as this user\. .TP \fB\-\-max\-wait\fP -Wait at most this many seconds for \fBstop\fP to finish stopping a service\. Omit this flag or set this to zero (0) seconds to wait indefinitely\. +Wait at most this many seconds for \fBstop\fP to finish stopping a service\. Defaults to 60\. Set this to zero (0) seconds to wait indefinitely\. .TP \fB\-\-all\fP Run \fIsubcommand\fP on all services\. @@ -1045,6 +1045,9 @@ Print the verification and post\-install steps\. \fB\-n\fP, \fB\-\-dry\-run\fP Show what would be upgraded, but do not actually upgrade anything\. .TP +\fB\-\-ask\fP +Ask for confirmation before downloading and upgrading formulae\. Print bottles and dependencies download size, install and net install size\. +.TP \fB\-\-formula\fP Treat all named arguments as formulae\. If no named arguments are specified, upgrade only outdated formulae\. .TP @@ -1069,9 +1072,6 @@ Generate debug symbols on build\. Source will be retained in a cache directory\. \fB\-\-overwrite\fP Delete files that already exist in the prefix while linking\. .TP -\fB\-\-ask\fP -Ask for confirmation before downloading and upgrading formulae\. Print bottles and dependencies download size, install and net install size\. -.TP \fB\-\-cask\fP Treat all named arguments as casks\. If no named arguments are specified, upgrade only outdated casks\. .TP @@ -1525,6 +1525,9 @@ Generate a formula or, with \fB\-\-cask\fP, a cask for the downloadable file at \fB\-\-autotools\fP Create a basic template for an Autotools\-style build\. .TP +\fB\-\-cabal\fP +Create a basic template for a Cabal build\. +.TP \fB\-\-cask\fP Create a basic template for a cask\. .TP @@ -2922,7 +2925,7 @@ Homebrew\[u2019]s Project Leader is Mike McQuaid\. .P Homebrew\[u2019]s Project Leadership Committee is Colin Dean, Michka Popoff, Mike McQuaid, Patrick Linnane and Vanessa Gennarelli\. .P -Homebrew\[u2019]s Technical Steering Committee is Bo Anderson, FX Coudert, Mike McQuaid and Rylan Polster\. +Homebrew\[u2019]s Technical Steering Committee is Bo Anderson, Issy Long, Michael Cho, Mike McQuaid and Ruoyu Zhong\. .P Homebrew\[u2019]s maintainers are Alexander Bayandin, Bevan Kay, Bo Anderson, Branch Vincent, Caleb Xu, Carlo Cabrera, Daeho Ro, Douglas Eichelberger, Dustin Rodrigues, Eric Knibbe, FX Coudert, Issy Long, Justin Krehel, Klaus Hipp, Markus Reiter, Michael Cho, Michka Popoff, Mike McQuaid, Nanda H Krishna, Patrick Linnane, Rui Chen, Ruoyu Zhong, Rylan Polster, Sam Ford, Sean Molenaar, Štefan Baebler, Thierry Moisan, Timothy Sutton and William Woodruff\. .P