diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 59ff03e1c5..7d9913eeb8 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -9,15 +9,19 @@ Please follow these guidelines when contributing: ### Required Before Each Commit - Run `brew typecheck` to verify types are declared correctly using Sorbet. + Individual files/directories cannot be checked. + `brew typecheck` is fast enough to just be run globally every time. - Run `brew style --fix` to lint code formatting using RuboCop. - Individual files can be checked/fixed by passing them as arguments. + Individual files can be checked/fixed by passing them as arguments e.g. `brew style --fix Library/Homebrew/cmd/reinstall.rb`` - Run `brew tests --online` to ensure that RSpec unit tests are passing (although some online tests may be flaky so can be ignored if they pass on a rerun). Individual test files can be passed with `--only` e.g. to test `Library/Homebrew/cmd/reinstall.rb` with `Library/Homebrew/test/cmd/reinstall_spec.rb` run `brew tests --only=cmd/reinstall`. ### Development Flow -- Write new code (using Sorbet `sig` type signatures and `typed: strict` files whenever possible) -- Write new tests (avoid more than one `:integration_test` per file for speed) +- Write new code (using Sorbet `sig` type signatures and `typed: strict` for new files, but never for RSpec/test/`*_spec.rb` files) +- Write new tests (avoid more than one `:integration_test` per file for speed). + Use only one `expect` assertion per test. +- Keep comments minimal; prefer self-documenting code through strings, variable names, etc. over more comments. ## Repository Structure @@ -34,7 +38,10 @@ Please follow these guidelines when contributing: ## Key Guidelines -1. Follow Ruby best practices and idiomatic patterns -2. Maintain existing code structure and organisation -3. Write unit tests for new functionality. Use one assertion per test where possible. -4. Document public APIs and complex logic. Suggest changes to the `docs/` folder when appropriate +1. Follow Ruby and Bash best practices and idiomatic patterns. +2. Maintain existing code structure and organisation. +3. Write unit tests for new functionality. +4. Document public APIs and complex logic. +5. Suggest changes to the `docs/` folder when appropriate +6. Follow software principles such as DRY and YAGNI. +7. Keep diffs as minimal as possible. diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 737709ec1c..89301fcb82 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -17,13 +17,6 @@ updates: - "*" allow: - dependency-type: all - cooldown: - default-days: 1 - semver-major-days: 14 - semver-minor-days: 7 - semver-patch-days: 1 - include: - - "*" - package-ecosystem: devcontainers directory: "/" multi-ecosystem-group: all @@ -31,10 +24,6 @@ updates: - "*" allow: - dependency-type: all - cooldown: - default-days: 1 - include: - - "*" - package-ecosystem: docker directory: "/" multi-ecosystem-group: all @@ -49,10 +38,6 @@ updates: - "*" allow: - dependency-type: all - cooldown: - default-days: 1 - include: - - "*" - package-ecosystem: pip directories: - "/Library/Homebrew/formula-analytics/" @@ -61,11 +46,4 @@ updates: - "*" allow: - dependency-type: all - cooldown: - default-days: 1 - semver-major-days: 14 - semver-minor-days: 7 - semver-patch-days: 1 - include: - - "*" diff --git a/.github/workflows/actionlint.yml b/.github/workflows/actionlint.yml index 5f1adb46b6..63c9f7c516 100644 --- a/.github/workflows/actionlint.yml +++ b/.github/workflows/actionlint.yml @@ -43,7 +43,7 @@ jobs: - name: Install tools run: brew install actionlint shellcheck zizmor - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false @@ -87,13 +87,13 @@ jobs: security-events: write steps: - name: Download SARIF file - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 + uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0 with: name: results.sarif path: results.sarif - name: Upload SARIF file - uses: github/codeql-action/upload-sarif@51f77329afa6477de8c49fc9c7046c15b9a4e79d # v3.29.5 + uses: github/codeql-action/upload-sarif@df559355d593797519d70b90fc8edd5db049e7a2 # v3.29.9 with: sarif_file: results.sarif category: zizmor diff --git a/.github/workflows/autogenerated-files.yml b/.github/workflows/autogenerated-files.yml index 236e57c42a..38ace950fe 100644 --- a/.github/workflows/autogenerated-files.yml +++ b/.github/workflows/autogenerated-files.yml @@ -34,7 +34,7 @@ jobs: test-bot: true - name: Cache Bundler RubyGems - uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 + uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4 with: path: ${{ steps.set-up-homebrew.outputs.gems-path }} key: ${{ runner.os }}-rubygems-${{ steps.set-up-homebrew.outputs.gems-hash }} diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 03bcb7609d..c43e2f213d 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -22,12 +22,12 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false - name: Initialize CodeQL - uses: github/codeql-action/init@4e828ff8d448a8a6e532957b1811f387a63867e8 # v3.29.4 + uses: github/codeql-action/init@df559355d593797519d70b90fc8edd5db049e7a2 # v3.29.9 with: languages: ruby config: | @@ -35,4 +35,4 @@ jobs: - Library/Homebrew/vendor - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@4e828ff8d448a8a6e532957b1811f387a63867e8 # v3.29.4 + uses: github/codeql-action/analyze@df559355d593797519d70b90fc8edd5db049e7a2 # v3.29.9 diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 8f363bd1ff..cd06616d89 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -34,7 +34,7 @@ jobs: merge: ${{ steps.attributes.outputs.merge }} steps: - name: Checkout - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: fetch-depth: 0 persist-credentials: false @@ -160,7 +160,7 @@ jobs: arch: "arm64" steps: - name: Checkout - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: fetch-depth: 0 persist-credentials: false @@ -188,7 +188,7 @@ jobs: echo "push=$(jq --raw-output "${filter}" <<<"${PUSH}")" >>"${GITHUB_OUTPUT}" - name: Log in to GitHub Packages (github-actions[bot]) - uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0 + uses: docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1 # v3.5.0 with: registry: ghcr.io username: github-actions[bot] @@ -223,7 +223,7 @@ jobs: - name: Log in to GitHub Packages (BrewTestBot) if: fromJSON(steps.attributes.outputs.push) - uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0 + uses: docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1 # v3.5.0 with: registry: ghcr.io username: BrewTestBot @@ -273,20 +273,20 @@ jobs: cache-binary: false - name: Download Docker image digests - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 + uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0 with: path: ${{ runner.temp }}/digests pattern: digest-${{ matrix.version }}-* merge-multiple: true - name: Log in to Docker Hub - uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0 + uses: docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1 # v3.5.0 with: username: brewtestbot password: ${{ secrets.HOMEBREW_BREW_DOCKER_TOKEN }} - name: Log in to GitHub Packages (BrewTestBot) - uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0 + uses: docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1 # v3.5.0 with: registry: ghcr.io username: BrewTestBot diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index f30f9c6cff..5daadb1712 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -31,7 +31,7 @@ jobs: test-bot: false - name: Checkout repository - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false @@ -52,7 +52,7 @@ jobs: run: vale docs/ - name: Install Ruby - uses: ruby/setup-ruby@472790540115ce5bd69d399a020189a8c87d641f # v1.247.0 + uses: ruby/setup-ruby@829114fc20da43a41d27359103ec7a63020954d4 # v1.255.0 with: bundler-cache: true working-directory: docs @@ -70,7 +70,7 @@ jobs: run: ../script/generate-api-samples.rb --template - name: Cache HTML Proofer - uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 + uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4 with: path: tmp/.htmlproofer key: ${{ runner.os }}-htmlproofer diff --git a/.github/workflows/pkg-installer.yml b/.github/workflows/pkg-installer.yml index 577d0fd527..ab33fd8901 100644 --- a/.github/workflows/pkg-installer.yml +++ b/.github/workflows/pkg-installer.yml @@ -81,7 +81,7 @@ jobs: run: rm -f "${RUNNER_TEMP}/${TEMPORARY_CERTIFICATE_FILE}" - name: Checkout another Homebrew to brew subdirectory - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: path: brew fetch-depth: 0 @@ -162,7 +162,7 @@ jobs: name: macos-15-arm64 steps: - name: Download installer from GitHub Actions - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 + uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0 with: name: "${{ needs.build.outputs.installer_path }}" @@ -215,7 +215,7 @@ jobs: contents: write steps: - name: Download installer from GitHub Actions - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 + uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0 with: name: "${{ needs.build.outputs.installer_path }}" diff --git a/.github/workflows/rubydoc.yml b/.github/workflows/rubydoc.yml index 4c8047bf83..693a813194 100644 --- a/.github/workflows/rubydoc.yml +++ b/.github/workflows/rubydoc.yml @@ -36,14 +36,14 @@ jobs: test-bot: false - name: Checkout Homebrew/rubydoc.brew.sh - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: repository: Homebrew/rubydoc.brew.sh path: rubydoc persist-credentials: false - name: Install Ruby - uses: ruby/setup-ruby@472790540115ce5bd69d399a020189a8c87d641f # v1.247.0 + uses: ruby/setup-ruby@829114fc20da43a41d27359103ec7a63020954d4 # v1.255.0 with: bundler-cache: true working-directory: rubydoc diff --git a/.github/workflows/sponsors-maintainers-man-completions.yml b/.github/workflows/sponsors-maintainers-man-completions.yml index c74ead84ba..cd22dd28e0 100644 --- a/.github/workflows/sponsors-maintainers-man-completions.yml +++ b/.github/workflows/sponsors-maintainers-man-completions.yml @@ -50,7 +50,7 @@ jobs: signing_key: ${{ secrets.BREWTESTBOT_SSH_SIGNING_KEY }} - name: Cache Bundler RubyGems - uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 + uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4 with: path: ${{ steps.set-up-homebrew.outputs.gems-path }} key: ${{ runner.os }}-rubygems-${{ steps.set-up-homebrew.outputs.gems-hash }} diff --git a/.github/workflows/sync-default-branches.yml b/.github/workflows/sync-default-branches.yml index b171b3c992..c404f955a2 100644 --- a/.github/workflows/sync-default-branches.yml +++ b/.github/workflows/sync-default-branches.yml @@ -43,7 +43,7 @@ jobs: echo "target=${target}" >> "$GITHUB_OUTPUT" echo "source=${source}" >> "$GITHUB_OUTPUT" - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: fetch-depth: 1 persist-credentials: true diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 155b404f44..626ea7b96e 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -40,7 +40,7 @@ jobs: test-bot: false - name: Cache Bundler RubyGems - uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 + uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4 with: path: ${{ steps.set-up-homebrew.outputs.gems-path }} key: ${{ runner.os }}-rubygems-syntax-${{ steps.set-up-homebrew.outputs.gems-hash }} @@ -53,7 +53,7 @@ jobs: run: brew install shellcheck shfmt - name: Cache style cache - uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 + uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4 with: path: ~/.cache/Homebrew/style key: syntax-style-cache-${{ github.sha }} @@ -92,7 +92,7 @@ jobs: test-bot: true - name: Cache Bundler RubyGems - uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 + uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4 with: path: ${{ steps.set-up-homebrew.outputs.gems-path }} key: ${{ runner.os }}-rubygems-tap-syntax-${{ steps.set-up-homebrew.outputs.gems-hash }} @@ -102,7 +102,7 @@ jobs: run: brew install-bundler-gems --groups=style - name: Cache style cache - uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 + uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4 with: path: ~/.cache/Homebrew/style key: tap-syntax-style-cache-${{ github.sha }} @@ -266,7 +266,7 @@ jobs: test-bot: false - name: Cache Bundler RubyGems - uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 + uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4 with: path: ${{ steps.set-up-homebrew.outputs.gems-path }} key: ${{ matrix.runs-on }}-tests-rubygems-${{ steps.set-up-homebrew.outputs.gems-hash }} @@ -281,7 +281,7 @@ jobs: run: mkdir tests - name: Cache parallel tests log - uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 + uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4 with: path: tests key: ${{ runner.os }}-${{ matrix.test-flags }}-parallel_runtime_rspec-${{ github.sha }} @@ -505,7 +505,7 @@ jobs: - name: Cache Homebrew Bundler RubyGems id: cache - uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 + uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4 with: path: ${{ steps.set-up-homebrew.outputs.gems-path }} key: ${{ runner.os }}-rubygems-${{ steps.set-up-homebrew.outputs.gems-hash }} diff --git a/.github/workflows/vendor-gems.yml b/.github/workflows/vendor-gems.yml index f2d98363ca..7a408b78ab 100644 --- a/.github/workflows/vendor-gems.yml +++ b/.github/workflows/vendor-gems.yml @@ -92,7 +92,7 @@ jobs: fi - name: Generate push token - uses: actions/create-github-app-token@df432ceedc7162793a195dd1713ff69aefc7379e # v2.0.6 + uses: actions/create-github-app-token@a8d616148505b5069dccd32f177bb87d7f39123b # v2.1.1 id: app-token if: github.event_name == 'workflow_dispatch' with: diff --git a/Library/.rubocop.yml b/Library/.rubocop.yml index 6ca33502f8..235a9524c9 100644 --- a/Library/.rubocop.yml +++ b/Library/.rubocop.yml @@ -96,6 +96,11 @@ Layout/ArgumentAlignment: Layout/CaseIndentation: EnforcedStyle: end +# currently bugged and as relevant/urgent in taps: +# https://github.com/rubocop/rubocop/issues/14443 +Layout/EmptyLinesAfterModuleInclusion: + Enabled: false + # significantly less indentation involved; more consistent Layout/FirstArrayElementIndentation: EnforcedStyle: consistent diff --git a/Library/Homebrew/Gemfile.lock b/Library/Homebrew/Gemfile.lock index 4755a39fdd..fbadc9dd1c 100644 --- a/Library/Homebrew/Gemfile.lock +++ b/Library/Homebrew/Gemfile.lock @@ -17,7 +17,7 @@ GEM bindata (~> 2) erubi (1.13.1) hana (1.3.7) - json (2.13.0) + json (2.13.2) json_schemer (2.4.0) bigdecimal hana (~> 1.3) @@ -32,7 +32,7 @@ GEM minitest (5.25.5) netrc (0.11.0) parallel (1.27.0) - parallel_tests (5.3.1) + parallel_tests (5.4.0) parallel parser (3.3.9.0) ast (~> 2.4.1) @@ -55,7 +55,7 @@ GEM logger prism (>= 1.3.0) redcarpet (3.6.1) - regexp_parser (2.10.0) + regexp_parser (2.11.2) require-hooks (0.2.2) rexml (3.4.1) rspec (3.13.1) @@ -79,7 +79,7 @@ GEM rspec-support (3.13.4) rspec_junit_formatter (0.6.0) rspec-core (>= 2, < 4, != 2.12.0) - rubocop (1.78.0) + rubocop (1.79.2) json (~> 2.3) language_server-protocol (~> 3.17.0.2) lint_roller (~> 1.1.0) @@ -87,7 +87,7 @@ GEM parser (>= 3.3.0.2) rainbow (>= 2.2.2, < 4.0) regexp_parser (>= 2.9.3, < 3.0) - rubocop-ast (>= 1.45.1, < 2.0) + rubocop-ast (>= 1.46.0, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 2.4.0, < 4.0) rubocop-ast (1.46.0) @@ -106,7 +106,7 @@ GEM rubocop-sorbet (0.10.5) lint_roller rubocop (>= 1.75.2) - ruby-lsp (0.25.0) + ruby-lsp (0.26.1) language_server-protocol (~> 3.17.0) prism (>= 1.2, < 2.0) rbs (>= 3, < 5) @@ -118,22 +118,22 @@ GEM docile (~> 1.1) simplecov-html (~> 0.11) simplecov_json_formatter (~> 0.1) - simplecov-cobertura (2.1.0) + simplecov-cobertura (3.0.0) rexml simplecov (~> 0.19) simplecov-html (0.13.2) simplecov_json_formatter (0.1.4) simpleidn (0.2.3) - sorbet (0.5.12357) - sorbet-static (= 0.5.12357) - sorbet-runtime (0.5.12357) - sorbet-static (0.5.12357-aarch64-linux) - sorbet-static (0.5.12357-universal-darwin) - sorbet-static (0.5.12357-x86_64-linux) - sorbet-static-and-runtime (0.5.12357) - sorbet (= 0.5.12357) - sorbet-runtime (= 0.5.12357) - spoom (1.7.5) + sorbet (0.5.12401) + sorbet-static (= 0.5.12401) + sorbet-runtime (0.5.12401) + sorbet-static (0.5.12401-aarch64-linux) + sorbet-static (0.5.12401-universal-darwin) + sorbet-static (0.5.12401-x86_64-linux) + sorbet-static-and-runtime (0.5.12401) + sorbet (= 0.5.12401) + sorbet-runtime (= 0.5.12401) + spoom (1.7.6) erubi (>= 1.10.0) prism (>= 0.28.0) rbi (>= 0.3.3) diff --git a/Library/Homebrew/api.rb b/Library/Homebrew/api.rb index c09fb2b000..6f2043728a 100644 --- a/Library/Homebrew/api.rb +++ b/Library/Homebrew/api.rb @@ -4,6 +4,7 @@ require "api/analytics" require "api/cask" require "api/formula" +require "api/internal" require "base64" module Homebrew @@ -26,7 +27,7 @@ module Homebrew api_url = "#{HOMEBREW_API_DEFAULT_DOMAIN}/#{endpoint}" output = Utils::Curl.curl_output("--fail", api_url) end - raise ArgumentError, "No file found at #{Tty.underline}#{api_url}#{Tty.reset}" unless output.success? + raise ArgumentError, "No file found at: #{Tty.underline}#{api_url}#{Tty.reset}" unless output.success? cache[endpoint] = JSON.parse(output.stdout, freeze: true) rescue JSON::ParserError @@ -151,6 +152,30 @@ module Homebrew json.except("variations") end + sig { params(download_queue: T.nilable(DownloadQueue), stale_seconds: Integer).void } + def self.fetch_api_files!(download_queue: nil, stale_seconds: Homebrew::EnvConfig.api_auto_update_secs.to_i) + if Homebrew::EnvConfig.use_internal_api? + Homebrew::API::Internal.fetch_formula_api!(download_queue:, stale_seconds:) + Homebrew::API::Internal.fetch_cask_api!(download_queue:, stale_seconds:) + else + Homebrew::API::Formula.fetch_api!(download_queue:, stale_seconds:) + Homebrew::API::Formula.fetch_tap_migrations!(download_queue:, stale_seconds:) + Homebrew::API::Cask.fetch_api!(download_queue:, stale_seconds:) + Homebrew::API::Cask.fetch_tap_migrations!(download_queue:, stale_seconds:) + end + end + + sig { void } + def self.write_names_and_aliases + if Homebrew::EnvConfig.use_internal_api? + Homebrew::API::Internal.write_formula_names_and_aliases + Homebrew::API::Internal.write_cask_names + else + Homebrew::API::Formula.write_names_and_aliases + Homebrew::API::Cask.write_names + end + end + sig { params(names: T::Array[String], type: String, regenerate: T::Boolean).returns(T::Boolean) } def self.write_names_file!(names, type, regenerate:) names_path = HOMEBREW_CACHE_API/"#{type}_names.txt" @@ -162,6 +187,20 @@ module Homebrew false end + sig { params(aliases: T::Hash[String, String], type: String, regenerate: T::Boolean).returns(T::Boolean) } + def self.write_aliases_file!(aliases, type, regenerate:) + aliases_path = HOMEBREW_CACHE_API/"#{type}_aliases.txt" + if !aliases_path.exist? || regenerate + aliases_text = aliases.map do |alias_name, real_name| + "#{alias_name}|#{real_name}" + end + aliases_path.write(aliases_text.join("\n")) + return true + end + + false + end + sig { params(json_data: T::Hash[String, T.untyped]) .returns([T::Boolean, T.any(String, T::Array[T.untyped], T::Hash[String, T.untyped])]) @@ -202,6 +241,69 @@ module Homebrew Tap.fetch(org, repo) end + + sig { returns(T::Array[String]) } + def self.formula_names + if Homebrew::EnvConfig.use_internal_api? + Homebrew::API::Internal.formula_arrays.keys + else + Homebrew::API::Formula.all_formulae.keys + end + end + + sig { returns(T::Hash[String, String]) } + def self.formula_aliases + if Homebrew::EnvConfig.use_internal_api? + Homebrew::API::Internal.formula_aliases + else + Homebrew::API::Formula.all_aliases + end + end + + sig { returns(T::Hash[String, String]) } + def self.formula_renames + if Homebrew::EnvConfig.use_internal_api? + Homebrew::API::Internal.formula_renames + else + Homebrew::API::Formula.all_renames + end + end + + sig { returns(T::Hash[String, String]) } + def self.formula_tap_migrations + if Homebrew::EnvConfig.use_internal_api? + Homebrew::API::Internal.formula_tap_migrations + else + Homebrew::API::Formula.tap_migrations + end + end + + sig { returns(T::Array[String]) } + def self.cask_tokens + if Homebrew::EnvConfig.use_internal_api? + Homebrew::API::Internal.cask_hashes.keys + else + Homebrew::API::Cask.all_casks.keys + end + end + + sig { returns(T::Hash[String, String]) } + def self.cask_renames + if Homebrew::EnvConfig.use_internal_api? + Homebrew::API::Internal.cask_renames + else + Homebrew::API::Cask.all_renames + end + end + + sig { returns(T::Hash[String, String]) } + def self.cask_tap_migrations + if Homebrew::EnvConfig.use_internal_api? + Homebrew::API::Internal.cask_tap_migrations + else + Homebrew::API::Cask.tap_migrations + end + end end sig { params(block: T.proc.returns(T.untyped)).returns(T.untyped) } diff --git a/Library/Homebrew/api/cask.rb b/Library/Homebrew/api/cask.rb index 699af9c549..52c8695dc1 100644 --- a/Library/Homebrew/api/cask.rb +++ b/Library/Homebrew/api/cask.rb @@ -14,18 +14,25 @@ module Homebrew DEFAULT_API_FILENAME = "cask.jws.json" - sig { returns(String) } - def self.api_filename - return DEFAULT_API_FILENAME unless ENV.fetch("HOMEBREW_USE_INTERNAL_API", false) - - "cask.#{SimulateSystem.current_tag}.jws.json" - end - private_class_method :cache - sig { params(token: String).returns(T::Hash[String, T.untyped]) } - def self.fetch(token) - Homebrew::API.fetch "cask/#{token}.json" + sig { params(name: String).returns(T::Hash[String, T.untyped]) } + def self.cask_json(name) + fetch_cask_json! name if !cache.key?("cask_json") || !cache.fetch("cask_json").key?(name) + + cache.fetch("cask_json").fetch(name) + end + + sig { params(name: String, download_queue: T.nilable(DownloadQueue)).void } + def self.fetch_cask_json!(name, download_queue: nil) + endpoint = "cask/#{name}.json" + json_cask, updated = Homebrew::API.fetch_json_api_file endpoint, download_queue: download_queue + return if download_queue + + json_cask = JSON.parse((HOMEBREW_CACHE_API/endpoint).read) unless updated + + cache["cask_json"] ||= {} + cache["cask_json"][name] = json_cask end sig { params(cask: ::Cask::Cask, download_queue: T.nilable(Homebrew::DownloadQueue)).returns(Homebrew::API::SourceDownload) } @@ -64,7 +71,7 @@ module Homebrew sig { returns(Pathname) } def self.cached_json_file_path - HOMEBREW_CACHE_API/api_filename + HOMEBREW_CACHE_API/DEFAULT_API_FILENAME end sig { @@ -72,7 +79,7 @@ module Homebrew .returns([T.any(T::Array[T.untyped], T::Hash[String, T.untyped]), T::Boolean]) } def self.fetch_api!(download_queue: nil, stale_seconds: Homebrew::EnvConfig.api_auto_update_secs.to_i) - Homebrew::API.fetch_json_api_file api_filename, stale_seconds:, download_queue: + Homebrew::API.fetch_json_api_file DEFAULT_API_FILENAME, stale_seconds:, download_queue: end sig { diff --git a/Library/Homebrew/api/formula.rb b/Library/Homebrew/api/formula.rb index e9b752a054..5f16192807 100644 --- a/Library/Homebrew/api/formula.rb +++ b/Library/Homebrew/api/formula.rb @@ -14,18 +14,25 @@ module Homebrew DEFAULT_API_FILENAME = "formula.jws.json" - sig { returns(String) } - def self.api_filename - return DEFAULT_API_FILENAME unless ENV.fetch("HOMEBREW_USE_INTERNAL_API", false) - - "internal/formula.#{SimulateSystem.current_tag}.jws.json" - end - private_class_method :cache sig { params(name: String).returns(T::Hash[String, T.untyped]) } - def self.fetch(name) - Homebrew::API.fetch "formula/#{name}.json" + def self.formula_json(name) + fetch_formula_json! name if !cache.key?("formula_json") || !cache.fetch("formula_json").key?(name) + + cache.fetch("formula_json").fetch(name) + end + + sig { params(name: String, download_queue: T.nilable(DownloadQueue)).void } + def self.fetch_formula_json!(name, download_queue: nil) + endpoint = "formula/#{name}.json" + json_formula, updated = Homebrew::API.fetch_json_api_file endpoint, download_queue: download_queue + return if download_queue + + json_formula = JSON.parse((HOMEBREW_CACHE_API/endpoint).read) unless updated + + cache["formula_json"] ||= {} + cache["formula_json"][name] = json_formula end sig { params(formula: ::Formula, download_queue: T.nilable(Homebrew::DownloadQueue)).returns(Homebrew::API::SourceDownload) } @@ -63,7 +70,7 @@ module Homebrew sig { returns(Pathname) } def self.cached_json_file_path - HOMEBREW_CACHE_API/api_filename + HOMEBREW_CACHE_API/DEFAULT_API_FILENAME end sig { @@ -71,7 +78,7 @@ module Homebrew .returns([T.any(T::Array[T.untyped], T::Hash[String, T.untyped]), T::Boolean]) } def self.fetch_api!(download_queue: nil, stale_seconds: Homebrew::EnvConfig.api_auto_update_secs.to_i) - Homebrew::API.fetch_json_api_file api_filename, stale_seconds:, download_queue: + Homebrew::API.fetch_json_api_file DEFAULT_API_FILENAME, stale_seconds:, download_queue: end sig { @@ -147,13 +154,8 @@ module Homebrew def self.write_names_and_aliases(regenerate: false) download_and_cache_data! unless cache.key?("formulae") - return unless Homebrew::API.write_names_file!(all_formulae.keys, "formula", regenerate:) - - (HOMEBREW_CACHE_API/"formula_aliases.txt").open("w") do |file| - all_aliases.each do |alias_name, real_name| - file.puts "#{alias_name}|#{real_name}" - end - end + Homebrew::API.write_names_file!(all_formulae.keys, "formula", regenerate:) + Homebrew::API.write_aliases_file!(all_aliases, "formula", regenerate:) end end end diff --git a/Library/Homebrew/api/internal.rb b/Library/Homebrew/api/internal.rb new file mode 100644 index 0000000000..c7b83e2193 --- /dev/null +++ b/Library/Homebrew/api/internal.rb @@ -0,0 +1,177 @@ +# typed: strict +# frozen_string_literal: true + +require "cachable" +require "api" +require "api/source_download" +require "download_queue" +require "formula_stub" + +module Homebrew + module API + # Helper functions for using the JSON internal API. + module Internal + extend Cachable + + private_class_method :cache + + sig { returns(String) } + def self.formula_endpoint + "internal/formula.#{SimulateSystem.current_tag}.jws.json" + end + + sig { returns(String) } + def self.cask_endpoint + "internal/cask.#{SimulateSystem.current_tag}.jws.json" + end + + sig { params(name: String).returns(Homebrew::FormulaStub) } + def self.formula_stub(name) + return cache["formula_stubs"][name] if cache.key?("formula_stubs") && cache["formula_stubs"].key?(name) + + stub_array = formula_arrays[name] + raise "No formula stub found for #{name}" unless stub_array + + stub = Homebrew::FormulaStub.new( + name: name, + pkg_version: PkgVersion.parse(stub_array[0]), + rebuild: stub_array[1], + sha256: stub_array[2], + ) + + cache["formula_stubs"] ||= {} + cache["formula_stubs"][name] = stub + + stub + end + + sig { + params(download_queue: T.nilable(Homebrew::DownloadQueue), stale_seconds: Integer) + .returns([T::Hash[String, T.untyped], T::Boolean]) + } + def self.fetch_formula_api!(download_queue: nil, stale_seconds: Homebrew::EnvConfig.api_auto_update_secs.to_i) + json_contents, updated = (Homebrew::API.fetch_json_api_file formula_endpoint, stale_seconds:, download_queue:) + [T.cast(json_contents, T::Hash[String, T.untyped]), updated] + end + + sig { + params(download_queue: T.nilable(Homebrew::DownloadQueue), stale_seconds: Integer) + .returns([T::Hash[String, T.untyped], T::Boolean]) + } + def self.fetch_cask_api!(download_queue: nil, stale_seconds: Homebrew::EnvConfig.api_auto_update_secs.to_i) + json_contents, updated = (Homebrew::API.fetch_json_api_file cask_endpoint, stale_seconds:, download_queue:) + [T.cast(json_contents, T::Hash[String, T.untyped]), updated] + end + + sig { returns(T::Boolean) } + def self.download_and_cache_formula_data! + json_contents, updated = fetch_formula_api! + cache["formula_stubs"] = {} + cache["formula_aliases"] = json_contents["aliases"] + cache["formula_renames"] = json_contents["renames"] + cache["formula_tap_migrations"] = json_contents["tap_migrations"] + cache["formula_arrays"] = json_contents["formulae"] + + updated + end + private_class_method :download_and_cache_formula_data! + + sig { returns(T::Boolean) } + def self.download_and_cache_cask_data! + json_contents, updated = fetch_cask_api! + cache["cask_stubs"] = {} + cache["cask_renames"] = json_contents["renames"] + cache["cask_tap_migrations"] = json_contents["tap_migrations"] + cache["cask_hashes"] = json_contents["casks"] + + updated + end + private_class_method :download_and_cache_cask_data! + + sig { params(regenerate: T::Boolean).void } + def self.write_formula_names_and_aliases(regenerate: false) + download_and_cache_formula_data! unless cache.key?("formula_arrays") + + Homebrew::API.write_names_file!(formula_arrays.keys, "formula", regenerate:) + Homebrew::API.write_aliases_file!(formula_aliases, "formula", regenerate:) + end + + sig { params(regenerate: T::Boolean).void } + def self.write_cask_names(regenerate: false) + download_and_cache_cask_data! unless cache.key?("cask_hashes") + + Homebrew::API.write_names_file!(cask_hashes.keys, "cask", regenerate:) + end + + sig { returns(T::Hash[String, [String, Integer, T.nilable(String)]]) } + def self.formula_arrays + unless cache.key?("formula_arrays") + updated = download_and_cache_formula_data! + write_formula_names_and_aliases(regenerate: updated) + end + + cache["formula_arrays"] + end + + sig { returns(T::Hash[String, String]) } + def self.formula_aliases + unless cache.key?("formula_aliases") + updated = download_and_cache_formula_data! + write_formula_names_and_aliases(regenerate: updated) + end + + cache["formula_aliases"] + end + + sig { returns(T::Hash[String, String]) } + def self.formula_renames + unless cache.key?("formula_renames") + updated = download_and_cache_formula_data! + write_formula_names_and_aliases(regenerate: updated) + end + + cache["formula_renames"] + end + + sig { returns(T::Hash[String, String]) } + def self.formula_tap_migrations + unless cache.key?("formula_tap_migrations") + updated = download_and_cache_formula_data! + write_formula_names_and_aliases(regenerate: updated) + end + + cache["formula_tap_migrations"] + end + + sig { returns(T::Hash[String, T::Hash[String, T.untyped]]) } + def self.cask_hashes + unless cache.key?("cask_hashes") + updated = download_and_cache_cask_data! + write_cask_names(regenerate: updated) + end + + cache["cask_hashes"] + end + + sig { returns(T::Hash[String, String]) } + def self.cask_renames + unless cache.key?("cask_renames") + updated = download_and_cache_cask_data! + write_cask_names(regenerate: updated) + end + + cache["cask_renames"] + end + + sig { returns(T::Hash[String, String]) } + def self.cask_tap_migrations + unless cache.key?("cask_tap_migrations") + updated = download_and_cache_cask_data! + write_cask_names(regenerate: updated) + end + + cache["cask_tap_migrations"] + end + end + end +end diff --git a/Library/Homebrew/bottle_specification.rb b/Library/Homebrew/bottle_specification.rb index eab4311ac2..83d81f62cc 100644 --- a/Library/Homebrew/bottle_specification.rb +++ b/Library/Homebrew/bottle_specification.rb @@ -4,18 +4,27 @@ class BottleSpecification RELOCATABLE_CELLARS = [:any, :any_skip_relocation].freeze + sig { returns(T.nilable(Tap)) } attr_accessor :tap - attr_reader :collector, :root_url_specs, :repository + + attr_reader :collector + + sig { returns(T::Hash[String, T.untyped]) } + attr_reader :root_url_specs + + sig { returns(String) } + attr_reader :repository sig { void } def initialize - @rebuild = 0 - @repository = Homebrew::DEFAULT_REPOSITORY - @collector = Utils::Bottles::Collector.new - @root_url_specs = {} + @rebuild = T.let(0, Integer) + @repository = T.let(Homebrew::DEFAULT_REPOSITORY, String) + @collector = T.let(Utils::Bottles::Collector.new, Utils::Bottles::Collector) + @root_url_specs = T.let({}, T::Hash[String, T.untyped]) + @root_url = T.let(nil, T.nilable(String)) end - sig { params(val: Integer).returns(T.nilable(Integer)) } + sig { params(val: Integer).returns(Integer) } def rebuild(val = T.unsafe(nil)) val.nil? ? @rebuild : @rebuild = val end diff --git a/Library/Homebrew/brew.rb b/Library/Homebrew/brew.rb index aced177b90..f38ef7ec7e 100644 --- a/Library/Homebrew/brew.rb +++ b/Library/Homebrew/brew.rb @@ -95,10 +95,7 @@ begin require "api/cask" download_queue = Homebrew::DownloadQueue.new stale_seconds = 86400 # 1 day - Homebrew::API::Formula.fetch_api!(download_queue:, stale_seconds:) - Homebrew::API::Formula.fetch_tap_migrations!(download_queue:, stale_seconds:) - Homebrew::API::Cask.fetch_api!(download_queue:, stale_seconds:) - Homebrew::API::Cask.fetch_tap_migrations!(download_queue:, stale_seconds:) + Homebrew::API.fetch_api_files!(download_queue:, stale_seconds:) begin download_queue.fetch ensure diff --git a/Library/Homebrew/brew.sh b/Library/Homebrew/brew.sh index 1f9ce9e61e..04b76013a1 100644 --- a/Library/Homebrew/brew.sh +++ b/Library/Homebrew/brew.sh @@ -678,8 +678,8 @@ else then message="Please update your system curl or set HOMEBREW_CURL_PATH to a newer version. Minimum required version: ${HOMEBREW_MINIMUM_CURL_VERSION} -Your curl version: ${curl_name_and_version##* } -Your curl executable: $(type -p "${HOMEBREW_CURL}")" + Your curl version: ${curl_name_and_version##* } + Your curl executable: $(type -p "${HOMEBREW_CURL}")" if [[ -z ${HOMEBREW_CURL_PATH} ]] then @@ -706,8 +706,8 @@ Your curl executable: $(type -p "${HOMEBREW_CURL}")" then message="Please update your system Git or set HOMEBREW_GIT_PATH to a newer version. Minimum required version: ${HOMEBREW_MINIMUM_GIT_VERSION} -Your Git version: ${major}.${minor}.${micro}.${build} -Your Git executable: $(unset git && type -p "${HOMEBREW_GIT}")" + Your Git version: ${major}.${minor}.${micro}.${build} + Your Git executable: $(unset git && type -p "${HOMEBREW_GIT}")" if [[ -z ${HOMEBREW_GIT_PATH} ]] then HOMEBREW_FORCE_BREWED_GIT="1" @@ -1067,6 +1067,9 @@ then fi unset SUDO +# Remove internal variables +unset HOMEBREW_INTERNAL_ALLOW_PACKAGES_FROM_PATHS + if [[ -n "${HOMEBREW_BASH_COMMAND}" ]] then # source rather than executing directly to ensure the entire file is read into diff --git a/Library/Homebrew/build.rb b/Library/Homebrew/build.rb index 7827a93609..0cfdd8d5e6 100644 --- a/Library/Homebrew/build.rb +++ b/Library/Homebrew/build.rb @@ -227,7 +227,10 @@ class Build end begin - ENV.delete("HOMEBREW_FORBID_PACKAGES_FROM_PATHS") + # Undocumented opt-out for internal use. + # We need to allow formulae from paths here due to how we pass them through. + ENV["HOMEBREW_INTERNAL_ALLOW_PACKAGES_FROM_PATHS"] = "1" + args = Homebrew::Cmd::InstallCmd.new.args Context.current = args.context @@ -268,7 +271,7 @@ rescue Exception => e # rubocop:disable Lint/RescueException error_hash["output"] = e.output end - error_pipe.puts error_hash.to_json - error_pipe.close + error_pipe&.puts error_hash.to_json + error_pipe&.close exit! 1 end diff --git a/Library/Homebrew/cask/artifact/abstract_artifact.rb b/Library/Homebrew/cask/artifact/abstract_artifact.rb index f9199256f6..d7373510f9 100644 --- a/Library/Homebrew/cask/artifact/abstract_artifact.rb +++ b/Library/Homebrew/cask/artifact/abstract_artifact.rb @@ -8,6 +8,7 @@ module Cask # Abstract superclass for all artifacts. class AbstractArtifact extend T::Helpers + abstract! include Comparable diff --git a/Library/Homebrew/cask/artifact/abstract_uninstall.rb b/Library/Homebrew/cask/artifact/abstract_uninstall.rb index 4773dc7982..7426e0f09d 100644 --- a/Library/Homebrew/cask/artifact/abstract_uninstall.rb +++ b/Library/Homebrew/cask/artifact/abstract_uninstall.rb @@ -389,7 +389,7 @@ module Cask end def uninstall_pkgutil(*pkgs, command: nil, **_) - ohai "Uninstalling packages with sudo; the password may be necessary:" + ohai "Uninstalling packages with `sudo` (which may request your password)..." pkgs.each do |regex| ::Cask::Pkg.all_matching(regex, command).each do |pkg| puts pkg.package_id diff --git a/Library/Homebrew/cask/artifact/pkg.rb b/Library/Homebrew/cask/artifact/pkg.rb index 7c4ce514a6..d3bef370e8 100644 --- a/Library/Homebrew/cask/artifact/pkg.rb +++ b/Library/Homebrew/cask/artifact/pkg.rb @@ -35,7 +35,7 @@ module Cask private def run_installer(command: nil, verbose: false, **_options) - ohai "Running installer for #{cask} with sudo; the password may be necessary." + ohai "Running installer for #{cask} with `sudo` (which may request your password)..." unless path.exist? pkg = path.relative_path_from(cask.staged_path) pkgs = Pathname.glob(cask.staged_path/"**"/"*.pkg").map { |path| path.relative_path_from(cask.staged_path) } diff --git a/Library/Homebrew/cask/artifact/symlinked.rb b/Library/Homebrew/cask/artifact/symlinked.rb index 3ed0f956b6..348198124a 100644 --- a/Library/Homebrew/cask/artifact/symlinked.rb +++ b/Library/Homebrew/cask/artifact/symlinked.rb @@ -56,6 +56,9 @@ module Cask (target.realpath == source.realpath || target.realpath.to_s.start_with?("#{cask.caskroom_path}/")) opoo "#{message}; overwriting." Utils.gain_permissions_remove(target, command:) + elsif (formula = conflicting_formula) + opoo "#{message} from formula #{formula}; skipping link." + return else raise CaskError, "#{message}." end @@ -69,11 +72,32 @@ module Cask return unless target.symlink? ohai "Unlinking #{self.class.english_name} '#{target}'" + + if (formula = conflicting_formula) + odebug "#{target} is from formula #{formula}; skipping unlink." + return + end + Utils.gain_permissions_remove(target, command:) end sig { params(command: T.class_of(SystemCommand)).void } def create_filesystem_link(command); end + + # Check if the target file is a symlink that originates from a formula + # with the same name as this cask, indicating a potential conflict + sig { returns(T.nilable(String)) } + def conflicting_formula + if target.symlink? && target.exist? && + (match = target.realpath.to_s.match(%r{^#{HOMEBREW_CELLAR}/(?[^/]+)/}o)) + match[:formula] + end + rescue => e + # If we can't determine the realpath or any other error occurs, + # don't treat it as a conflicting formula file + odebug "Error checking for conflicting formula file: #{e}" + nil + end end end end diff --git a/Library/Homebrew/cask/audit.rb b/Library/Homebrew/cask/audit.rb index bd9be728b4..7e3e3a4455 100644 --- a/Library/Homebrew/cask/audit.rb +++ b/Library/Homebrew/cask/audit.rb @@ -3,6 +3,8 @@ require "cask/denylist" require "cask/download" +require "cask/installer" +require "cask/quarantine" require "digest" require "livecheck/livecheck" require "source_location" @@ -498,20 +500,32 @@ module Cask return if url.nil? return if !cask.tap.official? && !signing? - return if cask.deprecated? && cask.deprecation_reason != :unsigned + return if cask.deprecated? && cask.deprecation_reason != :fails_gatekeeper_check + + unless Quarantine.available? + odebug "Quarantine support is not available, skipping signing audit" + return + end odebug "Auditing signing" + is_in_skiplist = cask.tap&.audit_exception(:signing_audit_skiplist, cask.token) + extract_artifacts do |artifacts, tmpdir| is_container = artifacts.any? { |a| a.is_a?(Artifact::App) || a.is_a?(Artifact::Pkg) } - artifacts.each do |artifact| - next if artifact.is_a?(Artifact::Binary) && is_container == true + any_signing_failure = artifacts.any? do |artifact| + next false if artifact.is_a?(Artifact::Binary) && is_container == true artifact_path = artifact.is_a?(Artifact::Pkg) ? artifact.path : artifact.source path = tmpdir/artifact_path.relative_path_from(cask.staged_path) + unless Quarantine.detect(path) + odebug "#{path} does not have quarantine attributes, skipping signing audit" + next false + end + result = case artifact when Artifact::Pkg system_command("spctl", args: ["--assess", "--type", "install", path], print_stderr: false) @@ -521,21 +535,17 @@ module Cask system_command("gktool", args: ["scan", path], print_stderr: false) when Artifact::Binary # Shell scripts cannot be signed, so we skip them - next if path.text_executable? + next false if path.text_executable? - system_command("codesign", args: ["--verify", "-R=notarized", "--check-notarization", path], - print_stderr: false) + system_command("codesign", args: ["--verify", "-R=notarized", "--check-notarization", path], + print_stderr: false) else add_error "Unknown artifact type: #{artifact.class}", location: url.location end - if result.success? && cask.deprecated? && cask.deprecation_reason == :unsigned - add_error "Cask is deprecated as unsigned but artifacts are signed!" - end - - next if cask.deprecated? && cask.deprecation_reason == :unsigned - - next if result.success? + next false if result.success? + next true if cask.deprecated? && cask.deprecation_reason == :fails_gatekeeper_check + next true if is_in_skiplist add_error <<~EOS, location: url.location Signature verification failed: @@ -543,7 +553,21 @@ module Cask macOS on ARM requires software to be signed. Please contact the upstream developer to let them know they should sign and notarize their software. EOS + + true end + + return if any_signing_failure + + add_error "Cask is in the signing audit skiplist, but does not need to be skipped!" if is_in_skiplist + + return unless cask.deprecated? + return if cask.deprecation_reason != :fails_gatekeeper_check + + add_error <<~EOS + Cask is deprecated because it failed Gatekeeper checks but all artifacts now pass! + Remove the deprecate/disable stanza or update the deprecate/disable reason. + EOS end end @@ -619,6 +643,11 @@ module Cask .extract_nestedly(to: @tmpdir, verbose: false) end + # Process rename operations after extraction + # Create a temporary installer to process renames in the audit directory + temp_installer = Installer.new(@cask) + temp_installer.process_rename_operations(target_dir: @tmpdir) + # Set the flag to indicate that extraction has occurred. @artifacts_extracted = T.let(true, T.nilable(TrueClass)) @@ -640,10 +669,20 @@ module Cask extract_artifacts do |artifacts, tmpdir| is_container = artifacts.any? { |a| a.is_a?(Artifact::App) || a.is_a?(Artifact::Pkg) } - artifacts.each do |artifact| - next if !artifact.is_a?(Artifact::App) && !artifact.is_a?(Artifact::Binary) - next if artifact.is_a?(Artifact::Binary) && is_container + mentions_rosetta = cask.caveats.include?("requires Rosetta 2") + requires_intel = cask.depends_on.arch&.any? { |arch| arch[:type] == :intel } + artifacts_to_test = artifacts.filter do |artifact| + next false if !artifact.is_a?(Artifact::App) && !artifact.is_a?(Artifact::Binary) + next false if artifact.is_a?(Artifact::Binary) && is_container + + true + end + + next if artifacts_to_test.blank? + + any_requires_rosetta = artifacts_to_test.any? do |artifact| + artifact = T.cast(artifact, T.any(Artifact::App, Artifact::Binary)) path = tmpdir/artifact.source.relative_path_from(cask.staged_path) result = case artifact @@ -665,7 +704,7 @@ module Cask end # binary stanza can contain shell scripts, so we just continue if lipo fails. - next unless result.success? + next false unless result.success? odebug "Architectures: #{result.merged_output}" @@ -675,17 +714,17 @@ module Cask next end - supports_arm = result.merged_output.include?("arm64") - mentions_rosetta = cask.caveats.include?("requires Rosetta 2") - requires_intel = cask.depends_on.arch&.any? { |arch| arch[:type] == :intel } + result.merged_output.exclude?("arm64") && result.merged_output.include?("x86_64") + end - if supports_arm && mentions_rosetta - add_error "Artifacts do not require Rosetta 2 but the caveats say otherwise!", - location: url.location - elsif !supports_arm && !mentions_rosetta && !requires_intel - add_error "Artifacts require Rosetta 2 but this is not indicated by the caveats!", + if any_requires_rosetta + if !mentions_rosetta && !requires_intel + add_error "At least one artifact requires Rosetta 2 but this is not indicated by the caveats!", location: url.location end + elsif mentions_rosetta + add_error "No artifacts require Rosetta 2 but the caveats say otherwise!", + location: url.location end end end @@ -896,6 +935,20 @@ module Cask add_error error, location: url.location if error end + sig { void } + def audit_forgejo_prerelease_version + return if (url = cask.url).nil? + + odebug "Auditing Forgejo prerelease" + user, repo = get_repo_data(%r{https?://codeberg\.org/([^/]+)/([^/]+)/?.*}) if online? + return if user.nil? || repo.nil? + + tag = SharedAudits.forgejo_tag_from_url(url.to_s) + tag ||= cask.version + error = SharedAudits.forgejo_release(user, repo, tag, cask:) + add_error error, location: url.location if error + end + sig { void } def audit_github_repository_archived # Deprecated/disabled casks may have an archived repository. @@ -928,6 +981,23 @@ module Cask add_error "GitLab repo is archived", location: url.location if metadata["archived"] end + sig { void } + def audit_forgejo_repository_archived + return if cask.deprecated? || cask.disabled? + return if (url = cask.url).nil? + + user, repo = get_repo_data(%r{https?://codeberg\.org/([^/]+)/([^/]+)/?.*}) if online? + return if user.nil? || repo.nil? + + metadata = SharedAudits.forgejo_repo_data(user, repo) + return if metadata.nil? + + return unless metadata["archived"] + + add_error "Forgejo repository is archived since #{metadata["archived_at"]}", + location: url.location + end + sig { void } def audit_github_repository return unless new_cask? @@ -970,6 +1040,20 @@ module Cask add_error error, location: url.location if error end + sig { void } + def audit_forgejo_repository + return unless new_cask? + return if (url = cask.url).nil? + + user, repo = get_repo_data(%r{https?://codeberg\.org/([^/]+)/([^/]+)/?.*}) + return if user.nil? || repo.nil? + + odebug "Auditing Forgejo repo" + + error = SharedAudits.forgejo(user, repo) + add_error error, location: url.location if error + end + sig { void } def audit_denylist return unless cask.tap diff --git a/Library/Homebrew/cask/cask.rb b/Library/Homebrew/cask/cask.rb index 6997ded4bb..bdae2457e1 100644 --- a/Library/Homebrew/cask/cask.rb +++ b/Library/Homebrew/cask/cask.rb @@ -60,13 +60,14 @@ module Cask source: T.nilable(String), tap: T.nilable(Tap), loaded_from_api: T::Boolean, + api_source: T.nilable(T::Hash[String, T.untyped]), config: T.nilable(Config), allow_reassignment: T::Boolean, loader: T.nilable(CaskLoader::ILoader), block: T.nilable(T.proc.bind(DSL).void), ).void } - def initialize(token, sourcefile_path: nil, source: nil, tap: nil, loaded_from_api: false, + def initialize(token, sourcefile_path: nil, source: nil, tap: nil, loaded_from_api: false, api_source: nil, config: nil, allow_reassignment: false, loader: nil, &block) @token = token @sourcefile_path = sourcefile_path @@ -74,6 +75,7 @@ module Cask @tap = tap @allow_reassignment = allow_reassignment @loaded_from_api = loaded_from_api + @api_source = api_source @loader = loader # Sorbet has trouble with bound procs assigned to instance variables: # https://github.com/sorbet/sorbet/issues/6843 @@ -91,6 +93,9 @@ module Cask sig { returns(T::Boolean) } def loaded_from_api? = @loaded_from_api + sig { returns(T.nilable(T::Hash[String, T.untyped])) } + attr_reader :api_source + # An old name for the cask. sig { returns(T::Array[String]) } def old_tokens @@ -407,8 +412,8 @@ module Cask private_constant :HASH_KEYS_TO_SKIP def to_hash_with_variations - if loaded_from_api? && !Homebrew::EnvConfig.no_install_from_api? - return api_to_local_hash(Homebrew::API::Cask.all_casks[token].dup) + if loaded_from_api? && (json_cask = api_source) && !Homebrew::EnvConfig.no_install_from_api? + return api_to_local_hash(json_cask.dup) end hash = to_h diff --git a/Library/Homebrew/cask/cask_loader.rb b/Library/Homebrew/cask/cask_loader.rb index d1903483aa..f1d6c9c46f 100644 --- a/Library/Homebrew/cask/cask_loader.rb +++ b/Library/Homebrew/cask/cask_loader.rb @@ -18,6 +18,7 @@ module Cask module ILoader extend T::Helpers + interface! sig { abstract.params(config: T.nilable(Config)).returns(Cask) } @@ -28,6 +29,7 @@ module Cask class AbstractContentLoader include ILoader extend T::Helpers + abstract! sig { returns(String) } @@ -306,8 +308,8 @@ module Cask return if Homebrew::EnvConfig.no_install_from_api? return unless ref.is_a?(String) return unless (token = ref[HOMEBREW_DEFAULT_TAP_CASK_REGEX, :token]) - if !Homebrew::API::Cask.all_casks.key?(token) && - !Homebrew::API::Cask.all_renames.key?(token) + if Homebrew::API.cask_tokens.exclude?(token) && + !Homebrew::API.cask_renames.key?(token) return end @@ -336,6 +338,7 @@ module Cask cask_options = { loaded_from_api: true, + api_source: json_cask, sourcefile_path: @sourcefile_path, source: JSON.pretty_generate(json_cask), config:, diff --git a/Library/Homebrew/cask/dsl.rb b/Library/Homebrew/cask/dsl.rb index 9b7767cc58..d0df974906 100644 --- a/Library/Homebrew/cask/dsl.rb +++ b/Library/Homebrew/cask/dsl.rb @@ -19,6 +19,7 @@ require "cask/dsl/container" require "cask/dsl/depends_on" require "cask/dsl/postflight" require "cask/dsl/preflight" +require "cask/dsl/rename" require "cask/dsl/uninstall_postflight" require "cask/dsl/uninstall_preflight" require "cask/dsl/version" @@ -81,6 +82,7 @@ module Cask :language, :name, :os, + :rename, :sha256, :staged_path, :url, @@ -162,6 +164,7 @@ module Cask @on_system_block_min_os = T.let(nil, T.nilable(MacOSVersion)) @os = T.let(nil, T.nilable(String)) @os_set_in_block = T.let(false, T::Boolean) + @rename = T.let([], T::Array[DSL::Rename]) @sha256 = T.let(nil, T.nilable(T.any(Checksum, Symbol))) @sha256_set_in_block = T.let(false, T::Boolean) @staged_path = T.let(nil, T.nilable(Pathname)) @@ -343,6 +346,28 @@ module Cask end end + # Renames files after extraction. + # + # This is useful when the downloaded file has unpredictable names + # that need to be normalized for proper artifact installation. + # + # ### Example + # + # ```ruby + # rename "RØDECaster App*.pkg", "RØDECaster App.pkg" + # ``` + # + # @api public + sig { + params(from: String, + to: String).returns(T::Array[DSL::Rename]) + } + def rename(from = T.unsafe(nil), to = T.unsafe(nil)) + return @rename if from.nil? + + @rename << DSL::Rename.new(T.must(from), T.must(to)) + end + # Sets the cask's version. # # ### Example @@ -600,6 +625,9 @@ module Cask raise ArgumentError, "more than one of replacement, replacement_formula and/or replacement_cask specified!" end + # odeprecate: remove this remapping when the :unsigned reason is removed + because = :fails_gatekeeper_check if because == :unsigned + if replacement odeprecated( "deprecate!(:replacement)", @@ -626,6 +654,9 @@ module Cask raise ArgumentError, "more than one of replacement, replacement_formula and/or replacement_cask specified!" end + # odeprecate: remove this remapping when the :unsigned reason is removed + because = :fails_gatekeeper_check if because == :unsigned + if replacement odeprecated( "disable!(:replacement)", diff --git a/Library/Homebrew/cask/dsl/rename.rb b/Library/Homebrew/cask/dsl/rename.rb new file mode 100644 index 0000000000..4873503097 --- /dev/null +++ b/Library/Homebrew/cask/dsl/rename.rb @@ -0,0 +1,52 @@ +# typed: strict +# frozen_string_literal: true + +module Cask + class DSL + # Class corresponding to the `rename` stanza. + class Rename + sig { returns(String) } + attr_reader :from, :to + + sig { params(from: String, to: String).void } + def initialize(from, to) + @from = from + @to = to + end + + sig { params(staged_path: Pathname).void } + def perform_rename(staged_path) + return unless staged_path.exist? + + # Find files matching the glob pattern + matching_files = if @from.include?("*") + staged_path.glob(@from) + else + [staged_path.join(@from)].select(&:exist?) + end + + return if matching_files.empty? + + # Rename the first matching file to the target path + source_file = matching_files.first + return if source_file.nil? + + target_file = staged_path.join(@to) + + # Ensure target directory exists + target_file.dirname.mkpath + + # Perform the rename + source_file.rename(target_file.to_s) if source_file.exist? + end + + sig { returns(T::Hash[Symbol, String]) } + def pairs + { from:, to: } + end + + sig { returns(String) } + def to_s = pairs.inspect + end + end +end diff --git a/Library/Homebrew/cask/info.rb b/Library/Homebrew/cask/info.rb index 9273ac05bb..174665fb08 100644 --- a/Library/Homebrew/cask/info.rb +++ b/Library/Homebrew/cask/info.rb @@ -36,6 +36,8 @@ module Cask def self.info(cask, args:) puts get_info(cask) + return unless cask.tap.core_cask_tap? + require "utils/analytics" ::Utils::Analytics.cask_output(cask, args:) end diff --git a/Library/Homebrew/cask/installer.rb b/Library/Homebrew/cask/installer.rb index 967971247c..90893a9f3f 100644 --- a/Library/Homebrew/cask/installer.rb +++ b/Library/Homebrew/cask/installer.rb @@ -125,6 +125,7 @@ module Cask Caskroom.ensure_caskroom_exists extract_primary_container + process_rename_operations save_caskfile rescue => e purge_versioned_files @@ -292,6 +293,19 @@ on_request: true) Quarantine.propagate(from: primary_container.path, to:) end + sig { params(target_dir: T.nilable(Pathname)).void } + def process_rename_operations(target_dir: nil) + return if @cask.rename.empty? + + working_dir = target_dir || @cask.staged_path + odebug "Processing rename operations in #{working_dir}" + + @cask.rename.each do |rename_operation| + odebug "Renaming #{rename_operation.from} to #{rename_operation.to}" + rename_operation.perform_rename(working_dir) + end + end + sig { params(predecessor: T.nilable(Cask)).void } def install_artifacts(predecessor: nil) already_installed_artifacts = [] diff --git a/Library/Homebrew/cask/quarantine.rb b/Library/Homebrew/cask/quarantine.rb index ea68bb239e..79da5cc280 100644 --- a/Library/Homebrew/cask/quarantine.rb +++ b/Library/Homebrew/cask/quarantine.rb @@ -40,11 +40,12 @@ module Cask end private_class_method :swift_target_args - sig { returns(Symbol) } + sig { returns([Symbol, T.nilable(String)]) } def self.check_quarantine_support odebug "Checking quarantine support" - if xattr.nil? || !system_command(xattr, args: ["-h"], print_stderr: false).success? + check_output = nil + status = if xattr.nil? || !system_command(xattr, args: ["-h"], print_stderr: false).success? odebug "There's no working version of `xattr` on this system." :xattr_broken elsif swift.nil? @@ -55,21 +56,41 @@ module Cask args: [*swift_target_args, QUARANTINE_SCRIPT], print_stderr: false) - case api_check.exit_status + exit_status = api_check.exit_status + check_output = api_check.merged_output.to_s.strip + error_output = api_check.stderr.to_s.strip + + case exit_status when 2 odebug "Quarantine is available." :quarantine_available + when 1 + # Swift script ran but failed (likely due to CLT issues) + odebug "Swift quarantine script failed: #{error_output}" + if error_output.include?("does not exist") || error_output.include?("No such file") + :swift_broken_clt + elsif error_output.include?("compiler") || error_output.include?("SDK") + :swift_compilation_failed + else + :swift_runtime_error + end + when 127 + # Command not found or execution failed + odebug "Swift execution failed with exit status 127" + :swift_not_executable else - odebug "Unknown support status" - :unknown + odebug "Swift returned unexpected exit status: #{exit_status}" + :swift_unexpected_error end end + [status, check_output] end + sig { returns(T::Boolean) } def self.available? - @status ||= check_quarantine_support + @quarantine_support ||= check_quarantine_support - @status == :quarantine_available + @quarantine_support[0] == :quarantine_available end def self.detect(file) diff --git a/Library/Homebrew/cask/staged.rb b/Library/Homebrew/cask/staged.rb index dbaa50a8f8..315e37a3ed 100644 --- a/Library/Homebrew/cask/staged.rb +++ b/Library/Homebrew/cask/staged.rb @@ -25,7 +25,7 @@ module Cask full_paths = remove_nonexistent(paths) return if full_paths.empty? - ohai "Changing ownership of paths required by #{@cask} with sudo; the password may be necessary." + ohai "Changing ownership of paths required by #{@cask} with `sudo` (which may request your password)..." @command.run!("/usr/sbin/chown", args: ["-R", "--", "#{user}:#{group}", *full_paths], sudo: true) end diff --git a/Library/Homebrew/cask/url.rb b/Library/Homebrew/cask/url.rb index 848da0752a..307f0455aa 100644 --- a/Library/Homebrew/cask/url.rb +++ b/Library/Homebrew/cask/url.rb @@ -40,6 +40,7 @@ module Cask attr_reader :tag, :branch, :revision, :only_path, :verified extend Forwardable + def_delegators :uri, :path, :scheme, :to_s # Creates a `url` stanza. diff --git a/Library/Homebrew/cleanup.rb b/Library/Homebrew/cleanup.rb index 7f879e044e..37ed04e13a 100644 --- a/Library/Homebrew/cleanup.rb +++ b/Library/Homebrew/cleanup.rb @@ -171,7 +171,7 @@ module Homebrew stable = formula.stable if resource_name == "patch" - patch_hashes = stable&.patches&.filter_map { _1.resource.version if _1.external? } + patch_hashes = stable&.patches&.filter_map { T.cast(_1, ExternalPatch).resource.version if _1.external? } return true unless patch_hashes&.include?(Checksum.new(version.to_s)) elsif resource_name && stable && (resource_version = stable.resources[resource_name]&.version) return true if resource_version != version diff --git a/Library/Homebrew/cli/named_args.rb b/Library/Homebrew/cli/named_args.rb index 1047b10265..4500547035 100644 --- a/Library/Homebrew/cli/named_args.rb +++ b/Library/Homebrew/cli/named_args.rb @@ -207,13 +207,13 @@ module Homebrew if formula_path.exist? || (!Homebrew::EnvConfig.no_install_from_api? && !CoreTap.instance.installed? && - Homebrew::API::Formula.all_formulae.key?(path.basename.to_s)) + Homebrew::API.formula_names.include?(path.basename.to_s)) paths << formula_path end if cask_path.exist? || (!Homebrew::EnvConfig.no_install_from_api? && !CoreCaskTap.instance.installed? && - Homebrew::API::Cask.all_casks.key?(path.basename.to_s)) + Homebrew::API.cask_tokens.include?(path.basename.to_s)) paths << cask_path end diff --git a/Library/Homebrew/cmd/deps.rb b/Library/Homebrew/cmd/deps.rb index fab4a5bbf6..1c1e6634b0 100644 --- a/Library/Homebrew/cmd/deps.rb +++ b/Library/Homebrew/cmd/deps.rb @@ -10,6 +10,7 @@ module Homebrew module Cmd class Deps < AbstractCommand include DependenciesHelpers + cmd_args do description <<~EOS Show dependencies for . When given multiple formula arguments, @@ -87,8 +88,8 @@ module Homebrew sig { override.void } def run - raise UsageError, "`brew deps --os=all` is not supported" if args.os == "all" - raise UsageError, "`brew deps --arch=all` is not supported" if args.arch == "all" + raise UsageError, "`brew deps --os=all` is not supported." if args.os == "all" + raise UsageError, "`brew deps --arch=all` is not supported." if args.arch == "all" os, arch = T.must(args.os_arch_combinations.first) eval_all = args.eval_all? diff --git a/Library/Homebrew/cmd/fetch.rb b/Library/Homebrew/cmd/fetch.rb index b75a59880e..fc94b4195f 100644 --- a/Library/Homebrew/cmd/fetch.rb +++ b/Library/Homebrew/cmd/fetch.rb @@ -11,6 +11,7 @@ module Homebrew module Cmd class FetchCmd < AbstractCommand include Fetch + FETCH_MAX_TRIES = 5 cmd_args do diff --git a/Library/Homebrew/cmd/gist-logs.rb b/Library/Homebrew/cmd/gist-logs.rb index 63628d4e36..fd20d3bde8 100644 --- a/Library/Homebrew/cmd/gist-logs.rb +++ b/Library/Homebrew/cmd/gist-logs.rb @@ -12,6 +12,7 @@ module Homebrew module Cmd class GistLogs < AbstractCommand include Install + cmd_args do description <<~EOS Upload logs for a failed build of to a new Gist. Presents an diff --git a/Library/Homebrew/cmd/info.rb b/Library/Homebrew/cmd/info.rb index 5040ebb361..f6703dab5a 100644 --- a/Library/Homebrew/cmd/info.rb +++ b/Library/Homebrew/cmd/info.rb @@ -159,9 +159,9 @@ module Homebrew case obj when Formula - Utils::Analytics.formula_output(obj, args:) + Utils::Analytics.formula_output(obj, args:) if obj.core_formula? when Cask::Cask - Utils::Analytics.cask_output(obj, args:) + Utils::Analytics.cask_output(obj, args:) if obj.tap.core_cask_tap? when FormulaOrCaskUnavailableError Utils::Analytics.output(filter: obj.name, args:) else @@ -380,6 +380,8 @@ module Homebrew ohai "Caveats", caveats_string end + return unless formula.core_formula? + Utils::Analytics.formula_output(formula, args:) end diff --git a/Library/Homebrew/cmd/install.rb b/Library/Homebrew/cmd/install.rb index 30ad5392db..25561ab179 100644 --- a/Library/Homebrew/cmd/install.rb +++ b/Library/Homebrew/cmd/install.rb @@ -181,7 +181,7 @@ module Homebrew # `build.rb`. Instead, `hide_from_man_page` and don't do anything with # this argument here. # This odisabled should stick around indefinitely. - odisabled "brew install --env", "`env :std` in specific formula files" + odisabled "`brew install --env`", "`env :std` in specific formula files" end args.named.each do |name| diff --git a/Library/Homebrew/cmd/services.rb b/Library/Homebrew/cmd/services.rb index 8dd131b4ce..21759424e1 100644 --- a/Library/Homebrew/cmd/services.rb +++ b/Library/Homebrew/cmd/services.rb @@ -25,27 +25,27 @@ module Homebrew If `sudo` is passed, operate on `/Library/LaunchDaemons` or `/usr/lib/systemd/system` (started at boot). Otherwise, operate on `~/Library/LaunchAgents` or `~/.config/systemd/user` (started at login). - [`sudo`] `brew services` [`list`] (`--json`) (`--debug`): + [`sudo`] `brew services` [`list`] [`--json`] [`--debug`]: List information about all managed services for the current user (or root). Provides more output from Homebrew and `launchctl`(1) or `systemctl`(1) if run with `--debug`. - [`sudo`] `brew services info` (|`--all`|`--json`): + [`sudo`] `brew services info` (|`--all`) [`--json`]: List all managed services for the current user (or root). - [`sudo`] `brew services run` (|`--all`|`--file=`): + [`sudo`] `brew services run` (|`--all`) [`--file=`]: Run the service without registering to launch at login (or boot). - [`sudo`] `brew services start` (|`--all`|`--file=`): + [`sudo`] `brew services start` (|`--all`) [`--file=`]: Start the service immediately and register it to launch at login (or boot). - [`sudo`] `brew services stop` (`--keep`) (`--no-wait`|`--max-wait=`) (|`--all`): + [`sudo`] `brew services stop` [`--keep`] [`--no-wait`|`--max-wait=`] (|`--all`): Stop the service immediately and unregister it from launching at login (or boot), unless `--keep` is specified. [`sudo`] `brew services kill` (|`--all`): Stop the service immediately but keep it registered to launch at login (or boot). - [`sudo`] `brew services restart` (|`--all`|`--file=`): + [`sudo`] `brew services restart` (|`--all`) [`--file=`]: Stop (if necessary) and start the service immediately and register it to launch at login (or boot). [`sudo`] `brew services cleanup`: @@ -58,15 +58,16 @@ module Homebrew flag "--max-wait=", description: "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." - switch "--all", - description: "Run on all services." - switch "--json", - description: "Output as JSON." switch "--no-wait", description: "Don't wait for `stop` to finish stopping the service." switch "--keep", description: "When stopped, don't unregister the service from launching at login (or boot)." + switch "--all", + description: "Run on all services." + switch "--json", + description: "Output as JSON." + conflicts "--all", "--file" conflicts "--max-wait=", "--no-wait" named_args %w[list info run start stop kill restart cleanup] @@ -112,7 +113,7 @@ module Homebrew ] if no_named_formula_commands.include?(subcommand) raise UsageError, "The `#{subcommand}` subcommand does not accept a formula argument!" if formulae.present? - raise UsageError, "The `#{subcommand}` subcommand does not accept the --all argument!" if args.all? + raise UsageError, "The `#{subcommand}` subcommand does not accept the `--all` argument!" if args.all? end if args.file @@ -122,22 +123,22 @@ module Homebrew *Homebrew::Services::Commands::Restart::TRIGGERS, ] if file_commands.exclude?(subcommand) - raise UsageError, "The `#{subcommand}` subcommand does not accept the --file= argument!" - elsif args.all? - raise UsageError, - "The `#{subcommand}` subcommand does not accept the --all and --file= arguments at the same time!" + raise UsageError, "The `#{subcommand}` subcommand does not accept the `--file=` argument!" end end unless Homebrew::Services::Commands::Stop::TRIGGERS.include?(subcommand) - raise UsageError, "The `#{subcommand}` subcommand does not accept the --keep argument!" if args.keep? - raise UsageError, "The `#{subcommand}` subcommand does not accept the --no-wait argument!" if args.no_wait? + raise UsageError, "The `#{subcommand}` subcommand does not accept the `--keep` argument!" if args.keep? + + if args.no_wait? + raise UsageError, "The `#{subcommand}` subcommand does not accept the `--no-wait` argument!" + end if args.max_wait - raise UsageError, "The `#{subcommand}` subcommand does not accept the --max-wait= argument!" + raise UsageError, "The `#{subcommand}` subcommand does not accept the `--max-wait=` argument!" end end - opoo "The --all argument overrides provided formula argument!" if formulae.present? && args.all? + opoo "The `--all` argument overrides provided formula argument!" if formulae.present? && args.all? targets = if args.all? if subcommand == "start" diff --git a/Library/Homebrew/cmd/update-report.rb b/Library/Homebrew/cmd/update-report.rb index 38c84d2e02..a7d9ce6b60 100644 --- a/Library/Homebrew/cmd/update-report.rb +++ b/Library/Homebrew/cmd/update-report.rb @@ -134,10 +134,7 @@ module Homebrew end # Check if we can parse the JSON and do any Ruby-side follow-up. - unless Homebrew::EnvConfig.no_install_from_api? - Homebrew::API::Formula.write_names_and_aliases - Homebrew::API::Cask.write_names - end + Homebrew::API.write_names_and_aliases unless Homebrew::EnvConfig.no_install_from_api? Homebrew.failed = true if ENV["HOMEBREW_UPDATE_FAILED"] return if Homebrew::EnvConfig.disable_load_formula? diff --git a/Library/Homebrew/cmd/upgrade.rb b/Library/Homebrew/cmd/upgrade.rb index 16480ce017..91e88eec44 100644 --- a/Library/Homebrew/cmd/upgrade.rb +++ b/Library/Homebrew/cmd/upgrade.rb @@ -126,7 +126,7 @@ module Homebrew sig { override.void } def run if args.build_from_source? && args.named.empty? - raise ArgumentError, "--build-from-source requires at least one formula" + raise ArgumentError, "`--build-from-source` requires at least one formula" end formulae, casks = args.named.to_resolved_formulae_to_casks diff --git a/Library/Homebrew/compilers.rb b/Library/Homebrew/compilers.rb index b4b70c99d2..a0d08ca9d6 100644 --- a/Library/Homebrew/compilers.rb +++ b/Library/Homebrew/compilers.rb @@ -40,7 +40,7 @@ class CompilerFailure # Non-Apple compilers are in the format fails_with compiler => version if spec.is_a?(Hash) compiler, major_version = spec.first - raise ArgumentError, "The hash `fails_with` syntax only supports GCC" if compiler != :gcc + raise ArgumentError, "The `fails_with` hash syntax only supports GCC" if compiler != :gcc type = compiler # so fails_with :gcc => '7' simply marks all 7 releases incompatible diff --git a/Library/Homebrew/completions/bash.erb b/Library/Homebrew/completions/bash.erb index 995658837a..709e53f7ba 100644 --- a/Library/Homebrew/completions/bash.erb +++ b/Library/Homebrew/completions/bash.erb @@ -3,7 +3,7 @@ # # - For changes to a command under `COMMANDS` or `DEVELOPER COMMANDS` sections): # - Find the source file in `Library/Homebrew/[dev-]cmd/.{rb,sh}`. -# - For `.rb` files, edit the `_args` method. +# - For `.rb` files, edit the `cmd_args` block. # - For `.sh` files, edit the top comment, being sure to use the line prefix # `#:` for the comments to be recognized as documentation. If in doubt, # compare with already documented commands. diff --git a/Library/Homebrew/completions/fish.erb b/Library/Homebrew/completions/fish.erb index 1ec614d909..b31ebf13eb 100644 --- a/Library/Homebrew/completions/fish.erb +++ b/Library/Homebrew/completions/fish.erb @@ -3,7 +3,7 @@ # # - For changes to a command under `COMMANDS` or `DEVELOPER COMMANDS` sections): # - Find the source file in `Library/Homebrew/[dev-]cmd/.{rb,sh}`. -# - For `.rb` files, edit the `_args` method. +# - For `.rb` files, edit the `cmd_args` block. # - For `.sh` files, edit the top comment, being sure to use the line prefix # `#:` for the comments to be recognized as documentation. If in doubt, # compare with already documented commands. diff --git a/Library/Homebrew/completions/zsh.erb b/Library/Homebrew/completions/zsh.erb index 025ab24ea6..dc27021446 100644 --- a/Library/Homebrew/completions/zsh.erb +++ b/Library/Homebrew/completions/zsh.erb @@ -3,7 +3,7 @@ # # - For changes to a command under `COMMANDS` or `DEVELOPER COMMANDS` sections): # - Find the source file in `Library/Homebrew/[dev-]cmd/.{rb,sh}`. -# - For `.rb` files, edit the `_args` method. +# - For `.rb` files, edit the `cmd_args` block. # - For `.sh` files, edit the top comment, being sure to use the line prefix # `#:` for the comments to be recognized as documentation. If in doubt, # compare with already documented commands. diff --git a/Library/Homebrew/data/spdx/spdx_exceptions.json b/Library/Homebrew/data/spdx/spdx_exceptions.json index 52245e6c86..db8d7dcdfe 100644 --- a/Library/Homebrew/data/spdx/spdx_exceptions.json +++ b/Library/Homebrew/data/spdx/spdx_exceptions.json @@ -1,11 +1,11 @@ { - "licenseListVersion": "5dbff5c", + "licenseListVersion": "3.27.0", "exceptions": [ { "reference": "https://spdx.org/licenses/389-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/389-exception.json", - "referenceNumber": 33, + "referenceNumber": 36, "name": "389 Directory Server Exception", "licenseExceptionId": "389-exception", "seeAlso": [ @@ -17,7 +17,7 @@ "reference": "https://spdx.org/licenses/Asterisk-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Asterisk-exception.json", - "referenceNumber": 52, + "referenceNumber": 16, "name": "Asterisk exception", "licenseExceptionId": "Asterisk-exception", "seeAlso": [ @@ -29,7 +29,7 @@ "reference": "https://spdx.org/licenses/Asterisk-linking-protocols-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Asterisk-linking-protocols-exception.json", - "referenceNumber": 75, + "referenceNumber": 22, "name": "Asterisk linking protocols exception", "licenseExceptionId": "Asterisk-linking-protocols-exception", "seeAlso": [ @@ -40,7 +40,7 @@ "reference": "https://spdx.org/licenses/Autoconf-exception-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Autoconf-exception-2.0.json", - "referenceNumber": 60, + "referenceNumber": 2, "name": "Autoconf exception 2.0", "licenseExceptionId": "Autoconf-exception-2.0", "seeAlso": [ @@ -52,7 +52,7 @@ "reference": "https://spdx.org/licenses/Autoconf-exception-3.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Autoconf-exception-3.0.json", - "referenceNumber": 1, + "referenceNumber": 51, "name": "Autoconf exception 3.0", "licenseExceptionId": "Autoconf-exception-3.0", "seeAlso": [ @@ -63,7 +63,7 @@ "reference": "https://spdx.org/licenses/Autoconf-exception-generic.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Autoconf-exception-generic.json", - "referenceNumber": 59, + "referenceNumber": 73, "name": "Autoconf generic exception", "licenseExceptionId": "Autoconf-exception-generic", "seeAlso": [ @@ -77,7 +77,7 @@ "reference": "https://spdx.org/licenses/Autoconf-exception-generic-3.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Autoconf-exception-generic-3.0.json", - "referenceNumber": 48, + "referenceNumber": 40, "name": "Autoconf generic exception for GPL-3.0", "licenseExceptionId": "Autoconf-exception-generic-3.0", "seeAlso": [ @@ -88,7 +88,7 @@ "reference": "https://spdx.org/licenses/Autoconf-exception-macro.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Autoconf-exception-macro.json", - "referenceNumber": 15, + "referenceNumber": 63, "name": "Autoconf macro exception", "licenseExceptionId": "Autoconf-exception-macro", "seeAlso": [ @@ -101,7 +101,7 @@ "reference": "https://spdx.org/licenses/Bison-exception-1.24.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Bison-exception-1.24.json", - "referenceNumber": 69, + "referenceNumber": 56, "name": "Bison exception 1.24", "licenseExceptionId": "Bison-exception-1.24", "seeAlso": [ @@ -112,7 +112,7 @@ "reference": "https://spdx.org/licenses/Bison-exception-2.2.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Bison-exception-2.2.json", - "referenceNumber": 19, + "referenceNumber": 28, "name": "Bison exception 2.2", "licenseExceptionId": "Bison-exception-2.2", "seeAlso": [ @@ -123,7 +123,7 @@ "reference": "https://spdx.org/licenses/Bootloader-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Bootloader-exception.json", - "referenceNumber": 68, + "referenceNumber": 65, "name": "Bootloader Distribution Exception", "licenseExceptionId": "Bootloader-exception", "seeAlso": [ @@ -134,7 +134,7 @@ "reference": "https://spdx.org/licenses/CGAL-linking-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CGAL-linking-exception.json", - "referenceNumber": 34, + "referenceNumber": 74, "name": "CGAL Linking Exception", "licenseExceptionId": "CGAL-linking-exception", "seeAlso": [ @@ -146,7 +146,7 @@ "reference": "https://spdx.org/licenses/Classpath-exception-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Classpath-exception-2.0.json", - "referenceNumber": 66, + "referenceNumber": 67, "name": "Classpath exception 2.0", "licenseExceptionId": "Classpath-exception-2.0", "seeAlso": [ @@ -158,7 +158,7 @@ "reference": "https://spdx.org/licenses/CLISP-exception-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CLISP-exception-2.0.json", - "referenceNumber": 4, + "referenceNumber": 10, "name": "CLISP exception 2.0", "licenseExceptionId": "CLISP-exception-2.0", "seeAlso": [ @@ -169,7 +169,7 @@ "reference": "https://spdx.org/licenses/cryptsetup-OpenSSL-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/cryptsetup-OpenSSL-exception.json", - "referenceNumber": 55, + "referenceNumber": 46, "name": "cryptsetup OpenSSL exception", "licenseExceptionId": "cryptsetup-OpenSSL-exception", "seeAlso": [ @@ -185,7 +185,7 @@ "reference": "https://spdx.org/licenses/Digia-Qt-LGPL-exception-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Digia-Qt-LGPL-exception-1.1.json", - "referenceNumber": 2, + "referenceNumber": 48, "name": "Digia Qt LGPL Exception version 1.1", "licenseExceptionId": "Digia-Qt-LGPL-exception-1.1", "seeAlso": [ @@ -196,7 +196,7 @@ "reference": "https://spdx.org/licenses/DigiRule-FOSS-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/DigiRule-FOSS-exception.json", - "referenceNumber": 25, + "referenceNumber": 53, "name": "DigiRule FOSS License Exception", "licenseExceptionId": "DigiRule-FOSS-exception", "seeAlso": [ @@ -207,7 +207,7 @@ "reference": "https://spdx.org/licenses/eCos-exception-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/eCos-exception-2.0.json", - "referenceNumber": 31, + "referenceNumber": 61, "name": "eCos exception 2.0", "licenseExceptionId": "eCos-exception-2.0", "seeAlso": [ @@ -218,7 +218,7 @@ "reference": "https://spdx.org/licenses/erlang-otp-linking-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/erlang-otp-linking-exception.json", - "referenceNumber": 78, + "referenceNumber": 13, "name": "Erlang/OTP Linking Exception", "licenseExceptionId": "erlang-otp-linking-exception", "seeAlso": [ @@ -231,7 +231,7 @@ "reference": "https://spdx.org/licenses/Fawkes-Runtime-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Fawkes-Runtime-exception.json", - "referenceNumber": 47, + "referenceNumber": 21, "name": "Fawkes Runtime Exception", "licenseExceptionId": "Fawkes-Runtime-exception", "seeAlso": [ @@ -242,7 +242,7 @@ "reference": "https://spdx.org/licenses/FLTK-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/FLTK-exception.json", - "referenceNumber": 3, + "referenceNumber": 66, "name": "FLTK exception", "licenseExceptionId": "FLTK-exception", "seeAlso": [ @@ -253,7 +253,7 @@ "reference": "https://spdx.org/licenses/fmt-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/fmt-exception.json", - "referenceNumber": 16, + "referenceNumber": 77, "name": "fmt exception", "licenseExceptionId": "fmt-exception", "seeAlso": [ @@ -265,7 +265,7 @@ "reference": "https://spdx.org/licenses/Font-exception-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Font-exception-2.0.json", - "referenceNumber": 32, + "referenceNumber": 35, "name": "Font exception 2.0", "licenseExceptionId": "Font-exception-2.0", "seeAlso": [ @@ -276,7 +276,7 @@ "reference": "https://spdx.org/licenses/freertos-exception-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/freertos-exception-2.0.json", - "referenceNumber": 44, + "referenceNumber": 23, "name": "FreeRTOS Exception 2.0", "licenseExceptionId": "freertos-exception-2.0", "seeAlso": [ @@ -287,7 +287,7 @@ "reference": "https://spdx.org/licenses/GCC-exception-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/GCC-exception-2.0.json", - "referenceNumber": 6, + "referenceNumber": 14, "name": "GCC Runtime Library exception 2.0", "licenseExceptionId": "GCC-exception-2.0", "seeAlso": [ @@ -299,7 +299,7 @@ "reference": "https://spdx.org/licenses/GCC-exception-2.0-note.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/GCC-exception-2.0-note.json", - "referenceNumber": 11, + "referenceNumber": 20, "name": "GCC Runtime Library exception 2.0 - note variant", "licenseExceptionId": "GCC-exception-2.0-note", "seeAlso": [ @@ -310,7 +310,7 @@ "reference": "https://spdx.org/licenses/GCC-exception-3.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/GCC-exception-3.1.json", - "referenceNumber": 77, + "referenceNumber": 25, "name": "GCC Runtime Library exception 3.1", "licenseExceptionId": "GCC-exception-3.1", "seeAlso": [ @@ -321,7 +321,7 @@ "reference": "https://spdx.org/licenses/Gmsh-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Gmsh-exception.json", - "referenceNumber": 35, + "referenceNumber": 26, "name": "Gmsh exception", "licenseExceptionId": "Gmsh-exception", "seeAlso": [ @@ -332,7 +332,7 @@ "reference": "https://spdx.org/licenses/GNAT-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/GNAT-exception.json", - "referenceNumber": 18, + "referenceNumber": 69, "name": "GNAT exception", "licenseExceptionId": "GNAT-exception", "seeAlso": [ @@ -343,7 +343,7 @@ "reference": "https://spdx.org/licenses/GNOME-examples-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/GNOME-examples-exception.json", - "referenceNumber": 49, + "referenceNumber": 76, "name": "GNOME examples exception", "licenseExceptionId": "GNOME-examples-exception", "seeAlso": [ @@ -355,19 +355,18 @@ "reference": "https://spdx.org/licenses/GNU-compiler-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/GNU-compiler-exception.json", - "referenceNumber": 41, + "referenceNumber": 58, "name": "GNU Compiler Exception", "licenseExceptionId": "GNU-compiler-exception", "seeAlso": [ - "https://sourceware.org/git?p\u003dbinutils-gdb.git;a\u003dblob;f\u003dlibiberty/unlink-if-ordinary.c;h\u003de49f2f2f67bfdb10d6b2bd579b0e01cad0fd708e;hb\u003dHEAD#l19", - "https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/powerpc/lib/crtsavres.S?h\u003dv6.16-rc6#n34" + "https://sourceware.org/git?p\u003dbinutils-gdb.git;a\u003dblob;f\u003dlibiberty/unlink-if-ordinary.c;h\u003de49f2f2f67bfdb10d6b2bd579b0e01cad0fd708e;hb\u003dHEAD#l19" ] }, { "reference": "https://spdx.org/licenses/gnu-javamail-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/gnu-javamail-exception.json", - "referenceNumber": 72, + "referenceNumber": 64, "name": "GNU JavaMail exception", "licenseExceptionId": "gnu-javamail-exception", "seeAlso": [ @@ -378,7 +377,7 @@ "reference": "https://spdx.org/licenses/GPL-3.0-389-ds-base-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/GPL-3.0-389-ds-base-exception.json", - "referenceNumber": 67, + "referenceNumber": 18, "name": "GPL-3.0 389 DS Base Exception", "licenseExceptionId": "GPL-3.0-389-ds-base-exception", "seeAlso": [] @@ -387,7 +386,7 @@ "reference": "https://spdx.org/licenses/GPL-3.0-interface-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/GPL-3.0-interface-exception.json", - "referenceNumber": 76, + "referenceNumber": 78, "name": "GPL-3.0 Interface Exception", "licenseExceptionId": "GPL-3.0-interface-exception", "seeAlso": [ @@ -398,7 +397,7 @@ "reference": "https://spdx.org/licenses/GPL-3.0-linking-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/GPL-3.0-linking-exception.json", - "referenceNumber": 51, + "referenceNumber": 68, "name": "GPL-3.0 Linking Exception", "licenseExceptionId": "GPL-3.0-linking-exception", "seeAlso": [ @@ -409,7 +408,7 @@ "reference": "https://spdx.org/licenses/GPL-3.0-linking-source-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/GPL-3.0-linking-source-exception.json", - "referenceNumber": 50, + "referenceNumber": 62, "name": "GPL-3.0 Linking Exception (with Corresponding Source)", "licenseExceptionId": "GPL-3.0-linking-source-exception", "seeAlso": [ @@ -421,7 +420,7 @@ "reference": "https://spdx.org/licenses/GPL-CC-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/GPL-CC-1.0.json", - "referenceNumber": 54, + "referenceNumber": 33, "name": "GPL Cooperation Commitment 1.0", "licenseExceptionId": "GPL-CC-1.0", "seeAlso": [ @@ -433,7 +432,7 @@ "reference": "https://spdx.org/licenses/GStreamer-exception-2005.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/GStreamer-exception-2005.json", - "referenceNumber": 7, + "referenceNumber": 4, "name": "GStreamer Exception (2005)", "licenseExceptionId": "GStreamer-exception-2005", "seeAlso": [ @@ -444,7 +443,7 @@ "reference": "https://spdx.org/licenses/GStreamer-exception-2008.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/GStreamer-exception-2008.json", - "referenceNumber": 56, + "referenceNumber": 41, "name": "GStreamer Exception (2008)", "licenseExceptionId": "GStreamer-exception-2008", "seeAlso": [ @@ -455,7 +454,7 @@ "reference": "https://spdx.org/licenses/harbour-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/harbour-exception.json", - "referenceNumber": 63, + "referenceNumber": 59, "name": "harbour exception", "licenseExceptionId": "harbour-exception", "seeAlso": [ @@ -466,7 +465,7 @@ "reference": "https://spdx.org/licenses/i2p-gpl-java-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/i2p-gpl-java-exception.json", - "referenceNumber": 36, + "referenceNumber": 9, "name": "i2p GPL+Java Exception", "licenseExceptionId": "i2p-gpl-java-exception", "seeAlso": [ @@ -477,7 +476,7 @@ "reference": "https://spdx.org/licenses/Independent-modules-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Independent-modules-exception.json", - "referenceNumber": 13, + "referenceNumber": 45, "name": "Independent Module Linking exception", "licenseExceptionId": "Independent-modules-exception", "seeAlso": [ @@ -488,7 +487,7 @@ "reference": "https://spdx.org/licenses/KiCad-libraries-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/KiCad-libraries-exception.json", - "referenceNumber": 23, + "referenceNumber": 44, "name": "KiCad Libraries Exception", "licenseExceptionId": "KiCad-libraries-exception", "seeAlso": [ @@ -499,7 +498,7 @@ "reference": "https://spdx.org/licenses/LGPL-3.0-linking-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/LGPL-3.0-linking-exception.json", - "referenceNumber": 42, + "referenceNumber": 32, "name": "LGPL-3.0 Linking Exception", "licenseExceptionId": "LGPL-3.0-linking-exception", "seeAlso": [ @@ -512,7 +511,7 @@ "reference": "https://spdx.org/licenses/libpri-OpenH323-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/libpri-OpenH323-exception.json", - "referenceNumber": 70, + "referenceNumber": 19, "name": "libpri OpenH323 exception", "licenseExceptionId": "libpri-OpenH323-exception", "seeAlso": [ @@ -523,7 +522,7 @@ "reference": "https://spdx.org/licenses/Libtool-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Libtool-exception.json", - "referenceNumber": 22, + "referenceNumber": 71, "name": "Libtool Exception", "licenseExceptionId": "Libtool-exception", "seeAlso": [ @@ -535,7 +534,7 @@ "reference": "https://spdx.org/licenses/Linux-syscall-note.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Linux-syscall-note.json", - "referenceNumber": 9, + "referenceNumber": 37, "name": "Linux Syscall Note", "licenseExceptionId": "Linux-syscall-note", "seeAlso": [ @@ -546,7 +545,7 @@ "reference": "https://spdx.org/licenses/LLGPL.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/LLGPL.json", - "referenceNumber": 14, + "referenceNumber": 24, "name": "LLGPL Preamble", "licenseExceptionId": "LLGPL", "seeAlso": [ @@ -557,7 +556,7 @@ "reference": "https://spdx.org/licenses/LLVM-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/LLVM-exception.json", - "referenceNumber": 28, + "referenceNumber": 72, "name": "LLVM Exception", "licenseExceptionId": "LLVM-exception", "seeAlso": [ @@ -568,7 +567,7 @@ "reference": "https://spdx.org/licenses/LZMA-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/LZMA-exception.json", - "referenceNumber": 45, + "referenceNumber": 30, "name": "LZMA exception", "licenseExceptionId": "LZMA-exception", "seeAlso": [ @@ -579,7 +578,7 @@ "reference": "https://spdx.org/licenses/mif-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/mif-exception.json", - "referenceNumber": 65, + "referenceNumber": 29, "name": "Macros and Inline Functions Exception", "licenseExceptionId": "mif-exception", "seeAlso": [ @@ -592,7 +591,7 @@ "reference": "https://spdx.org/licenses/mxml-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/mxml-exception.json", - "referenceNumber": 71, + "referenceNumber": 38, "name": "mxml Exception", "licenseExceptionId": "mxml-exception", "seeAlso": [ @@ -604,7 +603,7 @@ "reference": "https://spdx.org/licenses/Nokia-Qt-exception-1.1.html", "isDeprecatedLicenseId": true, "detailsUrl": "https://spdx.org/licenses/Nokia-Qt-exception-1.1.json", - "referenceNumber": 64, + "referenceNumber": 47, "name": "Nokia Qt LGPL exception 1.1", "licenseExceptionId": "Nokia-Qt-exception-1.1", "seeAlso": [ @@ -615,7 +614,7 @@ "reference": "https://spdx.org/licenses/OCaml-LGPL-linking-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OCaml-LGPL-linking-exception.json", - "referenceNumber": 61, + "referenceNumber": 42, "name": "OCaml LGPL Linking Exception", "licenseExceptionId": "OCaml-LGPL-linking-exception", "seeAlso": [ @@ -626,7 +625,7 @@ "reference": "https://spdx.org/licenses/OCCT-exception-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OCCT-exception-1.0.json", - "referenceNumber": 21, + "referenceNumber": 17, "name": "Open CASCADE Exception 1.0", "licenseExceptionId": "OCCT-exception-1.0", "seeAlso": [ @@ -637,7 +636,7 @@ "reference": "https://spdx.org/licenses/OpenJDK-assembly-exception-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OpenJDK-assembly-exception-1.0.json", - "referenceNumber": 40, + "referenceNumber": 11, "name": "OpenJDK Assembly exception 1.0", "licenseExceptionId": "OpenJDK-assembly-exception-1.0", "seeAlso": [ @@ -648,7 +647,7 @@ "reference": "https://spdx.org/licenses/openvpn-openssl-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/openvpn-openssl-exception.json", - "referenceNumber": 53, + "referenceNumber": 3, "name": "OpenVPN OpenSSL Exception", "licenseExceptionId": "openvpn-openssl-exception", "seeAlso": [ @@ -660,7 +659,7 @@ "reference": "https://spdx.org/licenses/PCRE2-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/PCRE2-exception.json", - "referenceNumber": 62, + "referenceNumber": 12, "name": "PCRE2 exception", "licenseExceptionId": "PCRE2-exception", "seeAlso": [ @@ -671,7 +670,7 @@ "reference": "https://spdx.org/licenses/polyparse-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/polyparse-exception.json", - "referenceNumber": 27, + "referenceNumber": 54, "name": "Polyparse Exception", "licenseExceptionId": "polyparse-exception", "seeAlso": [ @@ -682,7 +681,7 @@ "reference": "https://spdx.org/licenses/PS-or-PDF-font-exception-20170817.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/PS-or-PDF-font-exception-20170817.json", - "referenceNumber": 74, + "referenceNumber": 43, "name": "PS/PDF font exception (2017-08-17)", "licenseExceptionId": "PS-or-PDF-font-exception-20170817", "seeAlso": [ @@ -693,7 +692,7 @@ "reference": "https://spdx.org/licenses/QPL-1.0-INRIA-2004-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/QPL-1.0-INRIA-2004-exception.json", - "referenceNumber": 24, + "referenceNumber": 50, "name": "INRIA QPL 1.0 2004 variant exception", "licenseExceptionId": "QPL-1.0-INRIA-2004-exception", "seeAlso": [ @@ -705,7 +704,7 @@ "reference": "https://spdx.org/licenses/Qt-GPL-exception-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Qt-GPL-exception-1.0.json", - "referenceNumber": 20, + "referenceNumber": 34, "name": "Qt GPL exception 1.0", "licenseExceptionId": "Qt-GPL-exception-1.0", "seeAlso": [ @@ -716,7 +715,7 @@ "reference": "https://spdx.org/licenses/Qt-LGPL-exception-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Qt-LGPL-exception-1.1.json", - "referenceNumber": 29, + "referenceNumber": 39, "name": "Qt LGPL exception 1.1", "licenseExceptionId": "Qt-LGPL-exception-1.1", "seeAlso": [ @@ -727,7 +726,7 @@ "reference": "https://spdx.org/licenses/Qwt-exception-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Qwt-exception-1.0.json", - "referenceNumber": 10, + "referenceNumber": 79, "name": "Qwt exception 1.0", "licenseExceptionId": "Qwt-exception-1.0", "seeAlso": [ @@ -738,7 +737,7 @@ "reference": "https://spdx.org/licenses/romic-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/romic-exception.json", - "referenceNumber": 79, + "referenceNumber": 6, "name": "Romic Exception", "licenseExceptionId": "romic-exception", "seeAlso": [ @@ -754,7 +753,7 @@ "reference": "https://spdx.org/licenses/RRDtool-FLOSS-exception-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/RRDtool-FLOSS-exception-2.0.json", - "referenceNumber": 57, + "referenceNumber": 7, "name": "RRDtool FLOSS exception 2.0", "licenseExceptionId": "RRDtool-FLOSS-exception-2.0", "seeAlso": [ @@ -766,7 +765,7 @@ "reference": "https://spdx.org/licenses/SANE-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/SANE-exception.json", - "referenceNumber": 8, + "referenceNumber": 27, "name": "SANE Exception", "licenseExceptionId": "SANE-exception", "seeAlso": [ @@ -779,7 +778,7 @@ "reference": "https://spdx.org/licenses/SHL-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/SHL-2.0.json", - "referenceNumber": 17, + "referenceNumber": 5, "name": "Solderpad Hardware License v2.0", "licenseExceptionId": "SHL-2.0", "seeAlso": [ @@ -790,7 +789,7 @@ "reference": "https://spdx.org/licenses/SHL-2.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/SHL-2.1.json", - "referenceNumber": 26, + "referenceNumber": 1, "name": "Solderpad Hardware License v2.1", "licenseExceptionId": "SHL-2.1", "seeAlso": [ @@ -801,7 +800,7 @@ "reference": "https://spdx.org/licenses/stunnel-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/stunnel-exception.json", - "referenceNumber": 43, + "referenceNumber": 49, "name": "stunnel Exception", "licenseExceptionId": "stunnel-exception", "seeAlso": [ @@ -812,7 +811,7 @@ "reference": "https://spdx.org/licenses/SWI-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/SWI-exception.json", - "referenceNumber": 73, + "referenceNumber": 15, "name": "SWI exception", "licenseExceptionId": "SWI-exception", "seeAlso": [ @@ -823,7 +822,7 @@ "reference": "https://spdx.org/licenses/Swift-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Swift-exception.json", - "referenceNumber": 46, + "referenceNumber": 52, "name": "Swift Exception", "licenseExceptionId": "Swift-exception", "seeAlso": [ @@ -835,7 +834,7 @@ "reference": "https://spdx.org/licenses/Texinfo-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Texinfo-exception.json", - "referenceNumber": 30, + "referenceNumber": 60, "name": "Texinfo exception", "licenseExceptionId": "Texinfo-exception", "seeAlso": [ @@ -846,7 +845,7 @@ "reference": "https://spdx.org/licenses/u-boot-exception-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/u-boot-exception-2.0.json", - "referenceNumber": 5, + "referenceNumber": 8, "name": "U-Boot exception 2.0", "licenseExceptionId": "u-boot-exception-2.0", "seeAlso": [ @@ -857,7 +856,7 @@ "reference": "https://spdx.org/licenses/UBDL-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/UBDL-exception.json", - "referenceNumber": 38, + "referenceNumber": 75, "name": "Unmodified Binary Distribution exception", "licenseExceptionId": "UBDL-exception", "seeAlso": [ @@ -868,7 +867,7 @@ "reference": "https://spdx.org/licenses/Universal-FOSS-exception-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Universal-FOSS-exception-1.0.json", - "referenceNumber": 58, + "referenceNumber": 70, "name": "Universal FOSS Exception, Version 1.0", "licenseExceptionId": "Universal-FOSS-exception-1.0", "seeAlso": [ @@ -879,7 +878,7 @@ "reference": "https://spdx.org/licenses/vsftpd-openssl-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/vsftpd-openssl-exception.json", - "referenceNumber": 39, + "referenceNumber": 55, "name": "vsftpd OpenSSL exception", "licenseExceptionId": "vsftpd-openssl-exception", "seeAlso": [ @@ -892,7 +891,7 @@ "reference": "https://spdx.org/licenses/WxWindows-exception-3.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/WxWindows-exception-3.1.json", - "referenceNumber": 12, + "referenceNumber": 31, "name": "WxWindows Library Exception 3.1", "licenseExceptionId": "WxWindows-exception-3.1", "seeAlso": [ @@ -903,7 +902,7 @@ "reference": "https://spdx.org/licenses/x11vnc-openssl-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/x11vnc-openssl-exception.json", - "referenceNumber": 37, + "referenceNumber": 57, "name": "x11vnc OpenSSL Exception", "licenseExceptionId": "x11vnc-openssl-exception", "seeAlso": [ @@ -911,5 +910,5 @@ ] } ], - "releaseDate": "2025-07-29T00:00:00Z" + "releaseDate": "2025-07-01T00:00:00Z" } \ No newline at end of file diff --git a/Library/Homebrew/data/spdx/spdx_licenses.json b/Library/Homebrew/data/spdx/spdx_licenses.json index 4f98c7867a..8970ea00c7 100644 --- a/Library/Homebrew/data/spdx/spdx_licenses.json +++ b/Library/Homebrew/data/spdx/spdx_licenses.json @@ -1,11 +1,11 @@ { - "licenseListVersion": "5dbff5c", + "licenseListVersion": "3.27.0", "licenses": [ { "reference": "https://spdx.org/licenses/0BSD.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/0BSD.json", - "referenceNumber": 437, + "referenceNumber": 316, "name": "BSD Zero Clause License", "licenseId": "0BSD", "seeAlso": [ @@ -18,7 +18,7 @@ "reference": "https://spdx.org/licenses/3D-Slicer-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/3D-Slicer-1.0.json", - "referenceNumber": 463, + "referenceNumber": 61, "name": "3D Slicer License v1.0", "licenseId": "3D-Slicer-1.0", "seeAlso": [ @@ -31,7 +31,7 @@ "reference": "https://spdx.org/licenses/AAL.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/AAL.json", - "referenceNumber": 460, + "referenceNumber": 424, "name": "Attribution Assurance License", "licenseId": "AAL", "seeAlso": [ @@ -43,7 +43,7 @@ "reference": "https://spdx.org/licenses/Abstyles.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Abstyles.json", - "referenceNumber": 447, + "referenceNumber": 252, "name": "Abstyles License", "licenseId": "Abstyles", "seeAlso": [ @@ -55,7 +55,7 @@ "reference": "https://spdx.org/licenses/AdaCore-doc.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/AdaCore-doc.json", - "referenceNumber": 654, + "referenceNumber": 315, "name": "AdaCore Doc License", "licenseId": "AdaCore-doc", "seeAlso": [ @@ -69,7 +69,7 @@ "reference": "https://spdx.org/licenses/Adobe-2006.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Adobe-2006.json", - "referenceNumber": 62, + "referenceNumber": 658, "name": "Adobe Systems Incorporated Source Code License Agreement", "licenseId": "Adobe-2006", "seeAlso": [ @@ -81,7 +81,7 @@ "reference": "https://spdx.org/licenses/Adobe-Display-PostScript.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Adobe-Display-PostScript.json", - "referenceNumber": 212, + "referenceNumber": 499, "name": "Adobe Display PostScript License", "licenseId": "Adobe-Display-PostScript", "seeAlso": [ @@ -93,7 +93,7 @@ "reference": "https://spdx.org/licenses/Adobe-Glyph.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Adobe-Glyph.json", - "referenceNumber": 480, + "referenceNumber": 492, "name": "Adobe Glyph List License", "licenseId": "Adobe-Glyph", "seeAlso": [ @@ -105,7 +105,7 @@ "reference": "https://spdx.org/licenses/Adobe-Utopia.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Adobe-Utopia.json", - "referenceNumber": 496, + "referenceNumber": 554, "name": "Adobe Utopia Font License", "licenseId": "Adobe-Utopia", "seeAlso": [ @@ -117,7 +117,7 @@ "reference": "https://spdx.org/licenses/ADSL.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/ADSL.json", - "referenceNumber": 246, + "referenceNumber": 76, "name": "Amazon Digital Services License", "licenseId": "ADSL", "seeAlso": [ @@ -129,7 +129,7 @@ "reference": "https://spdx.org/licenses/AFL-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/AFL-1.1.json", - "referenceNumber": 439, + "referenceNumber": 7, "name": "Academic Free License v1.1", "licenseId": "AFL-1.1", "seeAlso": [ @@ -143,7 +143,7 @@ "reference": "https://spdx.org/licenses/AFL-1.2.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/AFL-1.2.json", - "referenceNumber": 626, + "referenceNumber": 480, "name": "Academic Free License v1.2", "licenseId": "AFL-1.2", "seeAlso": [ @@ -157,7 +157,7 @@ "reference": "https://spdx.org/licenses/AFL-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/AFL-2.0.json", - "referenceNumber": 507, + "referenceNumber": 41, "name": "Academic Free License v2.0", "licenseId": "AFL-2.0", "seeAlso": [ @@ -170,7 +170,7 @@ "reference": "https://spdx.org/licenses/AFL-2.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/AFL-2.1.json", - "referenceNumber": 184, + "referenceNumber": 682, "name": "Academic Free License v2.1", "licenseId": "AFL-2.1", "seeAlso": [ @@ -183,7 +183,7 @@ "reference": "https://spdx.org/licenses/AFL-3.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/AFL-3.0.json", - "referenceNumber": 455, + "referenceNumber": 343, "name": "Academic Free License v3.0", "licenseId": "AFL-3.0", "seeAlso": [ @@ -197,7 +197,7 @@ "reference": "https://spdx.org/licenses/Afmparse.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Afmparse.json", - "referenceNumber": 229, + "referenceNumber": 84, "name": "Afmparse License", "licenseId": "Afmparse", "seeAlso": [ @@ -209,7 +209,7 @@ "reference": "https://spdx.org/licenses/AGPL-1.0.html", "isDeprecatedLicenseId": true, "detailsUrl": "https://spdx.org/licenses/AGPL-1.0.json", - "referenceNumber": 81, + "referenceNumber": 38, "name": "Affero General Public License v1.0", "licenseId": "AGPL-1.0", "seeAlso": [ @@ -222,7 +222,7 @@ "reference": "https://spdx.org/licenses/AGPL-1.0-only.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/AGPL-1.0-only.json", - "referenceNumber": 211, + "referenceNumber": 415, "name": "Affero General Public License v1.0 only", "licenseId": "AGPL-1.0-only", "seeAlso": [ @@ -234,7 +234,7 @@ "reference": "https://spdx.org/licenses/AGPL-1.0-or-later.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/AGPL-1.0-or-later.json", - "referenceNumber": 543, + "referenceNumber": 24, "name": "Affero General Public License v1.0 or later", "licenseId": "AGPL-1.0-or-later", "seeAlso": [ @@ -246,7 +246,7 @@ "reference": "https://spdx.org/licenses/AGPL-3.0.html", "isDeprecatedLicenseId": true, "detailsUrl": "https://spdx.org/licenses/AGPL-3.0.json", - "referenceNumber": 675, + "referenceNumber": 427, "name": "GNU Affero General Public License v3.0", "licenseId": "AGPL-3.0", "seeAlso": [ @@ -260,7 +260,7 @@ "reference": "https://spdx.org/licenses/AGPL-3.0-only.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/AGPL-3.0-only.json", - "referenceNumber": 163, + "referenceNumber": 191, "name": "GNU Affero General Public License v3.0 only", "licenseId": "AGPL-3.0-only", "seeAlso": [ @@ -274,7 +274,7 @@ "reference": "https://spdx.org/licenses/AGPL-3.0-or-later.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/AGPL-3.0-or-later.json", - "referenceNumber": 73, + "referenceNumber": 469, "name": "GNU Affero General Public License v3.0 or later", "licenseId": "AGPL-3.0-or-later", "seeAlso": [ @@ -288,7 +288,7 @@ "reference": "https://spdx.org/licenses/Aladdin.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Aladdin.json", - "referenceNumber": 479, + "referenceNumber": 495, "name": "Aladdin Free Public License", "licenseId": "Aladdin", "seeAlso": [ @@ -301,7 +301,7 @@ "reference": "https://spdx.org/licenses/AMD-newlib.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/AMD-newlib.json", - "referenceNumber": 505, + "referenceNumber": 437, "name": "AMD newlib License", "licenseId": "AMD-newlib", "seeAlso": [ @@ -313,7 +313,7 @@ "reference": "https://spdx.org/licenses/AMDPLPA.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/AMDPLPA.json", - "referenceNumber": 67, + "referenceNumber": 194, "name": "AMD\u0027s plpa_map.c License", "licenseId": "AMDPLPA", "seeAlso": [ @@ -325,7 +325,7 @@ "reference": "https://spdx.org/licenses/AML.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/AML.json", - "referenceNumber": 663, + "referenceNumber": 644, "name": "Apple MIT License", "licenseId": "AML", "seeAlso": [ @@ -337,7 +337,7 @@ "reference": "https://spdx.org/licenses/AML-glslang.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/AML-glslang.json", - "referenceNumber": 297, + "referenceNumber": 439, "name": "AML glslang variant License", "licenseId": "AML-glslang", "seeAlso": [ @@ -350,7 +350,7 @@ "reference": "https://spdx.org/licenses/AMPAS.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/AMPAS.json", - "referenceNumber": 260, + "referenceNumber": 15, "name": "Academy of Motion Picture Arts and Sciences BSD", "licenseId": "AMPAS", "seeAlso": [ @@ -362,7 +362,7 @@ "reference": "https://spdx.org/licenses/ANTLR-PD.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/ANTLR-PD.json", - "referenceNumber": 19, + "referenceNumber": 25, "name": "ANTLR Software Rights Notice", "licenseId": "ANTLR-PD", "seeAlso": [ @@ -374,7 +374,7 @@ "reference": "https://spdx.org/licenses/ANTLR-PD-fallback.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/ANTLR-PD-fallback.json", - "referenceNumber": 252, + "referenceNumber": 218, "name": "ANTLR Software Rights Notice with license fallback", "licenseId": "ANTLR-PD-fallback", "seeAlso": [ @@ -386,7 +386,7 @@ "reference": "https://spdx.org/licenses/any-OSI.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/any-OSI.json", - "referenceNumber": 87, + "referenceNumber": 74, "name": "Any OSI License", "licenseId": "any-OSI", "seeAlso": [ @@ -398,7 +398,7 @@ "reference": "https://spdx.org/licenses/any-OSI-perl-modules.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/any-OSI-perl-modules.json", - "referenceNumber": 321, + "referenceNumber": 230, "name": "Any OSI License - Perl Modules", "licenseId": "any-OSI-perl-modules", "seeAlso": [ @@ -412,7 +412,7 @@ "reference": "https://spdx.org/licenses/Apache-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Apache-1.0.json", - "referenceNumber": 233, + "referenceNumber": 379, "name": "Apache License 1.0", "licenseId": "Apache-1.0", "seeAlso": [ @@ -425,7 +425,7 @@ "reference": "https://spdx.org/licenses/Apache-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Apache-1.1.json", - "referenceNumber": 357, + "referenceNumber": 111, "name": "Apache License 1.1", "licenseId": "Apache-1.1", "seeAlso": [ @@ -439,7 +439,7 @@ "reference": "https://spdx.org/licenses/Apache-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Apache-2.0.json", - "referenceNumber": 630, + "referenceNumber": 162, "name": "Apache License 2.0", "licenseId": "Apache-2.0", "seeAlso": [ @@ -454,7 +454,7 @@ "reference": "https://spdx.org/licenses/APAFML.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/APAFML.json", - "referenceNumber": 107, + "referenceNumber": 474, "name": "Adobe Postscript AFM License", "licenseId": "APAFML", "seeAlso": [ @@ -466,7 +466,7 @@ "reference": "https://spdx.org/licenses/APL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/APL-1.0.json", - "referenceNumber": 133, + "referenceNumber": 127, "name": "Adaptive Public License 1.0", "licenseId": "APL-1.0", "seeAlso": [ @@ -478,7 +478,7 @@ "reference": "https://spdx.org/licenses/App-s2p.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/App-s2p.json", - "referenceNumber": 169, + "referenceNumber": 155, "name": "App::s2p License", "licenseId": "App-s2p", "seeAlso": [ @@ -490,7 +490,7 @@ "reference": "https://spdx.org/licenses/APSL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/APSL-1.0.json", - "referenceNumber": 58, + "referenceNumber": 86, "name": "Apple Public Source License 1.0", "licenseId": "APSL-1.0", "seeAlso": [ @@ -503,7 +503,7 @@ "reference": "https://spdx.org/licenses/APSL-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/APSL-1.1.json", - "referenceNumber": 202, + "referenceNumber": 23, "name": "Apple Public Source License 1.1", "licenseId": "APSL-1.1", "seeAlso": [ @@ -515,7 +515,7 @@ "reference": "https://spdx.org/licenses/APSL-1.2.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/APSL-1.2.json", - "referenceNumber": 434, + "referenceNumber": 265, "name": "Apple Public Source License 1.2", "licenseId": "APSL-1.2", "seeAlso": [ @@ -527,7 +527,7 @@ "reference": "https://spdx.org/licenses/APSL-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/APSL-2.0.json", - "referenceNumber": 650, + "referenceNumber": 568, "name": "Apple Public Source License 2.0", "licenseId": "APSL-2.0", "seeAlso": [ @@ -540,7 +540,7 @@ "reference": "https://spdx.org/licenses/Arphic-1999.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Arphic-1999.json", - "referenceNumber": 26, + "referenceNumber": 649, "name": "Arphic Public License", "licenseId": "Arphic-1999", "seeAlso": [ @@ -552,7 +552,7 @@ "reference": "https://spdx.org/licenses/Artistic-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Artistic-1.0.json", - "referenceNumber": 662, + "referenceNumber": 388, "name": "Artistic License 1.0", "licenseId": "Artistic-1.0", "seeAlso": [ @@ -565,7 +565,7 @@ "reference": "https://spdx.org/licenses/Artistic-1.0-cl8.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Artistic-1.0-cl8.json", - "referenceNumber": 511, + "referenceNumber": 291, "name": "Artistic License 1.0 w/clause 8", "licenseId": "Artistic-1.0-cl8", "seeAlso": [ @@ -577,7 +577,7 @@ "reference": "https://spdx.org/licenses/Artistic-1.0-Perl.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Artistic-1.0-Perl.json", - "referenceNumber": 429, + "referenceNumber": 20, "name": "Artistic License 1.0 (Perl)", "licenseId": "Artistic-1.0-Perl", "seeAlso": [ @@ -589,7 +589,7 @@ "reference": "https://spdx.org/licenses/Artistic-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Artistic-2.0.json", - "referenceNumber": 468, + "referenceNumber": 217, "name": "Artistic License 2.0", "licenseId": "Artistic-2.0", "seeAlso": [ @@ -604,7 +604,7 @@ "reference": "https://spdx.org/licenses/Artistic-dist.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Artistic-dist.json", - "referenceNumber": 226, + "referenceNumber": 511, "name": "Artistic License 1.0 (dist)", "licenseId": "Artistic-dist", "seeAlso": [ @@ -616,7 +616,7 @@ "reference": "https://spdx.org/licenses/Aspell-RU.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Aspell-RU.json", - "referenceNumber": 257, + "referenceNumber": 231, "name": "Aspell Russian License", "licenseId": "Aspell-RU", "seeAlso": [ @@ -628,7 +628,7 @@ "reference": "https://spdx.org/licenses/ASWF-Digital-Assets-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/ASWF-Digital-Assets-1.0.json", - "referenceNumber": 153, + "referenceNumber": 340, "name": "ASWF Digital Assets License version 1.0", "licenseId": "ASWF-Digital-Assets-1.0", "seeAlso": [ @@ -640,7 +640,7 @@ "reference": "https://spdx.org/licenses/ASWF-Digital-Assets-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/ASWF-Digital-Assets-1.1.json", - "referenceNumber": 268, + "referenceNumber": 153, "name": "ASWF Digital Assets License 1.1", "licenseId": "ASWF-Digital-Assets-1.1", "seeAlso": [ @@ -652,7 +652,7 @@ "reference": "https://spdx.org/licenses/Baekmuk.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Baekmuk.json", - "referenceNumber": 132, + "referenceNumber": 311, "name": "Baekmuk License", "licenseId": "Baekmuk", "seeAlso": [ @@ -664,7 +664,7 @@ "reference": "https://spdx.org/licenses/Bahyph.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Bahyph.json", - "referenceNumber": 552, + "referenceNumber": 505, "name": "Bahyph License", "licenseId": "Bahyph", "seeAlso": [ @@ -676,7 +676,7 @@ "reference": "https://spdx.org/licenses/Barr.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Barr.json", - "referenceNumber": 53, + "referenceNumber": 420, "name": "Barr License", "licenseId": "Barr", "seeAlso": [ @@ -688,7 +688,7 @@ "reference": "https://spdx.org/licenses/bcrypt-Solar-Designer.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/bcrypt-Solar-Designer.json", - "referenceNumber": 145, + "referenceNumber": 167, "name": "bcrypt Solar Designer License", "licenseId": "bcrypt-Solar-Designer", "seeAlso": [ @@ -700,7 +700,7 @@ "reference": "https://spdx.org/licenses/Beerware.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Beerware.json", - "referenceNumber": 470, + "referenceNumber": 556, "name": "Beerware License", "licenseId": "Beerware", "seeAlso": [ @@ -713,7 +713,7 @@ "reference": "https://spdx.org/licenses/Bitstream-Charter.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Bitstream-Charter.json", - "referenceNumber": 12, + "referenceNumber": 47, "name": "Bitstream Charter Font License", "licenseId": "Bitstream-Charter", "seeAlso": [ @@ -726,7 +726,7 @@ "reference": "https://spdx.org/licenses/Bitstream-Vera.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Bitstream-Vera.json", - "referenceNumber": 177, + "referenceNumber": 208, "name": "Bitstream Vera Font License", "licenseId": "Bitstream-Vera", "seeAlso": [ @@ -739,7 +739,7 @@ "reference": "https://spdx.org/licenses/BitTorrent-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/BitTorrent-1.0.json", - "referenceNumber": 50, + "referenceNumber": 156, "name": "BitTorrent Open Source License v1.0", "licenseId": "BitTorrent-1.0", "seeAlso": [ @@ -751,7 +751,7 @@ "reference": "https://spdx.org/licenses/BitTorrent-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/BitTorrent-1.1.json", - "referenceNumber": 588, + "referenceNumber": 325, "name": "BitTorrent Open Source License v1.1", "licenseId": "BitTorrent-1.1", "seeAlso": [ @@ -764,7 +764,7 @@ "reference": "https://spdx.org/licenses/blessing.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/blessing.json", - "referenceNumber": 150, + "referenceNumber": 680, "name": "SQLite Blessing", "licenseId": "blessing", "seeAlso": [ @@ -777,7 +777,7 @@ "reference": "https://spdx.org/licenses/BlueOak-1.0.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/BlueOak-1.0.0.json", - "referenceNumber": 148, + "referenceNumber": 51, "name": "Blue Oak Model License 1.0.0", "licenseId": "BlueOak-1.0.0", "seeAlso": [ @@ -789,7 +789,7 @@ "reference": "https://spdx.org/licenses/Boehm-GC.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Boehm-GC.json", - "referenceNumber": 353, + "referenceNumber": 92, "name": "Boehm-Demers-Weiser GC License", "licenseId": "Boehm-GC", "seeAlso": [ @@ -803,7 +803,7 @@ "reference": "https://spdx.org/licenses/Boehm-GC-without-fee.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Boehm-GC-without-fee.json", - "referenceNumber": 617, + "referenceNumber": 466, "name": "Boehm-Demers-Weiser GC License (without fee)", "licenseId": "Boehm-GC-without-fee", "seeAlso": [ @@ -815,7 +815,7 @@ "reference": "https://spdx.org/licenses/Borceux.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Borceux.json", - "referenceNumber": 547, + "referenceNumber": 335, "name": "Borceux license", "licenseId": "Borceux", "seeAlso": [ @@ -827,7 +827,7 @@ "reference": "https://spdx.org/licenses/Brian-Gladman-2-Clause.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Brian-Gladman-2-Clause.json", - "referenceNumber": 231, + "referenceNumber": 198, "name": "Brian Gladman 2-Clause License", "licenseId": "Brian-Gladman-2-Clause", "seeAlso": [ @@ -840,7 +840,7 @@ "reference": "https://spdx.org/licenses/Brian-Gladman-3-Clause.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Brian-Gladman-3-Clause.json", - "referenceNumber": 343, + "referenceNumber": 675, "name": "Brian Gladman 3-Clause License", "licenseId": "Brian-Gladman-3-Clause", "seeAlso": [ @@ -852,7 +852,7 @@ "reference": "https://spdx.org/licenses/BSD-1-Clause.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/BSD-1-Clause.json", - "referenceNumber": 546, + "referenceNumber": 286, "name": "BSD 1-Clause License", "licenseId": "BSD-1-Clause", "seeAlso": [ @@ -864,7 +864,7 @@ "reference": "https://spdx.org/licenses/BSD-2-Clause.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/BSD-2-Clause.json", - "referenceNumber": 488, + "referenceNumber": 430, "name": "BSD 2-Clause \"Simplified\" License", "licenseId": "BSD-2-Clause", "seeAlso": [ @@ -877,7 +877,7 @@ "reference": "https://spdx.org/licenses/BSD-2-Clause-Darwin.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/BSD-2-Clause-Darwin.json", - "referenceNumber": 653, + "referenceNumber": 477, "name": "BSD 2-Clause - Ian Darwin variant", "licenseId": "BSD-2-Clause-Darwin", "seeAlso": [ @@ -889,7 +889,7 @@ "reference": "https://spdx.org/licenses/BSD-2-Clause-first-lines.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/BSD-2-Clause-first-lines.json", - "referenceNumber": 276, + "referenceNumber": 543, "name": "BSD 2-Clause - first lines requirement", "licenseId": "BSD-2-Clause-first-lines", "seeAlso": [ @@ -902,7 +902,7 @@ "reference": "https://spdx.org/licenses/BSD-2-Clause-FreeBSD.html", "isDeprecatedLicenseId": true, "detailsUrl": "https://spdx.org/licenses/BSD-2-Clause-FreeBSD.json", - "referenceNumber": 628, + "referenceNumber": 622, "name": "BSD 2-Clause FreeBSD License", "licenseId": "BSD-2-Clause-FreeBSD", "seeAlso": [ @@ -915,7 +915,7 @@ "reference": "https://spdx.org/licenses/BSD-2-Clause-NetBSD.html", "isDeprecatedLicenseId": true, "detailsUrl": "https://spdx.org/licenses/BSD-2-Clause-NetBSD.json", - "referenceNumber": 33, + "referenceNumber": 531, "name": "BSD 2-Clause NetBSD License", "licenseId": "BSD-2-Clause-NetBSD", "seeAlso": [ @@ -928,7 +928,7 @@ "reference": "https://spdx.org/licenses/BSD-2-Clause-Patent.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/BSD-2-Clause-Patent.json", - "referenceNumber": 537, + "referenceNumber": 584, "name": "BSD-2-Clause Plus Patent License", "licenseId": "BSD-2-Clause-Patent", "seeAlso": [ @@ -940,7 +940,7 @@ "reference": "https://spdx.org/licenses/BSD-2-Clause-pkgconf-disclaimer.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/BSD-2-Clause-pkgconf-disclaimer.json", - "referenceNumber": 414, + "referenceNumber": 624, "name": "BSD 2-Clause pkgconf disclaimer variant", "licenseId": "BSD-2-Clause-pkgconf-disclaimer", "seeAlso": [ @@ -953,7 +953,7 @@ "reference": "https://spdx.org/licenses/BSD-2-Clause-Views.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/BSD-2-Clause-Views.json", - "referenceNumber": 236, + "referenceNumber": 536, "name": "BSD 2-Clause with views sentence", "licenseId": "BSD-2-Clause-Views", "seeAlso": [ @@ -967,7 +967,7 @@ "reference": "https://spdx.org/licenses/BSD-3-Clause.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause.json", - "referenceNumber": 689, + "referenceNumber": 567, "name": "BSD 3-Clause \"New\" or \"Revised\" License", "licenseId": "BSD-3-Clause", "seeAlso": [ @@ -981,7 +981,7 @@ "reference": "https://spdx.org/licenses/BSD-3-Clause-acpica.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-acpica.json", - "referenceNumber": 325, + "referenceNumber": 277, "name": "BSD 3-Clause acpica variant", "licenseId": "BSD-3-Clause-acpica", "seeAlso": [ @@ -993,7 +993,7 @@ "reference": "https://spdx.org/licenses/BSD-3-Clause-Attribution.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-Attribution.json", - "referenceNumber": 474, + "referenceNumber": 159, "name": "BSD with attribution", "licenseId": "BSD-3-Clause-Attribution", "seeAlso": [ @@ -1005,7 +1005,7 @@ "reference": "https://spdx.org/licenses/BSD-3-Clause-Clear.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-Clear.json", - "referenceNumber": 301, + "referenceNumber": 259, "name": "BSD 3-Clause Clear License", "licenseId": "BSD-3-Clause-Clear", "seeAlso": [ @@ -1018,7 +1018,7 @@ "reference": "https://spdx.org/licenses/BSD-3-Clause-flex.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-flex.json", - "referenceNumber": 269, + "referenceNumber": 205, "name": "BSD 3-Clause Flex variant", "licenseId": "BSD-3-Clause-flex", "seeAlso": [ @@ -1030,7 +1030,7 @@ "reference": "https://spdx.org/licenses/BSD-3-Clause-HP.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-HP.json", - "referenceNumber": 371, + "referenceNumber": 643, "name": "Hewlett-Packard BSD variant license", "licenseId": "BSD-3-Clause-HP", "seeAlso": [ @@ -1042,7 +1042,7 @@ "reference": "https://spdx.org/licenses/BSD-3-Clause-LBNL.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-LBNL.json", - "referenceNumber": 423, + "referenceNumber": 6, "name": "Lawrence Berkeley National Labs BSD variant license", "licenseId": "BSD-3-Clause-LBNL", "seeAlso": [ @@ -1054,7 +1054,7 @@ "reference": "https://spdx.org/licenses/BSD-3-Clause-Modification.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-Modification.json", - "referenceNumber": 646, + "referenceNumber": 497, "name": "BSD 3-Clause Modification", "licenseId": "BSD-3-Clause-Modification", "seeAlso": [ @@ -1066,7 +1066,7 @@ "reference": "https://spdx.org/licenses/BSD-3-Clause-No-Military-License.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-No-Military-License.json", - "referenceNumber": 86, + "referenceNumber": 498, "name": "BSD 3-Clause No Military License", "licenseId": "BSD-3-Clause-No-Military-License", "seeAlso": [ @@ -1079,7 +1079,7 @@ "reference": "https://spdx.org/licenses/BSD-3-Clause-No-Nuclear-License.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-No-Nuclear-License.json", - "referenceNumber": 273, + "referenceNumber": 108, "name": "BSD 3-Clause No Nuclear License", "licenseId": "BSD-3-Clause-No-Nuclear-License", "seeAlso": [ @@ -1091,7 +1091,7 @@ "reference": "https://spdx.org/licenses/BSD-3-Clause-No-Nuclear-License-2014.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-No-Nuclear-License-2014.json", - "referenceNumber": 367, + "referenceNumber": 239, "name": "BSD 3-Clause No Nuclear License 2014", "licenseId": "BSD-3-Clause-No-Nuclear-License-2014", "seeAlso": [ @@ -1103,7 +1103,7 @@ "reference": "https://spdx.org/licenses/BSD-3-Clause-No-Nuclear-Warranty.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-No-Nuclear-Warranty.json", - "referenceNumber": 698, + "referenceNumber": 606, "name": "BSD 3-Clause No Nuclear Warranty", "licenseId": "BSD-3-Clause-No-Nuclear-Warranty", "seeAlso": [ @@ -1115,7 +1115,7 @@ "reference": "https://spdx.org/licenses/BSD-3-Clause-Open-MPI.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-Open-MPI.json", - "referenceNumber": 341, + "referenceNumber": 637, "name": "BSD 3-Clause Open MPI variant", "licenseId": "BSD-3-Clause-Open-MPI", "seeAlso": [ @@ -1128,7 +1128,7 @@ "reference": "https://spdx.org/licenses/BSD-3-Clause-Sun.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-Sun.json", - "referenceNumber": 406, + "referenceNumber": 240, "name": "BSD 3-Clause Sun Microsystems", "licenseId": "BSD-3-Clause-Sun", "seeAlso": [ @@ -1140,7 +1140,7 @@ "reference": "https://spdx.org/licenses/BSD-4-Clause.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/BSD-4-Clause.json", - "referenceNumber": 370, + "referenceNumber": 227, "name": "BSD 4-Clause \"Original\" or \"Old\" License", "licenseId": "BSD-4-Clause", "seeAlso": [ @@ -1153,7 +1153,7 @@ "reference": "https://spdx.org/licenses/BSD-4-Clause-Shortened.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/BSD-4-Clause-Shortened.json", - "referenceNumber": 396, + "referenceNumber": 269, "name": "BSD 4 Clause Shortened", "licenseId": "BSD-4-Clause-Shortened", "seeAlso": [ @@ -1165,7 +1165,7 @@ "reference": "https://spdx.org/licenses/BSD-4-Clause-UC.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/BSD-4-Clause-UC.json", - "referenceNumber": 93, + "referenceNumber": 21, "name": "BSD-4-Clause (University of California-Specific)", "licenseId": "BSD-4-Clause-UC", "seeAlso": [ @@ -1177,7 +1177,7 @@ "reference": "https://spdx.org/licenses/BSD-4.3RENO.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/BSD-4.3RENO.json", - "referenceNumber": 476, + "referenceNumber": 434, "name": "BSD 4.3 RENO License", "licenseId": "BSD-4.3RENO", "seeAlso": [ @@ -1190,7 +1190,7 @@ "reference": "https://spdx.org/licenses/BSD-4.3TAHOE.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/BSD-4.3TAHOE.json", - "referenceNumber": 369, + "referenceNumber": 685, "name": "BSD 4.3 TAHOE License", "licenseId": "BSD-4.3TAHOE", "seeAlso": [ @@ -1203,7 +1203,7 @@ "reference": "https://spdx.org/licenses/BSD-Advertising-Acknowledgement.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/BSD-Advertising-Acknowledgement.json", - "referenceNumber": 432, + "referenceNumber": 345, "name": "BSD Advertising Acknowledgement License", "licenseId": "BSD-Advertising-Acknowledgement", "seeAlso": [ @@ -1215,7 +1215,7 @@ "reference": "https://spdx.org/licenses/BSD-Attribution-HPND-disclaimer.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/BSD-Attribution-HPND-disclaimer.json", - "referenceNumber": 220, + "referenceNumber": 506, "name": "BSD with Attribution and HPND disclaimer", "licenseId": "BSD-Attribution-HPND-disclaimer", "seeAlso": [ @@ -1227,7 +1227,7 @@ "reference": "https://spdx.org/licenses/BSD-Inferno-Nettverk.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/BSD-Inferno-Nettverk.json", - "referenceNumber": 694, + "referenceNumber": 535, "name": "BSD-Inferno-Nettverk", "licenseId": "BSD-Inferno-Nettverk", "seeAlso": [ @@ -1239,7 +1239,7 @@ "reference": "https://spdx.org/licenses/BSD-Protection.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/BSD-Protection.json", - "referenceNumber": 43, + "referenceNumber": 163, "name": "BSD Protection License", "licenseId": "BSD-Protection", "seeAlso": [ @@ -1251,7 +1251,7 @@ "reference": "https://spdx.org/licenses/BSD-Source-beginning-file.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/BSD-Source-beginning-file.json", - "referenceNumber": 578, + "referenceNumber": 383, "name": "BSD Source Code Attribution - beginning of file variant", "licenseId": "BSD-Source-beginning-file", "seeAlso": [ @@ -1263,7 +1263,7 @@ "reference": "https://spdx.org/licenses/BSD-Source-Code.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/BSD-Source-Code.json", - "referenceNumber": 570, + "referenceNumber": 450, "name": "BSD Source Code Attribution", "licenseId": "BSD-Source-Code", "seeAlso": [ @@ -1275,7 +1275,7 @@ "reference": "https://spdx.org/licenses/BSD-Systemics.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/BSD-Systemics.json", - "referenceNumber": 94, + "referenceNumber": 602, "name": "Systemics BSD variant license", "licenseId": "BSD-Systemics", "seeAlso": [ @@ -1287,7 +1287,7 @@ "reference": "https://spdx.org/licenses/BSD-Systemics-W3Works.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/BSD-Systemics-W3Works.json", - "referenceNumber": 687, + "referenceNumber": 422, "name": "Systemics W3Works BSD variant license", "licenseId": "BSD-Systemics-W3Works", "seeAlso": [ @@ -1299,7 +1299,7 @@ "reference": "https://spdx.org/licenses/BSL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/BSL-1.0.json", - "referenceNumber": 238, + "referenceNumber": 130, "name": "Boost Software License 1.0", "licenseId": "BSL-1.0", "seeAlso": [ @@ -1313,7 +1313,7 @@ "reference": "https://spdx.org/licenses/BUSL-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/BUSL-1.1.json", - "referenceNumber": 501, + "referenceNumber": 234, "name": "Business Source License 1.1", "licenseId": "BUSL-1.1", "seeAlso": [ @@ -1325,7 +1325,7 @@ "reference": "https://spdx.org/licenses/bzip2-1.0.5.html", "isDeprecatedLicenseId": true, "detailsUrl": "https://spdx.org/licenses/bzip2-1.0.5.json", - "referenceNumber": 217, + "referenceNumber": 412, "name": "bzip2 and libbzip2 License v1.0.5", "licenseId": "bzip2-1.0.5", "seeAlso": [ @@ -1338,7 +1338,7 @@ "reference": "https://spdx.org/licenses/bzip2-1.0.6.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/bzip2-1.0.6.json", - "referenceNumber": 521, + "referenceNumber": 243, "name": "bzip2 and libbzip2 License v1.0.6", "licenseId": "bzip2-1.0.6", "seeAlso": [ @@ -1352,7 +1352,7 @@ "reference": "https://spdx.org/licenses/C-UDA-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/C-UDA-1.0.json", - "referenceNumber": 652, + "referenceNumber": 660, "name": "Computational Use of Data Agreement v1.0", "licenseId": "C-UDA-1.0", "seeAlso": [ @@ -1365,7 +1365,7 @@ "reference": "https://spdx.org/licenses/CAL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CAL-1.0.json", - "referenceNumber": 36, + "referenceNumber": 305, "name": "Cryptographic Autonomy License 1.0", "licenseId": "CAL-1.0", "seeAlso": [ @@ -1378,7 +1378,7 @@ "reference": "https://spdx.org/licenses/CAL-1.0-Combined-Work-Exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CAL-1.0-Combined-Work-Exception.json", - "referenceNumber": 380, + "referenceNumber": 569, "name": "Cryptographic Autonomy License 1.0 (Combined Work Exception)", "licenseId": "CAL-1.0-Combined-Work-Exception", "seeAlso": [ @@ -1391,7 +1391,7 @@ "reference": "https://spdx.org/licenses/Caldera.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Caldera.json", - "referenceNumber": 605, + "referenceNumber": 483, "name": "Caldera License", "licenseId": "Caldera", "seeAlso": [ @@ -1403,7 +1403,7 @@ "reference": "https://spdx.org/licenses/Caldera-no-preamble.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Caldera-no-preamble.json", - "referenceNumber": 664, + "referenceNumber": 401, "name": "Caldera License (without preamble)", "licenseId": "Caldera-no-preamble", "seeAlso": [ @@ -1415,7 +1415,7 @@ "reference": "https://spdx.org/licenses/Catharon.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Catharon.json", - "referenceNumber": 196, + "referenceNumber": 581, "name": "Catharon License", "licenseId": "Catharon", "seeAlso": [ @@ -1427,7 +1427,7 @@ "reference": "https://spdx.org/licenses/CATOSL-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CATOSL-1.1.json", - "referenceNumber": 103, + "referenceNumber": 97, "name": "Computer Associates Trusted Open Source License 1.1", "licenseId": "CATOSL-1.1", "seeAlso": [ @@ -1439,7 +1439,7 @@ "reference": "https://spdx.org/licenses/CC-BY-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-1.0.json", - "referenceNumber": 391, + "referenceNumber": 559, "name": "Creative Commons Attribution 1.0 Generic", "licenseId": "CC-BY-1.0", "seeAlso": [ @@ -1451,7 +1451,7 @@ "reference": "https://spdx.org/licenses/CC-BY-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-2.0.json", - "referenceNumber": 117, + "referenceNumber": 441, "name": "Creative Commons Attribution 2.0 Generic", "licenseId": "CC-BY-2.0", "seeAlso": [ @@ -1463,7 +1463,7 @@ "reference": "https://spdx.org/licenses/CC-BY-2.5.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-2.5.json", - "referenceNumber": 466, + "referenceNumber": 292, "name": "Creative Commons Attribution 2.5 Generic", "licenseId": "CC-BY-2.5", "seeAlso": [ @@ -1475,7 +1475,7 @@ "reference": "https://spdx.org/licenses/CC-BY-2.5-AU.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-2.5-AU.json", - "referenceNumber": 111, + "referenceNumber": 126, "name": "Creative Commons Attribution 2.5 Australia", "licenseId": "CC-BY-2.5-AU", "seeAlso": [ @@ -1487,7 +1487,7 @@ "reference": "https://spdx.org/licenses/CC-BY-3.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-3.0.json", - "referenceNumber": 364, + "referenceNumber": 576, "name": "Creative Commons Attribution 3.0 Unported", "licenseId": "CC-BY-3.0", "seeAlso": [ @@ -1499,7 +1499,7 @@ "reference": "https://spdx.org/licenses/CC-BY-3.0-AT.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-3.0-AT.json", - "referenceNumber": 586, + "referenceNumber": 107, "name": "Creative Commons Attribution 3.0 Austria", "licenseId": "CC-BY-3.0-AT", "seeAlso": [ @@ -1511,7 +1511,7 @@ "reference": "https://spdx.org/licenses/CC-BY-3.0-AU.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-3.0-AU.json", - "referenceNumber": 594, + "referenceNumber": 648, "name": "Creative Commons Attribution 3.0 Australia", "licenseId": "CC-BY-3.0-AU", "seeAlso": [ @@ -1523,7 +1523,7 @@ "reference": "https://spdx.org/licenses/CC-BY-3.0-DE.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-3.0-DE.json", - "referenceNumber": 82, + "referenceNumber": 458, "name": "Creative Commons Attribution 3.0 Germany", "licenseId": "CC-BY-3.0-DE", "seeAlso": [ @@ -1535,7 +1535,7 @@ "reference": "https://spdx.org/licenses/CC-BY-3.0-IGO.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-3.0-IGO.json", - "referenceNumber": 590, + "referenceNumber": 410, "name": "Creative Commons Attribution 3.0 IGO", "licenseId": "CC-BY-3.0-IGO", "seeAlso": [ @@ -1547,7 +1547,7 @@ "reference": "https://spdx.org/licenses/CC-BY-3.0-NL.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-3.0-NL.json", - "referenceNumber": 60, + "referenceNumber": 436, "name": "Creative Commons Attribution 3.0 Netherlands", "licenseId": "CC-BY-3.0-NL", "seeAlso": [ @@ -1559,7 +1559,7 @@ "reference": "https://spdx.org/licenses/CC-BY-3.0-US.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-3.0-US.json", - "referenceNumber": 538, + "referenceNumber": 366, "name": "Creative Commons Attribution 3.0 United States", "licenseId": "CC-BY-3.0-US", "seeAlso": [ @@ -1571,7 +1571,7 @@ "reference": "https://spdx.org/licenses/CC-BY-4.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-4.0.json", - "referenceNumber": 98, + "referenceNumber": 66, "name": "Creative Commons Attribution 4.0 International", "licenseId": "CC-BY-4.0", "seeAlso": [ @@ -1584,7 +1584,7 @@ "reference": "https://spdx.org/licenses/CC-BY-NC-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-1.0.json", - "referenceNumber": 631, + "referenceNumber": 428, "name": "Creative Commons Attribution Non Commercial 1.0 Generic", "licenseId": "CC-BY-NC-1.0", "seeAlso": [ @@ -1597,7 +1597,7 @@ "reference": "https://spdx.org/licenses/CC-BY-NC-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-2.0.json", - "referenceNumber": 541, + "referenceNumber": 553, "name": "Creative Commons Attribution Non Commercial 2.0 Generic", "licenseId": "CC-BY-NC-2.0", "seeAlso": [ @@ -1610,7 +1610,7 @@ "reference": "https://spdx.org/licenses/CC-BY-NC-2.5.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-2.5.json", - "referenceNumber": 329, + "referenceNumber": 49, "name": "Creative Commons Attribution Non Commercial 2.5 Generic", "licenseId": "CC-BY-NC-2.5", "seeAlso": [ @@ -1623,7 +1623,7 @@ "reference": "https://spdx.org/licenses/CC-BY-NC-3.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-3.0.json", - "referenceNumber": 599, + "referenceNumber": 686, "name": "Creative Commons Attribution Non Commercial 3.0 Unported", "licenseId": "CC-BY-NC-3.0", "seeAlso": [ @@ -1636,7 +1636,7 @@ "reference": "https://spdx.org/licenses/CC-BY-NC-3.0-DE.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-3.0-DE.json", - "referenceNumber": 402, + "referenceNumber": 324, "name": "Creative Commons Attribution Non Commercial 3.0 Germany", "licenseId": "CC-BY-NC-3.0-DE", "seeAlso": [ @@ -1648,7 +1648,7 @@ "reference": "https://spdx.org/licenses/CC-BY-NC-4.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-4.0.json", - "referenceNumber": 451, + "referenceNumber": 560, "name": "Creative Commons Attribution Non Commercial 4.0 International", "licenseId": "CC-BY-NC-4.0", "seeAlso": [ @@ -1661,7 +1661,7 @@ "reference": "https://spdx.org/licenses/CC-BY-NC-ND-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-ND-1.0.json", - "referenceNumber": 465, + "referenceNumber": 442, "name": "Creative Commons Attribution Non Commercial No Derivatives 1.0 Generic", "licenseId": "CC-BY-NC-ND-1.0", "seeAlso": [ @@ -1673,7 +1673,7 @@ "reference": "https://spdx.org/licenses/CC-BY-NC-ND-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-ND-2.0.json", - "referenceNumber": 307, + "referenceNumber": 334, "name": "Creative Commons Attribution Non Commercial No Derivatives 2.0 Generic", "licenseId": "CC-BY-NC-ND-2.0", "seeAlso": [ @@ -1685,7 +1685,7 @@ "reference": "https://spdx.org/licenses/CC-BY-NC-ND-2.5.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-ND-2.5.json", - "referenceNumber": 637, + "referenceNumber": 215, "name": "Creative Commons Attribution Non Commercial No Derivatives 2.5 Generic", "licenseId": "CC-BY-NC-ND-2.5", "seeAlso": [ @@ -1697,7 +1697,7 @@ "reference": "https://spdx.org/licenses/CC-BY-NC-ND-3.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-ND-3.0.json", - "referenceNumber": 284, + "referenceNumber": 94, "name": "Creative Commons Attribution Non Commercial No Derivatives 3.0 Unported", "licenseId": "CC-BY-NC-ND-3.0", "seeAlso": [ @@ -1709,7 +1709,7 @@ "reference": "https://spdx.org/licenses/CC-BY-NC-ND-3.0-DE.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-ND-3.0-DE.json", - "referenceNumber": 658, + "referenceNumber": 185, "name": "Creative Commons Attribution Non Commercial No Derivatives 3.0 Germany", "licenseId": "CC-BY-NC-ND-3.0-DE", "seeAlso": [ @@ -1721,7 +1721,7 @@ "reference": "https://spdx.org/licenses/CC-BY-NC-ND-3.0-IGO.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-ND-3.0-IGO.json", - "referenceNumber": 253, + "referenceNumber": 577, "name": "Creative Commons Attribution Non Commercial No Derivatives 3.0 IGO", "licenseId": "CC-BY-NC-ND-3.0-IGO", "seeAlso": [ @@ -1733,7 +1733,7 @@ "reference": "https://spdx.org/licenses/CC-BY-NC-ND-4.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-ND-4.0.json", - "referenceNumber": 514, + "referenceNumber": 53, "name": "Creative Commons Attribution Non Commercial No Derivatives 4.0 International", "licenseId": "CC-BY-NC-ND-4.0", "seeAlso": [ @@ -1745,7 +1745,7 @@ "reference": "https://spdx.org/licenses/CC-BY-NC-SA-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-1.0.json", - "referenceNumber": 340, + "referenceNumber": 510, "name": "Creative Commons Attribution Non Commercial Share Alike 1.0 Generic", "licenseId": "CC-BY-NC-SA-1.0", "seeAlso": [ @@ -1757,7 +1757,7 @@ "reference": "https://spdx.org/licenses/CC-BY-NC-SA-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-2.0.json", - "referenceNumber": 4, + "referenceNumber": 199, "name": "Creative Commons Attribution Non Commercial Share Alike 2.0 Generic", "licenseId": "CC-BY-NC-SA-2.0", "seeAlso": [ @@ -1769,7 +1769,7 @@ "reference": "https://spdx.org/licenses/CC-BY-NC-SA-2.0-DE.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-2.0-DE.json", - "referenceNumber": 438, + "referenceNumber": 356, "name": "Creative Commons Attribution Non Commercial Share Alike 2.0 Germany", "licenseId": "CC-BY-NC-SA-2.0-DE", "seeAlso": [ @@ -1781,7 +1781,7 @@ "reference": "https://spdx.org/licenses/CC-BY-NC-SA-2.0-FR.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-2.0-FR.json", - "referenceNumber": 589, + "referenceNumber": 301, "name": "Creative Commons Attribution-NonCommercial-ShareAlike 2.0 France", "licenseId": "CC-BY-NC-SA-2.0-FR", "seeAlso": [ @@ -1793,7 +1793,7 @@ "reference": "https://spdx.org/licenses/CC-BY-NC-SA-2.0-UK.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-2.0-UK.json", - "referenceNumber": 490, + "referenceNumber": 671, "name": "Creative Commons Attribution Non Commercial Share Alike 2.0 England and Wales", "licenseId": "CC-BY-NC-SA-2.0-UK", "seeAlso": [ @@ -1805,7 +1805,7 @@ "reference": "https://spdx.org/licenses/CC-BY-NC-SA-2.5.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-2.5.json", - "referenceNumber": 123, + "referenceNumber": 659, "name": "Creative Commons Attribution Non Commercial Share Alike 2.5 Generic", "licenseId": "CC-BY-NC-SA-2.5", "seeAlso": [ @@ -1817,7 +1817,7 @@ "reference": "https://spdx.org/licenses/CC-BY-NC-SA-3.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-3.0.json", - "referenceNumber": 384, + "referenceNumber": 359, "name": "Creative Commons Attribution Non Commercial Share Alike 3.0 Unported", "licenseId": "CC-BY-NC-SA-3.0", "seeAlso": [ @@ -1829,7 +1829,7 @@ "reference": "https://spdx.org/licenses/CC-BY-NC-SA-3.0-DE.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-3.0-DE.json", - "referenceNumber": 401, + "referenceNumber": 279, "name": "Creative Commons Attribution Non Commercial Share Alike 3.0 Germany", "licenseId": "CC-BY-NC-SA-3.0-DE", "seeAlso": [ @@ -1841,7 +1841,7 @@ "reference": "https://spdx.org/licenses/CC-BY-NC-SA-3.0-IGO.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-3.0-IGO.json", - "referenceNumber": 129, + "referenceNumber": 636, "name": "Creative Commons Attribution Non Commercial Share Alike 3.0 IGO", "licenseId": "CC-BY-NC-SA-3.0-IGO", "seeAlso": [ @@ -1853,7 +1853,7 @@ "reference": "https://spdx.org/licenses/CC-BY-NC-SA-4.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-4.0.json", - "referenceNumber": 556, + "referenceNumber": 89, "name": "Creative Commons Attribution Non Commercial Share Alike 4.0 International", "licenseId": "CC-BY-NC-SA-4.0", "seeAlso": [ @@ -1865,7 +1865,7 @@ "reference": "https://spdx.org/licenses/CC-BY-ND-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-ND-1.0.json", - "referenceNumber": 508, + "referenceNumber": 118, "name": "Creative Commons Attribution No Derivatives 1.0 Generic", "licenseId": "CC-BY-ND-1.0", "seeAlso": [ @@ -1878,7 +1878,7 @@ "reference": "https://spdx.org/licenses/CC-BY-ND-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-ND-2.0.json", - "referenceNumber": 405, + "referenceNumber": 587, "name": "Creative Commons Attribution No Derivatives 2.0 Generic", "licenseId": "CC-BY-ND-2.0", "seeAlso": [ @@ -1891,7 +1891,7 @@ "reference": "https://spdx.org/licenses/CC-BY-ND-2.5.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-ND-2.5.json", - "referenceNumber": 587, + "referenceNumber": 394, "name": "Creative Commons Attribution No Derivatives 2.5 Generic", "licenseId": "CC-BY-ND-2.5", "seeAlso": [ @@ -1904,7 +1904,7 @@ "reference": "https://spdx.org/licenses/CC-BY-ND-3.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-ND-3.0.json", - "referenceNumber": 604, + "referenceNumber": 457, "name": "Creative Commons Attribution No Derivatives 3.0 Unported", "licenseId": "CC-BY-ND-3.0", "seeAlso": [ @@ -1917,7 +1917,7 @@ "reference": "https://spdx.org/licenses/CC-BY-ND-3.0-DE.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-ND-3.0-DE.json", - "referenceNumber": 533, + "referenceNumber": 610, "name": "Creative Commons Attribution No Derivatives 3.0 Germany", "licenseId": "CC-BY-ND-3.0-DE", "seeAlso": [ @@ -1929,7 +1929,7 @@ "reference": "https://spdx.org/licenses/CC-BY-ND-4.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-ND-4.0.json", - "referenceNumber": 203, + "referenceNumber": 11, "name": "Creative Commons Attribution No Derivatives 4.0 International", "licenseId": "CC-BY-ND-4.0", "seeAlso": [ @@ -1942,7 +1942,7 @@ "reference": "https://spdx.org/licenses/CC-BY-SA-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-1.0.json", - "referenceNumber": 519, + "referenceNumber": 384, "name": "Creative Commons Attribution Share Alike 1.0 Generic", "licenseId": "CC-BY-SA-1.0", "seeAlso": [ @@ -1954,7 +1954,7 @@ "reference": "https://spdx.org/licenses/CC-BY-SA-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-2.0.json", - "referenceNumber": 691, + "referenceNumber": 260, "name": "Creative Commons Attribution Share Alike 2.0 Generic", "licenseId": "CC-BY-SA-2.0", "seeAlso": [ @@ -1966,7 +1966,7 @@ "reference": "https://spdx.org/licenses/CC-BY-SA-2.0-UK.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-2.0-UK.json", - "referenceNumber": 515, + "referenceNumber": 197, "name": "Creative Commons Attribution Share Alike 2.0 England and Wales", "licenseId": "CC-BY-SA-2.0-UK", "seeAlso": [ @@ -1978,7 +1978,7 @@ "reference": "https://spdx.org/licenses/CC-BY-SA-2.1-JP.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-2.1-JP.json", - "referenceNumber": 157, + "referenceNumber": 149, "name": "Creative Commons Attribution Share Alike 2.1 Japan", "licenseId": "CC-BY-SA-2.1-JP", "seeAlso": [ @@ -1990,7 +1990,7 @@ "reference": "https://spdx.org/licenses/CC-BY-SA-2.5.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-2.5.json", - "referenceNumber": 240, + "referenceNumber": 631, "name": "Creative Commons Attribution Share Alike 2.5 Generic", "licenseId": "CC-BY-SA-2.5", "seeAlso": [ @@ -2002,7 +2002,7 @@ "reference": "https://spdx.org/licenses/CC-BY-SA-3.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-3.0.json", - "referenceNumber": 298, + "referenceNumber": 79, "name": "Creative Commons Attribution Share Alike 3.0 Unported", "licenseId": "CC-BY-SA-3.0", "seeAlso": [ @@ -2014,7 +2014,7 @@ "reference": "https://spdx.org/licenses/CC-BY-SA-3.0-AT.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-3.0-AT.json", - "referenceNumber": 224, + "referenceNumber": 493, "name": "Creative Commons Attribution Share Alike 3.0 Austria", "licenseId": "CC-BY-SA-3.0-AT", "seeAlso": [ @@ -2026,7 +2026,7 @@ "reference": "https://spdx.org/licenses/CC-BY-SA-3.0-DE.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-3.0-DE.json", - "referenceNumber": 403, + "referenceNumber": 683, "name": "Creative Commons Attribution Share Alike 3.0 Germany", "licenseId": "CC-BY-SA-3.0-DE", "seeAlso": [ @@ -2038,7 +2038,7 @@ "reference": "https://spdx.org/licenses/CC-BY-SA-3.0-IGO.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-3.0-IGO.json", - "referenceNumber": 393, + "referenceNumber": 571, "name": "Creative Commons Attribution-ShareAlike 3.0 IGO", "licenseId": "CC-BY-SA-3.0-IGO", "seeAlso": [ @@ -2050,7 +2050,7 @@ "reference": "https://spdx.org/licenses/CC-BY-SA-4.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-4.0.json", - "referenceNumber": 83, + "referenceNumber": 256, "name": "Creative Commons Attribution Share Alike 4.0 International", "licenseId": "CC-BY-SA-4.0", "seeAlso": [ @@ -2063,7 +2063,7 @@ "reference": "https://spdx.org/licenses/CC-PDDC.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-PDDC.json", - "referenceNumber": 368, + "referenceNumber": 273, "name": "Creative Commons Public Domain Dedication and Certification", "licenseId": "CC-PDDC", "seeAlso": [ @@ -2075,7 +2075,7 @@ "reference": "https://spdx.org/licenses/CC-PDM-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-PDM-1.0.json", - "referenceNumber": 105, + "referenceNumber": 547, "name": "Creative Commons Public Domain Mark 1.0 Universal", "licenseId": "CC-PDM-1.0", "seeAlso": [ @@ -2088,7 +2088,7 @@ "reference": "https://spdx.org/licenses/CC-SA-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC-SA-1.0.json", - "referenceNumber": 671, + "referenceNumber": 85, "name": "Creative Commons Share Alike 1.0 Generic", "licenseId": "CC-SA-1.0", "seeAlso": [ @@ -2100,7 +2100,7 @@ "reference": "https://spdx.org/licenses/CC0-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CC0-1.0.json", - "referenceNumber": 469, + "referenceNumber": 369, "name": "Creative Commons Zero v1.0 Universal", "licenseId": "CC0-1.0", "seeAlso": [ @@ -2113,7 +2113,7 @@ "reference": "https://spdx.org/licenses/CDDL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CDDL-1.0.json", - "referenceNumber": 195, + "referenceNumber": 407, "name": "Common Development and Distribution License 1.0", "licenseId": "CDDL-1.0", "seeAlso": [ @@ -2126,7 +2126,7 @@ "reference": "https://spdx.org/licenses/CDDL-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CDDL-1.1.json", - "referenceNumber": 416, + "referenceNumber": 124, "name": "Common Development and Distribution License 1.1", "licenseId": "CDDL-1.1", "seeAlso": [ @@ -2139,7 +2139,7 @@ "reference": "https://spdx.org/licenses/CDL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CDL-1.0.json", - "referenceNumber": 147, + "referenceNumber": 385, "name": "Common Documentation License 1.0", "licenseId": "CDL-1.0", "seeAlso": [ @@ -2153,7 +2153,7 @@ "reference": "https://spdx.org/licenses/CDLA-Permissive-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CDLA-Permissive-1.0.json", - "referenceNumber": 377, + "referenceNumber": 454, "name": "Community Data License Agreement Permissive 1.0", "licenseId": "CDLA-Permissive-1.0", "seeAlso": [ @@ -2165,7 +2165,7 @@ "reference": "https://spdx.org/licenses/CDLA-Permissive-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CDLA-Permissive-2.0.json", - "referenceNumber": 91, + "referenceNumber": 520, "name": "Community Data License Agreement Permissive 2.0", "licenseId": "CDLA-Permissive-2.0", "seeAlso": [ @@ -2177,7 +2177,7 @@ "reference": "https://spdx.org/licenses/CDLA-Sharing-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CDLA-Sharing-1.0.json", - "referenceNumber": 500, + "referenceNumber": 548, "name": "Community Data License Agreement Sharing 1.0", "licenseId": "CDLA-Sharing-1.0", "seeAlso": [ @@ -2189,7 +2189,7 @@ "reference": "https://spdx.org/licenses/CECILL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CECILL-1.0.json", - "referenceNumber": 607, + "referenceNumber": 468, "name": "CeCILL Free Software License Agreement v1.0", "licenseId": "CECILL-1.0", "seeAlso": [ @@ -2201,7 +2201,7 @@ "reference": "https://spdx.org/licenses/CECILL-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CECILL-1.1.json", - "referenceNumber": 25, + "referenceNumber": 100, "name": "CeCILL Free Software License Agreement v1.1", "licenseId": "CECILL-1.1", "seeAlso": [ @@ -2213,7 +2213,7 @@ "reference": "https://spdx.org/licenses/CECILL-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CECILL-2.0.json", - "referenceNumber": 293, + "referenceNumber": 370, "name": "CeCILL Free Software License Agreement v2.0", "licenseId": "CECILL-2.0", "seeAlso": [ @@ -2226,7 +2226,7 @@ "reference": "https://spdx.org/licenses/CECILL-2.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CECILL-2.1.json", - "referenceNumber": 412, + "referenceNumber": 95, "name": "CeCILL Free Software License Agreement v2.1", "licenseId": "CECILL-2.1", "seeAlso": [ @@ -2238,7 +2238,7 @@ "reference": "https://spdx.org/licenses/CECILL-B.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CECILL-B.json", - "referenceNumber": 681, + "referenceNumber": 425, "name": "CeCILL-B Free Software License Agreement", "licenseId": "CECILL-B", "seeAlso": [ @@ -2251,7 +2251,7 @@ "reference": "https://spdx.org/licenses/CECILL-C.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CECILL-C.json", - "referenceNumber": 14, + "referenceNumber": 45, "name": "CeCILL-C Free Software License Agreement", "licenseId": "CECILL-C", "seeAlso": [ @@ -2264,7 +2264,7 @@ "reference": "https://spdx.org/licenses/CERN-OHL-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CERN-OHL-1.1.json", - "referenceNumber": 166, + "referenceNumber": 398, "name": "CERN Open Hardware Licence v1.1", "licenseId": "CERN-OHL-1.1", "seeAlso": [ @@ -2276,7 +2276,7 @@ "reference": "https://spdx.org/licenses/CERN-OHL-1.2.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CERN-OHL-1.2.json", - "referenceNumber": 35, + "referenceNumber": 318, "name": "CERN Open Hardware Licence v1.2", "licenseId": "CERN-OHL-1.2", "seeAlso": [ @@ -2288,7 +2288,7 @@ "reference": "https://spdx.org/licenses/CERN-OHL-P-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CERN-OHL-P-2.0.json", - "referenceNumber": 388, + "referenceNumber": 200, "name": "CERN Open Hardware Licence Version 2 - Permissive", "licenseId": "CERN-OHL-P-2.0", "seeAlso": [ @@ -2300,7 +2300,7 @@ "reference": "https://spdx.org/licenses/CERN-OHL-S-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CERN-OHL-S-2.0.json", - "referenceNumber": 426, + "referenceNumber": 175, "name": "CERN Open Hardware Licence Version 2 - Strongly Reciprocal", "licenseId": "CERN-OHL-S-2.0", "seeAlso": [ @@ -2312,7 +2312,7 @@ "reference": "https://spdx.org/licenses/CERN-OHL-W-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CERN-OHL-W-2.0.json", - "referenceNumber": 612, + "referenceNumber": 219, "name": "CERN Open Hardware Licence Version 2 - Weakly Reciprocal", "licenseId": "CERN-OHL-W-2.0", "seeAlso": [ @@ -2324,7 +2324,7 @@ "reference": "https://spdx.org/licenses/CFITSIO.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CFITSIO.json", - "referenceNumber": 554, + "referenceNumber": 207, "name": "CFITSIO License", "licenseId": "CFITSIO", "seeAlso": [ @@ -2337,7 +2337,7 @@ "reference": "https://spdx.org/licenses/check-cvs.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/check-cvs.json", - "referenceNumber": 342, + "referenceNumber": 377, "name": "check-cvs License", "licenseId": "check-cvs", "seeAlso": [ @@ -2349,7 +2349,7 @@ "reference": "https://spdx.org/licenses/checkmk.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/checkmk.json", - "referenceNumber": 156, + "referenceNumber": 389, "name": "Checkmk License", "licenseId": "checkmk", "seeAlso": [ @@ -2361,7 +2361,7 @@ "reference": "https://spdx.org/licenses/ClArtistic.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/ClArtistic.json", - "referenceNumber": 624, + "referenceNumber": 690, "name": "Clarified Artistic License", "licenseId": "ClArtistic", "seeAlso": [ @@ -2375,7 +2375,7 @@ "reference": "https://spdx.org/licenses/Clips.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Clips.json", - "referenceNumber": 621, + "referenceNumber": 65, "name": "Clips License", "licenseId": "Clips", "seeAlso": [ @@ -2387,7 +2387,7 @@ "reference": "https://spdx.org/licenses/CMU-Mach.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CMU-Mach.json", - "referenceNumber": 355, + "referenceNumber": 178, "name": "CMU Mach License", "licenseId": "CMU-Mach", "seeAlso": [ @@ -2399,7 +2399,7 @@ "reference": "https://spdx.org/licenses/CMU-Mach-nodoc.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CMU-Mach-nodoc.json", - "referenceNumber": 152, + "referenceNumber": 391, "name": "CMU Mach - no notices-in-documentation variant", "licenseId": "CMU-Mach-nodoc", "seeAlso": [ @@ -2412,7 +2412,7 @@ "reference": "https://spdx.org/licenses/CNRI-Jython.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CNRI-Jython.json", - "referenceNumber": 661, + "referenceNumber": 138, "name": "CNRI Jython License", "licenseId": "CNRI-Jython", "seeAlso": [ @@ -2424,7 +2424,7 @@ "reference": "https://spdx.org/licenses/CNRI-Python.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CNRI-Python.json", - "referenceNumber": 459, + "referenceNumber": 352, "name": "CNRI Python License", "licenseId": "CNRI-Python", "seeAlso": [ @@ -2436,7 +2436,7 @@ "reference": "https://spdx.org/licenses/CNRI-Python-GPL-Compatible.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CNRI-Python-GPL-Compatible.json", - "referenceNumber": 144, + "referenceNumber": 673, "name": "CNRI Python Open Source GPL Compatible License Agreement", "licenseId": "CNRI-Python-GPL-Compatible", "seeAlso": [ @@ -2448,7 +2448,7 @@ "reference": "https://spdx.org/licenses/COIL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/COIL-1.0.json", - "referenceNumber": 389, + "referenceNumber": 526, "name": "Copyfree Open Innovation License", "licenseId": "COIL-1.0", "seeAlso": [ @@ -2460,7 +2460,7 @@ "reference": "https://spdx.org/licenses/Community-Spec-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Community-Spec-1.0.json", - "referenceNumber": 312, + "referenceNumber": 695, "name": "Community Specification License 1.0", "licenseId": "Community-Spec-1.0", "seeAlso": [ @@ -2472,7 +2472,7 @@ "reference": "https://spdx.org/licenses/Condor-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Condor-1.1.json", - "referenceNumber": 151, + "referenceNumber": 114, "name": "Condor Public License v1.1", "licenseId": "Condor-1.1", "seeAlso": [ @@ -2486,7 +2486,7 @@ "reference": "https://spdx.org/licenses/copyleft-next-0.3.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/copyleft-next-0.3.0.json", - "referenceNumber": 141, + "referenceNumber": 122, "name": "copyleft-next 0.3.0", "licenseId": "copyleft-next-0.3.0", "seeAlso": [ @@ -2498,7 +2498,7 @@ "reference": "https://spdx.org/licenses/copyleft-next-0.3.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/copyleft-next-0.3.1.json", - "referenceNumber": 190, + "referenceNumber": 583, "name": "copyleft-next 0.3.1", "licenseId": "copyleft-next-0.3.1", "seeAlso": [ @@ -2510,7 +2510,7 @@ "reference": "https://spdx.org/licenses/Cornell-Lossless-JPEG.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Cornell-Lossless-JPEG.json", - "referenceNumber": 165, + "referenceNumber": 331, "name": "Cornell Lossless JPEG License", "licenseId": "Cornell-Lossless-JPEG", "seeAlso": [ @@ -2524,7 +2524,7 @@ "reference": "https://spdx.org/licenses/CPAL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CPAL-1.0.json", - "referenceNumber": 155, + "referenceNumber": 147, "name": "Common Public Attribution License 1.0", "licenseId": "CPAL-1.0", "seeAlso": [ @@ -2537,7 +2537,7 @@ "reference": "https://spdx.org/licenses/CPL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CPL-1.0.json", - "referenceNumber": 162, + "referenceNumber": 367, "name": "Common Public License 1.0", "licenseId": "CPL-1.0", "seeAlso": [ @@ -2550,7 +2550,7 @@ "reference": "https://spdx.org/licenses/CPOL-1.02.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CPOL-1.02.json", - "referenceNumber": 124, + "referenceNumber": 250, "name": "Code Project Open License 1.02", "licenseId": "CPOL-1.02", "seeAlso": [ @@ -2563,7 +2563,7 @@ "reference": "https://spdx.org/licenses/Cronyx.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Cronyx.json", - "referenceNumber": 517, + "referenceNumber": 32, "name": "Cronyx License", "licenseId": "Cronyx", "seeAlso": [ @@ -2578,7 +2578,7 @@ "reference": "https://spdx.org/licenses/Crossword.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Crossword.json", - "referenceNumber": 125, + "referenceNumber": 347, "name": "Crossword License", "licenseId": "Crossword", "seeAlso": [ @@ -2590,7 +2590,7 @@ "reference": "https://spdx.org/licenses/CryptoSwift.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CryptoSwift.json", - "referenceNumber": 644, + "referenceNumber": 323, "name": "CryptoSwift License", "licenseId": "CryptoSwift", "seeAlso": [ @@ -2602,7 +2602,7 @@ "reference": "https://spdx.org/licenses/CrystalStacker.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CrystalStacker.json", - "referenceNumber": 386, + "referenceNumber": 449, "name": "CrystalStacker License", "licenseId": "CrystalStacker", "seeAlso": [ @@ -2614,7 +2614,7 @@ "reference": "https://spdx.org/licenses/CUA-OPL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/CUA-OPL-1.0.json", - "referenceNumber": 530, + "referenceNumber": 298, "name": "CUA Office Public License v1.0", "licenseId": "CUA-OPL-1.0", "seeAlso": [ @@ -2626,7 +2626,7 @@ "reference": "https://spdx.org/licenses/Cube.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Cube.json", - "referenceNumber": 421, + "referenceNumber": 140, "name": "Cube License", "licenseId": "Cube", "seeAlso": [ @@ -2638,7 +2638,7 @@ "reference": "https://spdx.org/licenses/curl.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/curl.json", - "referenceNumber": 279, + "referenceNumber": 160, "name": "curl License", "licenseId": "curl", "seeAlso": [ @@ -2650,7 +2650,7 @@ "reference": "https://spdx.org/licenses/cve-tou.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/cve-tou.json", - "referenceNumber": 336, + "referenceNumber": 216, "name": "Common Vulnerability Enumeration ToU License", "licenseId": "cve-tou", "seeAlso": [ @@ -2662,7 +2662,7 @@ "reference": "https://spdx.org/licenses/D-FSL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/D-FSL-1.0.json", - "referenceNumber": 471, + "referenceNumber": 545, "name": "Deutsche Freie Software Lizenz", "licenseId": "D-FSL-1.0", "seeAlso": [ @@ -2681,7 +2681,7 @@ "reference": "https://spdx.org/licenses/DEC-3-Clause.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/DEC-3-Clause.json", - "referenceNumber": 352, + "referenceNumber": 164, "name": "DEC 3-Clause License", "licenseId": "DEC-3-Clause", "seeAlso": [ @@ -2693,7 +2693,7 @@ "reference": "https://spdx.org/licenses/diffmark.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/diffmark.json", - "referenceNumber": 102, + "referenceNumber": 50, "name": "diffmark license", "licenseId": "diffmark", "seeAlso": [ @@ -2705,7 +2705,7 @@ "reference": "https://spdx.org/licenses/DL-DE-BY-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/DL-DE-BY-2.0.json", - "referenceNumber": 348, + "referenceNumber": 530, "name": "Data licence Germany – attribution – version 2.0", "licenseId": "DL-DE-BY-2.0", "seeAlso": [ @@ -2717,7 +2717,7 @@ "reference": "https://spdx.org/licenses/DL-DE-ZERO-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/DL-DE-ZERO-2.0.json", - "referenceNumber": 323, + "referenceNumber": 139, "name": "Data licence Germany – zero – version 2.0", "licenseId": "DL-DE-ZERO-2.0", "seeAlso": [ @@ -2729,7 +2729,7 @@ "reference": "https://spdx.org/licenses/DOC.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/DOC.json", - "referenceNumber": 529, + "referenceNumber": 31, "name": "DOC License", "licenseId": "DOC", "seeAlso": [ @@ -2742,7 +2742,7 @@ "reference": "https://spdx.org/licenses/DocBook-DTD.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/DocBook-DTD.json", - "referenceNumber": 138, + "referenceNumber": 603, "name": "DocBook DTD License", "licenseId": "DocBook-DTD", "seeAlso": [ @@ -2754,7 +2754,7 @@ "reference": "https://spdx.org/licenses/DocBook-Schema.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/DocBook-Schema.json", - "referenceNumber": 483, + "referenceNumber": 184, "name": "DocBook Schema License", "licenseId": "DocBook-Schema", "seeAlso": [ @@ -2766,7 +2766,7 @@ "reference": "https://spdx.org/licenses/DocBook-Stylesheet.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/DocBook-Stylesheet.json", - "referenceNumber": 448, + "referenceNumber": 494, "name": "DocBook Stylesheet License", "licenseId": "DocBook-Stylesheet", "seeAlso": [ @@ -2778,7 +2778,7 @@ "reference": "https://spdx.org/licenses/DocBook-XML.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/DocBook-XML.json", - "referenceNumber": 65, + "referenceNumber": 672, "name": "DocBook XML License", "licenseId": "DocBook-XML", "seeAlso": [ @@ -2790,7 +2790,7 @@ "reference": "https://spdx.org/licenses/Dotseqn.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Dotseqn.json", - "referenceNumber": 383, + "referenceNumber": 257, "name": "Dotseqn License", "licenseId": "Dotseqn", "seeAlso": [ @@ -2802,7 +2802,7 @@ "reference": "https://spdx.org/licenses/DRL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/DRL-1.0.json", - "referenceNumber": 395, + "referenceNumber": 446, "name": "Detection Rule License 1.0", "licenseId": "DRL-1.0", "seeAlso": [ @@ -2814,7 +2814,7 @@ "reference": "https://spdx.org/licenses/DRL-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/DRL-1.1.json", - "referenceNumber": 44, + "referenceNumber": 135, "name": "Detection Rule License 1.1", "licenseId": "DRL-1.1", "seeAlso": [ @@ -2826,7 +2826,7 @@ "reference": "https://spdx.org/licenses/DSDP.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/DSDP.json", - "referenceNumber": 545, + "referenceNumber": 336, "name": "DSDP License", "licenseId": "DSDP", "seeAlso": [ @@ -2838,7 +2838,7 @@ "reference": "https://spdx.org/licenses/dtoa.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/dtoa.json", - "referenceNumber": 601, + "referenceNumber": 578, "name": "David M. Gay dtoa License", "licenseId": "dtoa", "seeAlso": [ @@ -2851,7 +2851,7 @@ "reference": "https://spdx.org/licenses/dvipdfm.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/dvipdfm.json", - "referenceNumber": 308, + "referenceNumber": 319, "name": "dvipdfm License", "licenseId": "dvipdfm", "seeAlso": [ @@ -2863,7 +2863,7 @@ "reference": "https://spdx.org/licenses/ECL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/ECL-1.0.json", - "referenceNumber": 651, + "referenceNumber": 641, "name": "Educational Community License v1.0", "licenseId": "ECL-1.0", "seeAlso": [ @@ -2875,7 +2875,7 @@ "reference": "https://spdx.org/licenses/ECL-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/ECL-2.0.json", - "referenceNumber": 485, + "referenceNumber": 338, "name": "Educational Community License v2.0", "licenseId": "ECL-2.0", "seeAlso": [ @@ -2888,7 +2888,7 @@ "reference": "https://spdx.org/licenses/eCos-2.0.html", "isDeprecatedLicenseId": true, "detailsUrl": "https://spdx.org/licenses/eCos-2.0.json", - "referenceNumber": 683, + "referenceNumber": 647, "name": "eCos license version 2.0", "licenseId": "eCos-2.0", "seeAlso": [ @@ -2901,7 +2901,7 @@ "reference": "https://spdx.org/licenses/EFL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/EFL-1.0.json", - "referenceNumber": 418, + "referenceNumber": 145, "name": "Eiffel Forum License v1.0", "licenseId": "EFL-1.0", "seeAlso": [ @@ -2914,7 +2914,7 @@ "reference": "https://spdx.org/licenses/EFL-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/EFL-2.0.json", - "referenceNumber": 461, + "referenceNumber": 604, "name": "Eiffel Forum License v2.0", "licenseId": "EFL-2.0", "seeAlso": [ @@ -2928,7 +2928,7 @@ "reference": "https://spdx.org/licenses/eGenix.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/eGenix.json", - "referenceNumber": 116, + "referenceNumber": 613, "name": "eGenix.com Public License 1.1.0", "licenseId": "eGenix", "seeAlso": [ @@ -2941,7 +2941,7 @@ "reference": "https://spdx.org/licenses/Elastic-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Elastic-2.0.json", - "referenceNumber": 680, + "referenceNumber": 396, "name": "Elastic License 2.0", "licenseId": "Elastic-2.0", "seeAlso": [ @@ -2954,7 +2954,7 @@ "reference": "https://spdx.org/licenses/Entessa.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Entessa.json", - "referenceNumber": 659, + "referenceNumber": 40, "name": "Entessa Public License v1.0", "licenseId": "Entessa", "seeAlso": [ @@ -2966,7 +2966,7 @@ "reference": "https://spdx.org/licenses/EPICS.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/EPICS.json", - "referenceNumber": 688, + "referenceNumber": 158, "name": "EPICS Open License", "licenseId": "EPICS", "seeAlso": [ @@ -2978,7 +2978,7 @@ "reference": "https://spdx.org/licenses/EPL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/EPL-1.0.json", - "referenceNumber": 436, + "referenceNumber": 558, "name": "Eclipse Public License 1.0", "licenseId": "EPL-1.0", "seeAlso": [ @@ -2992,7 +2992,7 @@ "reference": "https://spdx.org/licenses/EPL-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/EPL-2.0.json", - "referenceNumber": 272, + "referenceNumber": 326, "name": "Eclipse Public License 2.0", "licenseId": "EPL-2.0", "seeAlso": [ @@ -3008,7 +3008,7 @@ "reference": "https://spdx.org/licenses/ErlPL-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/ErlPL-1.1.json", - "referenceNumber": 686, + "referenceNumber": 541, "name": "Erlang Public License v1.1", "licenseId": "ErlPL-1.1", "seeAlso": [ @@ -3020,7 +3020,7 @@ "reference": "https://spdx.org/licenses/etalab-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/etalab-2.0.json", - "referenceNumber": 495, + "referenceNumber": 363, "name": "Etalab Open License 2.0", "licenseId": "etalab-2.0", "seeAlso": [ @@ -3033,7 +3033,7 @@ "reference": "https://spdx.org/licenses/EUDatagrid.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/EUDatagrid.json", - "referenceNumber": 326, + "referenceNumber": 262, "name": "EU DataGrid Software License", "licenseId": "EUDatagrid", "seeAlso": [ @@ -3047,7 +3047,7 @@ "reference": "https://spdx.org/licenses/EUPL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/EUPL-1.0.json", - "referenceNumber": 303, + "referenceNumber": 405, "name": "European Union Public License 1.0", "licenseId": "EUPL-1.0", "seeAlso": [ @@ -3060,7 +3060,7 @@ "reference": "https://spdx.org/licenses/EUPL-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/EUPL-1.1.json", - "referenceNumber": 69, + "referenceNumber": 393, "name": "European Union Public License 1.1", "licenseId": "EUPL-1.1", "seeAlso": [ @@ -3075,7 +3075,7 @@ "reference": "https://spdx.org/licenses/EUPL-1.2.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/EUPL-1.2.json", - "referenceNumber": 305, + "referenceNumber": 596, "name": "European Union Public License 1.2", "licenseId": "EUPL-1.2", "seeAlso": [ @@ -3093,7 +3093,7 @@ "reference": "https://spdx.org/licenses/Eurosym.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Eurosym.json", - "referenceNumber": 558, + "referenceNumber": 299, "name": "Eurosym License", "licenseId": "Eurosym", "seeAlso": [ @@ -3105,7 +3105,7 @@ "reference": "https://spdx.org/licenses/Fair.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Fair.json", - "referenceNumber": 636, + "referenceNumber": 190, "name": "Fair License", "licenseId": "Fair", "seeAlso": [ @@ -3118,7 +3118,7 @@ "reference": "https://spdx.org/licenses/FBM.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/FBM.json", - "referenceNumber": 542, + "referenceNumber": 476, "name": "Fuzzy Bitmap License", "licenseId": "FBM", "seeAlso": [ @@ -3130,7 +3130,7 @@ "reference": "https://spdx.org/licenses/FDK-AAC.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/FDK-AAC.json", - "referenceNumber": 334, + "referenceNumber": 44, "name": "Fraunhofer FDK AAC Codec Library", "licenseId": "FDK-AAC", "seeAlso": [ @@ -3143,7 +3143,7 @@ "reference": "https://spdx.org/licenses/Ferguson-Twofish.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Ferguson-Twofish.json", - "referenceNumber": 216, + "referenceNumber": 662, "name": "Ferguson Twofish License", "licenseId": "Ferguson-Twofish", "seeAlso": [ @@ -3155,7 +3155,7 @@ "reference": "https://spdx.org/licenses/Frameworx-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Frameworx-1.0.json", - "referenceNumber": 629, + "referenceNumber": 376, "name": "Frameworx Open License 1.0", "licenseId": "Frameworx-1.0", "seeAlso": [ @@ -3167,7 +3167,7 @@ "reference": "https://spdx.org/licenses/FreeBSD-DOC.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/FreeBSD-DOC.json", - "referenceNumber": 295, + "referenceNumber": 645, "name": "FreeBSD Documentation License", "licenseId": "FreeBSD-DOC", "seeAlso": [ @@ -3179,7 +3179,7 @@ "reference": "https://spdx.org/licenses/FreeImage.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/FreeImage.json", - "referenceNumber": 503, + "referenceNumber": 264, "name": "FreeImage Public License v1.0", "licenseId": "FreeImage", "seeAlso": [ @@ -3191,7 +3191,7 @@ "reference": "https://spdx.org/licenses/FSFAP.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/FSFAP.json", - "referenceNumber": 360, + "referenceNumber": 561, "name": "FSF All Permissive License", "licenseId": "FSFAP", "seeAlso": [ @@ -3204,7 +3204,7 @@ "reference": "https://spdx.org/licenses/FSFAP-no-warranty-disclaimer.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/FSFAP-no-warranty-disclaimer.json", - "referenceNumber": 699, + "referenceNumber": 629, "name": "FSF All Permissive License (without Warranty)", "licenseId": "FSFAP-no-warranty-disclaimer", "seeAlso": [ @@ -3216,7 +3216,7 @@ "reference": "https://spdx.org/licenses/FSFUL.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/FSFUL.json", - "referenceNumber": 553, + "referenceNumber": 59, "name": "FSF Unlimited License", "licenseId": "FSFUL", "seeAlso": [ @@ -3228,7 +3228,7 @@ "reference": "https://spdx.org/licenses/FSFULLR.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/FSFULLR.json", - "referenceNumber": 524, + "referenceNumber": 322, "name": "FSF Unlimited License (with License Retention)", "licenseId": "FSFULLR", "seeAlso": [ @@ -3240,7 +3240,7 @@ "reference": "https://spdx.org/licenses/FSFULLRSD.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/FSFULLRSD.json", - "referenceNumber": 47, + "referenceNumber": 300, "name": "FSF Unlimited License (with License Retention and Short Disclaimer)", "licenseId": "FSFULLRSD", "seeAlso": [ @@ -3252,7 +3252,7 @@ "reference": "https://spdx.org/licenses/FSFULLRWD.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/FSFULLRWD.json", - "referenceNumber": 568, + "referenceNumber": 245, "name": "FSF Unlimited License (With License Retention and Warranty Disclaimer)", "licenseId": "FSFULLRWD", "seeAlso": [ @@ -3264,7 +3264,7 @@ "reference": "https://spdx.org/licenses/FSL-1.1-ALv2.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/FSL-1.1-ALv2.json", - "referenceNumber": 422, + "referenceNumber": 585, "name": "Functional Source License, Version 1.1, ALv2 Future License", "licenseId": "FSL-1.1-ALv2", "seeAlso": [ @@ -3276,7 +3276,7 @@ "reference": "https://spdx.org/licenses/FSL-1.1-MIT.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/FSL-1.1-MIT.json", - "referenceNumber": 126, + "referenceNumber": 639, "name": "Functional Source License, Version 1.1, MIT Future License", "licenseId": "FSL-1.1-MIT", "seeAlso": [ @@ -3288,7 +3288,7 @@ "reference": "https://spdx.org/licenses/FTL.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/FTL.json", - "referenceNumber": 424, + "referenceNumber": 417, "name": "Freetype Project License", "licenseId": "FTL", "seeAlso": [ @@ -3303,7 +3303,7 @@ "reference": "https://spdx.org/licenses/Furuseth.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Furuseth.json", - "referenceNumber": 1, + "referenceNumber": 72, "name": "Furuseth License", "licenseId": "Furuseth", "seeAlso": [ @@ -3315,7 +3315,7 @@ "reference": "https://spdx.org/licenses/fwlw.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/fwlw.json", - "referenceNumber": 208, + "referenceNumber": 529, "name": "fwlw License", "licenseId": "fwlw", "seeAlso": [ @@ -3327,7 +3327,7 @@ "reference": "https://spdx.org/licenses/Game-Programming-Gems.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Game-Programming-Gems.json", - "referenceNumber": 55, + "referenceNumber": 246, "name": "Game Programming Gems License", "licenseId": "Game-Programming-Gems", "seeAlso": [ @@ -3339,7 +3339,7 @@ "reference": "https://spdx.org/licenses/GCR-docs.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/GCR-docs.json", - "referenceNumber": 583, + "referenceNumber": 270, "name": "Gnome GCR Documentation License", "licenseId": "GCR-docs", "seeAlso": [ @@ -3351,7 +3351,7 @@ "reference": "https://spdx.org/licenses/GD.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/GD.json", - "referenceNumber": 525, + "referenceNumber": 549, "name": "GD License", "licenseId": "GD", "seeAlso": [ @@ -3363,7 +3363,7 @@ "reference": "https://spdx.org/licenses/generic-xts.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/generic-xts.json", - "referenceNumber": 30, + "referenceNumber": 132, "name": "Generic XTS License", "licenseId": "generic-xts", "seeAlso": [ @@ -3375,7 +3375,7 @@ "reference": "https://spdx.org/licenses/GFDL-1.1.html", "isDeprecatedLicenseId": true, "detailsUrl": "https://spdx.org/licenses/GFDL-1.1.json", - "referenceNumber": 259, + "referenceNumber": 533, "name": "GNU Free Documentation License v1.1", "licenseId": "GFDL-1.1", "seeAlso": [ @@ -3388,7 +3388,7 @@ "reference": "https://spdx.org/licenses/GFDL-1.1-invariants-only.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/GFDL-1.1-invariants-only.json", - "referenceNumber": 318, + "referenceNumber": 271, "name": "GNU Free Documentation License v1.1 only - invariants", "licenseId": "GFDL-1.1-invariants-only", "seeAlso": [ @@ -3400,7 +3400,7 @@ "reference": "https://spdx.org/licenses/GFDL-1.1-invariants-or-later.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/GFDL-1.1-invariants-or-later.json", - "referenceNumber": 85, + "referenceNumber": 538, "name": "GNU Free Documentation License v1.1 or later - invariants", "licenseId": "GFDL-1.1-invariants-or-later", "seeAlso": [ @@ -3412,7 +3412,7 @@ "reference": "https://spdx.org/licenses/GFDL-1.1-no-invariants-only.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/GFDL-1.1-no-invariants-only.json", - "referenceNumber": 72, + "referenceNumber": 609, "name": "GNU Free Documentation License v1.1 only - no invariants", "licenseId": "GFDL-1.1-no-invariants-only", "seeAlso": [ @@ -3424,7 +3424,7 @@ "reference": "https://spdx.org/licenses/GFDL-1.1-no-invariants-or-later.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/GFDL-1.1-no-invariants-or-later.json", - "referenceNumber": 566, + "referenceNumber": 689, "name": "GNU Free Documentation License v1.1 or later - no invariants", "licenseId": "GFDL-1.1-no-invariants-or-later", "seeAlso": [ @@ -3436,7 +3436,7 @@ "reference": "https://spdx.org/licenses/GFDL-1.1-only.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/GFDL-1.1-only.json", - "referenceNumber": 137, + "referenceNumber": 456, "name": "GNU Free Documentation License v1.1 only", "licenseId": "GFDL-1.1-only", "seeAlso": [ @@ -3449,7 +3449,7 @@ "reference": "https://spdx.org/licenses/GFDL-1.1-or-later.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/GFDL-1.1-or-later.json", - "referenceNumber": 347, + "referenceNumber": 67, "name": "GNU Free Documentation License v1.1 or later", "licenseId": "GFDL-1.1-or-later", "seeAlso": [ @@ -3462,7 +3462,7 @@ "reference": "https://spdx.org/licenses/GFDL-1.2.html", "isDeprecatedLicenseId": true, "detailsUrl": "https://spdx.org/licenses/GFDL-1.2.json", - "referenceNumber": 194, + "referenceNumber": 350, "name": "GNU Free Documentation License v1.2", "licenseId": "GFDL-1.2", "seeAlso": [ @@ -3475,7 +3475,7 @@ "reference": "https://spdx.org/licenses/GFDL-1.2-invariants-only.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/GFDL-1.2-invariants-only.json", - "referenceNumber": 598, + "referenceNumber": 192, "name": "GNU Free Documentation License v1.2 only - invariants", "licenseId": "GFDL-1.2-invariants-only", "seeAlso": [ @@ -3487,7 +3487,7 @@ "reference": "https://spdx.org/licenses/GFDL-1.2-invariants-or-later.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/GFDL-1.2-invariants-or-later.json", - "referenceNumber": 254, + "referenceNumber": 261, "name": "GNU Free Documentation License v1.2 or later - invariants", "licenseId": "GFDL-1.2-invariants-or-later", "seeAlso": [ @@ -3499,7 +3499,7 @@ "reference": "https://spdx.org/licenses/GFDL-1.2-no-invariants-only.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/GFDL-1.2-no-invariants-only.json", - "referenceNumber": 92, + "referenceNumber": 101, "name": "GNU Free Documentation License v1.2 only - no invariants", "licenseId": "GFDL-1.2-no-invariants-only", "seeAlso": [ @@ -3511,7 +3511,7 @@ "reference": "https://spdx.org/licenses/GFDL-1.2-no-invariants-or-later.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/GFDL-1.2-no-invariants-or-later.json", - "referenceNumber": 584, + "referenceNumber": 244, "name": "GNU Free Documentation License v1.2 or later - no invariants", "licenseId": "GFDL-1.2-no-invariants-or-later", "seeAlso": [ @@ -3523,7 +3523,7 @@ "reference": "https://spdx.org/licenses/GFDL-1.2-only.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/GFDL-1.2-only.json", - "referenceNumber": 454, + "referenceNumber": 595, "name": "GNU Free Documentation License v1.2 only", "licenseId": "GFDL-1.2-only", "seeAlso": [ @@ -3536,7 +3536,7 @@ "reference": "https://spdx.org/licenses/GFDL-1.2-or-later.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/GFDL-1.2-or-later.json", - "referenceNumber": 684, + "referenceNumber": 488, "name": "GNU Free Documentation License v1.2 or later", "licenseId": "GFDL-1.2-or-later", "seeAlso": [ @@ -3549,7 +3549,7 @@ "reference": "https://spdx.org/licenses/GFDL-1.3.html", "isDeprecatedLicenseId": true, "detailsUrl": "https://spdx.org/licenses/GFDL-1.3.json", - "referenceNumber": 63, + "referenceNumber": 652, "name": "GNU Free Documentation License v1.3", "licenseId": "GFDL-1.3", "seeAlso": [ @@ -3562,7 +3562,7 @@ "reference": "https://spdx.org/licenses/GFDL-1.3-invariants-only.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/GFDL-1.3-invariants-only.json", - "referenceNumber": 385, + "referenceNumber": 69, "name": "GNU Free Documentation License v1.3 only - invariants", "licenseId": "GFDL-1.3-invariants-only", "seeAlso": [ @@ -3574,7 +3574,7 @@ "reference": "https://spdx.org/licenses/GFDL-1.3-invariants-or-later.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/GFDL-1.3-invariants-or-later.json", - "referenceNumber": 639, + "referenceNumber": 550, "name": "GNU Free Documentation License v1.3 or later - invariants", "licenseId": "GFDL-1.3-invariants-or-later", "seeAlso": [ @@ -3586,7 +3586,7 @@ "reference": "https://spdx.org/licenses/GFDL-1.3-no-invariants-only.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/GFDL-1.3-no-invariants-only.json", - "referenceNumber": 113, + "referenceNumber": 516, "name": "GNU Free Documentation License v1.3 only - no invariants", "licenseId": "GFDL-1.3-no-invariants-only", "seeAlso": [ @@ -3598,7 +3598,7 @@ "reference": "https://spdx.org/licenses/GFDL-1.3-no-invariants-or-later.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/GFDL-1.3-no-invariants-or-later.json", - "referenceNumber": 513, + "referenceNumber": 73, "name": "GNU Free Documentation License v1.3 or later - no invariants", "licenseId": "GFDL-1.3-no-invariants-or-later", "seeAlso": [ @@ -3610,7 +3610,7 @@ "reference": "https://spdx.org/licenses/GFDL-1.3-only.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/GFDL-1.3-only.json", - "referenceNumber": 185, + "referenceNumber": 223, "name": "GNU Free Documentation License v1.3 only", "licenseId": "GFDL-1.3-only", "seeAlso": [ @@ -3623,7 +3623,7 @@ "reference": "https://spdx.org/licenses/GFDL-1.3-or-later.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/GFDL-1.3-or-later.json", - "referenceNumber": 90, + "referenceNumber": 633, "name": "GNU Free Documentation License v1.3 or later", "licenseId": "GFDL-1.3-or-later", "seeAlso": [ @@ -3636,7 +3636,7 @@ "reference": "https://spdx.org/licenses/Giftware.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Giftware.json", - "referenceNumber": 32, + "referenceNumber": 519, "name": "Giftware License", "licenseId": "Giftware", "seeAlso": [ @@ -3648,7 +3648,7 @@ "reference": "https://spdx.org/licenses/GL2PS.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/GL2PS.json", - "referenceNumber": 131, + "referenceNumber": 360, "name": "GL2PS License", "licenseId": "GL2PS", "seeAlso": [ @@ -3660,7 +3660,7 @@ "reference": "https://spdx.org/licenses/Glide.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Glide.json", - "referenceNumber": 332, + "referenceNumber": 71, "name": "3dfx Glide License", "licenseId": "Glide", "seeAlso": [ @@ -3672,7 +3672,7 @@ "reference": "https://spdx.org/licenses/Glulxe.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Glulxe.json", - "referenceNumber": 574, + "referenceNumber": 635, "name": "Glulxe License", "licenseId": "Glulxe", "seeAlso": [ @@ -3684,7 +3684,7 @@ "reference": "https://spdx.org/licenses/GLWTPL.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/GLWTPL.json", - "referenceNumber": 134, + "referenceNumber": 27, "name": "Good Luck With That Public License", "licenseId": "GLWTPL", "seeAlso": [ @@ -3696,7 +3696,7 @@ "reference": "https://spdx.org/licenses/gnuplot.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/gnuplot.json", - "referenceNumber": 442, + "referenceNumber": 247, "name": "gnuplot License", "licenseId": "gnuplot", "seeAlso": [ @@ -3709,7 +3709,7 @@ "reference": "https://spdx.org/licenses/GPL-1.0.html", "isDeprecatedLicenseId": true, "detailsUrl": "https://spdx.org/licenses/GPL-1.0.json", - "referenceNumber": 22, + "referenceNumber": 10, "name": "GNU General Public License v1.0 only", "licenseId": "GPL-1.0", "seeAlso": [ @@ -3721,7 +3721,7 @@ "reference": "https://spdx.org/licenses/GPL-1.0+.html", "isDeprecatedLicenseId": true, "detailsUrl": "https://spdx.org/licenses/GPL-1.0+.json", - "referenceNumber": 285, + "referenceNumber": 177, "name": "GNU General Public License v1.0 or later", "licenseId": "GPL-1.0+", "seeAlso": [ @@ -3733,7 +3733,7 @@ "reference": "https://spdx.org/licenses/GPL-1.0-only.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/GPL-1.0-only.json", - "referenceNumber": 404, + "referenceNumber": 152, "name": "GNU General Public License v1.0 only", "licenseId": "GPL-1.0-only", "seeAlso": [ @@ -3745,7 +3745,7 @@ "reference": "https://spdx.org/licenses/GPL-1.0-or-later.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/GPL-1.0-or-later.json", - "referenceNumber": 178, + "referenceNumber": 68, "name": "GNU General Public License v1.0 or later", "licenseId": "GPL-1.0-or-later", "seeAlso": [ @@ -3757,7 +3757,7 @@ "reference": "https://spdx.org/licenses/GPL-2.0.html", "isDeprecatedLicenseId": true, "detailsUrl": "https://spdx.org/licenses/GPL-2.0.json", - "referenceNumber": 487, + "referenceNumber": 688, "name": "GNU General Public License v2.0 only", "licenseId": "GPL-2.0", "seeAlso": [ @@ -3771,7 +3771,7 @@ "reference": "https://spdx.org/licenses/GPL-2.0+.html", "isDeprecatedLicenseId": true, "detailsUrl": "https://spdx.org/licenses/GPL-2.0+.json", - "referenceNumber": 247, + "referenceNumber": 144, "name": "GNU General Public License v2.0 or later", "licenseId": "GPL-2.0+", "seeAlso": [ @@ -3785,7 +3785,7 @@ "reference": "https://spdx.org/licenses/GPL-2.0-only.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/GPL-2.0-only.json", - "referenceNumber": 127, + "referenceNumber": 461, "name": "GNU General Public License v2.0 only", "licenseId": "GPL-2.0-only", "seeAlso": [ @@ -3801,7 +3801,7 @@ "reference": "https://spdx.org/licenses/GPL-2.0-or-later.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/GPL-2.0-or-later.json", - "referenceNumber": 618, + "referenceNumber": 99, "name": "GNU General Public License v2.0 or later", "licenseId": "GPL-2.0-or-later", "seeAlso": [ @@ -3816,7 +3816,7 @@ "reference": "https://spdx.org/licenses/GPL-2.0-with-autoconf-exception.html", "isDeprecatedLicenseId": true, "detailsUrl": "https://spdx.org/licenses/GPL-2.0-with-autoconf-exception.json", - "referenceNumber": 441, + "referenceNumber": 618, "name": "GNU General Public License v2.0 w/Autoconf exception", "licenseId": "GPL-2.0-with-autoconf-exception", "seeAlso": [ @@ -3828,7 +3828,7 @@ "reference": "https://spdx.org/licenses/GPL-2.0-with-bison-exception.html", "isDeprecatedLicenseId": true, "detailsUrl": "https://spdx.org/licenses/GPL-2.0-with-bison-exception.json", - "referenceNumber": 322, + "referenceNumber": 358, "name": "GNU General Public License v2.0 w/Bison exception", "licenseId": "GPL-2.0-with-bison-exception", "seeAlso": [ @@ -3840,7 +3840,7 @@ "reference": "https://spdx.org/licenses/GPL-2.0-with-classpath-exception.html", "isDeprecatedLicenseId": true, "detailsUrl": "https://spdx.org/licenses/GPL-2.0-with-classpath-exception.json", - "referenceNumber": 135, + "referenceNumber": 171, "name": "GNU General Public License v2.0 w/Classpath exception", "licenseId": "GPL-2.0-with-classpath-exception", "seeAlso": [ @@ -3852,7 +3852,7 @@ "reference": "https://spdx.org/licenses/GPL-2.0-with-font-exception.html", "isDeprecatedLicenseId": true, "detailsUrl": "https://spdx.org/licenses/GPL-2.0-with-font-exception.json", - "referenceNumber": 378, + "referenceNumber": 151, "name": "GNU General Public License v2.0 w/Font exception", "licenseId": "GPL-2.0-with-font-exception", "seeAlso": [ @@ -3864,7 +3864,7 @@ "reference": "https://spdx.org/licenses/GPL-2.0-with-GCC-exception.html", "isDeprecatedLicenseId": true, "detailsUrl": "https://spdx.org/licenses/GPL-2.0-with-GCC-exception.json", - "referenceNumber": 444, + "referenceNumber": 525, "name": "GNU General Public License v2.0 w/GCC Runtime Library exception", "licenseId": "GPL-2.0-with-GCC-exception", "seeAlso": [ @@ -3876,7 +3876,7 @@ "reference": "https://spdx.org/licenses/GPL-3.0.html", "isDeprecatedLicenseId": true, "detailsUrl": "https://spdx.org/licenses/GPL-3.0.json", - "referenceNumber": 96, + "referenceNumber": 503, "name": "GNU General Public License v3.0 only", "licenseId": "GPL-3.0", "seeAlso": [ @@ -3890,7 +3890,7 @@ "reference": "https://spdx.org/licenses/GPL-3.0+.html", "isDeprecatedLicenseId": true, "detailsUrl": "https://spdx.org/licenses/GPL-3.0+.json", - "referenceNumber": 173, + "referenceNumber": 131, "name": "GNU General Public License v3.0 or later", "licenseId": "GPL-3.0+", "seeAlso": [ @@ -3904,7 +3904,7 @@ "reference": "https://spdx.org/licenses/GPL-3.0-only.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/GPL-3.0-only.json", - "referenceNumber": 356, + "referenceNumber": 632, "name": "GNU General Public License v3.0 only", "licenseId": "GPL-3.0-only", "seeAlso": [ @@ -3918,7 +3918,7 @@ "reference": "https://spdx.org/licenses/GPL-3.0-or-later.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/GPL-3.0-or-later.json", - "referenceNumber": 186, + "referenceNumber": 467, "name": "GNU General Public License v3.0 or later", "licenseId": "GPL-3.0-or-later", "seeAlso": [ @@ -3932,7 +3932,7 @@ "reference": "https://spdx.org/licenses/GPL-3.0-with-autoconf-exception.html", "isDeprecatedLicenseId": true, "detailsUrl": "https://spdx.org/licenses/GPL-3.0-with-autoconf-exception.json", - "referenceNumber": 526, + "referenceNumber": 650, "name": "GNU General Public License v3.0 w/Autoconf exception", "licenseId": "GPL-3.0-with-autoconf-exception", "seeAlso": [ @@ -3944,7 +3944,7 @@ "reference": "https://spdx.org/licenses/GPL-3.0-with-GCC-exception.html", "isDeprecatedLicenseId": true, "detailsUrl": "https://spdx.org/licenses/GPL-3.0-with-GCC-exception.json", - "referenceNumber": 647, + "referenceNumber": 601, "name": "GNU General Public License v3.0 w/GCC Runtime Library exception", "licenseId": "GPL-3.0-with-GCC-exception", "seeAlso": [ @@ -3956,7 +3956,7 @@ "reference": "https://spdx.org/licenses/Graphics-Gems.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Graphics-Gems.json", - "referenceNumber": 499, + "referenceNumber": 255, "name": "Graphics Gems License", "licenseId": "Graphics-Gems", "seeAlso": [ @@ -3968,7 +3968,7 @@ "reference": "https://spdx.org/licenses/gSOAP-1.3b.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/gSOAP-1.3b.json", - "referenceNumber": 38, + "referenceNumber": 668, "name": "gSOAP Public License v1.3b", "licenseId": "gSOAP-1.3b", "seeAlso": [ @@ -3980,7 +3980,7 @@ "reference": "https://spdx.org/licenses/gtkbook.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/gtkbook.json", - "referenceNumber": 29, + "referenceNumber": 465, "name": "gtkbook License", "licenseId": "gtkbook", "seeAlso": [ @@ -3993,7 +3993,7 @@ "reference": "https://spdx.org/licenses/Gutmann.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Gutmann.json", - "referenceNumber": 392, + "referenceNumber": 524, "name": "Gutmann License", "licenseId": "Gutmann", "seeAlso": [ @@ -4005,7 +4005,7 @@ "reference": "https://spdx.org/licenses/HaskellReport.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/HaskellReport.json", - "referenceNumber": 415, + "referenceNumber": 605, "name": "Haskell Language Report License", "licenseId": "HaskellReport", "seeAlso": [ @@ -4017,7 +4017,7 @@ "reference": "https://spdx.org/licenses/HDF5.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/HDF5.json", - "referenceNumber": 489, + "referenceNumber": 19, "name": "HDF5 License", "licenseId": "HDF5", "seeAlso": [ @@ -4029,7 +4029,7 @@ "reference": "https://spdx.org/licenses/hdparm.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/hdparm.json", - "referenceNumber": 522, + "referenceNumber": 283, "name": "hdparm License", "licenseId": "hdparm", "seeAlso": [ @@ -4041,7 +4041,7 @@ "reference": "https://spdx.org/licenses/HIDAPI.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/HIDAPI.json", - "referenceNumber": 407, + "referenceNumber": 310, "name": "HIDAPI License", "licenseId": "HIDAPI", "seeAlso": [ @@ -4053,7 +4053,7 @@ "reference": "https://spdx.org/licenses/Hippocratic-2.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Hippocratic-2.1.json", - "referenceNumber": 627, + "referenceNumber": 87, "name": "Hippocratic License 2.1", "licenseId": "Hippocratic-2.1", "seeAlso": [ @@ -4066,7 +4066,7 @@ "reference": "https://spdx.org/licenses/HP-1986.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/HP-1986.json", - "referenceNumber": 622, + "referenceNumber": 282, "name": "Hewlett-Packard 1986 License", "licenseId": "HP-1986", "seeAlso": [ @@ -4078,7 +4078,7 @@ "reference": "https://spdx.org/licenses/HP-1989.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/HP-1989.json", - "referenceNumber": 600, + "referenceNumber": 8, "name": "Hewlett-Packard 1989 License", "licenseId": "HP-1989", "seeAlso": [ @@ -4090,7 +4090,7 @@ "reference": "https://spdx.org/licenses/HPND.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/HPND.json", - "referenceNumber": 42, + "referenceNumber": 209, "name": "Historical Permission Notice and Disclaimer", "licenseId": "HPND", "seeAlso": [ @@ -4104,7 +4104,7 @@ "reference": "https://spdx.org/licenses/HPND-DEC.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/HPND-DEC.json", - "referenceNumber": 37, + "referenceNumber": 112, "name": "Historical Permission Notice and Disclaimer - DEC variant", "licenseId": "HPND-DEC", "seeAlso": [ @@ -4116,7 +4116,7 @@ "reference": "https://spdx.org/licenses/HPND-doc.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/HPND-doc.json", - "referenceNumber": 400, + "referenceNumber": 600, "name": "Historical Permission Notice and Disclaimer - documentation variant", "licenseId": "HPND-doc", "seeAlso": [ @@ -4129,7 +4129,7 @@ "reference": "https://spdx.org/licenses/HPND-doc-sell.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/HPND-doc-sell.json", - "referenceNumber": 218, + "referenceNumber": 306, "name": "Historical Permission Notice and Disclaimer - documentation sell variant", "licenseId": "HPND-doc-sell", "seeAlso": [ @@ -4142,7 +4142,7 @@ "reference": "https://spdx.org/licenses/HPND-export-US.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/HPND-export-US.json", - "referenceNumber": 620, + "referenceNumber": 459, "name": "HPND with US Government export control warning", "licenseId": "HPND-export-US", "seeAlso": [ @@ -4154,7 +4154,7 @@ "reference": "https://spdx.org/licenses/HPND-export-US-acknowledgement.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/HPND-export-US-acknowledgement.json", - "referenceNumber": 299, + "referenceNumber": 487, "name": "HPND with US Government export control warning and acknowledgment", "licenseId": "HPND-export-US-acknowledgement", "seeAlso": [ @@ -4167,7 +4167,7 @@ "reference": "https://spdx.org/licenses/HPND-export-US-modify.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/HPND-export-US-modify.json", - "referenceNumber": 399, + "referenceNumber": 172, "name": "HPND with US Government export control warning and modification rqmt", "licenseId": "HPND-export-US-modify", "seeAlso": [ @@ -4180,7 +4180,7 @@ "reference": "https://spdx.org/licenses/HPND-export2-US.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/HPND-export2-US.json", - "referenceNumber": 372, + "referenceNumber": 1, "name": "HPND with US Government export control and 2 disclaimers", "licenseId": "HPND-export2-US", "seeAlso": [ @@ -4193,7 +4193,7 @@ "reference": "https://spdx.org/licenses/HPND-Fenneberg-Livingston.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/HPND-Fenneberg-Livingston.json", - "referenceNumber": 228, + "referenceNumber": 445, "name": "Historical Permission Notice and Disclaimer - Fenneberg-Livingston variant", "licenseId": "HPND-Fenneberg-Livingston", "seeAlso": [ @@ -4206,7 +4206,7 @@ "reference": "https://spdx.org/licenses/HPND-INRIA-IMAG.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/HPND-INRIA-IMAG.json", - "referenceNumber": 573, + "referenceNumber": 233, "name": "Historical Permission Notice and Disclaimer - INRIA-IMAG variant", "licenseId": "HPND-INRIA-IMAG", "seeAlso": [ @@ -4218,7 +4218,7 @@ "reference": "https://spdx.org/licenses/HPND-Intel.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/HPND-Intel.json", - "referenceNumber": 462, + "referenceNumber": 228, "name": "Historical Permission Notice and Disclaimer - Intel variant", "licenseId": "HPND-Intel", "seeAlso": [ @@ -4230,7 +4230,7 @@ "reference": "https://spdx.org/licenses/HPND-Kevlin-Henney.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/HPND-Kevlin-Henney.json", - "referenceNumber": 390, + "referenceNumber": 528, "name": "Historical Permission Notice and Disclaimer - Kevlin Henney variant", "licenseId": "HPND-Kevlin-Henney", "seeAlso": [ @@ -4242,7 +4242,7 @@ "reference": "https://spdx.org/licenses/HPND-Markus-Kuhn.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/HPND-Markus-Kuhn.json", - "referenceNumber": 31, + "referenceNumber": 623, "name": "Historical Permission Notice and Disclaimer - Markus Kuhn variant", "licenseId": "HPND-Markus-Kuhn", "seeAlso": [ @@ -4255,7 +4255,7 @@ "reference": "https://spdx.org/licenses/HPND-merchantability-variant.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/HPND-merchantability-variant.json", - "referenceNumber": 282, + "referenceNumber": 157, "name": "Historical Permission Notice and Disclaimer - merchantability variant", "licenseId": "HPND-merchantability-variant", "seeAlso": [ @@ -4267,7 +4267,7 @@ "reference": "https://spdx.org/licenses/HPND-MIT-disclaimer.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/HPND-MIT-disclaimer.json", - "referenceNumber": 613, + "referenceNumber": 313, "name": "Historical Permission Notice and Disclaimer with MIT disclaimer", "licenseId": "HPND-MIT-disclaimer", "seeAlso": [ @@ -4279,7 +4279,7 @@ "reference": "https://spdx.org/licenses/HPND-Netrek.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/HPND-Netrek.json", - "referenceNumber": 550, + "referenceNumber": 387, "name": "Historical Permission Notice and Disclaimer - Netrek variant", "licenseId": "HPND-Netrek", "seeAlso": [], @@ -4289,7 +4289,7 @@ "reference": "https://spdx.org/licenses/HPND-Pbmplus.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/HPND-Pbmplus.json", - "referenceNumber": 267, + "referenceNumber": 339, "name": "Historical Permission Notice and Disclaimer - Pbmplus variant", "licenseId": "HPND-Pbmplus", "seeAlso": [ @@ -4301,7 +4301,7 @@ "reference": "https://spdx.org/licenses/HPND-sell-MIT-disclaimer-xserver.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/HPND-sell-MIT-disclaimer-xserver.json", - "referenceNumber": 494, + "referenceNumber": 341, "name": "Historical Permission Notice and Disclaimer - sell xserver variant with MIT disclaimer", "licenseId": "HPND-sell-MIT-disclaimer-xserver", "seeAlso": [ @@ -4313,7 +4313,7 @@ "reference": "https://spdx.org/licenses/HPND-sell-regexpr.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/HPND-sell-regexpr.json", - "referenceNumber": 596, + "referenceNumber": 681, "name": "Historical Permission Notice and Disclaimer - sell regexpr variant", "licenseId": "HPND-sell-regexpr", "seeAlso": [ @@ -4325,7 +4325,7 @@ "reference": "https://spdx.org/licenses/HPND-sell-variant.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/HPND-sell-variant.json", - "referenceNumber": 665, + "referenceNumber": 13, "name": "Historical Permission Notice and Disclaimer - sell variant", "licenseId": "HPND-sell-variant", "seeAlso": [ @@ -4338,7 +4338,7 @@ "reference": "https://spdx.org/licenses/HPND-sell-variant-MIT-disclaimer.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/HPND-sell-variant-MIT-disclaimer.json", - "referenceNumber": 640, + "referenceNumber": 225, "name": "HPND sell variant with MIT disclaimer", "licenseId": "HPND-sell-variant-MIT-disclaimer", "seeAlso": [ @@ -4350,7 +4350,7 @@ "reference": "https://spdx.org/licenses/HPND-sell-variant-MIT-disclaimer-rev.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/HPND-sell-variant-MIT-disclaimer-rev.json", - "referenceNumber": 139, + "referenceNumber": 357, "name": "HPND sell variant with MIT disclaimer - reverse", "licenseId": "HPND-sell-variant-MIT-disclaimer-rev", "seeAlso": [ @@ -4362,7 +4362,7 @@ "reference": "https://spdx.org/licenses/HPND-UC.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/HPND-UC.json", - "referenceNumber": 16, + "referenceNumber": 210, "name": "Historical Permission Notice and Disclaimer - University of California variant", "licenseId": "HPND-UC", "seeAlso": [ @@ -4374,7 +4374,7 @@ "reference": "https://spdx.org/licenses/HPND-UC-export-US.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/HPND-UC-export-US.json", - "referenceNumber": 408, + "referenceNumber": 143, "name": "Historical Permission Notice and Disclaimer - University of California, US export warning", "licenseId": "HPND-UC-export-US", "seeAlso": [ @@ -4386,7 +4386,7 @@ "reference": "https://spdx.org/licenses/HTMLTIDY.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/HTMLTIDY.json", - "referenceNumber": 446, + "referenceNumber": 478, "name": "HTML Tidy License", "licenseId": "HTMLTIDY", "seeAlso": [ @@ -4398,7 +4398,7 @@ "reference": "https://spdx.org/licenses/IBM-pibs.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/IBM-pibs.json", - "referenceNumber": 593, + "referenceNumber": 242, "name": "IBM PowerPC Initialization and Boot Software", "licenseId": "IBM-pibs", "seeAlso": [ @@ -4410,7 +4410,7 @@ "reference": "https://spdx.org/licenses/ICU.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/ICU.json", - "referenceNumber": 213, + "referenceNumber": 289, "name": "ICU License", "licenseId": "ICU", "seeAlso": [ @@ -4422,7 +4422,7 @@ "reference": "https://spdx.org/licenses/IEC-Code-Components-EULA.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/IEC-Code-Components-EULA.json", - "referenceNumber": 314, + "referenceNumber": 399, "name": "IEC Code Components End-user licence agreement", "licenseId": "IEC-Code-Components-EULA", "seeAlso": [ @@ -4436,7 +4436,7 @@ "reference": "https://spdx.org/licenses/IJG.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/IJG.json", - "referenceNumber": 559, + "referenceNumber": 512, "name": "Independent JPEG Group License", "licenseId": "IJG", "seeAlso": [ @@ -4449,7 +4449,7 @@ "reference": "https://spdx.org/licenses/IJG-short.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/IJG-short.json", - "referenceNumber": 149, + "referenceNumber": 694, "name": "Independent JPEG Group License - short", "licenseId": "IJG-short", "seeAlso": [ @@ -4461,7 +4461,7 @@ "reference": "https://spdx.org/licenses/ImageMagick.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/ImageMagick.json", - "referenceNumber": 645, + "referenceNumber": 472, "name": "ImageMagick License", "licenseId": "ImageMagick", "seeAlso": [ @@ -4473,7 +4473,7 @@ "reference": "https://spdx.org/licenses/iMatix.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/iMatix.json", - "referenceNumber": 3, + "referenceNumber": 482, "name": "iMatix Standard Function Library Agreement", "licenseId": "iMatix", "seeAlso": [ @@ -4486,7 +4486,7 @@ "reference": "https://spdx.org/licenses/Imlib2.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Imlib2.json", - "referenceNumber": 491, + "referenceNumber": 552, "name": "Imlib2 License", "licenseId": "Imlib2", "seeAlso": [ @@ -4500,7 +4500,7 @@ "reference": "https://spdx.org/licenses/Info-ZIP.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Info-ZIP.json", - "referenceNumber": 450, + "referenceNumber": 52, "name": "Info-ZIP License", "licenseId": "Info-ZIP", "seeAlso": [ @@ -4512,7 +4512,7 @@ "reference": "https://spdx.org/licenses/Inner-Net-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Inner-Net-2.0.json", - "referenceNumber": 420, + "referenceNumber": 328, "name": "Inner Net License v2.0", "licenseId": "Inner-Net-2.0", "seeAlso": [ @@ -4525,7 +4525,7 @@ "reference": "https://spdx.org/licenses/InnoSetup.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/InnoSetup.json", - "referenceNumber": 361, + "referenceNumber": 354, "name": "Inno Setup License", "licenseId": "InnoSetup", "seeAlso": [ @@ -4537,7 +4537,7 @@ "reference": "https://spdx.org/licenses/Intel.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Intel.json", - "referenceNumber": 248, + "referenceNumber": 419, "name": "Intel Open Source License", "licenseId": "Intel", "seeAlso": [ @@ -4550,7 +4550,7 @@ "reference": "https://spdx.org/licenses/Intel-ACPI.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Intel-ACPI.json", - "referenceNumber": 609, + "referenceNumber": 206, "name": "Intel ACPI Software License Agreement", "licenseId": "Intel-ACPI", "seeAlso": [ @@ -4562,7 +4562,7 @@ "reference": "https://spdx.org/licenses/Interbase-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Interbase-1.0.json", - "referenceNumber": 41, + "referenceNumber": 532, "name": "Interbase Public License v1.0", "licenseId": "Interbase-1.0", "seeAlso": [ @@ -4574,7 +4574,7 @@ "reference": "https://spdx.org/licenses/IPA.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/IPA.json", - "referenceNumber": 192, + "referenceNumber": 186, "name": "IPA Font License", "licenseId": "IPA", "seeAlso": [ @@ -4587,7 +4587,7 @@ "reference": "https://spdx.org/licenses/IPL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/IPL-1.0.json", - "referenceNumber": 670, + "referenceNumber": 591, "name": "IBM Public License v1.0", "licenseId": "IPL-1.0", "seeAlso": [ @@ -4600,7 +4600,7 @@ "reference": "https://spdx.org/licenses/ISC.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/ISC.json", - "referenceNumber": 128, + "referenceNumber": 58, "name": "ISC License", "licenseId": "ISC", "seeAlso": [ @@ -4615,7 +4615,7 @@ "reference": "https://spdx.org/licenses/ISC-Veillard.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/ISC-Veillard.json", - "referenceNumber": 582, + "referenceNumber": 317, "name": "ISC Veillard variant", "licenseId": "ISC-Veillard", "seeAlso": [ @@ -4629,7 +4629,7 @@ "reference": "https://spdx.org/licenses/Jam.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Jam.json", - "referenceNumber": 358, + "referenceNumber": 475, "name": "Jam License", "licenseId": "Jam", "seeAlso": [ @@ -4642,7 +4642,7 @@ "reference": "https://spdx.org/licenses/JasPer-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/JasPer-2.0.json", - "referenceNumber": 690, + "referenceNumber": 103, "name": "JasPer License", "licenseId": "JasPer-2.0", "seeAlso": [ @@ -4654,7 +4654,7 @@ "reference": "https://spdx.org/licenses/jove.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/jove.json", - "referenceNumber": 580, + "referenceNumber": 642, "name": "Jove License", "licenseId": "jove", "seeAlso": [ @@ -4666,7 +4666,7 @@ "reference": "https://spdx.org/licenses/JPL-image.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/JPL-image.json", - "referenceNumber": 274, + "referenceNumber": 321, "name": "JPL Image Use Policy", "licenseId": "JPL-image", "seeAlso": [ @@ -4678,7 +4678,7 @@ "reference": "https://spdx.org/licenses/JPNIC.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/JPNIC.json", - "referenceNumber": 237, + "referenceNumber": 655, "name": "Japan Network Information Center License", "licenseId": "JPNIC", "seeAlso": [ @@ -4690,7 +4690,7 @@ "reference": "https://spdx.org/licenses/JSON.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/JSON.json", - "referenceNumber": 673, + "referenceNumber": 54, "name": "JSON License", "licenseId": "JSON", "seeAlso": [ @@ -4703,7 +4703,7 @@ "reference": "https://spdx.org/licenses/Kastrup.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Kastrup.json", - "referenceNumber": 657, + "referenceNumber": 491, "name": "Kastrup License", "licenseId": "Kastrup", "seeAlso": [ @@ -4715,7 +4715,7 @@ "reference": "https://spdx.org/licenses/Kazlib.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Kazlib.json", - "referenceNumber": 313, + "referenceNumber": 312, "name": "Kazlib License", "licenseId": "Kazlib", "seeAlso": [ @@ -4727,7 +4727,7 @@ "reference": "https://spdx.org/licenses/Knuth-CTAN.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Knuth-CTAN.json", - "referenceNumber": 143, + "referenceNumber": 332, "name": "Knuth CTAN License", "licenseId": "Knuth-CTAN", "seeAlso": [ @@ -4739,7 +4739,7 @@ "reference": "https://spdx.org/licenses/LAL-1.2.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/LAL-1.2.json", - "referenceNumber": 239, + "referenceNumber": 134, "name": "Licence Art Libre 1.2", "licenseId": "LAL-1.2", "seeAlso": [ @@ -4751,7 +4751,7 @@ "reference": "https://spdx.org/licenses/LAL-1.3.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/LAL-1.3.json", - "referenceNumber": 164, + "referenceNumber": 521, "name": "Licence Art Libre 1.3", "licenseId": "LAL-1.3", "seeAlso": [ @@ -4763,7 +4763,7 @@ "reference": "https://spdx.org/licenses/Latex2e.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Latex2e.json", - "referenceNumber": 17, + "referenceNumber": 43, "name": "Latex2e License", "licenseId": "Latex2e", "seeAlso": [ @@ -4775,7 +4775,7 @@ "reference": "https://spdx.org/licenses/Latex2e-translated-notice.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Latex2e-translated-notice.json", - "referenceNumber": 283, + "referenceNumber": 523, "name": "Latex2e with translated notice permission", "licenseId": "Latex2e-translated-notice", "seeAlso": [ @@ -4787,7 +4787,7 @@ "reference": "https://spdx.org/licenses/Leptonica.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Leptonica.json", - "referenceNumber": 633, + "referenceNumber": 137, "name": "Leptonica License", "licenseId": "Leptonica", "seeAlso": [ @@ -4799,7 +4799,7 @@ "reference": "https://spdx.org/licenses/LGPL-2.0.html", "isDeprecatedLicenseId": true, "detailsUrl": "https://spdx.org/licenses/LGPL-2.0.json", - "referenceNumber": 281, + "referenceNumber": 676, "name": "GNU Library General Public License v2 only", "licenseId": "LGPL-2.0", "seeAlso": [ @@ -4811,7 +4811,7 @@ "reference": "https://spdx.org/licenses/LGPL-2.0+.html", "isDeprecatedLicenseId": true, "detailsUrl": "https://spdx.org/licenses/LGPL-2.0+.json", - "referenceNumber": 172, + "referenceNumber": 409, "name": "GNU Library General Public License v2 or later", "licenseId": "LGPL-2.0+", "seeAlso": [ @@ -4823,7 +4823,7 @@ "reference": "https://spdx.org/licenses/LGPL-2.0-only.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/LGPL-2.0-only.json", - "referenceNumber": 262, + "referenceNumber": 329, "name": "GNU Library General Public License v2 only", "licenseId": "LGPL-2.0-only", "seeAlso": [ @@ -4835,7 +4835,7 @@ "reference": "https://spdx.org/licenses/LGPL-2.0-or-later.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/LGPL-2.0-or-later.json", - "referenceNumber": 572, + "referenceNumber": 75, "name": "GNU Library General Public License v2 or later", "licenseId": "LGPL-2.0-or-later", "seeAlso": [ @@ -4847,7 +4847,7 @@ "reference": "https://spdx.org/licenses/LGPL-2.1.html", "isDeprecatedLicenseId": true, "detailsUrl": "https://spdx.org/licenses/LGPL-2.1.json", - "referenceNumber": 467, + "referenceNumber": 677, "name": "GNU Lesser General Public License v2.1 only", "licenseId": "LGPL-2.1", "seeAlso": [ @@ -4861,7 +4861,7 @@ "reference": "https://spdx.org/licenses/LGPL-2.1+.html", "isDeprecatedLicenseId": true, "detailsUrl": "https://spdx.org/licenses/LGPL-2.1+.json", - "referenceNumber": 632, + "referenceNumber": 448, "name": "GNU Lesser General Public License v2.1 or later", "licenseId": "LGPL-2.1+", "seeAlso": [ @@ -4875,7 +4875,7 @@ "reference": "https://spdx.org/licenses/LGPL-2.1-only.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/LGPL-2.1-only.json", - "referenceNumber": 363, + "referenceNumber": 297, "name": "GNU Lesser General Public License v2.1 only", "licenseId": "LGPL-2.1-only", "seeAlso": [ @@ -4889,7 +4889,7 @@ "reference": "https://spdx.org/licenses/LGPL-2.1-or-later.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/LGPL-2.1-or-later.json", - "referenceNumber": 532, + "referenceNumber": 187, "name": "GNU Lesser General Public License v2.1 or later", "licenseId": "LGPL-2.1-or-later", "seeAlso": [ @@ -4903,7 +4903,7 @@ "reference": "https://spdx.org/licenses/LGPL-3.0.html", "isDeprecatedLicenseId": true, "detailsUrl": "https://spdx.org/licenses/LGPL-3.0.json", - "referenceNumber": 154, + "referenceNumber": 9, "name": "GNU Lesser General Public License v3.0 only", "licenseId": "LGPL-3.0", "seeAlso": [ @@ -4918,7 +4918,7 @@ "reference": "https://spdx.org/licenses/LGPL-3.0+.html", "isDeprecatedLicenseId": true, "detailsUrl": "https://spdx.org/licenses/LGPL-3.0+.json", - "referenceNumber": 158, + "referenceNumber": 169, "name": "GNU Lesser General Public License v3.0 or later", "licenseId": "LGPL-3.0+", "seeAlso": [ @@ -4933,7 +4933,7 @@ "reference": "https://spdx.org/licenses/LGPL-3.0-only.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/LGPL-3.0-only.json", - "referenceNumber": 551, + "referenceNumber": 634, "name": "GNU Lesser General Public License v3.0 only", "licenseId": "LGPL-3.0-only", "seeAlso": [ @@ -4948,7 +4948,7 @@ "reference": "https://spdx.org/licenses/LGPL-3.0-or-later.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/LGPL-3.0-or-later.json", - "referenceNumber": 453, + "referenceNumber": 502, "name": "GNU Lesser General Public License v3.0 or later", "licenseId": "LGPL-3.0-or-later", "seeAlso": [ @@ -4963,7 +4963,7 @@ "reference": "https://spdx.org/licenses/LGPLLR.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/LGPLLR.json", - "referenceNumber": 506, + "referenceNumber": 123, "name": "Lesser General Public License For Linguistic Resources", "licenseId": "LGPLLR", "seeAlso": [ @@ -4975,7 +4975,7 @@ "reference": "https://spdx.org/licenses/Libpng.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Libpng.json", - "referenceNumber": 330, + "referenceNumber": 62, "name": "libpng License", "licenseId": "Libpng", "seeAlso": [ @@ -4987,7 +4987,7 @@ "reference": "https://spdx.org/licenses/libpng-1.6.35.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/libpng-1.6.35.json", - "referenceNumber": 189, + "referenceNumber": 429, "name": "PNG Reference Library License v1 (for libpng 0.5 through 1.6.35)", "licenseId": "libpng-1.6.35", "seeAlso": [ @@ -4999,7 +4999,7 @@ "reference": "https://spdx.org/licenses/libpng-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/libpng-2.0.json", - "referenceNumber": 349, + "referenceNumber": 226, "name": "PNG Reference Library version 2", "licenseId": "libpng-2.0", "seeAlso": [ @@ -5011,7 +5011,7 @@ "reference": "https://spdx.org/licenses/libselinux-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/libselinux-1.0.json", - "referenceNumber": 606, + "referenceNumber": 263, "name": "libselinux public domain notice", "licenseId": "libselinux-1.0", "seeAlso": [ @@ -5023,7 +5023,7 @@ "reference": "https://spdx.org/licenses/libtiff.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/libtiff.json", - "referenceNumber": 564, + "referenceNumber": 35, "name": "libtiff License", "licenseId": "libtiff", "seeAlso": [ @@ -5035,7 +5035,7 @@ "reference": "https://spdx.org/licenses/libutil-David-Nugent.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/libutil-David-Nugent.json", - "referenceNumber": 375, + "referenceNumber": 402, "name": "libutil David Nugent License", "licenseId": "libutil-David-Nugent", "seeAlso": [ @@ -5048,7 +5048,7 @@ "reference": "https://spdx.org/licenses/LiLiQ-P-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/LiLiQ-P-1.1.json", - "referenceNumber": 167, + "referenceNumber": 232, "name": "Licence Libre du Québec – Permissive version 1.1", "licenseId": "LiLiQ-P-1.1", "seeAlso": [ @@ -5061,7 +5061,7 @@ "reference": "https://spdx.org/licenses/LiLiQ-R-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/LiLiQ-R-1.1.json", - "referenceNumber": 677, + "referenceNumber": 229, "name": "Licence Libre du Québec – Réciprocité version 1.1", "licenseId": "LiLiQ-R-1.1", "seeAlso": [ @@ -5074,7 +5074,7 @@ "reference": "https://spdx.org/licenses/LiLiQ-Rplus-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/LiLiQ-Rplus-1.1.json", - "referenceNumber": 198, + "referenceNumber": 238, "name": "Licence Libre du Québec – Réciprocité forte version 1.1", "licenseId": "LiLiQ-Rplus-1.1", "seeAlso": [ @@ -5087,7 +5087,7 @@ "reference": "https://spdx.org/licenses/Linux-man-pages-1-para.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Linux-man-pages-1-para.json", - "referenceNumber": 244, + "referenceNumber": 78, "name": "Linux man-pages - 1 paragraph", "licenseId": "Linux-man-pages-1-para", "seeAlso": [ @@ -5099,7 +5099,7 @@ "reference": "https://spdx.org/licenses/Linux-man-pages-copyleft.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Linux-man-pages-copyleft.json", - "referenceNumber": 696, + "referenceNumber": 640, "name": "Linux man-pages Copyleft", "licenseId": "Linux-man-pages-copyleft", "seeAlso": [ @@ -5111,7 +5111,7 @@ "reference": "https://spdx.org/licenses/Linux-man-pages-copyleft-2-para.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Linux-man-pages-copyleft-2-para.json", - "referenceNumber": 692, + "referenceNumber": 592, "name": "Linux man-pages Copyleft - 2 paragraphs", "licenseId": "Linux-man-pages-copyleft-2-para", "seeAlso": [ @@ -5124,7 +5124,7 @@ "reference": "https://spdx.org/licenses/Linux-man-pages-copyleft-var.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Linux-man-pages-copyleft-var.json", - "referenceNumber": 682, + "referenceNumber": 202, "name": "Linux man-pages Copyleft Variant", "licenseId": "Linux-man-pages-copyleft-var", "seeAlso": [ @@ -5136,7 +5136,7 @@ "reference": "https://spdx.org/licenses/Linux-OpenIB.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Linux-OpenIB.json", - "referenceNumber": 320, + "referenceNumber": 513, "name": "Linux Kernel Variant of OpenIB.org license", "licenseId": "Linux-OpenIB", "seeAlso": [ @@ -5148,7 +5148,7 @@ "reference": "https://spdx.org/licenses/LOOP.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/LOOP.json", - "referenceNumber": 292, + "referenceNumber": 237, "name": "Common Lisp LOOP License", "licenseId": "LOOP", "seeAlso": [ @@ -5165,7 +5165,7 @@ "reference": "https://spdx.org/licenses/LPD-document.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/LPD-document.json", - "referenceNumber": 277, + "referenceNumber": 5, "name": "LPD Documentation License", "licenseId": "LPD-document", "seeAlso": [ @@ -5178,7 +5178,7 @@ "reference": "https://spdx.org/licenses/LPL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/LPL-1.0.json", - "referenceNumber": 243, + "referenceNumber": 136, "name": "Lucent Public License Version 1.0", "licenseId": "LPL-1.0", "seeAlso": [ @@ -5190,7 +5190,7 @@ "reference": "https://spdx.org/licenses/LPL-1.02.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/LPL-1.02.json", - "referenceNumber": 70, + "referenceNumber": 656, "name": "Lucent Public License v1.02", "licenseId": "LPL-1.02", "seeAlso": [ @@ -5204,7 +5204,7 @@ "reference": "https://spdx.org/licenses/LPPL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/LPPL-1.0.json", - "referenceNumber": 413, + "referenceNumber": 63, "name": "LaTeX Project Public License v1.0", "licenseId": "LPPL-1.0", "seeAlso": [ @@ -5216,7 +5216,7 @@ "reference": "https://spdx.org/licenses/LPPL-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/LPPL-1.1.json", - "referenceNumber": 555, + "referenceNumber": 542, "name": "LaTeX Project Public License v1.1", "licenseId": "LPPL-1.1", "seeAlso": [ @@ -5228,7 +5228,7 @@ "reference": "https://spdx.org/licenses/LPPL-1.2.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/LPPL-1.2.json", - "referenceNumber": 77, + "referenceNumber": 486, "name": "LaTeX Project Public License v1.2", "licenseId": "LPPL-1.2", "seeAlso": [ @@ -5241,7 +5241,7 @@ "reference": "https://spdx.org/licenses/LPPL-1.3a.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/LPPL-1.3a.json", - "referenceNumber": 623, + "referenceNumber": 280, "name": "LaTeX Project Public License v1.3a", "licenseId": "LPPL-1.3a", "seeAlso": [ @@ -5254,7 +5254,7 @@ "reference": "https://spdx.org/licenses/LPPL-1.3c.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/LPPL-1.3c.json", - "referenceNumber": 381, + "referenceNumber": 33, "name": "LaTeX Project Public License v1.3c", "licenseId": "LPPL-1.3c", "seeAlso": [ @@ -5267,7 +5267,7 @@ "reference": "https://spdx.org/licenses/lsof.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/lsof.json", - "referenceNumber": 59, + "referenceNumber": 563, "name": "lsof License", "licenseId": "lsof", "seeAlso": [ @@ -5279,7 +5279,7 @@ "reference": "https://spdx.org/licenses/Lucida-Bitmap-Fonts.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Lucida-Bitmap-Fonts.json", - "referenceNumber": 114, + "referenceNumber": 661, "name": "Lucida Bitmap Fonts License", "licenseId": "Lucida-Bitmap-Fonts", "seeAlso": [ @@ -5291,7 +5291,7 @@ "reference": "https://spdx.org/licenses/LZMA-SDK-9.11-to-9.20.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/LZMA-SDK-9.11-to-9.20.json", - "referenceNumber": 78, + "referenceNumber": 349, "name": "LZMA SDK License (versions 9.11 to 9.20)", "licenseId": "LZMA-SDK-9.11-to-9.20", "seeAlso": [ @@ -5304,7 +5304,7 @@ "reference": "https://spdx.org/licenses/LZMA-SDK-9.22.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/LZMA-SDK-9.22.json", - "referenceNumber": 290, + "referenceNumber": 504, "name": "LZMA SDK License (versions 9.22 and beyond)", "licenseId": "LZMA-SDK-9.22", "seeAlso": [ @@ -5317,7 +5317,7 @@ "reference": "https://spdx.org/licenses/Mackerras-3-Clause.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Mackerras-3-Clause.json", - "referenceNumber": 324, + "referenceNumber": 539, "name": "Mackerras 3-Clause License", "licenseId": "Mackerras-3-Clause", "seeAlso": [ @@ -5329,7 +5329,7 @@ "reference": "https://spdx.org/licenses/Mackerras-3-Clause-acknowledgment.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Mackerras-3-Clause-acknowledgment.json", - "referenceNumber": 478, + "referenceNumber": 433, "name": "Mackerras 3-Clause - acknowledgment variant", "licenseId": "Mackerras-3-Clause-acknowledgment", "seeAlso": [ @@ -5341,7 +5341,7 @@ "reference": "https://spdx.org/licenses/magaz.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/magaz.json", - "referenceNumber": 88, + "referenceNumber": 373, "name": "magaz License", "licenseId": "magaz", "seeAlso": [ @@ -5354,7 +5354,7 @@ "reference": "https://spdx.org/licenses/mailprio.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/mailprio.json", - "referenceNumber": 473, + "referenceNumber": 381, "name": "mailprio License", "licenseId": "mailprio", "seeAlso": [ @@ -5366,7 +5366,7 @@ "reference": "https://spdx.org/licenses/MakeIndex.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/MakeIndex.json", - "referenceNumber": 397, + "referenceNumber": 165, "name": "MakeIndex License", "licenseId": "MakeIndex", "seeAlso": [ @@ -5378,7 +5378,7 @@ "reference": "https://spdx.org/licenses/man2html.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/man2html.json", - "referenceNumber": 557, + "referenceNumber": 120, "name": "man2html License", "licenseId": "man2html", "seeAlso": [ @@ -5392,7 +5392,7 @@ "reference": "https://spdx.org/licenses/Martin-Birgmeier.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Martin-Birgmeier.json", - "referenceNumber": 56, + "referenceNumber": 361, "name": "Martin Birgmeier License", "licenseId": "Martin-Birgmeier", "seeAlso": [ @@ -5404,7 +5404,7 @@ "reference": "https://spdx.org/licenses/McPhee-slideshow.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/McPhee-slideshow.json", - "referenceNumber": 270, + "referenceNumber": 489, "name": "McPhee Slideshow License", "licenseId": "McPhee-slideshow", "seeAlso": [ @@ -5416,7 +5416,7 @@ "reference": "https://spdx.org/licenses/metamail.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/metamail.json", - "referenceNumber": 611, + "referenceNumber": 455, "name": "metamail License", "licenseId": "metamail", "seeAlso": [ @@ -5428,7 +5428,7 @@ "reference": "https://spdx.org/licenses/Minpack.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Minpack.json", - "referenceNumber": 227, + "referenceNumber": 28, "name": "Minpack License", "licenseId": "Minpack", "seeAlso": [ @@ -5441,7 +5441,7 @@ "reference": "https://spdx.org/licenses/MIPS.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/MIPS.json", - "referenceNumber": 209, + "referenceNumber": 351, "name": "MIPS License", "licenseId": "MIPS", "seeAlso": [ @@ -5453,7 +5453,7 @@ "reference": "https://spdx.org/licenses/MirOS.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/MirOS.json", - "referenceNumber": 642, + "referenceNumber": 692, "name": "The MirOS Licence", "licenseId": "MirOS", "seeAlso": [ @@ -5465,7 +5465,7 @@ "reference": "https://spdx.org/licenses/MIT.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/MIT.json", - "referenceNumber": 510, + "referenceNumber": 515, "name": "MIT License", "licenseId": "MIT", "seeAlso": [ @@ -5479,7 +5479,7 @@ "reference": "https://spdx.org/licenses/MIT-0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/MIT-0.json", - "referenceNumber": 214, + "referenceNumber": 173, "name": "MIT No Attribution", "licenseId": "MIT-0", "seeAlso": [ @@ -5493,7 +5493,7 @@ "reference": "https://spdx.org/licenses/MIT-advertising.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/MIT-advertising.json", - "referenceNumber": 221, + "referenceNumber": 440, "name": "Enlightenment License (e16)", "licenseId": "MIT-advertising", "seeAlso": [ @@ -5505,7 +5505,7 @@ "reference": "https://spdx.org/licenses/MIT-Click.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/MIT-Click.json", - "referenceNumber": 200, + "referenceNumber": 438, "name": "MIT Click License", "licenseId": "MIT-Click", "seeAlso": [ @@ -5517,7 +5517,7 @@ "reference": "https://spdx.org/licenses/MIT-CMU.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/MIT-CMU.json", - "referenceNumber": 180, + "referenceNumber": 287, "name": "CMU License", "licenseId": "MIT-CMU", "seeAlso": [ @@ -5530,7 +5530,7 @@ "reference": "https://spdx.org/licenses/MIT-enna.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/MIT-enna.json", - "referenceNumber": 291, + "referenceNumber": 580, "name": "enna License", "licenseId": "MIT-enna", "seeAlso": [ @@ -5542,7 +5542,7 @@ "reference": "https://spdx.org/licenses/MIT-feh.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/MIT-feh.json", - "referenceNumber": 24, + "referenceNumber": 408, "name": "feh License", "licenseId": "MIT-feh", "seeAlso": [ @@ -5554,7 +5554,7 @@ "reference": "https://spdx.org/licenses/MIT-Festival.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/MIT-Festival.json", - "referenceNumber": 39, + "referenceNumber": 18, "name": "MIT Festival Variant", "licenseId": "MIT-Festival", "seeAlso": [ @@ -5567,7 +5567,7 @@ "reference": "https://spdx.org/licenses/MIT-Khronos-old.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/MIT-Khronos-old.json", - "referenceNumber": 523, + "referenceNumber": 508, "name": "MIT Khronos - old variant", "licenseId": "MIT-Khronos-old", "seeAlso": [ @@ -5579,7 +5579,7 @@ "reference": "https://spdx.org/licenses/MIT-Modern-Variant.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/MIT-Modern-Variant.json", - "referenceNumber": 595, + "referenceNumber": 304, "name": "MIT License Modern Variant", "licenseId": "MIT-Modern-Variant", "seeAlso": [ @@ -5593,7 +5593,7 @@ "reference": "https://spdx.org/licenses/MIT-open-group.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/MIT-open-group.json", - "referenceNumber": 678, + "referenceNumber": 404, "name": "MIT Open Group variant", "licenseId": "MIT-open-group", "seeAlso": [ @@ -5607,7 +5607,7 @@ "reference": "https://spdx.org/licenses/MIT-testregex.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/MIT-testregex.json", - "referenceNumber": 504, + "referenceNumber": 496, "name": "MIT testregex Variant", "licenseId": "MIT-testregex", "seeAlso": [ @@ -5619,7 +5619,7 @@ "reference": "https://spdx.org/licenses/MIT-Wu.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/MIT-Wu.json", - "referenceNumber": 99, + "referenceNumber": 355, "name": "MIT Tom Wu Variant", "licenseId": "MIT-Wu", "seeAlso": [ @@ -5631,7 +5631,7 @@ "reference": "https://spdx.org/licenses/MITNFA.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/MITNFA.json", - "referenceNumber": 350, + "referenceNumber": 473, "name": "MIT +no-false-attribs license", "licenseId": "MITNFA", "seeAlso": [ @@ -5643,7 +5643,7 @@ "reference": "https://spdx.org/licenses/MMIXware.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/MMIXware.json", - "referenceNumber": 286, + "referenceNumber": 663, "name": "MMIXware License", "licenseId": "MMIXware", "seeAlso": [ @@ -5655,7 +5655,7 @@ "reference": "https://spdx.org/licenses/Motosoto.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Motosoto.json", - "referenceNumber": 512, + "referenceNumber": 507, "name": "Motosoto License", "licenseId": "Motosoto", "seeAlso": [ @@ -5667,7 +5667,7 @@ "reference": "https://spdx.org/licenses/MPEG-SSG.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/MPEG-SSG.json", - "referenceNumber": 335, + "referenceNumber": 303, "name": "MPEG Software Simulation", "licenseId": "MPEG-SSG", "seeAlso": [ @@ -5679,7 +5679,7 @@ "reference": "https://spdx.org/licenses/mpi-permissive.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/mpi-permissive.json", - "referenceNumber": 278, + "referenceNumber": 213, "name": "mpi Permissive License", "licenseId": "mpi-permissive", "seeAlso": [ @@ -5691,7 +5691,7 @@ "reference": "https://spdx.org/licenses/mpich2.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/mpich2.json", - "referenceNumber": 518, + "referenceNumber": 102, "name": "mpich2 License", "licenseId": "mpich2", "seeAlso": [ @@ -5703,7 +5703,7 @@ "reference": "https://spdx.org/licenses/MPL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/MPL-1.0.json", - "referenceNumber": 136, + "referenceNumber": 665, "name": "Mozilla Public License 1.0", "licenseId": "MPL-1.0", "seeAlso": [ @@ -5716,7 +5716,7 @@ "reference": "https://spdx.org/licenses/MPL-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/MPL-1.1.json", - "referenceNumber": 179, + "referenceNumber": 679, "name": "Mozilla Public License 1.1", "licenseId": "MPL-1.1", "seeAlso": [ @@ -5730,7 +5730,7 @@ "reference": "https://spdx.org/licenses/MPL-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/MPL-2.0.json", - "referenceNumber": 585, + "referenceNumber": 599, "name": "Mozilla Public License 2.0", "licenseId": "MPL-2.0", "seeAlso": [ @@ -5744,7 +5744,7 @@ "reference": "https://spdx.org/licenses/MPL-2.0-no-copyleft-exception.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/MPL-2.0-no-copyleft-exception.json", - "referenceNumber": 182, + "referenceNumber": 174, "name": "Mozilla Public License 2.0 (no copyleft exception)", "licenseId": "MPL-2.0-no-copyleft-exception", "seeAlso": [ @@ -5757,7 +5757,7 @@ "reference": "https://spdx.org/licenses/mplus.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/mplus.json", - "referenceNumber": 615, + "referenceNumber": 17, "name": "mplus Font License", "licenseId": "mplus", "seeAlso": [ @@ -5769,7 +5769,7 @@ "reference": "https://spdx.org/licenses/MS-LPL.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/MS-LPL.json", - "referenceNumber": 146, + "referenceNumber": 674, "name": "Microsoft Limited Public License", "licenseId": "MS-LPL", "seeAlso": [ @@ -5783,7 +5783,7 @@ "reference": "https://spdx.org/licenses/MS-PL.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/MS-PL.json", - "referenceNumber": 398, + "referenceNumber": 698, "name": "Microsoft Public License", "licenseId": "MS-PL", "seeAlso": [ @@ -5797,7 +5797,7 @@ "reference": "https://spdx.org/licenses/MS-RL.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/MS-RL.json", - "referenceNumber": 122, + "referenceNumber": 276, "name": "Microsoft Reciprocal License", "licenseId": "MS-RL", "seeAlso": [ @@ -5811,7 +5811,7 @@ "reference": "https://spdx.org/licenses/MTLL.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/MTLL.json", - "referenceNumber": 317, + "referenceNumber": 588, "name": "Matrix Template Library License", "licenseId": "MTLL", "seeAlso": [ @@ -5823,7 +5823,7 @@ "reference": "https://spdx.org/licenses/MulanPSL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/MulanPSL-1.0.json", - "referenceNumber": 115, + "referenceNumber": 320, "name": "Mulan Permissive Software License, Version 1", "licenseId": "MulanPSL-1.0", "seeAlso": [ @@ -5836,7 +5836,7 @@ "reference": "https://spdx.org/licenses/MulanPSL-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/MulanPSL-2.0.json", - "referenceNumber": 527, + "referenceNumber": 182, "name": "Mulan Permissive Software License, Version 2", "licenseId": "MulanPSL-2.0", "seeAlso": [ @@ -5848,7 +5848,7 @@ "reference": "https://spdx.org/licenses/Multics.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Multics.json", - "referenceNumber": 49, + "referenceNumber": 60, "name": "Multics License", "licenseId": "Multics", "seeAlso": [ @@ -5860,7 +5860,7 @@ "reference": "https://spdx.org/licenses/Mup.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Mup.json", - "referenceNumber": 668, + "referenceNumber": 288, "name": "Mup License", "licenseId": "Mup", "seeAlso": [ @@ -5872,7 +5872,7 @@ "reference": "https://spdx.org/licenses/NAIST-2003.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/NAIST-2003.json", - "referenceNumber": 464, + "referenceNumber": 462, "name": "Nara Institute of Science and Technology License (2003)", "licenseId": "NAIST-2003", "seeAlso": [ @@ -5885,7 +5885,7 @@ "reference": "https://spdx.org/licenses/NASA-1.3.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/NASA-1.3.json", - "referenceNumber": 54, + "referenceNumber": 432, "name": "NASA Open Source Agreement 1.3", "licenseId": "NASA-1.3", "seeAlso": [ @@ -5899,7 +5899,7 @@ "reference": "https://spdx.org/licenses/Naumen.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Naumen.json", - "referenceNumber": 52, + "referenceNumber": 307, "name": "Naumen Public License", "licenseId": "Naumen", "seeAlso": [ @@ -5911,7 +5911,7 @@ "reference": "https://spdx.org/licenses/NBPL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/NBPL-1.0.json", - "referenceNumber": 577, + "referenceNumber": 460, "name": "Net Boolean Public License v1", "licenseId": "NBPL-1.0", "seeAlso": [ @@ -5923,7 +5923,7 @@ "reference": "https://spdx.org/licenses/NCBI-PD.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/NCBI-PD.json", - "referenceNumber": 181, + "referenceNumber": 696, "name": "NCBI Public Domain Notice", "licenseId": "NCBI-PD", "seeAlso": [ @@ -5939,7 +5939,7 @@ "reference": "https://spdx.org/licenses/NCGL-UK-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/NCGL-UK-2.0.json", - "referenceNumber": 697, + "referenceNumber": 392, "name": "Non-Commercial Government Licence", "licenseId": "NCGL-UK-2.0", "seeAlso": [ @@ -5951,7 +5951,7 @@ "reference": "https://spdx.org/licenses/NCL.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/NCL.json", - "referenceNumber": 241, + "referenceNumber": 154, "name": "NCL Source Code License", "licenseId": "NCL", "seeAlso": [ @@ -5963,7 +5963,7 @@ "reference": "https://spdx.org/licenses/NCSA.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/NCSA.json", - "referenceNumber": 328, + "referenceNumber": 148, "name": "University of Illinois/NCSA Open Source License", "licenseId": "NCSA", "seeAlso": [ @@ -5977,7 +5977,7 @@ "reference": "https://spdx.org/licenses/Net-SNMP.html", "isDeprecatedLicenseId": true, "detailsUrl": "https://spdx.org/licenses/Net-SNMP.json", - "referenceNumber": 579, + "referenceNumber": 638, "name": "Net-SNMP License", "licenseId": "Net-SNMP", "seeAlso": [ @@ -5989,7 +5989,7 @@ "reference": "https://spdx.org/licenses/NetCDF.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/NetCDF.json", - "referenceNumber": 311, + "referenceNumber": 626, "name": "NetCDF license", "licenseId": "NetCDF", "seeAlso": [ @@ -6001,7 +6001,7 @@ "reference": "https://spdx.org/licenses/Newsletr.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Newsletr.json", - "referenceNumber": 676, + "referenceNumber": 607, "name": "Newsletr License", "licenseId": "Newsletr", "seeAlso": [ @@ -6013,7 +6013,7 @@ "reference": "https://spdx.org/licenses/NGPL.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/NGPL.json", - "referenceNumber": 619, + "referenceNumber": 64, "name": "Nethack General Public License", "licenseId": "NGPL", "seeAlso": [ @@ -6025,7 +6025,7 @@ "reference": "https://spdx.org/licenses/ngrep.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/ngrep.json", - "referenceNumber": 6, + "referenceNumber": 16, "name": "ngrep License", "licenseId": "ngrep", "seeAlso": [ @@ -6037,7 +6037,7 @@ "reference": "https://spdx.org/licenses/NICTA-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/NICTA-1.0.json", - "referenceNumber": 89, + "referenceNumber": 406, "name": "NICTA Public Software License, Version 1.0", "licenseId": "NICTA-1.0", "seeAlso": [ @@ -6049,7 +6049,7 @@ "reference": "https://spdx.org/licenses/NIST-PD.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/NIST-PD.json", - "referenceNumber": 674, + "referenceNumber": 98, "name": "NIST Public Domain Notice", "licenseId": "NIST-PD", "seeAlso": [ @@ -6062,7 +6062,7 @@ "reference": "https://spdx.org/licenses/NIST-PD-fallback.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/NIST-PD-fallback.json", - "referenceNumber": 9, + "referenceNumber": 616, "name": "NIST Public Domain Notice with license fallback", "licenseId": "NIST-PD-fallback", "seeAlso": [ @@ -6075,7 +6075,7 @@ "reference": "https://spdx.org/licenses/NIST-Software.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/NIST-Software.json", - "referenceNumber": 484, + "referenceNumber": 447, "name": "NIST Software License", "licenseId": "NIST-Software", "seeAlso": [ @@ -6087,7 +6087,7 @@ "reference": "https://spdx.org/licenses/NLOD-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/NLOD-1.0.json", - "referenceNumber": 581, + "referenceNumber": 249, "name": "Norwegian Licence for Open Government Data (NLOD) 1.0", "licenseId": "NLOD-1.0", "seeAlso": [ @@ -6099,7 +6099,7 @@ "reference": "https://spdx.org/licenses/NLOD-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/NLOD-2.0.json", - "referenceNumber": 175, + "referenceNumber": 687, "name": "Norwegian Licence for Open Government Data (NLOD) 2.0", "licenseId": "NLOD-2.0", "seeAlso": [ @@ -6111,7 +6111,7 @@ "reference": "https://spdx.org/licenses/NLPL.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/NLPL.json", - "referenceNumber": 567, + "referenceNumber": 161, "name": "No Limit Public License", "licenseId": "NLPL", "seeAlso": [ @@ -6123,7 +6123,7 @@ "reference": "https://spdx.org/licenses/Nokia.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Nokia.json", - "referenceNumber": 666, + "referenceNumber": 464, "name": "Nokia Open Source License", "licenseId": "Nokia", "seeAlso": [ @@ -6136,7 +6136,7 @@ "reference": "https://spdx.org/licenses/NOSL.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/NOSL.json", - "referenceNumber": 669, + "referenceNumber": 471, "name": "Netizen Open Source License", "licenseId": "NOSL", "seeAlso": [ @@ -6149,7 +6149,7 @@ "reference": "https://spdx.org/licenses/Noweb.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Noweb.json", - "referenceNumber": 492, + "referenceNumber": 77, "name": "Noweb License", "licenseId": "Noweb", "seeAlso": [ @@ -6161,7 +6161,7 @@ "reference": "https://spdx.org/licenses/NPL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/NPL-1.0.json", - "referenceNumber": 362, + "referenceNumber": 372, "name": "Netscape Public License v1.0", "licenseId": "NPL-1.0", "seeAlso": [ @@ -6174,7 +6174,7 @@ "reference": "https://spdx.org/licenses/NPL-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/NPL-1.1.json", - "referenceNumber": 232, + "referenceNumber": 518, "name": "Netscape Public License v1.1", "licenseId": "NPL-1.1", "seeAlso": [ @@ -6187,7 +6187,7 @@ "reference": "https://spdx.org/licenses/NPOSL-3.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/NPOSL-3.0.json", - "referenceNumber": 13, + "referenceNumber": 195, "name": "Non-Profit Open Software License 3.0", "licenseId": "NPOSL-3.0", "seeAlso": [ @@ -6199,7 +6199,7 @@ "reference": "https://spdx.org/licenses/NRL.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/NRL.json", - "referenceNumber": 648, + "referenceNumber": 146, "name": "NRL License", "licenseId": "NRL", "seeAlso": [ @@ -6211,7 +6211,7 @@ "reference": "https://spdx.org/licenses/NTIA-PD.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/NTIA-PD.json", - "referenceNumber": 576, + "referenceNumber": 426, "name": "NTIA Public Domain Notice", "licenseId": "NTIA-PD", "seeAlso": [ @@ -6224,7 +6224,7 @@ "reference": "https://spdx.org/licenses/NTP.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/NTP.json", - "referenceNumber": 433, + "referenceNumber": 621, "name": "NTP License", "licenseId": "NTP", "seeAlso": [ @@ -6236,7 +6236,7 @@ "reference": "https://spdx.org/licenses/NTP-0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/NTP-0.json", - "referenceNumber": 693, + "referenceNumber": 566, "name": "NTP No Attribution", "licenseId": "NTP-0", "seeAlso": [ @@ -6248,7 +6248,7 @@ "reference": "https://spdx.org/licenses/Nunit.html", "isDeprecatedLicenseId": true, "detailsUrl": "https://spdx.org/licenses/Nunit.json", - "referenceNumber": 76, + "referenceNumber": 203, "name": "Nunit License", "licenseId": "Nunit", "seeAlso": [ @@ -6261,7 +6261,7 @@ "reference": "https://spdx.org/licenses/O-UDA-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/O-UDA-1.0.json", - "referenceNumber": 112, + "referenceNumber": 485, "name": "Open Use of Data Agreement v1.0", "licenseId": "O-UDA-1.0", "seeAlso": [ @@ -6274,7 +6274,7 @@ "reference": "https://spdx.org/licenses/OAR.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OAR.json", - "referenceNumber": 219, + "referenceNumber": 251, "name": "OAR License", "licenseId": "OAR", "seeAlso": [ @@ -6286,7 +6286,7 @@ "reference": "https://spdx.org/licenses/OCCT-PL.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OCCT-PL.json", - "referenceNumber": 520, + "referenceNumber": 371, "name": "Open CASCADE Technology Public License", "licenseId": "OCCT-PL", "seeAlso": [ @@ -6298,7 +6298,7 @@ "reference": "https://spdx.org/licenses/OCLC-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OCLC-2.0.json", - "referenceNumber": 427, + "referenceNumber": 274, "name": "OCLC Research Public License 2.0", "licenseId": "OCLC-2.0", "seeAlso": [ @@ -6311,7 +6311,7 @@ "reference": "https://spdx.org/licenses/ODbL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/ODbL-1.0.json", - "referenceNumber": 174, + "referenceNumber": 397, "name": "Open Data Commons Open Database License v1.0", "licenseId": "ODbL-1.0", "seeAlso": [ @@ -6325,7 +6325,7 @@ "reference": "https://spdx.org/licenses/ODC-By-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/ODC-By-1.0.json", - "referenceNumber": 497, + "referenceNumber": 46, "name": "Open Data Commons Attribution License v1.0", "licenseId": "ODC-By-1.0", "seeAlso": [ @@ -6337,7 +6337,7 @@ "reference": "https://spdx.org/licenses/OFFIS.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OFFIS.json", - "referenceNumber": 602, + "referenceNumber": 368, "name": "OFFIS License", "licenseId": "OFFIS", "seeAlso": [ @@ -6349,7 +6349,7 @@ "reference": "https://spdx.org/licenses/OFL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OFL-1.0.json", - "referenceNumber": 8, + "referenceNumber": 589, "name": "SIL Open Font License 1.0", "licenseId": "OFL-1.0", "seeAlso": [ @@ -6362,7 +6362,7 @@ "reference": "https://spdx.org/licenses/OFL-1.0-no-RFN.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OFL-1.0-no-RFN.json", - "referenceNumber": 656, + "referenceNumber": 653, "name": "SIL Open Font License 1.0 with no Reserved Font Name", "licenseId": "OFL-1.0-no-RFN", "seeAlso": [ @@ -6374,7 +6374,7 @@ "reference": "https://spdx.org/licenses/OFL-1.0-RFN.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OFL-1.0-RFN.json", - "referenceNumber": 71, + "referenceNumber": 201, "name": "SIL Open Font License 1.0 with Reserved Font Name", "licenseId": "OFL-1.0-RFN", "seeAlso": [ @@ -6386,7 +6386,7 @@ "reference": "https://spdx.org/licenses/OFL-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OFL-1.1.json", - "referenceNumber": 28, + "referenceNumber": 608, "name": "SIL Open Font License 1.1", "licenseId": "OFL-1.1", "seeAlso": [ @@ -6400,7 +6400,7 @@ "reference": "https://spdx.org/licenses/OFL-1.1-no-RFN.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OFL-1.1-no-RFN.json", - "referenceNumber": 374, + "referenceNumber": 204, "name": "SIL Open Font License 1.1 with no Reserved Font Name", "licenseId": "OFL-1.1-no-RFN", "seeAlso": [ @@ -6413,7 +6413,7 @@ "reference": "https://spdx.org/licenses/OFL-1.1-RFN.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OFL-1.1-RFN.json", - "referenceNumber": 562, + "referenceNumber": 82, "name": "SIL Open Font License 1.1 with Reserved Font Name", "licenseId": "OFL-1.1-RFN", "seeAlso": [ @@ -6426,7 +6426,7 @@ "reference": "https://spdx.org/licenses/OGC-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OGC-1.0.json", - "referenceNumber": 337, + "referenceNumber": 612, "name": "OGC Software License, Version 1.0", "licenseId": "OGC-1.0", "seeAlso": [ @@ -6438,7 +6438,7 @@ "reference": "https://spdx.org/licenses/OGDL-Taiwan-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OGDL-Taiwan-1.0.json", - "referenceNumber": 569, + "referenceNumber": 129, "name": "Taiwan Open Government Data License, version 1.0", "licenseId": "OGDL-Taiwan-1.0", "seeAlso": [ @@ -6450,7 +6450,7 @@ "reference": "https://spdx.org/licenses/OGL-Canada-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OGL-Canada-2.0.json", - "referenceNumber": 79, + "referenceNumber": 544, "name": "Open Government Licence - Canada", "licenseId": "OGL-Canada-2.0", "seeAlso": [ @@ -6462,7 +6462,7 @@ "reference": "https://spdx.org/licenses/OGL-UK-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OGL-UK-1.0.json", - "referenceNumber": 634, + "referenceNumber": 168, "name": "Open Government Licence v1.0", "licenseId": "OGL-UK-1.0", "seeAlso": [ @@ -6474,7 +6474,7 @@ "reference": "https://spdx.org/licenses/OGL-UK-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OGL-UK-2.0.json", - "referenceNumber": 498, + "referenceNumber": 400, "name": "Open Government Licence v2.0", "licenseId": "OGL-UK-2.0", "seeAlso": [ @@ -6486,7 +6486,7 @@ "reference": "https://spdx.org/licenses/OGL-UK-3.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OGL-UK-3.0.json", - "referenceNumber": 294, + "referenceNumber": 570, "name": "Open Government Licence v3.0", "licenseId": "OGL-UK-3.0", "seeAlso": [ @@ -6498,7 +6498,7 @@ "reference": "https://spdx.org/licenses/OGTSL.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OGTSL.json", - "referenceNumber": 40, + "referenceNumber": 534, "name": "Open Group Test Suite License", "licenseId": "OGTSL", "seeAlso": [ @@ -6511,7 +6511,7 @@ "reference": "https://spdx.org/licenses/OLDAP-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OLDAP-1.1.json", - "referenceNumber": 48, + "referenceNumber": 333, "name": "Open LDAP Public License v1.1", "licenseId": "OLDAP-1.1", "seeAlso": [ @@ -6523,7 +6523,7 @@ "reference": "https://spdx.org/licenses/OLDAP-1.2.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OLDAP-1.2.json", - "referenceNumber": 643, + "referenceNumber": 281, "name": "Open LDAP Public License v1.2", "licenseId": "OLDAP-1.2", "seeAlso": [ @@ -6535,7 +6535,7 @@ "reference": "https://spdx.org/licenses/OLDAP-1.3.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OLDAP-1.3.json", - "referenceNumber": 251, + "referenceNumber": 386, "name": "Open LDAP Public License v1.3", "licenseId": "OLDAP-1.3", "seeAlso": [ @@ -6547,7 +6547,7 @@ "reference": "https://spdx.org/licenses/OLDAP-1.4.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OLDAP-1.4.json", - "referenceNumber": 458, + "referenceNumber": 105, "name": "Open LDAP Public License v1.4", "licenseId": "OLDAP-1.4", "seeAlso": [ @@ -6559,7 +6559,7 @@ "reference": "https://spdx.org/licenses/OLDAP-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OLDAP-2.0.json", - "referenceNumber": 15, + "referenceNumber": 657, "name": "Open LDAP Public License v2.0 (or possibly 2.0A and 2.0B)", "licenseId": "OLDAP-2.0", "seeAlso": [ @@ -6571,7 +6571,7 @@ "reference": "https://spdx.org/licenses/OLDAP-2.0.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OLDAP-2.0.1.json", - "referenceNumber": 265, + "referenceNumber": 654, "name": "Open LDAP Public License v2.0.1", "licenseId": "OLDAP-2.0.1", "seeAlso": [ @@ -6583,7 +6583,7 @@ "reference": "https://spdx.org/licenses/OLDAP-2.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OLDAP-2.1.json", - "referenceNumber": 57, + "referenceNumber": 170, "name": "Open LDAP Public License v2.1", "licenseId": "OLDAP-2.1", "seeAlso": [ @@ -6595,7 +6595,7 @@ "reference": "https://spdx.org/licenses/OLDAP-2.2.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OLDAP-2.2.json", - "referenceNumber": 74, + "referenceNumber": 667, "name": "Open LDAP Public License v2.2", "licenseId": "OLDAP-2.2", "seeAlso": [ @@ -6607,7 +6607,7 @@ "reference": "https://spdx.org/licenses/OLDAP-2.2.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OLDAP-2.2.1.json", - "referenceNumber": 302, + "referenceNumber": 378, "name": "Open LDAP Public License v2.2.1", "licenseId": "OLDAP-2.2.1", "seeAlso": [ @@ -6619,7 +6619,7 @@ "reference": "https://spdx.org/licenses/OLDAP-2.2.2.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OLDAP-2.2.2.json", - "referenceNumber": 509, + "referenceNumber": 314, "name": "Open LDAP Public License 2.2.2", "licenseId": "OLDAP-2.2.2", "seeAlso": [ @@ -6631,7 +6631,7 @@ "reference": "https://spdx.org/licenses/OLDAP-2.3.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OLDAP-2.3.json", - "referenceNumber": 685, + "referenceNumber": 411, "name": "Open LDAP Public License v2.3", "licenseId": "OLDAP-2.3", "seeAlso": [ @@ -6644,7 +6644,7 @@ "reference": "https://spdx.org/licenses/OLDAP-2.4.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OLDAP-2.4.json", - "referenceNumber": 170, + "referenceNumber": 382, "name": "Open LDAP Public License v2.4", "licenseId": "OLDAP-2.4", "seeAlso": [ @@ -6656,7 +6656,7 @@ "reference": "https://spdx.org/licenses/OLDAP-2.5.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OLDAP-2.5.json", - "referenceNumber": 275, + "referenceNumber": 443, "name": "Open LDAP Public License v2.5", "licenseId": "OLDAP-2.5", "seeAlso": [ @@ -6668,7 +6668,7 @@ "reference": "https://spdx.org/licenses/OLDAP-2.6.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OLDAP-2.6.json", - "referenceNumber": 120, + "referenceNumber": 344, "name": "Open LDAP Public License v2.6", "licenseId": "OLDAP-2.6", "seeAlso": [ @@ -6680,7 +6680,7 @@ "reference": "https://spdx.org/licenses/OLDAP-2.7.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OLDAP-2.7.json", - "referenceNumber": 560, + "referenceNumber": 574, "name": "Open LDAP Public License v2.7", "licenseId": "OLDAP-2.7", "seeAlso": [ @@ -6693,7 +6693,7 @@ "reference": "https://spdx.org/licenses/OLDAP-2.8.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OLDAP-2.8.json", - "referenceNumber": 614, + "referenceNumber": 364, "name": "Open LDAP Public License v2.8", "licenseId": "OLDAP-2.8", "seeAlso": [ @@ -6705,7 +6705,7 @@ "reference": "https://spdx.org/licenses/OLFL-1.3.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OLFL-1.3.json", - "referenceNumber": 183, + "referenceNumber": 121, "name": "Open Logistics Foundation License Version 1.3", "licenseId": "OLFL-1.3", "seeAlso": [ @@ -6718,7 +6718,7 @@ "reference": "https://spdx.org/licenses/OML.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OML.json", - "referenceNumber": 649, + "referenceNumber": 116, "name": "Open Market License", "licenseId": "OML", "seeAlso": [ @@ -6730,7 +6730,7 @@ "reference": "https://spdx.org/licenses/OpenPBS-2.3.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OpenPBS-2.3.json", - "referenceNumber": 339, + "referenceNumber": 2, "name": "OpenPBS v2.3 Software License", "licenseId": "OpenPBS-2.3", "seeAlso": [ @@ -6743,7 +6743,7 @@ "reference": "https://spdx.org/licenses/OpenSSL.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OpenSSL.json", - "referenceNumber": 571, + "referenceNumber": 275, "name": "OpenSSL License", "licenseId": "OpenSSL", "seeAlso": [ @@ -6756,7 +6756,7 @@ "reference": "https://spdx.org/licenses/OpenSSL-standalone.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OpenSSL-standalone.json", - "referenceNumber": 373, + "referenceNumber": 128, "name": "OpenSSL License - standalone", "licenseId": "OpenSSL-standalone", "seeAlso": [ @@ -6769,7 +6769,7 @@ "reference": "https://spdx.org/licenses/OpenVision.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OpenVision.json", - "referenceNumber": 528, + "referenceNumber": 36, "name": "OpenVision License", "licenseId": "OpenVision", "seeAlso": [ @@ -6783,7 +6783,7 @@ "reference": "https://spdx.org/licenses/OPL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OPL-1.0.json", - "referenceNumber": 296, + "referenceNumber": 614, "name": "Open Public License v1.0", "licenseId": "OPL-1.0", "seeAlso": [ @@ -6797,7 +6797,7 @@ "reference": "https://spdx.org/licenses/OPL-UK-3.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OPL-UK-3.0.json", - "referenceNumber": 679, + "referenceNumber": 285, "name": "United Kingdom Open Parliament Licence v3.0", "licenseId": "OPL-UK-3.0", "seeAlso": [ @@ -6809,7 +6809,7 @@ "reference": "https://spdx.org/licenses/OPUBL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OPUBL-1.0.json", - "referenceNumber": 409, + "referenceNumber": 414, "name": "Open Publication License v1.0", "licenseId": "OPUBL-1.0", "seeAlso": [ @@ -6823,7 +6823,7 @@ "reference": "https://spdx.org/licenses/OSET-PL-2.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OSET-PL-2.1.json", - "referenceNumber": 359, + "referenceNumber": 183, "name": "OSET Public License version 2.1", "licenseId": "OSET-PL-2.1", "seeAlso": [ @@ -6836,7 +6836,7 @@ "reference": "https://spdx.org/licenses/OSL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OSL-1.0.json", - "referenceNumber": 61, + "referenceNumber": 651, "name": "Open Software License 1.0", "licenseId": "OSL-1.0", "seeAlso": [ @@ -6849,7 +6849,7 @@ "reference": "https://spdx.org/licenses/OSL-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OSL-1.1.json", - "referenceNumber": 204, + "referenceNumber": 453, "name": "Open Software License 1.1", "licenseId": "OSL-1.1", "seeAlso": [ @@ -6862,7 +6862,7 @@ "reference": "https://spdx.org/licenses/OSL-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OSL-2.0.json", - "referenceNumber": 376, + "referenceNumber": 179, "name": "Open Software License 2.0", "licenseId": "OSL-2.0", "seeAlso": [ @@ -6875,7 +6875,7 @@ "reference": "https://spdx.org/licenses/OSL-2.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OSL-2.1.json", - "referenceNumber": 188, + "referenceNumber": 29, "name": "Open Software License 2.1", "licenseId": "OSL-2.1", "seeAlso": [ @@ -6889,7 +6889,7 @@ "reference": "https://spdx.org/licenses/OSL-3.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/OSL-3.0.json", - "referenceNumber": 168, + "referenceNumber": 3, "name": "Open Software License 3.0", "licenseId": "OSL-3.0", "seeAlso": [ @@ -6903,7 +6903,7 @@ "reference": "https://spdx.org/licenses/PADL.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/PADL.json", - "referenceNumber": 210, + "referenceNumber": 284, "name": "PADL License", "licenseId": "PADL", "seeAlso": [ @@ -6915,7 +6915,7 @@ "reference": "https://spdx.org/licenses/Parity-6.0.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Parity-6.0.0.json", - "referenceNumber": 171, + "referenceNumber": 241, "name": "The Parity Public License 6.0.0", "licenseId": "Parity-6.0.0", "seeAlso": [ @@ -6927,7 +6927,7 @@ "reference": "https://spdx.org/licenses/Parity-7.0.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Parity-7.0.0.json", - "referenceNumber": 544, + "referenceNumber": 235, "name": "The Parity Public License 7.0.0", "licenseId": "Parity-7.0.0", "seeAlso": [ @@ -6939,7 +6939,7 @@ "reference": "https://spdx.org/licenses/PDDL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/PDDL-1.0.json", - "referenceNumber": 417, + "referenceNumber": 684, "name": "Open Data Commons Public Domain Dedication \u0026 License 1.0", "licenseId": "PDDL-1.0", "seeAlso": [ @@ -6952,7 +6952,7 @@ "reference": "https://spdx.org/licenses/PHP-3.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/PHP-3.0.json", - "referenceNumber": 250, + "referenceNumber": 133, "name": "PHP License v3.0", "licenseId": "PHP-3.0", "seeAlso": [ @@ -6965,7 +6965,7 @@ "reference": "https://spdx.org/licenses/PHP-3.01.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/PHP-3.01.json", - "referenceNumber": 199, + "referenceNumber": 221, "name": "PHP License v3.01", "licenseId": "PHP-3.01", "seeAlso": [ @@ -6978,7 +6978,7 @@ "reference": "https://spdx.org/licenses/Pixar.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Pixar.json", - "referenceNumber": 309, + "referenceNumber": 435, "name": "Pixar License", "licenseId": "Pixar", "seeAlso": [ @@ -6992,7 +6992,7 @@ "reference": "https://spdx.org/licenses/pkgconf.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/pkgconf.json", - "referenceNumber": 333, + "referenceNumber": 670, "name": "pkgconf License", "licenseId": "pkgconf", "seeAlso": [ @@ -7004,7 +7004,7 @@ "reference": "https://spdx.org/licenses/Plexus.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Plexus.json", - "referenceNumber": 354, + "referenceNumber": 181, "name": "Plexus Classworlds License", "licenseId": "Plexus", "seeAlso": [ @@ -7016,7 +7016,7 @@ "reference": "https://spdx.org/licenses/pnmstitch.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/pnmstitch.json", - "referenceNumber": 452, + "referenceNumber": 691, "name": "pnmstitch License", "licenseId": "pnmstitch", "seeAlso": [ @@ -7028,7 +7028,7 @@ "reference": "https://spdx.org/licenses/PolyForm-Noncommercial-1.0.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/PolyForm-Noncommercial-1.0.0.json", - "referenceNumber": 486, + "referenceNumber": 119, "name": "PolyForm Noncommercial License 1.0.0", "licenseId": "PolyForm-Noncommercial-1.0.0", "seeAlso": [ @@ -7040,7 +7040,7 @@ "reference": "https://spdx.org/licenses/PolyForm-Small-Business-1.0.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/PolyForm-Small-Business-1.0.0.json", - "referenceNumber": 338, + "referenceNumber": 30, "name": "PolyForm Small Business License 1.0.0", "licenseId": "PolyForm-Small-Business-1.0.0", "seeAlso": [ @@ -7052,7 +7052,7 @@ "reference": "https://spdx.org/licenses/PostgreSQL.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/PostgreSQL.json", - "referenceNumber": 641, + "referenceNumber": 697, "name": "PostgreSQL License", "licenseId": "PostgreSQL", "seeAlso": [ @@ -7065,7 +7065,7 @@ "reference": "https://spdx.org/licenses/PPL.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/PPL.json", - "referenceNumber": 672, + "referenceNumber": 150, "name": "Peer Production License", "licenseId": "PPL", "seeAlso": [ @@ -7079,7 +7079,7 @@ "reference": "https://spdx.org/licenses/PSF-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/PSF-2.0.json", - "referenceNumber": 121, + "referenceNumber": 211, "name": "Python Software Foundation License 2.0", "licenseId": "PSF-2.0", "seeAlso": [ @@ -7092,7 +7092,7 @@ "reference": "https://spdx.org/licenses/psfrag.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/psfrag.json", - "referenceNumber": 366, + "referenceNumber": 423, "name": "psfrag License", "licenseId": "psfrag", "seeAlso": [ @@ -7104,7 +7104,7 @@ "reference": "https://spdx.org/licenses/psutils.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/psutils.json", - "referenceNumber": 411, + "referenceNumber": 500, "name": "psutils License", "licenseId": "psutils", "seeAlso": [ @@ -7116,7 +7116,7 @@ "reference": "https://spdx.org/licenses/Python-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Python-2.0.json", - "referenceNumber": 608, + "referenceNumber": 628, "name": "Python License 2.0", "licenseId": "Python-2.0", "seeAlso": [ @@ -7129,7 +7129,7 @@ "reference": "https://spdx.org/licenses/Python-2.0.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Python-2.0.1.json", - "referenceNumber": 104, + "referenceNumber": 586, "name": "Python License 2.0.1", "licenseId": "Python-2.0.1", "seeAlso": [ @@ -7143,7 +7143,7 @@ "reference": "https://spdx.org/licenses/python-ldap.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/python-ldap.json", - "referenceNumber": 101, + "referenceNumber": 630, "name": "Python ldap License", "licenseId": "python-ldap", "seeAlso": [ @@ -7155,7 +7155,7 @@ "reference": "https://spdx.org/licenses/Qhull.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Qhull.json", - "referenceNumber": 625, + "referenceNumber": 590, "name": "Qhull License", "licenseId": "Qhull", "seeAlso": [ @@ -7167,7 +7167,7 @@ "reference": "https://spdx.org/licenses/QPL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/QPL-1.0.json", - "referenceNumber": 68, + "referenceNumber": 693, "name": "Q Public License 1.0", "licenseId": "QPL-1.0", "seeAlso": [ @@ -7182,7 +7182,7 @@ "reference": "https://spdx.org/licenses/QPL-1.0-INRIA-2004.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/QPL-1.0-INRIA-2004.json", - "referenceNumber": 191, + "referenceNumber": 117, "name": "Q Public License 1.0 - INRIA 2004 variant", "licenseId": "QPL-1.0-INRIA-2004", "seeAlso": [ @@ -7194,7 +7194,7 @@ "reference": "https://spdx.org/licenses/radvd.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/radvd.json", - "referenceNumber": 140, + "referenceNumber": 678, "name": "radvd License", "licenseId": "radvd", "seeAlso": [ @@ -7206,7 +7206,7 @@ "reference": "https://spdx.org/licenses/Rdisc.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Rdisc.json", - "referenceNumber": 531, + "referenceNumber": 4, "name": "Rdisc License", "licenseId": "Rdisc", "seeAlso": [ @@ -7218,7 +7218,7 @@ "reference": "https://spdx.org/licenses/RHeCos-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/RHeCos-1.1.json", - "referenceNumber": 443, + "referenceNumber": 258, "name": "Red Hat eCos Public License v1.1", "licenseId": "RHeCos-1.1", "seeAlso": [ @@ -7231,7 +7231,7 @@ "reference": "https://spdx.org/licenses/RPL-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/RPL-1.1.json", - "referenceNumber": 316, + "referenceNumber": 57, "name": "Reciprocal Public License 1.1", "licenseId": "RPL-1.1", "seeAlso": [ @@ -7243,7 +7243,7 @@ "reference": "https://spdx.org/licenses/RPL-1.5.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/RPL-1.5.json", - "referenceNumber": 119, + "referenceNumber": 413, "name": "Reciprocal Public License 1.5", "licenseId": "RPL-1.5", "seeAlso": [ @@ -7255,7 +7255,7 @@ "reference": "https://spdx.org/licenses/RPSL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/RPSL-1.0.json", - "referenceNumber": 75, + "referenceNumber": 104, "name": "RealNetworks Public Source License v1.0", "licenseId": "RPSL-1.0", "seeAlso": [ @@ -7269,7 +7269,7 @@ "reference": "https://spdx.org/licenses/RSA-MD.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/RSA-MD.json", - "referenceNumber": 161, + "referenceNumber": 12, "name": "RSA Message-Digest License", "licenseId": "RSA-MD", "seeAlso": [ @@ -7281,7 +7281,7 @@ "reference": "https://spdx.org/licenses/RSCPL.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/RSCPL.json", - "referenceNumber": 635, + "referenceNumber": 166, "name": "Ricoh Source Code Public License", "licenseId": "RSCPL", "seeAlso": [ @@ -7294,7 +7294,7 @@ "reference": "https://spdx.org/licenses/Ruby.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Ruby.json", - "referenceNumber": 249, + "referenceNumber": 490, "name": "Ruby License", "licenseId": "Ruby", "seeAlso": [ @@ -7307,7 +7307,7 @@ "reference": "https://spdx.org/licenses/Ruby-pty.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Ruby-pty.json", - "referenceNumber": 142, + "referenceNumber": 509, "name": "Ruby pty extension license", "licenseId": "Ruby-pty", "seeAlso": [ @@ -7321,7 +7321,7 @@ "reference": "https://spdx.org/licenses/SAX-PD.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/SAX-PD.json", - "referenceNumber": 51, + "referenceNumber": 22, "name": "Sax Public Domain Notice", "licenseId": "SAX-PD", "seeAlso": [ @@ -7333,7 +7333,7 @@ "reference": "https://spdx.org/licenses/SAX-PD-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/SAX-PD-2.0.json", - "referenceNumber": 319, + "referenceNumber": 346, "name": "Sax Public Domain Notice 2.0", "licenseId": "SAX-PD-2.0", "seeAlso": [ @@ -7345,7 +7345,7 @@ "reference": "https://spdx.org/licenses/Saxpath.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Saxpath.json", - "referenceNumber": 344, + "referenceNumber": 390, "name": "Saxpath License", "licenseId": "Saxpath", "seeAlso": [ @@ -7357,7 +7357,7 @@ "reference": "https://spdx.org/licenses/SCEA.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/SCEA.json", - "referenceNumber": 118, + "referenceNumber": 484, "name": "SCEA Shared Source License", "licenseId": "SCEA", "seeAlso": [ @@ -7369,7 +7369,7 @@ "reference": "https://spdx.org/licenses/SchemeReport.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/SchemeReport.json", - "referenceNumber": 428, + "referenceNumber": 91, "name": "Scheme Language Report License", "licenseId": "SchemeReport", "seeAlso": [], @@ -7379,7 +7379,7 @@ "reference": "https://spdx.org/licenses/Sendmail.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Sendmail.json", - "referenceNumber": 304, + "referenceNumber": 266, "name": "Sendmail License", "licenseId": "Sendmail", "seeAlso": [ @@ -7392,7 +7392,7 @@ "reference": "https://spdx.org/licenses/Sendmail-8.23.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Sendmail-8.23.json", - "referenceNumber": 261, + "referenceNumber": 55, "name": "Sendmail License 8.23", "licenseId": "Sendmail-8.23", "seeAlso": [ @@ -7405,7 +7405,7 @@ "reference": "https://spdx.org/licenses/Sendmail-Open-Source-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Sendmail-Open-Source-1.1.json", - "referenceNumber": 597, + "referenceNumber": 620, "name": "Sendmail Open Source License v1.1", "licenseId": "Sendmail-Open-Source-1.1", "seeAlso": [ @@ -7417,7 +7417,7 @@ "reference": "https://spdx.org/licenses/SGI-B-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/SGI-B-1.0.json", - "referenceNumber": 206, + "referenceNumber": 56, "name": "SGI Free Software License B v1.0", "licenseId": "SGI-B-1.0", "seeAlso": [ @@ -7429,7 +7429,7 @@ "reference": "https://spdx.org/licenses/SGI-B-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/SGI-B-1.1.json", - "referenceNumber": 516, + "referenceNumber": 296, "name": "SGI Free Software License B v1.1", "licenseId": "SGI-B-1.1", "seeAlso": [ @@ -7441,7 +7441,7 @@ "reference": "https://spdx.org/licenses/SGI-B-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/SGI-B-2.0.json", - "referenceNumber": 287, + "referenceNumber": 617, "name": "SGI Free Software License B v2.0", "licenseId": "SGI-B-2.0", "seeAlso": [ @@ -7454,7 +7454,7 @@ "reference": "https://spdx.org/licenses/SGI-OpenGL.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/SGI-OpenGL.json", - "referenceNumber": 445, + "referenceNumber": 34, "name": "SGI OpenGL License", "licenseId": "SGI-OpenGL", "seeAlso": [ @@ -7466,7 +7466,7 @@ "reference": "https://spdx.org/licenses/SGP4.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/SGP4.json", - "referenceNumber": 258, + "referenceNumber": 572, "name": "SGP4 Permission Notice", "licenseId": "SGP4", "seeAlso": [ @@ -7478,7 +7478,7 @@ "reference": "https://spdx.org/licenses/SHL-0.5.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/SHL-0.5.json", - "referenceNumber": 289, + "referenceNumber": 267, "name": "Solderpad Hardware License v0.5", "licenseId": "SHL-0.5", "seeAlso": [ @@ -7490,7 +7490,7 @@ "reference": "https://spdx.org/licenses/SHL-0.51.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/SHL-0.51.json", - "referenceNumber": 18, + "referenceNumber": 582, "name": "Solderpad Hardware License, Version 0.51", "licenseId": "SHL-0.51", "seeAlso": [ @@ -7502,7 +7502,7 @@ "reference": "https://spdx.org/licenses/SimPL-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/SimPL-2.0.json", - "referenceNumber": 306, + "referenceNumber": 452, "name": "Simple Public License 2.0", "licenseId": "SimPL-2.0", "seeAlso": [ @@ -7514,7 +7514,7 @@ "reference": "https://spdx.org/licenses/SISSL.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/SISSL.json", - "referenceNumber": 540, + "referenceNumber": 110, "name": "Sun Industry Standards Source License v1.1", "licenseId": "SISSL", "seeAlso": [ @@ -7528,7 +7528,7 @@ "reference": "https://spdx.org/licenses/SISSL-1.2.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/SISSL-1.2.json", - "referenceNumber": 351, + "referenceNumber": 253, "name": "Sun Industry Standards Source License v1.2", "licenseId": "SISSL-1.2", "seeAlso": [ @@ -7540,7 +7540,7 @@ "reference": "https://spdx.org/licenses/SL.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/SL.json", - "referenceNumber": 21, + "referenceNumber": 83, "name": "SL License", "licenseId": "SL", "seeAlso": [ @@ -7552,7 +7552,7 @@ "reference": "https://spdx.org/licenses/Sleepycat.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Sleepycat.json", - "referenceNumber": 201, + "referenceNumber": 42, "name": "Sleepycat License", "licenseId": "Sleepycat", "seeAlso": [ @@ -7565,7 +7565,7 @@ "reference": "https://spdx.org/licenses/SMAIL-GPL.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/SMAIL-GPL.json", - "referenceNumber": 382, + "referenceNumber": 546, "name": "SMAIL General Public License", "licenseId": "SMAIL-GPL", "seeAlso": [ @@ -7577,7 +7577,7 @@ "reference": "https://spdx.org/licenses/SMLNJ.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/SMLNJ.json", - "referenceNumber": 563, + "referenceNumber": 81, "name": "Standard ML of New Jersey License", "licenseId": "SMLNJ", "seeAlso": [ @@ -7590,7 +7590,7 @@ "reference": "https://spdx.org/licenses/SMPPL.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/SMPPL.json", - "referenceNumber": 565, + "referenceNumber": 579, "name": "Secure Messaging Protocol Public License", "licenseId": "SMPPL", "seeAlso": [ @@ -7602,7 +7602,7 @@ "reference": "https://spdx.org/licenses/SNIA.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/SNIA.json", - "referenceNumber": 106, + "referenceNumber": 224, "name": "SNIA Public License 1.1", "licenseId": "SNIA", "seeAlso": [ @@ -7614,7 +7614,7 @@ "reference": "https://spdx.org/licenses/snprintf.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/snprintf.json", - "referenceNumber": 176, + "referenceNumber": 594, "name": "snprintf License", "licenseId": "snprintf", "seeAlso": [ @@ -7626,7 +7626,7 @@ "reference": "https://spdx.org/licenses/SOFA.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/SOFA.json", - "referenceNumber": 27, + "referenceNumber": 375, "name": "SOFA Software License", "licenseId": "SOFA", "seeAlso": [ @@ -7638,7 +7638,7 @@ "reference": "https://spdx.org/licenses/softSurfer.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/softSurfer.json", - "referenceNumber": 346, + "referenceNumber": 593, "name": "softSurfer License", "licenseId": "softSurfer", "seeAlso": [ @@ -7651,7 +7651,7 @@ "reference": "https://spdx.org/licenses/Soundex.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Soundex.json", - "referenceNumber": 11, + "referenceNumber": 374, "name": "Soundex License", "licenseId": "Soundex", "seeAlso": [ @@ -7663,7 +7663,7 @@ "reference": "https://spdx.org/licenses/Spencer-86.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Spencer-86.json", - "referenceNumber": 256, + "referenceNumber": 193, "name": "Spencer License 86", "licenseId": "Spencer-86", "seeAlso": [ @@ -7675,7 +7675,7 @@ "reference": "https://spdx.org/licenses/Spencer-94.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Spencer-94.json", - "referenceNumber": 266, + "referenceNumber": 451, "name": "Spencer License 94", "licenseId": "Spencer-94", "seeAlso": [ @@ -7688,7 +7688,7 @@ "reference": "https://spdx.org/licenses/Spencer-99.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Spencer-99.json", - "referenceNumber": 430, + "referenceNumber": 220, "name": "Spencer License 99", "licenseId": "Spencer-99", "seeAlso": [ @@ -7700,7 +7700,7 @@ "reference": "https://spdx.org/licenses/SPL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/SPL-1.0.json", - "referenceNumber": 230, + "referenceNumber": 342, "name": "Sun Public License v1.0", "licenseId": "SPL-1.0", "seeAlso": [ @@ -7713,7 +7713,7 @@ "reference": "https://spdx.org/licenses/ssh-keyscan.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/ssh-keyscan.json", - "referenceNumber": 592, + "referenceNumber": 537, "name": "ssh-keyscan License", "licenseId": "ssh-keyscan", "seeAlso": [ @@ -7725,7 +7725,7 @@ "reference": "https://spdx.org/licenses/SSH-OpenSSH.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/SSH-OpenSSH.json", - "referenceNumber": 419, + "referenceNumber": 463, "name": "SSH OpenSSH license", "licenseId": "SSH-OpenSSH", "seeAlso": [ @@ -7737,7 +7737,7 @@ "reference": "https://spdx.org/licenses/SSH-short.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/SSH-short.json", - "referenceNumber": 222, + "referenceNumber": 573, "name": "SSH short notice", "licenseId": "SSH-short", "seeAlso": [ @@ -7751,7 +7751,7 @@ "reference": "https://spdx.org/licenses/SSLeay-standalone.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/SSLeay-standalone.json", - "referenceNumber": 310, + "referenceNumber": 96, "name": "SSLeay License - standalone", "licenseId": "SSLeay-standalone", "seeAlso": [ @@ -7763,7 +7763,7 @@ "reference": "https://spdx.org/licenses/SSPL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/SSPL-1.0.json", - "referenceNumber": 255, + "referenceNumber": 664, "name": "Server Side Public License, v 1", "licenseId": "SSPL-1.0", "seeAlso": [ @@ -7775,7 +7775,7 @@ "reference": "https://spdx.org/licenses/StandardML-NJ.html", "isDeprecatedLicenseId": true, "detailsUrl": "https://spdx.org/licenses/StandardML-NJ.json", - "referenceNumber": 331, + "referenceNumber": 501, "name": "Standard ML of New Jersey License", "licenseId": "StandardML-NJ", "seeAlso": [ @@ -7788,7 +7788,7 @@ "reference": "https://spdx.org/licenses/SugarCRM-1.1.3.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/SugarCRM-1.1.3.json", - "referenceNumber": 193, + "referenceNumber": 222, "name": "SugarCRM Public License v1.1.3", "licenseId": "SugarCRM-1.1.3", "seeAlso": [ @@ -7800,7 +7800,7 @@ "reference": "https://spdx.org/licenses/SUL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/SUL-1.0.json", - "referenceNumber": 440, + "referenceNumber": 557, "name": "Sustainable Use License v1.0", "licenseId": "SUL-1.0", "seeAlso": [ @@ -7812,7 +7812,7 @@ "reference": "https://spdx.org/licenses/Sun-PPP.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Sun-PPP.json", - "referenceNumber": 80, + "referenceNumber": 39, "name": "Sun PPP License", "licenseId": "Sun-PPP", "seeAlso": [ @@ -7824,7 +7824,7 @@ "reference": "https://spdx.org/licenses/Sun-PPP-2000.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Sun-PPP-2000.json", - "referenceNumber": 205, + "referenceNumber": 70, "name": "Sun PPP License (2000)", "licenseId": "Sun-PPP-2000", "seeAlso": [ @@ -7836,7 +7836,7 @@ "reference": "https://spdx.org/licenses/SunPro.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/SunPro.json", - "referenceNumber": 534, + "referenceNumber": 395, "name": "SunPro License", "licenseId": "SunPro", "seeAlso": [ @@ -7849,7 +7849,7 @@ "reference": "https://spdx.org/licenses/SWL.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/SWL.json", - "referenceNumber": 300, + "referenceNumber": 196, "name": "Scheme Widget Library (SWL) Software License Agreement", "licenseId": "SWL", "seeAlso": [ @@ -7861,7 +7861,7 @@ "reference": "https://spdx.org/licenses/swrule.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/swrule.json", - "referenceNumber": 456, + "referenceNumber": 348, "name": "swrule License", "licenseId": "swrule", "seeAlso": [ @@ -7873,7 +7873,7 @@ "reference": "https://spdx.org/licenses/Symlinks.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Symlinks.json", - "referenceNumber": 561, + "referenceNumber": 517, "name": "Symlinks License", "licenseId": "Symlinks", "seeAlso": [ @@ -7885,7 +7885,7 @@ "reference": "https://spdx.org/licenses/TAPR-OHL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/TAPR-OHL-1.0.json", - "referenceNumber": 548, + "referenceNumber": 80, "name": "TAPR Open Hardware License v1.0", "licenseId": "TAPR-OHL-1.0", "seeAlso": [ @@ -7897,7 +7897,7 @@ "reference": "https://spdx.org/licenses/TCL.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/TCL.json", - "referenceNumber": 616, + "referenceNumber": 625, "name": "TCL/TK License", "licenseId": "TCL", "seeAlso": [ @@ -7910,7 +7910,7 @@ "reference": "https://spdx.org/licenses/TCP-wrappers.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/TCP-wrappers.json", - "referenceNumber": 84, + "referenceNumber": 278, "name": "TCP Wrappers License", "licenseId": "TCP-wrappers", "seeAlso": [ @@ -7922,7 +7922,7 @@ "reference": "https://spdx.org/licenses/TermReadKey.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/TermReadKey.json", - "referenceNumber": 109, + "referenceNumber": 619, "name": "TermReadKey License", "licenseId": "TermReadKey", "seeAlso": [ @@ -7934,7 +7934,7 @@ "reference": "https://spdx.org/licenses/TGPPL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/TGPPL-1.0.json", - "referenceNumber": 110, + "referenceNumber": 142, "name": "Transitive Grace Period Public Licence 1.0", "licenseId": "TGPPL-1.0", "seeAlso": [ @@ -7947,7 +7947,7 @@ "reference": "https://spdx.org/licenses/ThirdEye.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/ThirdEye.json", - "referenceNumber": 431, + "referenceNumber": 403, "name": "ThirdEye License", "licenseId": "ThirdEye", "seeAlso": [ @@ -7959,7 +7959,7 @@ "reference": "https://spdx.org/licenses/threeparttable.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/threeparttable.json", - "referenceNumber": 64, + "referenceNumber": 14, "name": "threeparttable License", "licenseId": "threeparttable", "seeAlso": [ @@ -7971,7 +7971,7 @@ "reference": "https://spdx.org/licenses/TMate.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/TMate.json", - "referenceNumber": 215, + "referenceNumber": 176, "name": "TMate Open Source License", "licenseId": "TMate", "seeAlso": [ @@ -7983,7 +7983,7 @@ "reference": "https://spdx.org/licenses/TORQUE-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/TORQUE-1.1.json", - "referenceNumber": 97, + "referenceNumber": 214, "name": "TORQUE v2.5+ Software License v1.1", "licenseId": "TORQUE-1.1", "seeAlso": [ @@ -7995,7 +7995,7 @@ "reference": "https://spdx.org/licenses/TOSL.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/TOSL.json", - "referenceNumber": 695, + "referenceNumber": 416, "name": "Trusster Open Source License", "licenseId": "TOSL", "seeAlso": [ @@ -8007,7 +8007,7 @@ "reference": "https://spdx.org/licenses/TPDL.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/TPDL.json", - "referenceNumber": 5, + "referenceNumber": 666, "name": "Time::ParseDate License", "licenseId": "TPDL", "seeAlso": [ @@ -8019,7 +8019,7 @@ "reference": "https://spdx.org/licenses/TPL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/TPL-1.0.json", - "referenceNumber": 234, + "referenceNumber": 540, "name": "THOR Public License 1.0", "licenseId": "TPL-1.0", "seeAlso": [ @@ -8031,7 +8031,7 @@ "reference": "https://spdx.org/licenses/TrustedQSL.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/TrustedQSL.json", - "referenceNumber": 482, + "referenceNumber": 37, "name": "TrustedQSL License", "licenseId": "TrustedQSL", "seeAlso": [ @@ -8043,7 +8043,7 @@ "reference": "https://spdx.org/licenses/TTWL.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/TTWL.json", - "referenceNumber": 475, + "referenceNumber": 598, "name": "Text-Tabs+Wrap License", "licenseId": "TTWL", "seeAlso": [ @@ -8056,7 +8056,7 @@ "reference": "https://spdx.org/licenses/TTYP0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/TTYP0.json", - "referenceNumber": 159, + "referenceNumber": 236, "name": "TTYP0 License", "licenseId": "TTYP0", "seeAlso": [ @@ -8068,7 +8068,7 @@ "reference": "https://spdx.org/licenses/TU-Berlin-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/TU-Berlin-1.0.json", - "referenceNumber": 315, + "referenceNumber": 106, "name": "Technische Universitaet Berlin License 1.0", "licenseId": "TU-Berlin-1.0", "seeAlso": [ @@ -8080,7 +8080,7 @@ "reference": "https://spdx.org/licenses/TU-Berlin-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/TU-Berlin-2.0.json", - "referenceNumber": 225, + "referenceNumber": 669, "name": "Technische Universitaet Berlin License 2.0", "licenseId": "TU-Berlin-2.0", "seeAlso": [ @@ -8092,7 +8092,7 @@ "reference": "https://spdx.org/licenses/Ubuntu-font-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Ubuntu-font-1.0.json", - "referenceNumber": 365, + "referenceNumber": 268, "name": "Ubuntu Font Licence v1.0", "licenseId": "Ubuntu-font-1.0", "seeAlso": [ @@ -8105,7 +8105,7 @@ "reference": "https://spdx.org/licenses/UCAR.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/UCAR.json", - "referenceNumber": 345, + "referenceNumber": 353, "name": "UCAR License", "licenseId": "UCAR", "seeAlso": [ @@ -8117,7 +8117,7 @@ "reference": "https://spdx.org/licenses/UCL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/UCL-1.0.json", - "referenceNumber": 271, + "referenceNumber": 611, "name": "Upstream Compatibility License v1.0", "licenseId": "UCL-1.0", "seeAlso": [ @@ -8129,7 +8129,7 @@ "reference": "https://spdx.org/licenses/ulem.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/ulem.json", - "referenceNumber": 435, + "referenceNumber": 514, "name": "ulem License", "licenseId": "ulem", "seeAlso": [ @@ -8141,7 +8141,7 @@ "reference": "https://spdx.org/licenses/UMich-Merit.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/UMich-Merit.json", - "referenceNumber": 23, + "referenceNumber": 48, "name": "Michigan/Merit Networks License", "licenseId": "UMich-Merit", "seeAlso": [ @@ -8153,7 +8153,7 @@ "reference": "https://spdx.org/licenses/Unicode-3.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Unicode-3.0.json", - "referenceNumber": 591, + "referenceNumber": 308, "name": "Unicode License v3", "licenseId": "Unicode-3.0", "seeAlso": [ @@ -8165,7 +8165,7 @@ "reference": "https://spdx.org/licenses/Unicode-DFS-2015.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Unicode-DFS-2015.json", - "referenceNumber": 264, + "referenceNumber": 254, "name": "Unicode License Agreement - Data Files and Software (2015)", "licenseId": "Unicode-DFS-2015", "seeAlso": [ @@ -8177,7 +8177,7 @@ "reference": "https://spdx.org/licenses/Unicode-DFS-2016.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Unicode-DFS-2016.json", - "referenceNumber": 638, + "referenceNumber": 309, "name": "Unicode License Agreement - Data Files and Software (2016)", "licenseId": "Unicode-DFS-2016", "seeAlso": [ @@ -8191,7 +8191,7 @@ "reference": "https://spdx.org/licenses/Unicode-TOU.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Unicode-TOU.json", - "referenceNumber": 2, + "referenceNumber": 115, "name": "Unicode Terms of Use", "licenseId": "Unicode-TOU", "seeAlso": [ @@ -8204,7 +8204,7 @@ "reference": "https://spdx.org/licenses/UnixCrypt.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/UnixCrypt.json", - "referenceNumber": 379, + "referenceNumber": 180, "name": "UnixCrypt License", "licenseId": "UnixCrypt", "seeAlso": [ @@ -8218,7 +8218,7 @@ "reference": "https://spdx.org/licenses/Unlicense.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Unlicense.json", - "referenceNumber": 539, + "referenceNumber": 337, "name": "The Unlicense", "licenseId": "Unlicense", "seeAlso": [ @@ -8231,7 +8231,7 @@ "reference": "https://spdx.org/licenses/Unlicense-libtelnet.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Unlicense-libtelnet.json", - "referenceNumber": 549, + "referenceNumber": 113, "name": "Unlicense - libtelnet variant", "licenseId": "Unlicense-libtelnet", "seeAlso": [ @@ -8243,7 +8243,7 @@ "reference": "https://spdx.org/licenses/Unlicense-libwhirlpool.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Unlicense-libwhirlpool.json", - "referenceNumber": 280, + "referenceNumber": 565, "name": "Unlicense - libwhirlpool variant", "licenseId": "Unlicense-libwhirlpool", "seeAlso": [ @@ -8255,7 +8255,7 @@ "reference": "https://spdx.org/licenses/UPL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/UPL-1.0.json", - "referenceNumber": 0, + "referenceNumber": 88, "name": "Universal Permissive License v1.0", "licenseId": "UPL-1.0", "seeAlso": [ @@ -8268,7 +8268,7 @@ "reference": "https://spdx.org/licenses/URT-RLE.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/URT-RLE.json", - "referenceNumber": 245, + "referenceNumber": 380, "name": "Utah Raster Toolkit Run Length Encoded License", "licenseId": "URT-RLE", "seeAlso": [ @@ -8281,7 +8281,7 @@ "reference": "https://spdx.org/licenses/Vim.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Vim.json", - "referenceNumber": 7, + "referenceNumber": 327, "name": "Vim License", "licenseId": "Vim", "seeAlso": [ @@ -8294,7 +8294,7 @@ "reference": "https://spdx.org/licenses/VOSTROM.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/VOSTROM.json", - "referenceNumber": 387, + "referenceNumber": 575, "name": "VOSTROM Public License for Open Source", "licenseId": "VOSTROM", "seeAlso": [ @@ -8306,7 +8306,7 @@ "reference": "https://spdx.org/licenses/VSL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/VSL-1.0.json", - "referenceNumber": 34, + "referenceNumber": 562, "name": "Vovida Software License v1.0", "licenseId": "VSL-1.0", "seeAlso": [ @@ -8318,7 +8318,7 @@ "reference": "https://spdx.org/licenses/W3C.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/W3C.json", - "referenceNumber": 263, + "referenceNumber": 479, "name": "W3C Software Notice and License (2002-12-31)", "licenseId": "W3C", "seeAlso": [ @@ -8332,7 +8332,7 @@ "reference": "https://spdx.org/licenses/W3C-19980720.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/W3C-19980720.json", - "referenceNumber": 46, + "referenceNumber": 365, "name": "W3C Software Notice and License (1998-07-20)", "licenseId": "W3C-19980720", "seeAlso": [ @@ -8344,7 +8344,7 @@ "reference": "https://spdx.org/licenses/W3C-20150513.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/W3C-20150513.json", - "referenceNumber": 108, + "referenceNumber": 295, "name": "W3C Software Notice and Document License (2015-05-13)", "licenseId": "W3C-20150513", "seeAlso": [ @@ -8358,7 +8358,7 @@ "reference": "https://spdx.org/licenses/w3m.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/w3m.json", - "referenceNumber": 95, + "referenceNumber": 141, "name": "w3m License", "licenseId": "w3m", "seeAlso": [ @@ -8370,7 +8370,7 @@ "reference": "https://spdx.org/licenses/Watcom-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Watcom-1.0.json", - "referenceNumber": 535, + "referenceNumber": 527, "name": "Sybase Open Watcom Public License 1.0", "licenseId": "Watcom-1.0", "seeAlso": [ @@ -8383,7 +8383,7 @@ "reference": "https://spdx.org/licenses/Widget-Workshop.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Widget-Workshop.json", - "referenceNumber": 477, + "referenceNumber": 522, "name": "Widget Workshop License", "licenseId": "Widget-Workshop", "seeAlso": [ @@ -8391,23 +8391,11 @@ ], "isOsiApproved": false }, - { - "reference": "https://spdx.org/licenses/WordNet.html", - "isDeprecatedLicenseId": false, - "detailsUrl": "https://spdx.org/licenses/WordNet.json", - "referenceNumber": 394, - "name": "WordNet License", - "licenseId": "WordNet", - "seeAlso": [ - "https://wordnet.princeton.edu/license-and-commercial-use" - ], - "isOsiApproved": true - }, { "reference": "https://spdx.org/licenses/Wsuipa.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Wsuipa.json", - "referenceNumber": 160, + "referenceNumber": 564, "name": "Wsuipa License", "licenseId": "Wsuipa", "seeAlso": [ @@ -8419,7 +8407,7 @@ "reference": "https://spdx.org/licenses/WTFPL.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/WTFPL.json", - "referenceNumber": 603, + "referenceNumber": 418, "name": "Do What The F*ck You Want To Public License", "licenseId": "WTFPL", "seeAlso": [ @@ -8433,7 +8421,7 @@ "reference": "https://spdx.org/licenses/wwl.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/wwl.json", - "referenceNumber": 10, + "referenceNumber": 627, "name": "WWL License", "licenseId": "wwl", "seeAlso": [ @@ -8445,7 +8433,7 @@ "reference": "https://spdx.org/licenses/wxWindows.html", "isDeprecatedLicenseId": true, "detailsUrl": "https://spdx.org/licenses/wxWindows.json", - "referenceNumber": 242, + "referenceNumber": 431, "name": "wxWindows Library License", "licenseId": "wxWindows", "seeAlso": [ @@ -8457,7 +8445,7 @@ "reference": "https://spdx.org/licenses/X11.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/X11.json", - "referenceNumber": 235, + "referenceNumber": 0, "name": "X11 License", "licenseId": "X11", "seeAlso": [ @@ -8470,7 +8458,7 @@ "reference": "https://spdx.org/licenses/X11-distribute-modifications-variant.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/X11-distribute-modifications-variant.json", - "referenceNumber": 449, + "referenceNumber": 302, "name": "X11 License Distribution Modification Variant", "licenseId": "X11-distribute-modifications-variant", "seeAlso": [ @@ -8482,7 +8470,7 @@ "reference": "https://spdx.org/licenses/X11-swapped.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/X11-swapped.json", - "referenceNumber": 667, + "referenceNumber": 248, "name": "X11 swapped final paragraphs", "licenseId": "X11-swapped", "seeAlso": [ @@ -8494,7 +8482,7 @@ "reference": "https://spdx.org/licenses/Xdebug-1.03.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Xdebug-1.03.json", - "referenceNumber": 197, + "referenceNumber": 109, "name": "Xdebug License v 1.03", "licenseId": "Xdebug-1.03", "seeAlso": [ @@ -8506,7 +8494,7 @@ "reference": "https://spdx.org/licenses/Xerox.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Xerox.json", - "referenceNumber": 472, + "referenceNumber": 615, "name": "Xerox License", "licenseId": "Xerox", "seeAlso": [ @@ -8518,7 +8506,7 @@ "reference": "https://spdx.org/licenses/Xfig.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Xfig.json", - "referenceNumber": 536, + "referenceNumber": 125, "name": "Xfig License", "licenseId": "Xfig", "seeAlso": [ @@ -8532,7 +8520,7 @@ "reference": "https://spdx.org/licenses/XFree86-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/XFree86-1.1.json", - "referenceNumber": 187, + "referenceNumber": 646, "name": "XFree86 License 1.1", "licenseId": "XFree86-1.1", "seeAlso": [ @@ -8545,7 +8533,7 @@ "reference": "https://spdx.org/licenses/xinetd.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/xinetd.json", - "referenceNumber": 610, + "referenceNumber": 93, "name": "xinetd License", "licenseId": "xinetd", "seeAlso": [ @@ -8558,7 +8546,7 @@ "reference": "https://spdx.org/licenses/xkeyboard-config-Zinoviev.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/xkeyboard-config-Zinoviev.json", - "referenceNumber": 502, + "referenceNumber": 212, "name": "xkeyboard-config Zinoviev License", "licenseId": "xkeyboard-config-Zinoviev", "seeAlso": [ @@ -8570,7 +8558,7 @@ "reference": "https://spdx.org/licenses/xlock.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/xlock.json", - "referenceNumber": 207, + "referenceNumber": 362, "name": "xlock License", "licenseId": "xlock", "seeAlso": [ @@ -8582,7 +8570,7 @@ "reference": "https://spdx.org/licenses/Xnet.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Xnet.json", - "referenceNumber": 45, + "referenceNumber": 470, "name": "X.Net License", "licenseId": "Xnet", "seeAlso": [ @@ -8594,7 +8582,7 @@ "reference": "https://spdx.org/licenses/xpp.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/xpp.json", - "referenceNumber": 288, + "referenceNumber": 290, "name": "XPP License", "licenseId": "xpp", "seeAlso": [ @@ -8606,7 +8594,7 @@ "reference": "https://spdx.org/licenses/XSkat.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/XSkat.json", - "referenceNumber": 425, + "referenceNumber": 293, "name": "XSkat License", "licenseId": "XSkat", "seeAlso": [ @@ -8618,7 +8606,7 @@ "reference": "https://spdx.org/licenses/xzoom.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/xzoom.json", - "referenceNumber": 327, + "referenceNumber": 90, "name": "xzoom License", "licenseId": "xzoom", "seeAlso": [ @@ -8630,7 +8618,7 @@ "reference": "https://spdx.org/licenses/YPL-1.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/YPL-1.0.json", - "referenceNumber": 20, + "referenceNumber": 294, "name": "Yahoo! Public License v1.0", "licenseId": "YPL-1.0", "seeAlso": [ @@ -8642,7 +8630,7 @@ "reference": "https://spdx.org/licenses/YPL-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/YPL-1.1.json", - "referenceNumber": 457, + "referenceNumber": 481, "name": "Yahoo! Public License v1.1", "licenseId": "YPL-1.1", "seeAlso": [ @@ -8655,7 +8643,7 @@ "reference": "https://spdx.org/licenses/Zed.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Zed.json", - "referenceNumber": 223, + "referenceNumber": 189, "name": "Zed License", "licenseId": "Zed", "seeAlso": [ @@ -8667,7 +8655,7 @@ "reference": "https://spdx.org/licenses/Zeeff.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Zeeff.json", - "referenceNumber": 100, + "referenceNumber": 551, "name": "Zeeff License", "licenseId": "Zeeff", "seeAlso": [ @@ -8679,7 +8667,7 @@ "reference": "https://spdx.org/licenses/Zend-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Zend-2.0.json", - "referenceNumber": 410, + "referenceNumber": 444, "name": "Zend License v2.0", "licenseId": "Zend-2.0", "seeAlso": [ @@ -8692,7 +8680,7 @@ "reference": "https://spdx.org/licenses/Zimbra-1.3.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Zimbra-1.3.json", - "referenceNumber": 481, + "referenceNumber": 26, "name": "Zimbra Public License v1.3", "licenseId": "Zimbra-1.3", "seeAlso": [ @@ -8705,7 +8693,7 @@ "reference": "https://spdx.org/licenses/Zimbra-1.4.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Zimbra-1.4.json", - "referenceNumber": 575, + "referenceNumber": 330, "name": "Zimbra Public License v1.4", "licenseId": "Zimbra-1.4", "seeAlso": [ @@ -8717,7 +8705,7 @@ "reference": "https://spdx.org/licenses/Zlib.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/Zlib.json", - "referenceNumber": 493, + "referenceNumber": 421, "name": "zlib License", "licenseId": "Zlib", "seeAlso": [ @@ -8731,7 +8719,7 @@ "reference": "https://spdx.org/licenses/zlib-acknowledgement.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/zlib-acknowledgement.json", - "referenceNumber": 130, + "referenceNumber": 188, "name": "zlib/libpng License with Acknowledgement", "licenseId": "zlib-acknowledgement", "seeAlso": [ @@ -8743,7 +8731,7 @@ "reference": "https://spdx.org/licenses/ZPL-1.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/ZPL-1.1.json", - "referenceNumber": 660, + "referenceNumber": 597, "name": "Zope Public License 1.1", "licenseId": "ZPL-1.1", "seeAlso": [ @@ -8755,7 +8743,7 @@ "reference": "https://spdx.org/licenses/ZPL-2.0.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/ZPL-2.0.json", - "referenceNumber": 655, + "referenceNumber": 555, "name": "Zope Public License 2.0", "licenseId": "ZPL-2.0", "seeAlso": [ @@ -8769,7 +8757,7 @@ "reference": "https://spdx.org/licenses/ZPL-2.1.html", "isDeprecatedLicenseId": false, "detailsUrl": "https://spdx.org/licenses/ZPL-2.1.json", - "referenceNumber": 66, + "referenceNumber": 272, "name": "Zope Public License 2.1", "licenseId": "ZPL-2.1", "seeAlso": [ @@ -8779,5 +8767,5 @@ "isFsfLibre": true } ], - "releaseDate": "2025-07-29T00:00:00Z" + "releaseDate": "2025-07-01T00:00:00Z" } \ No newline at end of file diff --git a/Library/Homebrew/dependable.rb b/Library/Homebrew/dependable.rb index f0d089491c..353ced54d1 100644 --- a/Library/Homebrew/dependable.rb +++ b/Library/Homebrew/dependable.rb @@ -5,12 +5,19 @@ require "options" # Shared functions for classes which can be depended upon. module Dependable + extend T::Helpers + # `:run` and `:linked` are no longer used but keep them here to avoid their # misuse in future. RESERVED_TAGS = [:build, :optional, :recommended, :run, :test, :linked, :implicit].freeze attr_reader :tags + abstract! + + sig { abstract.returns(T::Array[String]) } + def option_names; end + def build? tags.include? :build end diff --git a/Library/Homebrew/dependency_collector.rb b/Library/Homebrew/dependency_collector.rb index cddae5fcdc..68e68c3fa9 100644 --- a/Library/Homebrew/dependency_collector.rb +++ b/Library/Homebrew/dependency_collector.rb @@ -80,10 +80,10 @@ class DependencyCollector parse_spec(spec, Array(tags)) end - sig { params(related_formula_names: T::Array[String]).returns(T.nilable(Dependency)) } + sig { params(related_formula_names: T::Set[String]).returns(T.nilable(Dependency)) } def gcc_dep_if_needed(related_formula_names); end - sig { params(related_formula_names: T::Array[String]).returns(T.nilable(Dependency)) } + sig { params(related_formula_names: T::Set[String]).returns(T.nilable(Dependency)) } def glibc_dep_if_needed(related_formula_names); end def git_dep_if_needed(tags) @@ -169,7 +169,7 @@ class DependencyCollector when :maximum_macos then MacOSRequirement.new(tags, comparator: "<=") when :xcode then XcodeRequirement.new(tags) else - raise ArgumentError, "Unsupported special dependency #{spec.inspect}" + raise ArgumentError, "Unsupported special dependency: #{spec.inspect}" end end diff --git a/Library/Homebrew/deprecate_disable.rb b/Library/Homebrew/deprecate_disable.rb index c09e95f30c..bade1c0126 100644 --- a/Library/Homebrew/deprecate_disable.rb +++ b/Library/Homebrew/deprecate_disable.rb @@ -27,6 +27,8 @@ module DeprecateDisable no_longer_available: "is no longer available upstream", no_longer_meets_criteria: "no longer meets the criteria for acceptable casks", unmaintained: "is not maintained upstream", + fails_gatekeeper_check: "does not pass the macOS Gatekeeper check", + # odeprecate: remove the unsigned reason in a future release unsigned: "is unsigned or does not meet signature requirements", }.freeze, T::Hash[Symbol, String]) @@ -67,6 +69,9 @@ module DeprecateDisable formula_or_cask.disable_reason end + # odeprecate: remove this remapping in a future release + reason = :fails_gatekeeper_check if reason == :unsigned + reason = if formula_or_cask.is_a?(Formula) && FORMULA_DEPRECATE_DISABLE_REASONS.key?(reason) FORMULA_DEPRECATE_DISABLE_REASONS[reason] elsif formula_or_cask.is_a?(Cask::Cask) && CASK_DEPRECATE_DISABLE_REASONS.key?(reason) diff --git a/Library/Homebrew/dev-cmd/audit.rb b/Library/Homebrew/dev-cmd/audit.rb index 6d08ddba42..67acddce3e 100644 --- a/Library/Homebrew/dev-cmd/audit.rb +++ b/Library/Homebrew/dev-cmd/audit.rb @@ -104,7 +104,7 @@ module Homebrew sig { override.void } def run - odeprecated "brew audit --token-conflicts" if args.token_conflicts? + odeprecated "`brew audit --token-conflicts`" if args.token_conflicts? Formulary.enable_factory_cache! @@ -142,7 +142,7 @@ module Homebrew unless eval_all # This odisabled should probably stick around indefinitely. - odisabled "brew audit", + odisabled "`brew audit`", "`brew audit --eval-all` or set `HOMEBREW_EVAL_ALL=1`" end no_named_args = true @@ -154,8 +154,8 @@ module Homebrew if args.named.any? { |named_arg| named_arg.end_with?(".rb") } # This odisabled should probably stick around indefinitely, # until at least we have a way to exclude error on these in the CLI parser. - odisabled "brew audit [path ...]", - "brew audit [name ...]" + odisabled "`brew audit [path ...]`", + "`brew audit [name ...]`" end args.named.to_formulae_and_casks_with_taps diff --git a/Library/Homebrew/dev-cmd/bottle.rb b/Library/Homebrew/dev-cmd/bottle.rb index 0a6d847e46..662739e91f 100644 --- a/Library/Homebrew/dev-cmd/bottle.rb +++ b/Library/Homebrew/dev-cmd/bottle.rb @@ -539,8 +539,9 @@ module Homebrew ohai "Detecting if #{local_filename} is relocatable..." if bottle_path.size > 1 * 1024 * 1024 - prefix_check = if prefix == HOMEBREW_DEFAULT_PREFIX - File.join(prefix, "opt") + is_usr_local_prefix = prefix == "/usr/local" + prefix_check = if is_usr_local_prefix + "#{prefix}/opt" else prefix end @@ -568,11 +569,17 @@ module Homebrew relocatable = false if keg_contain?(prefix_check, keg, ignores, formula_and_runtime_deps_names) relocatable = false if keg_contain?(cellar, keg, ignores, formula_and_runtime_deps_names) relocatable = false if keg_contain?(HOMEBREW_LIBRARY.to_s, keg, ignores, formula_and_runtime_deps_names) - if prefix != prefix_check + if is_usr_local_prefix relocatable = false if keg_contain_absolute_symlink_starting_with?(prefix, keg) - relocatable = false if keg_contain?("#{prefix}/etc", keg, ignores) - relocatable = false if keg_contain?("#{prefix}/var", keg, ignores) - relocatable = false if keg_contain?("#{prefix}/share/vim", keg, ignores) + if tap.disabled_new_usr_local_relocation_formulae.exclude?(formula.name) + keg.new_usr_local_replacement_pairs.each_value do |value| + relocatable = false if keg_contain?(value.fetch(:old), keg, ignores) + end + else + relocatable = false if keg_contain?("#{prefix}/etc", keg, ignores) + relocatable = false if keg_contain?("#{prefix}/var", keg, ignores) + relocatable = false if keg_contain?("#{prefix}/share/vim", keg, ignores) + end end skip_relocation = relocatable && !keg.require_relocation? end diff --git a/Library/Homebrew/dev-cmd/bump-cask-pr.rb b/Library/Homebrew/dev-cmd/bump-cask-pr.rb index e7ce29cc99..bf9d9aafe5 100644 --- a/Library/Homebrew/dev-cmd/bump-cask-pr.rb +++ b/Library/Homebrew/dev-cmd/bump-cask-pr.rb @@ -273,6 +273,8 @@ module Homebrew end languages.each do |language| new_cask = Cask::CaskLoader.load(tmp_contents) + next unless new_cask.url + new_cask.config = if language.blank? tmp_cask.config else diff --git a/Library/Homebrew/dev-cmd/edit.rb b/Library/Homebrew/dev-cmd/edit.rb index bee0caf795..d3e8072657 100644 --- a/Library/Homebrew/dev-cmd/edit.rb +++ b/Library/Homebrew/dev-cmd/edit.rb @@ -110,7 +110,7 @@ module Homebrew raise TapUnavailableError, "#{tap_match[:user]}/#{tap_match[:repo]}" elsif cask || core_cask_path?(path) - if !CoreCaskTap.instance.installed? && Homebrew::API::Cask.all_casks.key?(name) + if !CoreCaskTap.instance.installed? && Homebrew::API.cask_tokens.include?(name) command = "brew tap --force #{CoreCaskTap.instance.name}" action = "tap #{CoreCaskTap.instance.name}" else @@ -119,7 +119,7 @@ module Homebrew end elsif core_formula_path?(path) && !CoreTap.instance.installed? && - Homebrew::API::Formula.all_formulae.key?(name) + Homebrew::API.formula_names.include?(name) command = "brew tap --force #{CoreTap.instance.name}" action = "tap #{CoreTap.instance.name}" else diff --git a/Library/Homebrew/dev-cmd/formula-analytics.rb b/Library/Homebrew/dev-cmd/formula-analytics.rb index 66a87bbdd2..2e919f9a01 100755 --- a/Library/Homebrew/dev-cmd/formula-analytics.rb +++ b/Library/Homebrew/dev-cmd/formula-analytics.rb @@ -379,6 +379,7 @@ module Homebrew when /^13\.?/ then "macOS Ventura (13)" when /^14\.?/ then "macOS Sonoma (14)" when /^15\.?/ then "macOS Sequoia (15)" + when /^26\.?/ then "macOS Tahoe (26)" when /Ubuntu(-Server)? (14|16|18|20|22)\.04/ then "Ubuntu #{Regexp.last_match(2)}.04 LTS" when /Ubuntu(-Server)? (\d+\.\d+).\d ?(LTS)?/ "Ubuntu #{Regexp.last_match(2)} #{Regexp.last_match(3)}".strip diff --git a/Library/Homebrew/dev-cmd/generate-cask-api.rb b/Library/Homebrew/dev-cmd/generate-cask-api.rb index 70eb0111ff..973f9953bb 100644 --- a/Library/Homebrew/dev-cmd/generate-cask-api.rb +++ b/Library/Homebrew/dev-cmd/generate-cask-api.rb @@ -71,11 +71,24 @@ module Homebrew File.write("_data/cask_canonical.json", "#{canonical_json}\n") unless args.dry_run? OnSystem::VALID_OS_ARCH_TAGS.each do |bottle_tag| - variation_casks = all_casks.map do |_, cask| - Homebrew::API.merge_variations(cask, bottle_tag:) + renames = {} + variation_casks = all_casks.to_h do |token, cask| + cask = Homebrew::API.merge_variations(cask, bottle_tag:) + + cask["old_tokens"]&.each do |old_token| + renames[old_token] = token + end + + [token, cask] end - File.write("api/internal/cask.#{bottle_tag}.json", JSON.generate(variation_casks)) unless args.dry_run? + json_contents = { + casks: variation_casks, + renames: renames, + tap_migrations: CoreCaskTap.instance.tap_migrations, + } + + File.write("api/internal/cask.#{bottle_tag}.json", JSON.generate(json_contents)) unless args.dry_run? end end end diff --git a/Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb b/Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb index 6e0478231d..4f260e21ab 100644 --- a/Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb +++ b/Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb @@ -57,15 +57,15 @@ module Homebrew syntax_only = args.syntax_only? repository = ENV.fetch("GITHUB_REPOSITORY", nil) - raise UsageError, "The GITHUB_REPOSITORY environment variable must be set." if repository.blank? + raise UsageError, "The `$GITHUB_REPOSITORY` environment variable must be set." if repository.blank? tap = T.let(Tap.fetch(repository), Tap) unless syntax_only raise UsageError, "Either `--cask` or `--url` must be specified." if !args.casks? && !args.url? - raise UsageError, "Please provide a cask or url argument" if casks.blank? && pr_url.blank? + raise UsageError, "Please provide a `--cask` or `--url` argument." if casks.blank? && pr_url.blank? end - raise UsageError, "Only one url can be specified" if pr_url&.count&.> 1 + raise UsageError, "Only one `--url` can be specified." if pr_url&.count&.> 1 labels = if pr_url && (first_pr_url = pr_url.first) pr = GitHub::API.open_rest(first_pr_url) diff --git a/Library/Homebrew/dev-cmd/generate-formula-api.rb b/Library/Homebrew/dev-cmd/generate-formula-api.rb index 1dd5f0603d..8a52ef5afa 100644 --- a/Library/Homebrew/dev-cmd/generate-formula-api.rb +++ b/Library/Homebrew/dev-cmd/generate-formula-api.rb @@ -69,9 +69,19 @@ module Homebrew File.write("_data/formula_canonical.json", "#{canonical_json}\n") unless args.dry_run? OnSystem::VALID_OS_ARCH_TAGS.each do |bottle_tag| + aliases = {} + renames = {} variation_formulae = all_formulae.to_h do |name, formula| formula = Homebrew::API.merge_variations(formula, bottle_tag:) + formula["aliases"]&.each do |alias_name| + aliases[alias_name] = name + end + + formula["oldnames"]&.each do |oldname| + renames[oldname] = name + end + version = Version.new(formula.dig("versions", "stable")) pkg_version = PkgVersion.new(version, formula["revision"]) rebuild = formula.dig("bottle", "stable", "rebuild") || 0 @@ -87,9 +97,14 @@ module Homebrew [name, [pkg_version.to_s, rebuild, sha256]] end - unless args.dry_run? - File.write("api/internal/formula.#{bottle_tag}.json", JSON.generate(variation_formulae)) - end + json_contents = { + formulae: variation_formulae, + aliases: aliases, + renames: renames, + tap_migrations: CoreTap.instance.tap_migrations, + } + + File.write("api/internal/formula.#{bottle_tag}.json", JSON.generate(json_contents)) unless args.dry_run? end end end diff --git a/Library/Homebrew/diagnostic.rb b/Library/Homebrew/diagnostic.rb index 589e53b1c7..7d1b1c774c 100644 --- a/Library/Homebrew/diagnostic.rb +++ b/Library/Homebrew/diagnostic.rb @@ -1000,12 +1000,12 @@ module Homebrew locale_variables = ENV.keys.grep(/^(?:LC_\S+|LANG|LANGUAGE)\Z/).sort - add_info "Cask Environment Variables:", ((locale_variables + environment_variables).sort.each do |var| + add_info "Cask Environment Variables:", (locale_variables + environment_variables).sort.each do |var| next unless ENV.key?(var) var = %Q(#{var}="#{ENV.fetch(var)}") user_tilde(var) - end) + end end def check_cask_xattr @@ -1040,21 +1040,6 @@ module Homebrew end end - def check_cask_quarantine_support - case Cask::Quarantine.check_quarantine_support - when :quarantine_available - nil - when :xattr_broken - "No Cask quarantine support available: there's no working version of `xattr` on this system." - when :no_swift - "No Cask quarantine support available: there's no available version of `swift` on this system." - when :linux - "No Cask quarantine support available: not available on Linux." - else - "No Cask quarantine support available: unknown reason." - end - end - def non_core_taps @non_core_taps ||= Tap.installed.reject(&:core_tap?).reject(&:core_cask_tap?) end @@ -1124,6 +1109,13 @@ module Homebrew def current_user ENV.fetch("USER", "$(whoami)") end + + private + + sig { returns(T::Array[Pathname]) } + def paths + @paths ||= T.let(ORIGINAL_PATHS.uniq.map(&:to_s), T.nilable(T::Array[Pathname])) + end end end end diff --git a/Library/Homebrew/download_strategy.rb b/Library/Homebrew/download_strategy.rb index 12b1ff7e4f..dcb4b7834a 100644 --- a/Library/Homebrew/download_strategy.rb +++ b/Library/Homebrew/download_strategy.rb @@ -148,6 +148,11 @@ class AbstractDownloadStrategy cached_location.basename end + sig { override.params(title: T.any(String, Exception), sput: T.anything).void } + def ohai(title, *sput) + super unless quiet? + end + private sig { params(args: T.anything).void } @@ -155,11 +160,6 @@ class AbstractDownloadStrategy super unless quiet? end - sig { params(args: T.anything).void } - def ohai(*args) - super unless quiet? - end - sig { params(args: String, options: T.untyped).returns(SystemCommand::Result) } def silent_command(*args, **options) system_command(*args, print_stderr: false, env:, **options) @@ -1106,20 +1106,25 @@ class GitDownloadStrategy < VCSDownloadStrategy # Convert any shallow clone to full clone if shallow_dir? command! "git", - args: ["fetch", "origin", "--unshallow"], - chdir: cached_location, - timeout: Utils::Timer.remaining(timeout) + args: ["fetch", "origin", "--unshallow"], + chdir: cached_location, + timeout: Utils::Timer.remaining(timeout), + reset_uid: true else command! "git", - args: ["fetch", "origin"], - chdir: cached_location, - timeout: Utils::Timer.remaining(timeout) + args: ["fetch", "origin"], + chdir: cached_location, + timeout: Utils::Timer.remaining(timeout), + reset_uid: true end end sig { override.params(timeout: T.nilable(Time)).void } def clone_repo(timeout: nil) - command! "git", args: clone_args, timeout: Utils::Timer.remaining(timeout) + command! "git", + args: clone_args, + timeout: Utils::Timer.remaining(timeout), + reset_uid: true command! "git", args: ["config", "homebrew.cacheversion", cache_version], @@ -1595,7 +1600,7 @@ class DownloadStrategyDetector detect_from_symbol(using) else raise TypeError, - "Unknown download strategy specification #{using.inspect}" + "Unknown download strategy specification: #{using.inspect}" end end diff --git a/Library/Homebrew/downloadable.rb b/Library/Homebrew/downloadable.rb index 9d732e237a..bb5c241d77 100644 --- a/Library/Homebrew/downloadable.rb +++ b/Library/Homebrew/downloadable.rb @@ -32,7 +32,7 @@ module Downloadable @download_name = T.let(nil, T.nilable(String)) end - sig { params(other: Object).void } + sig { overridable.params(other: Downloadable).void } def initialize_dup(other) super @checksum = @checksum.dup @@ -132,6 +132,26 @@ module Downloadable EOS end + sig { returns(Integer) } + def hash + [self.class, cached_download].hash + end + + sig { params(other: Object).returns(T::Boolean) } + def eql?(other) + return false if self.class != other.class + + other = T.cast(other, Downloadable) + cached_download == other.cached_download + end + + sig { returns(String) } + def to_s + short_cached_download = cached_download.to_s + .delete_prefix("#{HOMEBREW_CACHE}/downloads/") + "#<#{self.class}: #{short_cached_download}>" + end + private sig { overridable.returns(String) } diff --git a/Library/Homebrew/env_config.rb b/Library/Homebrew/env_config.rb index 85d5dde771..2e56473472 100644 --- a/Library/Homebrew/env_config.rb +++ b/Library/Homebrew/env_config.rb @@ -241,9 +241,10 @@ module Homebrew boolean: true, }, HOMEBREW_FORBID_PACKAGES_FROM_PATHS: { - description: "If set, Homebrew will refuse to read formulae or casks provided from file paths, " \ - "e.g. `brew install ./package.rb`.", - boolean: true, + description: "If set, Homebrew will refuse to read formulae or casks provided from file paths, " \ + "e.g. `brew install ./package.rb`.", + boolean: true, + default_text: "true unless `$HOMEBREW_DEVELOPER` is set.", }, HOMEBREW_FORCE_API_AUTO_UPDATE: { description: "If set, update the Homebrew API formula or cask data even if " \ @@ -560,6 +561,7 @@ module Homebrew :HOMEBREW_MAKE_JOBS, :HOMEBREW_NO_FORCE_BREW_WRAPPER, :HOMEBREW_CASK_OPTS, + :HOMEBREW_FORBID_PACKAGES_FROM_PATHS, ]).freeze, T::Set[Symbol]) FALSY_VALUES = T.let(%w[false no off nil 0].freeze, T::Array[String]) @@ -660,6 +662,18 @@ module Homebrew cask_opts.include?("--require-sha") end + sig { returns(T::Boolean) } + def forbid_packages_from_paths? + # Undocumented opt-out for internal use. + return false if ENV["HOMEBREW_INTERNAL_ALLOW_PACKAGES_FROM_PATHS"].present? + + return true if ENV["HOMEBREW_FORBID_PACKAGES_FROM_PATHS"].present? + + # Provide an opt-out for tests and developers. + # Our testing framework installs formulae from file paths all over the place. + ENV["HOMEBREW_TESTS"].blank? && ENV["HOMEBREW_DEVELOPER"].blank? + end + sig { returns(T::Boolean) } def automatically_set_no_install_from_api? ENV["HOMEBREW_AUTOMATICALLY_SET_NO_INSTALL_FROM_API"].present? @@ -683,5 +697,10 @@ module Homebrew [concurrency, 1].max end + + sig { returns(T::Boolean) } + def use_internal_api? + ENV["HOMEBREW_USE_INTERNAL_API"].present? + end end end diff --git a/Library/Homebrew/extend/ENV/shared.rb b/Library/Homebrew/extend/ENV/shared.rb index 28e66d480e..d34b62196c 100644 --- a/Library/Homebrew/extend/ENV/shared.rb +++ b/Library/Homebrew/extend/ENV/shared.rb @@ -267,7 +267,7 @@ module SharedEnvExtension ohai "Using a Fortran compiler found at #{gfortran}" end if gfortran - puts "This may be changed by setting the FC environment variable." + puts "This may be changed by setting the `$FC` environment variable." self["FC"] = self["F77"] = gfortran flags = FC_FLAG_VARS end diff --git a/Library/Homebrew/extend/kernel.rb b/Library/Homebrew/extend/kernel.rb index 4500f1eb5e..5e3824e051 100644 --- a/Library/Homebrew/extend/kernel.rb +++ b/Library/Homebrew/extend/kernel.rb @@ -44,11 +44,13 @@ module Kernel Formatter.headline(title, color: :blue) end + sig { params(title: T.any(String, Exception), sput: T.anything).void } def ohai(title, *sput) puts ohai_title(title.to_s) puts sput end + sig { params(title: T.any(String, Exception), sput: T.anything, always_display: T::Boolean).void } def odebug(title, *sput, always_display: false) debug = if respond_to?(:debug) T.unsafe(self).debug? @@ -355,19 +357,6 @@ module Kernel nil end - def which_all(cmd, path = ENV.fetch("PATH")) - PATH.new(path).filter_map do |p| - begin - pcmd = File.expand_path(cmd, p) - rescue ArgumentError - # File.expand_path will raise an ArgumentError if the path is malformed. - # See https://github.com/Homebrew/legacy-homebrew/issues/32789 - next - end - Pathname.new(pcmd) if File.file?(pcmd) && File.executable?(pcmd) - end.uniq - end - def which_editor(silent: false) editor = Homebrew::EnvConfig.editor return editor if editor @@ -458,11 +447,6 @@ module Kernel Formula[formula_name].ensure_installed!(reason:, latest:).opt_bin/name end - sig { returns(T::Array[Pathname]) } - def paths - @paths ||= T.let(ORIGINAL_PATHS.uniq.map(&:to_s), T.nilable(T::Array[Pathname])) - end - sig { params(size_in_bytes: T.any(Integer, Float)).returns(String) } def disk_usage_readable(size_in_bytes) if size_in_bytes.abs >= 1_073_741_824 diff --git a/Library/Homebrew/extend/os/linux/cask/quarantine.rb b/Library/Homebrew/extend/os/linux/cask/quarantine.rb index 5adcbd2eec..aa3faff110 100644 --- a/Library/Homebrew/extend/os/linux/cask/quarantine.rb +++ b/Library/Homebrew/extend/os/linux/cask/quarantine.rb @@ -10,9 +10,6 @@ module OS requires_ancestor { ::Cask::Quarantine } - sig { returns(Symbol) } - def check_quarantine_support = :linux - sig { returns(T::Boolean) } def available? = false end diff --git a/Library/Homebrew/extend/os/linux/diagnostic.rb b/Library/Homebrew/extend/os/linux/diagnostic.rb index b5798ef545..dee2a27db9 100644 --- a/Library/Homebrew/extend/os/linux/diagnostic.rb +++ b/Library/Homebrew/extend/os/linux/diagnostic.rb @@ -10,6 +10,7 @@ require "os/linux/kernel" module OS module Linux module Diagnostic + # Linux-specific diagnostic checks for Homebrew. module Checks extend T::Helpers @@ -28,6 +29,7 @@ module OS check_glibc_minimum_version check_kernel_minimum_version check_supported_architecture + check_for_symlinked_home ].freeze end @@ -154,6 +156,27 @@ module OS EOS end + def check_for_symlinked_home + return unless File.symlink?("/home") + + <<~EOS + Your /home directory is a symlink. + This is known to cause issues with formula linking, particularly when installing + multiple formulae that create symlinks in shared directories. + + While this may be a standard directory structure in some distributions + (e.g. Fedora Silverblue) there are known issues as-is. + + If you encounter linking issues, you may need to manually create conflicting + directories or use `brew link --overwrite` as a workaround. + + We'd welcome a PR to fix this functionality. + See https://github.com/Homebrew/brew/issues/18036 for more context. + + #{support_tier_message(tier: 2)} + EOS + end + def check_gcc_dependent_linkage gcc_dependents = ::Formula.installed.select do |formula| next false unless formula.tap&.core_tap? diff --git a/Library/Homebrew/extend/os/linux/formula.rb b/Library/Homebrew/extend/os/linux/formula.rb index 46489c1c0d..106f49a9a1 100644 --- a/Library/Homebrew/extend/os/linux/formula.rb +++ b/Library/Homebrew/extend/os/linux/formula.rb @@ -1,4 +1,4 @@ -# typed: true # rubocop:disable Sorbet/StrictSigil +# typed: strict # frozen_string_literal: true module OS @@ -30,6 +30,7 @@ module OS def add_global_deps_to_spec(spec) return unless ::DevelopmentTools.needs_build_formulae? + @global_deps ||= T.let(nil, T.nilable(T::Array[Dependency])) @global_deps ||= begin dependency_collector = spec.dependency_collector related_formula_names = Set.new([ diff --git a/Library/Homebrew/extend/os/linux/keg_relocate.rb b/Library/Homebrew/extend/os/linux/keg_relocate.rb index 42e32dbf65..80d5d01774 100644 --- a/Library/Homebrew/extend/os/linux/keg_relocate.rb +++ b/Library/Homebrew/extend/os/linux/keg_relocate.rb @@ -4,7 +4,7 @@ require "compilers" class Keg - def relocate_dynamic_linkage(relocation) + def relocate_dynamic_linkage(relocation, skip_protodesc_cold: false) # Patching the dynamic linker of glibc breaks it. return if name.match? Version.formula_optionally_versioned_regex(:glibc) @@ -12,14 +12,19 @@ class Keg elf_files.each do |file| file.ensure_writable do - change_rpath!(file, old_prefix, new_prefix) + change_rpath!(file, old_prefix, new_prefix, skip_protodesc_cold:) end end end - def change_rpath!(file, old_prefix, new_prefix) + def change_rpath!(file, old_prefix, new_prefix, skip_protodesc_cold: false) return false if !file.elf? || !file.dynamic_elf? + # Skip relocation of files with `protodesc_cold` sections because patchelf.rb seems to break them, + # but only when bottling (as we don't want to break existing bottles that require relocation). + # https://github.com/Homebrew/homebrew-core/pull/232490#issuecomment-3161362452 + return false if skip_protodesc_cold && file.section_names.include?("protodesc_cold") + updated = {} old_rpath = file.rpath new_rpath = if old_rpath diff --git a/Library/Homebrew/extend/os/mac/diagnostic.rb b/Library/Homebrew/extend/os/mac/diagnostic.rb index f6f70440a8..1d563b7694 100644 --- a/Library/Homebrew/extend/os/mac/diagnostic.rb +++ b/Library/Homebrew/extend/os/mac/diagnostic.rb @@ -417,7 +417,7 @@ module OS macOS won't move relative symlinks across volumes unless the target file already exists. Formulae known to be affected by this are Git and Narwhal. - You should set the "HOMEBREW_TEMP" environment variable to a suitable + You should set the `$HOMEBREW_TEMP` environment variable to a suitable directory on the same volume as your Cellar. #{support_tier_message(tier: 2)} @@ -506,6 +506,88 @@ module OS nil end + + def check_pkgconf_macos_sdk_mismatch + # We don't provide suitable bottles for these versions. + return if OS::Mac.version.prerelease? || OS::Mac.version.outdated_release? + + pkgconf = begin + ::Formula["pkgconf"] + rescue FormulaUnavailableError + nil + end + return unless pkgconf + return unless pkgconf.any_version_installed? + + tab = Tab.for_formula(pkgconf) + return unless tab.built_on + + built_on_version = tab.built_on["os_version"] + &.delete_prefix("macOS ") + &.sub(/\.\d+$/, "") + return unless built_on_version + + current_version = MacOS.version.to_s + return if built_on_version == current_version + + <<~EOS + You have pkgconf installed that was built on macOS #{built_on_version} + but you are running macOS #{current_version}. + + This can cause issues with packages that depend on system libraries, such as libffi. + To fix this issue, reinstall pkgconf: + brew reinstall pkgconf + + For more information, see: https://github.com/Homebrew/brew/issues/16137 + We'd welcome a PR to automatically mitigate this instead of just warning about it. + EOS + end + + def check_cask_quarantine_support + status, check_output = ::Cask::Quarantine.check_quarantine_support + + case status + when :quarantine_available + nil + when :xattr_broken + "No Cask quarantine support available: there's no working version of `xattr` on this system." + when :no_swift + "No Cask quarantine support available: there's no available version of `swift` on this system." + when :swift_broken_clt + <<~EOS + No Cask quarantine support available: Swift is not working due to missing Command Line Tools. + #{MacOS::CLT.installation_then_reinstall_instructions} + EOS + when :swift_compilation_failed + <<~EOS + No Cask quarantine support available: Swift compilation failed. + This is usually due to a broken or incompatible Command Line Tools installation. + #{MacOS::CLT.installation_then_reinstall_instructions} + EOS + when :swift_runtime_error + <<~EOS + No Cask quarantine support available: Swift runtime error. + Your Command Line Tools installation may be broken or incomplete. + #{MacOS::CLT.installation_then_reinstall_instructions} + EOS + when :swift_not_executable + <<~EOS + No Cask quarantine support available: Swift is not executable. + Your Command Line Tools installation may be incomplete. + #{MacOS::CLT.installation_then_reinstall_instructions} + EOS + when :swift_unexpected_error + <<~EOS + No Cask quarantine support available: Swift returned an unexpected error: + #{check_output} + EOS + else + <<~EOS + No Cask quarantine support available: unknown reason: #{status.inspect}: + #{check_output} + EOS + end + end end end end diff --git a/Library/Homebrew/extend/os/mac/keg_relocate.rb b/Library/Homebrew/extend/os/mac/keg_relocate.rb index 3c0a5d34ae..a2b444134f 100644 --- a/Library/Homebrew/extend/os/mac/keg_relocate.rb +++ b/Library/Homebrew/extend/os/mac/keg_relocate.rb @@ -20,7 +20,7 @@ module OS end end - def relocate_dynamic_linkage(relocation) + def relocate_dynamic_linkage(relocation, skip_protodesc_cold: false) mach_o_files.each do |file| file.ensure_writable do modified = T.let(false, T::Boolean) diff --git a/Library/Homebrew/formula-analytics/.python-version b/Library/Homebrew/formula-analytics/.python-version index e4fba21835..24ee5b1be9 100644 --- a/Library/Homebrew/formula-analytics/.python-version +++ b/Library/Homebrew/formula-analytics/.python-version @@ -1 +1 @@ -3.12 +3.13 diff --git a/Library/Homebrew/formula-analytics/requirements.txt b/Library/Homebrew/formula-analytics/requirements.txt index 3a110d3581..39200a1317 100644 --- a/Library/Homebrew/formula-analytics/requirements.txt +++ b/Library/Homebrew/formula-analytics/requirements.txt @@ -1,73 +1,61 @@ # -# This file is autogenerated by pip-compile with Python 3.12 +# This file is autogenerated by pip-compile with Python 3.13 # by the following command: # # pip-compile --allow-unsafe --generate-hashes --strip-extras requirements.in # -certifi==2025.7.14 \ - --hash=sha256:6b31f564a415d79ee77df69d757bb49a5bb53bd9f756cbbe24394ffd6fc1f4b2 \ - --hash=sha256:8ea99dbdfaaf2ba2f9bac77b9249ef62ec5218e7c2b2e903378ed5fccf765995 +certifi==2025.8.3 \ + --hash=sha256:e564105f78ded564e3ae7c923924435e1daa7463faeab5bb932bc53ffae63407 \ + --hash=sha256:f6c12493cfb1b06ba2ff328595af9350c65d6644968e5d3a2ffd78699af217a5 # via influxdb3-python -influxdb3-python==0.14.0 \ - --hash=sha256:63318c1eb53e026d1d793ef00fef51510acd40dd80bd69b528bf05332757dc67 \ - --hash=sha256:f3c676112bf8a6230278a3e0940dd4cc2b57a868906a9de8e20cc9efd708a339 +influxdb3-python==0.15.0 \ + --hash=sha256:47b5ea57cf9a6d7b3fbc51ab6eb0122f1196207d6472d4ec93e3da0191b54b1c \ + --hash=sha256:ccbf22dfef32fe86464d258f94ed66631257b5f6f1624ae0969e23522ca27e3d # via -r requirements.in -pyarrow==20.0.0 \ - --hash=sha256:00138f79ee1b5aca81e2bdedb91e3739b987245e11fa3c826f9e57c5d102fb75 \ - --hash=sha256:11529a2283cb1f6271d7c23e4a8f9f8b7fd173f7360776b668e509d712a02eec \ - --hash=sha256:15aa1b3b2587e74328a730457068dc6c89e6dcbf438d4369f572af9d320a25ee \ - --hash=sha256:1bcbe471ef3349be7714261dea28fe280db574f9d0f77eeccc195a2d161fd861 \ - --hash=sha256:204a846dca751428991346976b914d6d2a82ae5b8316a6ed99789ebf976551e6 \ - --hash=sha256:211d5e84cecc640c7a3ab900f930aaff5cd2702177e0d562d426fb7c4f737781 \ - --hash=sha256:24ca380585444cb2a31324c546a9a56abbe87e26069189e14bdba19c86c049f0 \ - --hash=sha256:2c3a01f313ffe27ac4126f4c2e5ea0f36a5fc6ab51f8726cf41fee4b256680bd \ - --hash=sha256:30b3051b7975801c1e1d387e17c588d8ab05ced9b1e14eec57915f79869b5031 \ - --hash=sha256:3346babb516f4b6fd790da99b98bed9708e3f02e734c84971faccb20736848dc \ - --hash=sha256:3e1f8a47f4b4ae4c69c4d702cfbdfe4d41e18e5c7ef6f1bb1c50918c1e81c57b \ - --hash=sha256:4250e28a22302ce8692d3a0e8ec9d9dde54ec00d237cff4dfa9c1fbf79e472a8 \ - --hash=sha256:4680f01ecd86e0dd63e39eb5cd59ef9ff24a9d166db328679e36c108dc993d4c \ - --hash=sha256:4a8b029a07956b8d7bd742ffca25374dd3f634b35e46cc7a7c3fa4c75b297191 \ - --hash=sha256:4ba3cf4182828be7a896cbd232aa8dd6a31bd1f9e32776cc3796c012855e1199 \ - --hash=sha256:5605919fbe67a7948c1f03b9f3727d82846c053cd2ce9303ace791855923fd20 \ - --hash=sha256:5f0fb1041267e9968c6d0d2ce3ff92e3928b243e2b6d11eeb84d9ac547308232 \ - --hash=sha256:6102b4864d77102dbbb72965618e204e550135a940c2534711d5ffa787df2a5a \ - --hash=sha256:6415a0d0174487456ddc9beaead703d0ded5966129fa4fd3114d76b5d1c5ceae \ - --hash=sha256:6bb830757103a6cb300a04610e08d9636f0cd223d32f388418ea893a3e655f1c \ - --hash=sha256:6fc1499ed3b4b57ee4e090e1cea6eb3584793fe3d1b4297bbf53f09b434991a5 \ - --hash=sha256:75a51a5b0eef32727a247707d4755322cb970be7e935172b6a3a9f9ae98404ba \ - --hash=sha256:7a3a5dcf54286e6141d5114522cf31dd67a9e7c9133d150799f30ee302a7a1ab \ - --hash=sha256:7f4c8534e2ff059765647aa69b75d6543f9fef59e2cd4c6d18015192565d2b70 \ - --hash=sha256:82f1ee5133bd8f49d31be1299dc07f585136679666b502540db854968576faf9 \ - --hash=sha256:851c6a8260ad387caf82d2bbf54759130534723e37083111d4ed481cb253cc0d \ - --hash=sha256:89e030dc58fc760e4010148e6ff164d2f44441490280ef1e97a542375e41058e \ - --hash=sha256:95b330059ddfdc591a3225f2d272123be26c8fa76e8c9ee1a77aad507361cfdb \ - --hash=sha256:96d6a0a37d9c98be08f5ed6a10831d88d52cac7b13f5287f1e0f625a0de8062b \ - --hash=sha256:96e37f0766ecb4514a899d9a3554fadda770fb57ddf42b63d80f14bc20aa7db3 \ - --hash=sha256:97c8dc984ed09cb07d618d57d8d4b67a5100a30c3818c2fb0b04599f0da2de7b \ - --hash=sha256:991f85b48a8a5e839b2128590ce07611fae48a904cae6cab1f089c5955b57eb5 \ - --hash=sha256:9965a050048ab02409fb7cbbefeedba04d3d67f2cc899eff505cc084345959ca \ - --hash=sha256:9b71daf534f4745818f96c214dbc1e6124d7daf059167330b610fc69b6f3d3e3 \ - --hash=sha256:a15532e77b94c61efadde86d10957950392999503b3616b2ffcef7621a002893 \ - --hash=sha256:a18a14baef7d7ae49247e75641fd8bcbb39f44ed49a9fc4ec2f65d5031aa3b96 \ - --hash=sha256:a1f60dc14658efaa927f8214734f6a01a806d7690be4b3232ba526836d216122 \ - --hash=sha256:a2791f69ad72addd33510fec7bb14ee06c2a448e06b649e264c094c5b5f7ce28 \ - --hash=sha256:a5704f29a74b81673d266e5ec1fe376f060627c2e42c5c7651288ed4b0db29e9 \ - --hash=sha256:a6ad3e7758ecf559900261a4df985662df54fb7fdb55e8e3b3aa99b23d526b62 \ - --hash=sha256:aa0d288143a8585806e3cc7c39566407aab646fb9ece164609dac1cfff45f6ae \ - --hash=sha256:b6953f0114f8d6f3d905d98e987d0924dabce59c3cda380bdfaa25a6201563b4 \ - --hash=sha256:b8ff87cc837601532cc8242d2f7e09b4e02404de1b797aee747dd4ba4bd6313f \ - --hash=sha256:c7dd06fd7d7b410ca5dc839cc9d485d2bc4ae5240851bcd45d85105cc90a47d7 \ - --hash=sha256:ca151afa4f9b7bc45bcc791eb9a89e90a9eb2772767d0b1e5389609c7d03db63 \ - --hash=sha256:cb497649e505dc36542d0e68eca1a3c94ecbe9799cb67b578b55f2441a247fbc \ - --hash=sha256:d5382de8dc34c943249b01c19110783d0d64b207167c728461add1ecc2db88e4 \ - --hash=sha256:db53390eaf8a4dab4dbd6d93c85c5cf002db24902dbff0ca7d988beb5c9dd15b \ - --hash=sha256:dd43f58037443af715f34f1322c782ec463a3c8a94a85fdb2d987ceb5658e061 \ - --hash=sha256:e22f80b97a271f0a7d9cd07394a7d348f80d3ac63ed7cc38b6d1b696ab3b2619 \ - --hash=sha256:e724a3fd23ae5b9c010e7be857f4405ed5e679db5c93e66204db1a69f733936a \ - --hash=sha256:e8b88758f9303fa5a83d6c90e176714b2fd3852e776fc2d7e42a22dd6c2fb368 \ - --hash=sha256:f2d67ac28f57a362f1a2c1e6fa98bfe2f03230f7e15927aecd067433b1e70ce8 \ - --hash=sha256:f3b117b922af5e4c6b9a9115825726cac7d8b1421c37c2b5e24fbacc8930612c \ - --hash=sha256:febc4a913592573c8d5805091a6c2b5064c8bd6e002131f01061797d91c783c1 +pyarrow==21.0.0 \ + --hash=sha256:067c66ca29aaedae08218569a114e413b26e742171f526e828e1064fcdec13f4 \ + --hash=sha256:072116f65604b822a7f22945a7a6e581cfa28e3454fdcc6939d4ff6090126623 \ + --hash=sha256:0c4e75d13eb76295a49e0ea056eb18dbd87d81450bfeb8afa19a7e5a75ae2ad7 \ + --hash=sha256:186aa00bca62139f75b7de8420f745f2af12941595bbbfa7ed3870ff63e25636 \ + --hash=sha256:1e005378c4a2c6db3ada3ad4c217b381f6c886f0a80d6a316fe586b90f77efd7 \ + --hash=sha256:203003786c9fd253ebcafa44b03c06983c9c8d06c3145e37f1b76a1f317aeae1 \ + --hash=sha256:222c39e2c70113543982c6b34f3077962b44fca38c0bd9e68bb6781534425c10 \ + --hash=sha256:26bfd95f6bff443ceae63c65dc7e048670b7e98bc892210acba7e4995d3d4b51 \ + --hash=sha256:3a302f0e0963db37e0a24a70c56cf91a4faa0bca51c23812279ca2e23481fccd \ + --hash=sha256:3a81486adc665c7eb1a2bde0224cfca6ceaba344a82a971ef059678417880eb8 \ + --hash=sha256:3b4d97e297741796fead24867a8dabf86c87e4584ccc03167e4a811f50fdf74d \ + --hash=sha256:40ebfcb54a4f11bcde86bc586cbd0272bac0d516cfa539c799c2453768477569 \ + --hash=sha256:479ee41399fcddc46159a551705b89c05f11e8b8cb8e968f7fec64f62d91985e \ + --hash=sha256:5051f2dccf0e283ff56335760cbc8622cf52264d67e359d5569541ac11b6d5bc \ + --hash=sha256:555ca6935b2cbca2c0e932bedd853e9bc523098c39636de9ad4693b5b1df86d6 \ + --hash=sha256:585e7224f21124dd57836b1530ac8f2df2afc43c861d7bf3d58a4870c42ae36c \ + --hash=sha256:58c30a1729f82d201627c173d91bd431db88ea74dcaa3885855bc6203e433b82 \ + --hash=sha256:6299449adf89df38537837487a4f8d3bd91ec94354fdd2a7d30bc11c48ef6e79 \ + --hash=sha256:65f8e85f79031449ec8706b74504a316805217b35b6099155dd7e227eef0d4b6 \ + --hash=sha256:689f448066781856237eca8d1975b98cace19b8dd2ab6145bf49475478bcaa10 \ + --hash=sha256:69cbbdf0631396e9925e048cfa5bce4e8c3d3b41562bbd70c685a8eb53a91e61 \ + --hash=sha256:731c7022587006b755d0bdb27626a1a3bb004bb56b11fb30d98b6c1b4718579d \ + --hash=sha256:7be45519b830f7c24b21d630a31d48bcebfd5d4d7f9d3bdb49da9cdf6d764edb \ + --hash=sha256:898afce396b80fdda05e3086b4256f8677c671f7b1d27a6976fa011d3fd0a86e \ + --hash=sha256:8d58d8497814274d3d20214fbb24abcad2f7e351474357d552a8d53bce70c70e \ + --hash=sha256:9b0b14b49ac10654332a805aedfc0147fb3469cbf8ea951b3d040dab12372594 \ + --hash=sha256:9d9f8bcb4c3be7738add259738abdeddc363de1b80e3310e04067aa1ca596634 \ + --hash=sha256:a7a102574faa3f421141a64c10216e078df467ab9576684d5cd696952546e2da \ + --hash=sha256:a7f6524e3747e35f80744537c78e7302cd41deee8baa668d56d55f77d9c464b3 \ + --hash=sha256:b6b27cf01e243871390474a211a7922bfbe3bda21e39bc9160daf0da3fe48876 \ + --hash=sha256:b7ae0bbdc8c6674259b25bef5d2a1d6af5d39d7200c819cf99e07f7dfef1c51e \ + --hash=sha256:bd04ec08f7f8bd113c55868bd3fc442a9db67c27af098c5f814a3091e71cc61a \ + --hash=sha256:c077f48aab61738c237802836fc3844f85409a46015635198761b0d6a688f87b \ + --hash=sha256:cdc4c17afda4dab2a9c0b79148a43a7f4e1094916b3e18d8975bfd6d6d52241f \ + --hash=sha256:cf56ec8b0a5c8c9d7021d6fd754e688104f9ebebf1bf4449613c9531f5346a18 \ + --hash=sha256:d2fe8e7f3ce329a71b7ddd7498b3cfac0eeb200c2789bd840234f0dc271a8efe \ + --hash=sha256:dc56bc708f2d8ac71bd1dcb927e458c93cec10b98eb4120206a4091db7b67b99 \ + --hash=sha256:e563271e2c5ff4d4a4cbeb2c83d5cf0d4938b891518e676025f7268c6fe5fe26 \ + --hash=sha256:e72a8ec6b868e258a2cd2672d91f2860ad532d590ce94cdf7d5e7ec674ccf03d \ + --hash=sha256:e99310a4ebd4479bcd1964dff9e14af33746300cb014aa4a3781738ac63baf4a \ + --hash=sha256:f522e5709379d72fb3da7785aa489ff0bb87448a9dc5a75f45763a795a089ebd \ + --hash=sha256:fc0d2f88b81dcf3ccf9a6ae17f89183762c8a94a5bdcfa09e05cfe413acf0503 \ + --hash=sha256:fee33b0ca46f4c85443d6c450357101e47d53e6c3f008d658c27a2d020d44c79 # via influxdb3-python python-dateutil==2.9.0.post0 \ --hash=sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3 \ diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index 525fc58f9c..072d2b0c62 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -557,6 +557,12 @@ class Formula # @see .loaded_from_api? delegate loaded_from_api?: :"self.class" + # The API source data used to load this formula. + # Returns `nil` if the formula was not loaded from the API. + # @!method api_source + # @see .api_source + delegate api_source: :"self.class" + sig { void } def update_head_version return unless head? @@ -1675,7 +1681,10 @@ class Formula # don't consider this keg current if there's a newer formula available next if follow_installed_alias? && new_formula_available? - # this keg is the current version of the formula, so it's not outdated + # this keg is the current version of the formula, but only consider it current + # if it's actually linked - an unlinked current version means we're outdated + next if !keg.optlinked? && !keg.linked? && !pinned? + current_version = true break end @@ -2625,9 +2634,8 @@ class Formula hash = to_hash # Take from API, merging in local install status. - if loaded_from_api? && !Homebrew::EnvConfig.no_install_from_api? - json_formula = Homebrew::API::Formula.all_formulae.fetch(name).dup - return json_formula.merge( + if loaded_from_api? && (json_formula = api_source) && !Homebrew::EnvConfig.no_install_from_api? + return json_formula.dup.merge( hash.slice("name", "installed", "linked_keg", "pinned", "outdated"), ) end @@ -3062,12 +3070,12 @@ class Formula @exec_count ||= T.let(0, T.nilable(Integer)) @exec_count += 1 - logfn = format("#{logs}/#{active_log_prefix}%02d.%s", - exec_count: @exec_count, - cmd_base: File.basename(cmd).split.first) + log_filename = format("#{logs}/#{active_log_prefix}%02d.%s.log", + exec_count: @exec_count, + cmd_base: File.basename(cmd).split.first) logs.mkpath - File.open(logfn, "w") do |log| + File.open(log_filename, "w") do |log| log.puts Time.now, "", cmd, args, "" log.flush @@ -3077,7 +3085,7 @@ class Formula pid = fork do rd.close log.close - exec_cmd(cmd, args, wr, logfn) + exec_cmd(cmd, args, wr, log_filename) end wr.close @@ -3104,7 +3112,7 @@ class Formula end else pid = fork do - exec_cmd(cmd, args, log, logfn) + exec_cmd(cmd, args, log, log_filename) end end @@ -3117,8 +3125,8 @@ class Formula log.flush if !verbose? || verbose_using_dots - puts "Last #{log_lines} lines from #{logfn}:" - Kernel.system "/usr/bin/tail", "-n", log_lines.to_s, logfn + puts "Last #{log_lines} lines from #{log_filename}:" + Kernel.system "/usr/bin/tail", "-n", log_lines.to_s, log_filename end log.puts @@ -3259,14 +3267,14 @@ class Formula sig { params( - cmd: T.any(String, Pathname), - args: T::Array[T.any(String, Integer, Pathname, Symbol)], - out: IO, - logfn: T.nilable(String), + cmd: T.any(String, Pathname), + args: T::Array[T.any(String, Integer, Pathname, Symbol)], + out: IO, + log_filename: T.nilable(String), ).void } - def exec_cmd(cmd, args, out, logfn) - ENV["HOMEBREW_CC_LOG_PATH"] = logfn + def exec_cmd(cmd, args, out, log_filename) + ENV["HOMEBREW_CC_LOG_PATH"] = log_filename ENV.remove_cc_etc if cmd.to_s.start_with? "xcodebuild" @@ -3358,6 +3366,7 @@ class Formula @skip_clean_paths = T.let(Set.new, T.nilable(T::Set[T.any(String, Symbol)])) @link_overwrite_paths = T.let(Set.new, T.nilable(T::Set[String])) @loaded_from_api = T.let(false, T.nilable(T::Boolean)) + @api_source = T.let(nil, T.nilable(T::Hash[String, T.untyped])) @on_system_blocks_exist = T.let(false, T.nilable(T::Boolean)) @network_access_allowed = T.let(SUPPORTED_NETWORK_ACCESS_PHASES.to_h do |phase| [phase, DEFAULT_NETWORK_ACCESS_ALLOWED] @@ -3382,6 +3391,10 @@ class Formula sig { returns(T::Boolean) } def loaded_from_api? = !!@loaded_from_api + # Whether this formula was loaded using the formulae.brew.sh API. + sig { returns(T.nilable(T::Hash[String, T.untyped])) } + attr_reader :api_source + # Whether this formula contains OS/arch-specific blocks # (e.g. `on_macos`, `on_arm`, `on_monterey :or_older`, `on_system :linux, macos: :big_sur_or_newer`). sig { returns(T::Boolean) } @@ -3797,12 +3810,12 @@ class Formula # If called as a method this provides just the {url} for the {SoftwareSpec}. # If a block is provided you can also add {.depends_on} and {Patch}es just to the {.head} {SoftwareSpec}. # The download strategies (e.g. `:using =>`) are the same as for {url}. - # `master` is the default branch for Git and doesn't need stating with a `branch:` parameter. + # Git repositories must always specify `branch:`. # # ### Example # # ```ruby - # head "https://we.prefer.https.over.git.example.com/.git" + # head "https://we.prefer.https.over.git.example.com/.git", branch: "main" # ``` # # ```ruby diff --git a/Library/Homebrew/formula_auditor.rb b/Library/Homebrew/formula_auditor.rb index ac6e5d0fc7..cec1bfbbb5 100644 --- a/Library/Homebrew/formula_auditor.rb +++ b/Library/Homebrew/formula_auditor.rb @@ -677,6 +677,19 @@ module Homebrew problem "GitLab repository is archived" if metadata["archived"] end + sig { void } + def audit_forgejo_repository_archived + return if formula.deprecated? || formula.disabled? + + user, repo = get_repo_data(%r{https?://codeberg\.org/([^/]+)/([^/]+)/?.*}) if @online + return if user.blank? + + metadata = SharedAudits.forgejo_repo_data(user, repo) + return if metadata.nil? + + problem "Forgejo repository is archived since #{metadata["archived_at"]}" if metadata["archived"] + end + def audit_github_repository user, repo = get_repo_data(%r{https?://github\.com/([^/]+)/([^/]+)/?.*}) if @new_formula @@ -708,6 +721,17 @@ module Homebrew new_formula_problem warning end + sig { void } + def audit_forgejo_repository + user, repo = get_repo_data(%r{https?://codeberg\.org/([^/]+)/([^/]+)/?.*}) if @new_formula + return if user.blank? + + warning = SharedAudits.forgejo(user, repo) + return if warning.nil? + + new_formula_problem warning + end + def get_repo_data(regex) return unless @core_tap return unless @online @@ -791,7 +815,7 @@ module Homebrew formula_suffix = stable.version.patch.to_i throttled_rate = formula.livecheck.throttle if throttled_rate && formula_suffix.modulo(throttled_rate).nonzero? - problem "should only be updated every #{throttled_rate} releases on multiples of #{throttled_rate}" + problem "Should only be updated every #{throttled_rate} releases on multiples of #{throttled_rate}" end case (url = stable.url) @@ -839,6 +863,16 @@ module Homebrew error = SharedAudits.github_release(owner, repo, tag, formula:) problem error if error end + when %r{^https://codeberg\.org/([\w-]+)/([\w-]+)} + owner = T.must(Regexp.last_match(1)) + repo = T.must(Regexp.last_match(2)) + tag = SharedAudits.forgejo_tag_from_url(url) + tag ||= formula.stable.specs[:tag] + + if @online && !tag.nil? + error = SharedAudits.forgejo_release(owner, repo, tag, formula:) + problem error if error + end end end diff --git a/Library/Homebrew/formula_installer.rb b/Library/Homebrew/formula_installer.rb index 472b979791..6bf6be477f 100644 --- a/Library/Homebrew/formula_installer.rb +++ b/Library/Homebrew/formula_installer.rb @@ -382,7 +382,7 @@ class FormulaInstaller check_installation_already_attempted if force_bottle? && !pour_bottle? - raise CannotInstallFormulaError, "--force-bottle passed but #{formula.full_name} has no bottle!" + raise CannotInstallFormulaError, "`--force-bottle` passed but #{formula.full_name} has no bottle!" end if Homebrew.default_prefix? && @@ -477,7 +477,7 @@ class FormulaInstaller raise CannotInstallFormulaError, "You must `brew unpin #{pinned_unsatisfied_deps * " "}` as installing " \ - "#{formula.full_name} requires the latest version of pinned dependencies" + "#{formula.full_name} requires the latest version of pinned dependencies." end sig { params(_formula: Formula).returns(T.nilable(T::Boolean)) } diff --git a/Library/Homebrew/formula_stub.rb b/Library/Homebrew/formula_stub.rb new file mode 100644 index 0000000000..0177ef6bdc --- /dev/null +++ b/Library/Homebrew/formula_stub.rb @@ -0,0 +1,34 @@ +# typed: strict +# frozen_string_literal: true + +require "pkg_version" + +module Homebrew + # A stub for a formula, with only the information needed to fetch the bottle manifest. + class FormulaStub < T::Struct + const :name, String + const :pkg_version, PkgVersion + const :rebuild, Integer, default: 0 + const :sha256, T.nilable(String) + + sig { returns(Version) } + def version + pkg_version.version + end + + sig { returns(Integer) } + def revision + pkg_version.revision + end + + sig { params(other: T.anything).returns(T::Boolean) } + def ==(other) + case other + when FormulaStub + name == other.name && pkg_version == other.pkg_version && rebuild == other.rebuild && sha256 == other.sha256 + else + false + end + end + end +end diff --git a/Library/Homebrew/formula_versions.rb b/Library/Homebrew/formula_versions.rb index 62a650fd0b..eb687c68b4 100644 --- a/Library/Homebrew/formula_versions.rb +++ b/Library/Homebrew/formula_versions.rb @@ -60,6 +60,7 @@ class FormulaVersions # We rescue these so that we can skip bad versions and # continue walking the history odebug "#{e} in #{name} at revision #{revision}", Utils::Backtrace.clean(e) + nil rescue FormulaUnavailableError nil ensure diff --git a/Library/Homebrew/formulary.rb b/Library/Homebrew/formulary.rb index f416dad77c..8135629707 100644 --- a/Library/Homebrew/formulary.rb +++ b/Library/Homebrew/formulary.rb @@ -173,9 +173,9 @@ module Formulary platform_cache[:path][path] = klass end - sig { params(name: String, flags: T::Array[String]).returns(T.class_of(Formula)) } - def self.load_formula_from_api!(name, flags:) - namespace = :"FormulaNamespaceAPI#{namespace_key(name)}" + sig { params(name: String, json_formula_with_variations: T::Hash[String, T.untyped], flags: T::Array[String]).returns(T.class_of(Formula)) } + def self.load_formula_from_json!(name, json_formula_with_variations, flags:) + namespace = :"FormulaNamespaceAPI#{namespace_key(json_formula_with_variations.to_json)}" mod = Module.new remove_const(namespace) if const_defined?(namespace) @@ -184,10 +184,7 @@ module Formulary mod.const_set(:BUILD_FLAGS, flags) class_name = class_s(name) - json_formula = Homebrew::API::Formula.all_formulae[name] - raise FormulaUnavailableError, name if json_formula.nil? - - json_formula = Homebrew::API.merge_variations(json_formula) + json_formula = Homebrew::API.merge_variations(json_formula_with_variations) uses_from_macos_names = json_formula.fetch("uses_from_macos", []).map do |dep| next dep unless dep.is_a? Hash @@ -273,6 +270,7 @@ module Formulary # rubocop:todo Sorbet/BlockMethodDefinition klass = Class.new(::Formula) do @loaded_from_api = true + @api_source = json_formula_with_variations desc json_formula["desc"] homepage json_formula["homepage"] @@ -618,8 +616,28 @@ module Formulary return unless path.expand_path.exist? - return if Homebrew::EnvConfig.forbid_packages_from_paths? && - !path.realpath.to_s.start_with?("#{HOMEBREW_CELLAR}/", "#{HOMEBREW_LIBRARY}/Taps/") + if Homebrew::EnvConfig.forbid_packages_from_paths? + path_realpath = path.realpath.to_s + path_string = path.to_s + if (path_realpath.end_with?(".rb") || path_string.end_with?(".rb")) && + !path_realpath.start_with?("#{HOMEBREW_CELLAR}/", "#{HOMEBREW_LIBRARY}/Taps/", "#{HOMEBREW_CACHE}/") && + !path_string.start_with?("#{HOMEBREW_CELLAR}/", "#{HOMEBREW_LIBRARY}/Taps/", "#{HOMEBREW_CACHE}/") + if path_string.include?("./") || path_string.end_with?(".rb") || path_string.count("/") != 2 + raise <<~WARNING + Homebrew requires formulae to be in a tap, rejecting: + #{path_string} (#{path_realpath}) + + To create a tap, run e.g. + brew tap-new / + To create a formula in a tap run e.g. + brew create --tap=/ + WARNING + elsif path_string.count("/") == 2 + # Looks like a tap, let's quietly return but not error. + return + end + end + end if (tap = Tap.from_path(path)) # Only treat symlinks in taps as aliases. @@ -693,7 +711,7 @@ module Formulary if ALLOWED_URL_SCHEMES.exclude?(url_scheme) raise UnsupportedInstallationMethod, "Non-checksummed download of #{name} formula file from an arbitrary URL is unsupported! " \ - "`brew extract` or `brew create` and `brew tap-new` to create a formula file in a tap " \ + "Use `brew extract` or `brew create` and `brew tap-new` to create a formula file in a tap " \ "on GitHub instead." end HOMEBREW_CACHE_FORMULA.mkpath @@ -877,9 +895,9 @@ module Formulary return if Homebrew::EnvConfig.no_install_from_api? return unless ref.is_a?(String) return unless (name = ref[HOMEBREW_DEFAULT_TAP_FORMULA_REGEX, :name]) - if !Homebrew::API::Formula.all_formulae.key?(name) && - !Homebrew::API::Formula.all_aliases.key?(name) && - !Homebrew::API::Formula.all_renames.key?(name) + if Homebrew::API.formula_names.exclude?(name) && + !Homebrew::API.formula_aliases.key?(name) && + !Homebrew::API.formula_renames.key?(name) return end @@ -911,7 +929,10 @@ module Formulary private def load_from_api(flags:) - Formulary.load_formula_from_api!(name, flags:) + json_formula = Homebrew::API::Formula.all_formulae[name] + raise FormulaUnavailableError, name if json_formula.nil? + + Formulary.load_formula_from_json!(name, json_formula, flags:) end end diff --git a/Library/Homebrew/ignorable.rbi b/Library/Homebrew/ignorable.rbi index f8b29fefac..97e31984c2 100644 --- a/Library/Homebrew/ignorable.rbi +++ b/Library/Homebrew/ignorable.rbi @@ -2,6 +2,7 @@ module Ignorable include Kernel + # This is a workaround to enable `raise` to be aliased # @see https://github.com/sorbet/sorbet/issues/2378#issuecomment-569474238 def self.raise(*); end diff --git a/Library/Homebrew/install.rb b/Library/Homebrew/install.rb index 3afc44cccb..eafed0ffcc 100644 --- a/Library/Homebrew/install.rb +++ b/Library/Homebrew/install.rb @@ -83,10 +83,10 @@ module Homebrew skip_link: false, overwrite: false ) - # head-only without --HEAD is an error + # HEAD-only without --HEAD is an error if !head && formula.stable.nil? odie <<~EOS - #{formula.full_name} is a head-only formula. + #{formula.full_name} is a HEAD-only formula. To install it, run: brew install --HEAD #{formula.full_name} EOS diff --git a/Library/Homebrew/keg_relocate.rb b/Library/Homebrew/keg_relocate.rb index c4e6621d8a..3e75672cd8 100644 --- a/Library/Homebrew/keg_relocate.rb +++ b/Library/Homebrew/keg_relocate.rb @@ -78,15 +78,43 @@ class Keg end end - def relocate_dynamic_linkage(_relocation) + def relocate_dynamic_linkage(_relocation, skip_protodesc_cold: false) [] end JAVA_REGEX = %r{#{HOMEBREW_PREFIX}/opt/openjdk(@\d+(\.\d+)*)?/libexec(/openjdk\.jdk/Contents/Home)?} + sig { returns(T::Hash[Symbol, T::Hash[Symbol, String]]) } + def new_usr_local_replacement_pairs + { + prefix: { + old: "/usr/local/opt", + new: "#{PREFIX_PLACEHOLDER}/opt", + }, + caskroom: { + old: "/usr/local/Caskroom", + new: "#{PREFIX_PLACEHOLDER}/Caskroom", + }, + var_homebrew: { + old: "/usr/local/var/homebrew", + new: "#{PREFIX_PLACEHOLDER}/var/homebrew", + }, + } + end + def prepare_relocation_to_placeholders relocation = Relocation.new - relocation.add_replacement_pair(:prefix, HOMEBREW_PREFIX.to_s, PREFIX_PLACEHOLDER, path: true) + + # Use selective HOMEBREW_PREFIX replacement when HOMEBREW_PREFIX=/usr/local + # This avoids overzealous replacement of system paths when a script refers to e.g. /usr/local/bin + if new_usr_local_relocation? + new_usr_local_replacement_pairs.each do |key, value| + relocation.add_replacement_pair(key, value.fetch(:old), value.fetch(:new), path: true) + end + else + relocation.add_replacement_pair(:prefix, HOMEBREW_PREFIX.to_s, PREFIX_PLACEHOLDER, path: true) + end + relocation.add_replacement_pair(:cellar, HOMEBREW_CELLAR.to_s, CELLAR_PLACEHOLDER, path: true) # when HOMEBREW_PREFIX == HOMEBREW_REPOSITORY we should use HOMEBREW_PREFIX for all relocations to avoid # being unable to differentiate between them. @@ -104,7 +132,7 @@ class Keg def replace_locations_with_placeholders relocation = prepare_relocation_to_placeholders.freeze - relocate_dynamic_linkage(relocation) + relocate_dynamic_linkage(relocation, skip_protodesc_cold: true) replace_text_in_files(relocation) end @@ -361,6 +389,25 @@ class Keg def self.file_linked_libraries(_file, _string) [] end + + private + + sig { returns(T::Boolean) } + def new_usr_local_relocation? + return false if HOMEBREW_PREFIX.to_s != "/usr/local" + + formula = begin + Formula[name] + rescue FormulaUnavailableError + nil + end + return true unless formula + + tap = formula.tap + return true unless tap + + tap.disabled_new_usr_local_relocation_formulae.exclude?(name) + end end require "extend/os/keg_relocate" diff --git a/Library/Homebrew/language/python.rb b/Library/Homebrew/language/python.rb index aa62727bcd..6bd996d498 100644 --- a/Library/Homebrew/language/python.rb +++ b/Library/Homebrew/language/python.rb @@ -286,7 +286,7 @@ module Language def slice_resources!(resources_hash, resource_names) resource_names.map do |resource_name| resources_hash.delete(resource_name) do - raise ArgumentError, "Resource \"#{resource_name}\" is not defined in formula or is already used" + raise ArgumentError, "Resource \"#{resource_name}\" is not defined in formula or is already used." end end end diff --git a/Library/Homebrew/livecheck/livecheck.rb b/Library/Homebrew/livecheck/livecheck.rb index 38042e74de..12f2b2b426 100644 --- a/Library/Homebrew/livecheck/livecheck.rb +++ b/Library/Homebrew/livecheck/livecheck.rb @@ -245,7 +245,7 @@ module Homebrew end # Use the `stable` version for comparison except for installed - # head-only formulae. A formula with `stable` and `head` that's + # HEAD-only formulae. A formula with `stable` and `head` that's # installed using `--head` will still use the `stable` version for # comparison. current = if formula diff --git a/Library/Homebrew/livecheck/skip_conditions.rb b/Library/Homebrew/livecheck/skip_conditions.rb index a8212b3a08..9ead3ef057 100644 --- a/Library/Homebrew/livecheck/skip_conditions.rb +++ b/Library/Homebrew/livecheck/skip_conditions.rb @@ -120,7 +120,7 @@ module Homebrew } private_class_method def self.cask_deprecated(cask, livecheck_defined, full_name: false, verbose: false) return {} if !cask.deprecated? || livecheck_defined - return {} if cask.disable_date && cask.deprecation_reason == :unsigned + return {} if cask.disable_date && cask.deprecation_reason == :fails_gatekeeper_check Livecheck.status_hash(cask, "deprecated", full_name:, verbose:) end diff --git a/Library/Homebrew/livecheck/strategic.rb b/Library/Homebrew/livecheck/strategic.rb index fd47d0ea88..5a01044305 100644 --- a/Library/Homebrew/livecheck/strategic.rb +++ b/Library/Homebrew/livecheck/strategic.rb @@ -8,6 +8,7 @@ module Homebrew # method implementations here. module Strategic extend T::Helpers + interface! # Whether the strategy can be applied to the provided URL. diff --git a/Library/Homebrew/livecheck/strategy/gnu.rb b/Library/Homebrew/livecheck/strategy/gnu.rb index fd335915ae..d78a90971c 100644 --- a/Library/Homebrew/livecheck/strategy/gnu.rb +++ b/Library/Homebrew/livecheck/strategy/gnu.rb @@ -66,7 +66,7 @@ module Homebrew return values if match.blank? # The directory listing page for the project's files - values[:url] = "https://ftp.gnu.org/gnu/#{match[:project_name]}/" + values[:url] = "https://ftpmirror.gnu.org/gnu/#{match[:project_name]}/" regex_name = Regexp.escape(T.must(match[:project_name])).gsub("\\-", "-") diff --git a/Library/Homebrew/messages.rb b/Library/Homebrew/messages.rb index 830ce46fac..3ed0a2831a 100644 --- a/Library/Homebrew/messages.rb +++ b/Library/Homebrew/messages.rb @@ -4,7 +4,7 @@ # A {Messages} object collects messages that may need to be displayed together # at the end of a multi-step `brew` command run. class Messages - sig { returns(T::Array[T::Hash[Symbol, Symbol]]) } + sig { returns(T::Array[{ package: String, caveats: T.any(String, Caveats) }]) } attr_reader :caveats sig { returns(Integer) } @@ -15,7 +15,7 @@ class Messages sig { void } def initialize - @caveats = T.let([], T::Array[T::Hash[Symbol, Symbol]]) + @caveats = T.let([], T::Array[{ package: String, caveats: T.any(String, Caveats) }]) @completions_and_elisp = T.let(Set.new, T::Set[String]) @package_count = T.let(0, Integer) @install_times = T.let([], T::Array[T::Hash[String, Float]]) @@ -53,7 +53,7 @@ class Messages return if @package_count == 1 && !force oh1 "Caveats" if @completions_and_elisp.empty? - @caveats.each { |c| ohai c[:package], c[:caveats] } + @caveats.each { |c| ohai c.fetch(:package), c.fetch(:caveats) } end sig { void } diff --git a/Library/Homebrew/os/linux/elf.rb b/Library/Homebrew/os/linux/elf.rb index 39e24a1700..e3e3b56596 100644 --- a/Library/Homebrew/os/linux/elf.rb +++ b/Library/Homebrew/os/linux/elf.rb @@ -1,4 +1,4 @@ -# typed: true # rubocop:todo Sorbet/StrictSigil +# typed: strict # frozen_string_literal: true require "os/linux/ld" @@ -44,7 +44,8 @@ module ELFShim requires_ancestor { Pathname } - def initialize(*args) + sig { params(path: T.anything).void } + def initialize(path) @elf = T.let(nil, T.nilable(T::Boolean)) @arch = T.let(nil, T.nilable(Symbol)) @elf_type = T.let(nil, T.nilable(Symbol)) @@ -52,15 +53,16 @@ module ELFShim @interpreter = T.let(nil, T.nilable(String)) @dynamic_elf = T.let(nil, T.nilable(T::Boolean)) @metadata = T.let(nil, T.nilable(Metadata)) - @patchelf_patcher = nil super end + sig { params(offset: Integer).returns(Integer) } def read_uint8(offset) read(1, offset).unpack1("C") end + sig { params(offset: Integer).returns(Integer) } def read_uint16(offset) read(2, offset).unpack1("v") end @@ -91,6 +93,7 @@ module ELFShim end end + sig { params(wanted_arch: Symbol).returns(T::Boolean) } def arch_compatible?(wanted_arch) return true unless elf? @@ -111,10 +114,12 @@ module ELFShim end end + sig { returns(T::Boolean) } def dylib? elf_type == :dylib end + sig { returns(T::Boolean) } def binary_executable? elf_type == :executable end @@ -123,20 +128,22 @@ module ELFShim # "/lib:/usr/lib:/usr/local/lib" sig { returns(T.nilable(String)) } def rpath - @rpath ||= rpath_using_patchelf_rb + metadata.rpath end # An array of runtime search path entries, such as: # ["/lib", "/usr/lib", "/usr/local/lib"] + sig { returns(T::Array[String]) } def rpaths Array(rpath&.split(":")) end sig { returns(T.nilable(String)) } def interpreter - @interpreter ||= patchelf_patcher.interpreter + metadata.interpreter end + sig { params(interpreter: T.nilable(String), rpath: T.nilable(String)).void } def patch!(interpreter: nil, rpath: nil) return if interpreter.blank? && rpath.blank? @@ -145,7 +152,12 @@ module ELFShim sig { returns(T::Boolean) } def dynamic_elf? - @dynamic_elf ||= patchelf_patcher.elf.segment_by_type(:DYNAMIC).present? + metadata.dynamic_elf? + end + + sig { returns(T::Array[String]) } + def section_names + metadata.section_names end # Helper class for reading metadata from an ELF file. @@ -156,35 +168,56 @@ module ELFShim sig { returns(T.nilable(String)) } attr_reader :dylib_id + sig { returns(T::Boolean) } + def dynamic_elf? + @dynamic_elf + end + + sig { returns(T.nilable(String)) } + attr_reader :interpreter + + sig { returns(T.nilable(String)) } + attr_reader :rpath + sig { returns(T::Array[String]) } - attr_reader :dylibs + attr_reader :section_names sig { params(path: ELFShim).void } def initialize(path) - @path = T.let(path, ELFShim) - @dylibs = T.let([], T::Array[String]) - @dylib_id = T.let(nil, T.nilable(String)) - @dylib_id, needed = needed_libraries path - @dylibs = needed.map { |lib| find_full_lib_path(lib).to_s } if needed.present? + require "patchelf" + patcher = path.patchelf_patcher - @metadata = T.let(nil, T.nilable(T::Hash[String, T.untyped])) + @path = T.let(path, ELFShim) + @dylibs = T.let(nil, T.nilable(T::Array[String])) + @dylib_id = T.let(nil, T.nilable(String)) + @needed = T.let([], T::Array[String]) + + dynamic_segment = patcher.elf.segment_by_type(:dynamic) + @dynamic_elf = T.let(dynamic_segment.present?, T::Boolean) + @dylib_id, @needed = if @dynamic_elf + [patcher.soname, patcher.needed] + else + [nil, []] + end + + @interpreter = T.let(patcher.interpreter, T.nilable(String)) + @rpath = T.let(patcher.runpath || patcher.rpath, T.nilable(String)) + @section_names = T.let(patcher.elf.sections.map(&:name).compact_blank, T::Array[String]) + + @dt_flags_1 = T.let(dynamic_segment&.tag_by_type(:flags_1)&.value, T.nilable(Integer)) + end + + sig { returns(T::Array[String]) } + def dylibs + @dylibs ||= @needed.map { |lib| find_full_lib_path(lib).to_s } end private - def needed_libraries(path) - return [nil, []] unless path.dynamic_elf? - - needed_libraries_using_patchelf_rb path - end - - def needed_libraries_using_patchelf_rb(path) - patcher = path.patchelf_patcher - [patcher.soname, patcher.needed] - end - + sig { params(basename: String).returns(Pathname) } def find_full_lib_path(basename) - local_paths = (path.patchelf_patcher.runpath || path.patchelf_patcher.rpath)&.split(":") + basename = Pathname(basename) + local_paths = rpath&.split(":") # Search for dependencies in the runpath/rpath first local_paths&.each do |local_path| @@ -194,11 +227,10 @@ module ELFShim end # Check if DF_1_NODEFLIB is set - dt_flags_1 = path.patchelf_patcher.elf.segment_by_type(:dynamic)&.tag_by_type(:flags_1) - nodeflib_flag = if dt_flags_1.nil? + nodeflib_flag = if @dt_flags_1.nil? false else - dt_flags_1.value & ELFTools::Constants::DF::DF_1_NODEFLIB != 0 + @dt_flags_1 & ELFTools::Constants::DF::DF_1_NODEFLIB != 0 end linker_library_paths = OS::Linux::Ld.library_paths @@ -232,6 +264,7 @@ module ELFShim end private_constant :Metadata + sig { params(new_interpreter: T.nilable(String), new_rpath: T.nilable(String)).void } def save_using_patchelf_rb(new_interpreter, new_rpath) patcher = patchelf_patcher patcher.interpreter = new_interpreter if new_interpreter.present? @@ -239,13 +272,13 @@ module ELFShim patcher.save(patchelf_compatible: true) end - def rpath_using_patchelf_rb - patchelf_patcher.runpath || patchelf_patcher.rpath - end - + # Don't cache the patcher; it keeps the ELF file open so long as it is alive. + # Instead, for read-only access to the ELF file's metadata, fetch it and cache + # it with {Metadata}. + sig { returns(::PatchELF::Patcher) } def patchelf_patcher require "patchelf" - @patchelf_patcher ||= ::PatchELF::Patcher.new to_s, on_error: :silent + ::PatchELF::Patcher.new to_s, on_error: :silent end sig { returns(Metadata) } @@ -254,11 +287,13 @@ module ELFShim end private :metadata + sig { returns(T.nilable(String)) } def dylib_id metadata.dylib_id end - def dynamically_linked_libraries(*) + sig { params(except: Symbol, resolve_variable_references: T::Boolean).returns(T::Array[String]) } + def dynamically_linked_libraries(except: :none, resolve_variable_references: true) metadata.dylibs end end diff --git a/Library/Homebrew/os/linux/ld.rb b/Library/Homebrew/os/linux/ld.rb index ce0e21fcbf..ec6295e1d6 100644 --- a/Library/Homebrew/os/linux/ld.rb +++ b/Library/Homebrew/os/linux/ld.rb @@ -49,6 +49,8 @@ module OS def self.library_paths(conf_path = Pathname(sysconfdir)/"ld.so.conf") conf_file = Pathname(conf_path) return [] unless conf_file.exist? + return [] unless conf_file.file? + return [] unless conf_file.readable? @library_paths_cache ||= T.let({}, T.nilable(T::Hash[String, T::Array[String]])) cache_key = conf_file.to_s diff --git a/Library/Homebrew/os/mac/xcode.rb b/Library/Homebrew/os/mac/xcode.rb index cec906f25e..2300f1489d 100644 --- a/Library/Homebrew/os/mac/xcode.rb +++ b/Library/Homebrew/os/mac/xcode.rb @@ -327,6 +327,19 @@ module OS end end + sig { params(reason: String).returns(String) } + def self.reinstall_instructions(reason: "resolve your issues") + <<~EOS + If that doesn't #{reason}, run: + sudo rm -rf /Library/Developer/CommandLineTools + sudo xcode-select --install + + Alternatively, manually download them from: + #{Formatter.url(MacOS::Xcode::APPLE_DEVELOPER_DOWNLOAD_URL)}. + You should download the Command Line Tools for Xcode #{MacOS::Xcode.latest_version}. + EOS + end + sig { returns(String) } def self.update_instructions return installation_instructions if OS::Mac.version.prerelease? @@ -342,13 +355,15 @@ module OS <<~EOS Update them from Software Update in #{software_update_location}. - If that doesn't show you any updates, run: - sudo rm -rf /Library/Developer/CommandLineTools - sudo xcode-select --install + #{reinstall_instructions(reason: "show you any updates")} + EOS + end - Alternatively, manually download them from: - #{Formatter.url(MacOS::Xcode::APPLE_DEVELOPER_DOWNLOAD_URL)}. - You should download the Command Line Tools for Xcode #{MacOS::Xcode.latest_version}. + sig { returns(String) } + def self.installation_then_reinstall_instructions + <<~EOS + #{installation_instructions} + #{reinstall_instructions} EOS end diff --git a/Library/Homebrew/patch.rb b/Library/Homebrew/patch.rb index b6ff44d107..27638207b0 100644 --- a/Library/Homebrew/patch.rb +++ b/Library/Homebrew/patch.rb @@ -24,7 +24,7 @@ module Patch when nil raise ArgumentError, "nil value for strip" else - raise ArgumentError, "Unexpected value #{strip.inspect} for strip" + raise ArgumentError, "Unexpected value for strip: #{strip.inspect}" end end end diff --git a/Library/Homebrew/postinstall.rb b/Library/Homebrew/postinstall.rb index cde5b8b676..f69d270de3 100644 --- a/Library/Homebrew/postinstall.rb +++ b/Library/Homebrew/postinstall.rb @@ -14,7 +14,10 @@ require "cmd/postinstall" require "json/add/exception" begin - ENV.delete("HOMEBREW_FORBID_PACKAGES_FROM_PATHS") + # Undocumented opt-out for internal use. + # We need to allow formulae from paths here due to how we pass them through. + ENV["HOMEBREW_INTERNAL_ALLOW_PACKAGES_FROM_PATHS"] = "1" + args = Homebrew::Cmd::Postinstall.new.args error_pipe = Utils::UNIXSocketExt.open(ENV.fetch("HOMEBREW_ERROR_PIPE"), &:recv_io) error_pipe.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC) @@ -29,7 +32,7 @@ begin formula.run_post_install # Handle all possible exceptions. rescue Exception => e # rubocop:disable Lint/RescueException - error_pipe.puts e.to_json - error_pipe.close + error_pipe&.puts e.to_json + error_pipe&.close exit! 1 end diff --git a/Library/Homebrew/requirement.rb b/Library/Homebrew/requirement.rb index 82851e5ad6..ac38b7418a 100644 --- a/Library/Homebrew/requirement.rb +++ b/Library/Homebrew/requirement.rb @@ -172,10 +172,6 @@ class Requirement super(cmd, PATH.new(ORIGINAL_PATHS)) end - def which_all(cmd) - super(cmd, PATH.new(ORIGINAL_PATHS)) - end - class << self include BuildEnvironment::DSL diff --git a/Library/Homebrew/resource.rb b/Library/Homebrew/resource.rb index 813d1486f5..a6a4c0e9fd 100644 --- a/Library/Homebrew/resource.rb +++ b/Library/Homebrew/resource.rb @@ -37,7 +37,7 @@ class Resource instance_eval(&block) if block end - sig { params(other: Object).void } + sig { override.params(other: T.any(Resource, Downloadable)).void } def initialize_dup(other) super @name = @name.dup diff --git a/Library/Homebrew/resource_auditor.rb b/Library/Homebrew/resource_auditor.rb index 8f20881f21..bb0d5e81fe 100644 --- a/Library/Homebrew/resource_auditor.rb +++ b/Library/Homebrew/resource_auditor.rb @@ -45,16 +45,16 @@ module Homebrew def audit_version if version.nil? - problem "missing version" + problem "Missing version" elsif owner.is_a?(Formula) && !version.to_s.match?(GitHubPackages::VALID_OCI_TAG_REGEX) && (owner.core_formula? || (owner.bottle_defined? && GitHubPackages::URL_REGEX.match?(owner.bottle_specification.root_url))) - problem "version #{version} does not match #{GitHubPackages::VALID_OCI_TAG_REGEX.source}" + problem "`version #{version}` does not match #{GitHubPackages::VALID_OCI_TAG_REGEX.source}" elsif !version.detected_from_url? version_text = version version_url = Version.detect(url, **specs) if version_url.to_s == version_text.to_s && version.instance_of?(Version) - problem "version #{version_text} is redundant with version scanned from URL" + problem "`version #{version_text}` is redundant with version scanned from URL" end end end @@ -137,7 +137,7 @@ module Homebrew # TODO: try remove the OS/env conditional if Homebrew::SimulateSystem.simulating_or_running_on_macos? && spec_name == :stable && owner.name != "ca-certificates" && curl_dep && !urls.find { |u| u.start_with?("http://") } - problem "should always include at least one HTTP mirror" + problem "Should always include at least one HTTP mirror" end return unless @online @@ -179,17 +179,21 @@ module Homebrew def audit_head_branch return unless @online - return unless @strict return if spec_name != :head - return unless Utils::Git.remote_exists?(url) return if specs[:tag].present? return if specs[:revision].present? + # Skip `resource` URLs as they use SHAs instead of branch specifiers. + return if name != owner.name + return unless url.end_with?(".git") + return unless Utils::Git.remote_exists?(url) - branch = Utils.popen_read("git", "ls-remote", "--symref", url, "HEAD") - .match(%r{ref: refs/heads/(.*?)\s+HEAD})&.to_a&.second - return if branch.blank? || branch == specs[:branch] + detected_branch = Utils.popen_read("git", "ls-remote", "--symref", url, "HEAD") + .match(%r{ref: refs/heads/(.*?)\s+HEAD})&.to_a&.second - problem "Specify the default branch as `branch: \"#{branch}\"`" + message = "Git `head` URL must specify a branch name" + message += " - try `branch: \"#{detected_branch}\"`" if detected_branch.present? + + problem message if specs[:branch].blank? || detected_branch != specs[:branch] end def problem(text) diff --git a/Library/Homebrew/rubocops/cask/constants/stanza.rb b/Library/Homebrew/rubocops/cask/constants/stanza.rb index d6d2e9a278..9cd042b02f 100644 --- a/Library/Homebrew/rubocops/cask/constants/stanza.rb +++ b/Library/Homebrew/rubocops/cask/constants/stanza.rb @@ -34,6 +34,9 @@ module RuboCop :depends_on, :container, ], + [ + :rename, + ], [ :suite, :app, diff --git a/Library/Homebrew/rubocops/cask/mixin/cask_help.rbi b/Library/Homebrew/rubocops/cask/mixin/cask_help.rbi index 134eae355e..14203ed540 100644 --- a/Library/Homebrew/rubocops/cask/mixin/cask_help.rbi +++ b/Library/Homebrew/rubocops/cask/mixin/cask_help.rbi @@ -3,5 +3,6 @@ module RuboCop::Cop::Cask::CaskHelp # Sorbet doesn't understand `prepend`: https://github.com/sorbet/sorbet/issues/259 include RuboCop::Cop::CommentsHelp + requires_ancestor { RuboCop::Cop::Base } end diff --git a/Library/Homebrew/rubocops/components_redundancy.rb b/Library/Homebrew/rubocops/components_redundancy.rb index 724f0af7bf..4a203ce17a 100644 --- a/Library/Homebrew/rubocops/components_redundancy.rb +++ b/Library/Homebrew/rubocops/components_redundancy.rb @@ -13,7 +13,7 @@ module RuboCop # - `bottle :unneeded`/`:disable` and `bottle do` should not be simultaneously present # - `stable do` should not be present without a `head` spec # - `stable do` should not be present with only `url|checksum|mirror|version` - # - `head do` should not be present with only `url` + # - `head do` should not be present with only `url|branch` class ComponentsRedundancy < FormulaCop HEAD_MSG = "`head` and `head do` should not be simultaneously present" BOTTLE_MSG = "`bottle :modifier` and `bottle do` should not be simultaneously present" @@ -54,8 +54,9 @@ module RuboCop head_block = find_block(body_node, :head) if head_block && !head_block.body.nil? child_nodes = head_block.body.begin_type? ? head_block.body.child_nodes : [head_block.body] - if child_nodes.all? { |n| n.send_type? && n.method_name == :url } - problem "`head do` should not be present with only `url`" + shorthand_head_methods = [:url, :branch] + if child_nodes.all? { |n| n.send_type? && shorthand_head_methods.include?(n.method_name) } + problem "`head do` should not be present with only #{shorthand_head_methods.join("/")}" end end diff --git a/Library/Homebrew/rubocops/patches.rb b/Library/Homebrew/rubocops/patches.rb index 5fd3a72741..9570b851dc 100644 --- a/Library/Homebrew/rubocops/patches.rb +++ b/Library/Homebrew/rubocops/patches.rb @@ -100,16 +100,16 @@ module RuboCop if regex_match_group(patch_url_node, %r{^http://trac\.macports\.org}) problem "Patches from MacPorts Trac should be https://, not http: #{patch_url}" do |corrector| - correct = patch_url_node.source.gsub(%r{^http://}, "https://") - corrector.replace(patch_url_node.source_range, correct) + corrector.replace(patch_url_node.source_range, + patch_url_node.source.sub(%r{\A"http://}, '"https://')) end end return unless regex_match_group(patch_url_node, %r{^http://bugs\.debian\.org}) problem "Patches from Debian should be https://, not http: #{patch_url}" do |corrector| - correct = patch_url_node.source.gsub(%r{^http://}, "https://") - corrector.replace(patch_url_node.source_range, correct) + corrector.replace(patch_url_node.source_range, + patch_url_node.source.sub(%r{\A"http://}, '"https://')) end end diff --git a/Library/Homebrew/rubocops/shared/url_helper.rb b/Library/Homebrew/rubocops/shared/url_helper.rb index 3919d63469..4a757dc8b9 100644 --- a/Library/Homebrew/rubocops/shared/url_helper.rb +++ b/Library/Homebrew/rubocops/shared/url_helper.rb @@ -41,10 +41,10 @@ module RuboCop 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/(.*)} + # Prefer ftpmirror.gnu.org as suggested by https://www.gnu.org/prep/ftp.en.html + gnu_pattern = %r{^(?:https?|ftp)://ftp\.gnu\.org/(.*)} audit_urls(urls, gnu_pattern) do |match, url| - problem "#{url} should be: https://ftp.gnu.org/gnu/#{match[1]}" + problem "#{url} should be: https://ftpmirror.gnu.org/gnu/#{match[1]}" end # Fossies upstream requests they aren't used as primary URLs diff --git a/Library/Homebrew/sandbox.rb b/Library/Homebrew/sandbox.rb index 1f8e29c0ae..53f915295d 100644 --- a/Library/Homebrew/sandbox.rb +++ b/Library/Homebrew/sandbox.rb @@ -258,7 +258,7 @@ class Sandbox invalid_char = ['"', "'", "(", ")", "\n", "\\"].find do |c| path.to_s.include?(c) end - raise ArgumentError, "Invalid character #{invalid_char} in path: #{path}" if invalid_char + raise ArgumentError, "Invalid character '#{invalid_char}' in path: #{path}" if invalid_char case type when :regex then "regex #\"#{path}\"" diff --git a/Library/Homebrew/service.rb b/Library/Homebrew/service.rb index 3fb072d945..9d648e2c54 100644 --- a/Library/Homebrew/service.rb +++ b/Library/Homebrew/service.rb @@ -23,7 +23,7 @@ module Homebrew PROCESS_TYPE_ADAPTIVE = :adaptive KEEP_ALIVE_KEYS = [:always, :successful_exit, :crashed, :path].freeze - SOCKET_STRING_REGEX = %r{^([a-z]+)://(.+):([0-9]+)$}i + SOCKET_STRING_REGEX = %r{^(?[a-z]+)://(?.+):(?[0-9]+)$}i RunParam = T.type_alias { T.nilable(T.any(T::Array[T.any(String, Pathname)], String, Pathname)) } Sockets = T.type_alias { T::Hash[Symbol, { host: String, port: String, type: String }] } @@ -107,61 +107,56 @@ module Homebrew end end - sig { params(path: T.nilable(T.any(String, Pathname))).returns(T.nilable(String)) } - def working_dir(path = nil) - case path - when nil - @working_dir - when String, Pathname + sig { params(path: T.any(String, Pathname)).returns(T.nilable(String)) } + def working_dir(path = T.unsafe(nil)) + if path @working_dir = path.to_s + else + @working_dir end end - sig { params(path: T.nilable(T.any(String, Pathname))).returns(T.nilable(String)) } - def root_dir(path = nil) - case path - when nil - @root_dir - when String, Pathname + sig { params(path: T.any(String, Pathname)).returns(T.nilable(String)) } + def root_dir(path = T.unsafe(nil)) + if path @root_dir = path.to_s + else + @root_dir end end - sig { params(path: T.nilable(T.any(String, Pathname))).returns(T.nilable(String)) } - def input_path(path = nil) - case path - when nil - @input_path - when String, Pathname + sig { params(path: T.any(String, Pathname)).returns(T.nilable(String)) } + def input_path(path = T.unsafe(nil)) + if path @input_path = path.to_s + else + @input_path end end - sig { params(path: T.nilable(T.any(String, Pathname))).returns(T.nilable(String)) } - def log_path(path = nil) - case path - when nil - @log_path - when String, Pathname + sig { params(path: T.any(String, Pathname)).returns(T.nilable(String)) } + def log_path(path = T.unsafe(nil)) + if path @log_path = path.to_s + else + @log_path end end - sig { params(path: T.nilable(T.any(String, Pathname))).returns(T.nilable(String)) } - def error_log_path(path = nil) - case path - when nil - @error_log_path - when String, Pathname + sig { params(path: T.any(String, Pathname)).returns(T.nilable(String)) } + def error_log_path(path = T.unsafe(nil)) + if path @error_log_path = path.to_s + else + @error_log_path end end sig { - params(value: T.nilable(T.any(T::Boolean, T::Hash[Symbol, T.untyped]))) + params(value: T.any(T::Boolean, T::Hash[Symbol, T.untyped])) .returns(T.nilable(T::Hash[Symbol, T.untyped])) } - def keep_alive(value = nil) + def keep_alive(value = T.unsafe(nil)) case value when nil @keep_alive @@ -169,19 +164,18 @@ module Homebrew @keep_alive = { always: value } when Hash unless (value.keys - KEEP_ALIVE_KEYS).empty? - raise TypeError, "Service#keep_alive allows only #{KEEP_ALIVE_KEYS}" + raise TypeError, "Service#keep_alive only allows: #{KEEP_ALIVE_KEYS}" end @keep_alive = value end end - sig { params(value: T.nilable(T::Boolean)).returns(T::Boolean) } - def require_root(value = nil) - case value - when nil + sig { params(value: T::Boolean).returns(T::Boolean) } + def require_root(value = T.unsafe(nil)) + if value.nil? @require_root - when TrueClass, FalseClass + else @require_root = value end end @@ -192,43 +186,40 @@ module Homebrew @require_root.present? && @require_root == true end - sig { params(value: T.nilable(T::Boolean)).returns(T.nilable(T::Boolean)) } - def run_at_load(value = nil) - case value - when nil + sig { params(value: T::Boolean).returns(T.nilable(T::Boolean)) } + def run_at_load(value = T.unsafe(nil)) + if value.nil? @run_at_load - when TrueClass, FalseClass + else @run_at_load = value end end sig { - params(value: T.nilable(T.any(String, T::Hash[Symbol, String]))) + params(value: T.any(String, T::Hash[Symbol, String])) .returns(T::Hash[Symbol, T::Hash[Symbol, String]]) } - def sockets(value = nil) + def sockets(value = T.unsafe(nil)) return @sockets if value.nil? - @sockets = case value + value_hash = case value when String { listeners: value } when Hash value - end.transform_values do |socket_string| + end + + @sockets = T.must(value_hash).transform_values do |socket_string| match = socket_string.match(SOCKET_STRING_REGEX) raise TypeError, "Service#sockets a formatted socket definition as ://:" unless match - type = T.must(match[1]) - host = T.must(match[2]) - port = T.must(match[3]) - begin - IPAddr.new(host) + IPAddr.new(match[:host]) rescue IPAddr::InvalidAddressError raise TypeError, "Service#sockets expects a valid ipv4 or ipv6 host address" end - { host:, port:, type: } + { host: match[:host], port: match[:port], type: match[:type] } end end @@ -238,28 +229,26 @@ module Homebrew !@keep_alive.empty? && @keep_alive[:always] != false end - sig { params(value: T.nilable(T::Boolean)).returns(T::Boolean) } - def launch_only_once(value = nil) - case value - when nil + sig { params(value: T::Boolean).returns(T::Boolean) } + def launch_only_once(value = T.unsafe(nil)) + if value.nil? @launch_only_once - when TrueClass, FalseClass + else @launch_only_once = value end end - sig { params(value: T.nilable(Integer)).returns(T.nilable(Integer)) } - def restart_delay(value = nil) - case value - when nil - @restart_delay - when Integer + sig { params(value: Integer).returns(T.nilable(Integer)) } + def restart_delay(value = T.unsafe(nil)) + if value @restart_delay = value + else + @restart_delay end end - sig { params(value: T.nilable(Symbol)).returns(T.nilable(Symbol)) } - def process_type(value = nil) + sig { params(value: Symbol).returns(T.nilable(Symbol)) } + def process_type(value = T.unsafe(nil)) case value when nil @process_type @@ -272,8 +261,8 @@ module Homebrew end end - sig { params(value: T.nilable(Symbol)).returns(T.nilable(Symbol)) } - def run_type(value = nil) + sig { params(value: Symbol).returns(T.nilable(Symbol)) } + def run_type(value = T.unsafe(nil)) case value when nil @run_type @@ -284,23 +273,21 @@ module Homebrew end end - sig { params(value: T.nilable(Integer)).returns(T.nilable(Integer)) } - def interval(value = nil) - case value - when nil - @interval - when Integer + sig { params(value: Integer).returns(T.nilable(Integer)) } + def interval(value = T.unsafe(nil)) + if value @interval = value + else + @interval end end - sig { params(value: T.nilable(String)).returns(T::Hash[Symbol, T.any(Integer, String)]) } - def cron(value = nil) - case value - when nil - @cron - when String + sig { params(value: String).returns(T::Hash[Symbol, T.any(Integer, String)]) } + def cron(value = T.unsafe(nil)) + if value @cron = parse_cron(value) + else + @cron end end @@ -352,18 +339,14 @@ module Homebrew sig { params(variables: T::Hash[Symbol, String]).returns(T.nilable(T::Hash[Symbol, String])) } def environment_variables(variables = {}) - case variables - when Hash - @environment_variables = variables.transform_values(&:to_s) - end + @environment_variables = variables.transform_values(&:to_s) end - sig { params(value: T.nilable(T::Boolean)).returns(T::Boolean) } - def macos_legacy_timers(value = nil) - case value - when nil + sig { params(value: T::Boolean).returns(T::Boolean) } + def macos_legacy_timers(value = T.unsafe(nil)) + if value.nil? @macos_legacy_timers - when TrueClass, FalseClass + else @macos_legacy_timers = value end end diff --git a/Library/Homebrew/services/cli.rb b/Library/Homebrew/services/cli.rb index 4cb4518eee..e3c7a7aae0 100644 --- a/Library/Homebrew/services/cli.rb +++ b/Library/Homebrew/services/cli.rb @@ -43,7 +43,7 @@ module Homebrew # Check if formula has been found. def self.check!(targets) - raise UsageError, "Formula(e) missing, please provide a formula name or use --all" if targets.empty? + raise UsageError, "Formula(e) missing, please provide a formula name or use `--all`." if targets.empty? true end @@ -71,7 +71,7 @@ module Homebrew Dir["#{System.path}homebrew.*.{plist,service}"].each do |file| next if running.include?(File.basename(file).sub(/\.(plist|service)$/i, "")) - puts "Removing unused service file #{file}" + puts "Removing unused service file: #{file}" rm file cleaned << file end @@ -90,7 +90,7 @@ module Homebrew def self.run(targets, service_file = nil, verbose: false) if service_file.present? file = Pathname.new service_file - raise UsageError, "Provided service file does not exist" unless file.exist? + raise UsageError, "Provided service file does not exist." unless file.exist? end targets.each do |service| @@ -119,7 +119,7 @@ module Homebrew if service_file.present? file = Pathname.new service_file - raise UsageError, "Provided service file does not exist" unless file.exist? + raise UsageError, "Provided service file does not exist." unless file.exist? end targets.each do |service| @@ -373,11 +373,11 @@ module Homebrew end def self.install_service_file(service, file) - raise UsageError, "Formula `#{service.name}` is not installed" unless service.installed? + raise UsageError, "Formula `#{service.name}` is not installed." unless service.installed? unless service.service_file.exist? raise UsageError, - "Formula `#{service.name}` has not implemented #plist, #service or installed a locatable service file" + "Formula `#{service.name}` has not implemented #plist, #service or provided a locatable service file." end temp = Tempfile.new(service.service_name) @@ -386,7 +386,7 @@ module Homebrew if sudo_service_user && System.launchctl? # set the username in the new plist file - ohai "Setting username in #{service.service_name} to #{System.user}" + ohai "Setting username in #{service.service_name} to: #{System.user}" plist_data = Plist.parse_xml(contents, marshal: false) plist_data["UserName"] = sudo_service_user plist_data.to_plist diff --git a/Library/Homebrew/shims/shared/curl b/Library/Homebrew/shims/shared/curl index 790bca07ce..434664e516 100755 --- a/Library/Homebrew/shims/shared/curl +++ b/Library/Homebrew/shims/shared/curl @@ -35,5 +35,5 @@ fi try_exec_non_system "${HOMEBREW_CURL:-curl}" "$@" safe_exec "/usr/bin/curl" "$@" -echo "Could not execute curl. Try HOMEBREW_FORCE_BREWED_CURL=1" >&2 +echo "Could not execute curl. Try setting HOMEBREW_FORCE_BREWED_CURL=1" >&2 exit 1 diff --git a/Library/Homebrew/shims/shared/git b/Library/Homebrew/shims/shared/git index d7193d3041..9c1e61a57a 100755 --- a/Library/Homebrew/shims/shared/git +++ b/Library/Homebrew/shims/shared/git @@ -1,12 +1,12 @@ #!/bin/bash -p -# This script because we support $HOMEBREW_GIT, $HOMEBREW_SVN, etc., Xcode-only and -# no Xcode/CLT configurations. Order is careful to be what the user would want. +# This script exists because we support $HOMEBREW_GIT, $HOMEBREW_SVN etc., and Xcode-only +# or no Xcode/CLT configurations. Order is careful to be what the user would want. # HOMEBREW_LIBRARY is set by bin/brew # SHIM_FILE is set by shims/utils.sh # HOMEBREW_GIT is set by brew.sh -# HOMEBREW_SVN is from the user environment. +# HOMEBREW_SVN is from the user environment # HOMEBREW_PREFIX is set by extend/ENV/super.rb # shellcheck disable=SC2154 if [[ -z "${HOMEBREW_LIBRARY}" ]] diff --git a/Library/Homebrew/shims/super/cc b/Library/Homebrew/shims/super/cc index 1bb5950b39..9fde835b6f 100755 --- a/Library/Homebrew/shims/super/cc +++ b/Library/Homebrew/shims/super/cc @@ -524,6 +524,7 @@ end def log(basename, argv, tool, args) return unless ENV.key?("HOMEBREW_CC_LOG_PATH") + log_filename = "#{ENV["HOMEBREW_CC_LOG_PATH"].delete_suffix(".log")}.cc.log" adds = args - argv dels = argv - args @@ -532,7 +533,7 @@ def log(basename, argv, tool, args) s << "superenv removed: #{dels.join(" ")}\n" unless dels.empty? s << "superenv added: #{adds.join(" ")}\n" unless adds.empty? s << "superenv executed: #{tool} #{args.join(" ")}\n\n" - File.open("#{ENV["HOMEBREW_CC_LOG_PATH"]}.cc", "a+") { |f| f.write(s) } + File.open(log_filename, "a+") { |f| f.write(s) } end def remove_superbin_from_path(paths) diff --git a/Library/Homebrew/shims/super/rustc_wrapper b/Library/Homebrew/shims/super/rustc_wrapper index ad2c97c7a1..f18ca4bb30 100755 --- a/Library/Homebrew/shims/super/rustc_wrapper +++ b/Library/Homebrew/shims/super/rustc_wrapper @@ -9,7 +9,6 @@ RUSTC="${1}" shift -# Prepend HOMEBREW_RUSTFLAGS to the arguments if set. -# HOMEBREW_RUSTFLAGS is set in extend/ENV/{std,super}.rb -# shellcheck disable=SC2086,SC2154 -exec "${RUSTC}" ${HOMEBREW_RUSTFLAGS} "$@" +# Append HOMEBREW_RUSTFLAGS to the arguments if set. +read -ra RUSTFLAGS <<<"${HOMEBREW_RUSTFLAGS:-}" +exec "${RUSTC}" "$@" "${RUSTFLAGS[@]}" diff --git a/Library/Homebrew/software_spec.rb b/Library/Homebrew/software_spec.rb index cb88a3c84c..82435a9a28 100644 --- a/Library/Homebrew/software_spec.rb +++ b/Library/Homebrew/software_spec.rb @@ -1,4 +1,4 @@ -# typed: true # rubocop:todo Sorbet/StrictSigil +# typed: strict # frozen_string_literal: true require "resource" @@ -20,13 +20,46 @@ class SoftwareSpec extend Forwardable include OnSystem::MacOSAndLinux - PREDEFINED_OPTIONS = { + PREDEFINED_OPTIONS = T.let({ universal: Option.new("universal", "Build a universal binary"), cxx11: Option.new("c++11", "Build using C++11 mode"), - }.freeze + }.freeze, T::Hash[T.any(Symbol, String), Option]) - attr_reader :name, :full_name, :owner, :build, :resources, :patches, :options, :deprecated_flags, - :deprecated_options, :dependency_collector, :bottle_specification, :compiler_failures + sig { returns(T.nilable(String)) } + attr_reader :name + + sig { returns(T.nilable(String)) } + attr_reader :full_name + + sig { returns(T.nilable(T.any(Formula, Cask::Cask))) } + attr_reader :owner + + sig { returns(BuildOptions) } + attr_reader :build + + sig { returns(T::Hash[String, Resource]) } + attr_reader :resources + + sig { returns(T::Array[T.any(EmbeddedPatch, ExternalPatch)]) } + attr_reader :patches + + sig { returns(Options) } + attr_reader :options + + sig { returns(T::Array[DeprecatedOption]) } + attr_reader :deprecated_flags + + sig { returns(T::Array[DeprecatedOption]) } + attr_reader :deprecated_options + + sig { returns(DependencyCollector) } + attr_reader :dependency_collector + + sig { returns(BottleSpecification) } + attr_reader :bottle_specification + + sig { returns(T::Array[CompilerFailure]) } + attr_reader :compiler_failures def_delegators :@resource, :stage, :fetch, :verify_download_integrity, :source_modified_time, :cached_download, :clear_cache, :checksum, :mirrors, :specs, :using, :version, :mirror, @@ -34,23 +67,29 @@ class SoftwareSpec def_delegators :@resource, :sha256 + sig { params(flags: T::Array[String]).void } def initialize(flags: []) super() + @name = T.let(nil, T.nilable(String)) + @full_name = T.let(nil, T.nilable(String)) + @owner = T.let(nil, T.nilable(T.any(Formula, Cask::Cask))) + # Ensure this is synced with `initialize_dup` and `freeze` (excluding simple objects like integers and booleans) @resource = T.let(Resource::Formula.new, Resource::Formula) - @resources = {} - @dependency_collector = DependencyCollector.new - @bottle_specification = BottleSpecification.new - @patches = [] - @options = Options.new - @flags = flags - @deprecated_flags = [] - @deprecated_options = [] - @build = BuildOptions.new(Options.create(@flags), options) - @compiler_failures = [] + @resources = T.let({}, T::Hash[String, Resource]) + @dependency_collector = T.let(DependencyCollector.new, DependencyCollector) + @bottle_specification = T.let(BottleSpecification.new, BottleSpecification) + @patches = T.let([], T::Array[T.any(EmbeddedPatch, ExternalPatch)]) + @options = T.let(Options.new, Options) + @flags = T.let(flags, T::Array[String]) + @deprecated_flags = T.let([], T::Array[DeprecatedOption]) + @deprecated_options = T.let([], T::Array[DeprecatedOption]) + @build = T.let(BuildOptions.new(Options.create(@flags), options), BuildOptions) + @compiler_failures = T.let([], T::Array[CompilerFailure]) end + sig { override.params(other: T.any(SoftwareSpec, Downloadable)).void } def initialize_dup(other) super @resource = @resource.dup @@ -66,6 +105,7 @@ class SoftwareSpec @compiler_failures = @compiler_failures.dup end + sig { override.returns(T.self_type) } def freeze @resource.freeze @resources.freeze @@ -81,6 +121,7 @@ class SoftwareSpec super end + sig { params(owner: T.any(Formula, Cask::Cask)).void } def owner=(owner) @name = owner.name @full_name = owner.full_name @@ -106,23 +147,35 @@ class SoftwareSpec @resource.url end + sig { returns(T::Boolean) } def bottle_defined? !bottle_specification.collector.tags.empty? end + sig { params(tag: T.nilable(T.any(Utils::Bottles::Tag, Symbol))).returns(T::Boolean) } def bottle_tag?(tag = nil) bottle_specification.tag?(Utils::Bottles.tag(tag)) end + sig { params(tag: T.nilable(T.any(Utils::Bottles::Tag, Symbol))).returns(T::Boolean) } def bottled?(tag = nil) - bottle_tag?(tag) && - (tag.present? || bottle_specification.compatible_locations? || owner.force_bottle) + return false unless bottle_tag?(tag) + + return true if tag.present? + return true if bottle_specification.compatible_locations? + + owner = self.owner + return false unless owner.is_a?(Formula) + + owner.force_bottle end + sig { params(block: T.proc.bind(BottleSpecification).void).void } def bottle(&block) bottle_specification.instance_eval(&block) end + sig { params(name: String).returns(T::Boolean) } def resource_defined?(name) resources.key?(name) end @@ -149,15 +202,14 @@ class SoftwareSpec end end + sig { params(name: String).returns(T::Boolean) } def option_defined?(name) options.include?(name) end + sig { params(name: T.any(Symbol, String), description: String).void } def option(name, description = "") opt = PREDEFINED_OPTIONS.fetch(name) do - unless name.is_a?(String) - raise ArgumentError, "option name must be string or symbol; got a #{name.class}: #{name}" - end raise ArgumentError, "option name is required" if name.empty? raise ArgumentError, "option name must be longer than one character: #{name}" if name.length <= 1 raise ArgumentError, "option name must not start with dashes: #{name}" if name.start_with?("-") @@ -167,6 +219,7 @@ class SoftwareSpec options << opt end + sig { params(hash: T::Hash[T.any(String, Symbol), T.any(String, Symbol)]).void } def deprecated_option(hash) raise ArgumentError, "deprecated_option hash must not be empty" if hash.empty? @@ -189,6 +242,7 @@ class SoftwareSpec @build = BuildOptions.new(Options.create(@flags), options) end + sig { params(spec: T.any(String, Symbol, T::Hash[String, T.untyped], T::Class[Requirement], Dependable)).void } def depends_on(spec) dep = dependency_collector.add(spec) add_dep_option(dep) if dep @@ -214,14 +268,17 @@ class SoftwareSpec depends_on UsesFromMacOSDependency.new(dep, tags, bounds:) end + sig { returns(Dependencies) } def deps dependency_collector.deps.dup_without_system_deps end + sig { returns(Dependencies) } def declared_deps dependency_collector.deps end + sig { returns(T::Array[Dependable]) } def recursive_dependencies deps_f = [] recursive_dependencies = deps.filter_map do |dep| @@ -239,15 +296,21 @@ class SoftwareSpec recursive_dependencies end + sig { returns(Requirements) } def requirements dependency_collector.requirements end + sig { returns(Requirements) } def recursive_requirements Requirement.expand(self) end - def patch(strip = :p1, src = nil, &block) + sig { + params(strip: T.any(Symbol, String), src: T.nilable(T.any(String, Symbol)), + block: T.nilable(T.proc.bind(Patch).void)).void + } + def patch(strip = :p1, src = T.unsafe(nil), &block) p = Patch.create(strip, src, &block) return if p.is_a?(ExternalPatch) && p.url.blank? @@ -255,16 +318,19 @@ class SoftwareSpec patches << p end + sig { params(compiler: T.any(T::Hash[Symbol, String], Symbol), block: T.nilable(T.proc.bind(CompilerFailure).void)).void } def fails_with(compiler, &block) compiler_failures << CompilerFailure.create(compiler, &block) end + sig { params(standards: T::Array[String]).void } def needs(*standards) standards.each do |standard| compiler_failures.concat CompilerFailure.for_standard(standard) end end + sig { params(dep: Dependable).void } def add_dep_option(dep) dep.option_names.each do |name| if dep.optional? && !option_defined?("with-#{name}") diff --git a/Library/Homebrew/sorbet/rbi/dsl/cask/cask.rbi b/Library/Homebrew/sorbet/rbi/dsl/cask/cask.rbi index 111ddc3b61..1d831fddd1 100644 --- a/Library/Homebrew/sorbet/rbi/dsl/cask/cask.rbi +++ b/Library/Homebrew/sorbet/rbi/dsl/cask/cask.rbi @@ -168,6 +168,9 @@ class Cask::Cask sig { params(args: T.untyped, block: T.untyped).returns(T.untyped) } def qlplugin(*args, &block); end + sig { params(args: T.untyped, block: T.untyped).returns(T.untyped) } + def rename(*args, &block); end + sig { params(args: T.untyped, block: T.untyped).returns(T.untyped) } def screen_saver(*args, &block); end diff --git a/Library/Homebrew/sorbet/rbi/dsl/formula.rbi b/Library/Homebrew/sorbet/rbi/dsl/formula.rbi index fedb315954..7a0cd62a4e 100644 --- a/Library/Homebrew/sorbet/rbi/dsl/formula.rbi +++ b/Library/Homebrew/sorbet/rbi/dsl/formula.rbi @@ -9,6 +9,9 @@ class Formula sig { params(args: T.untyped, block: T.untyped).returns(T.untyped) } def allow_network_access!(*args, &block); end + sig { params(args: T.untyped, block: T.untyped).returns(T.untyped) } + def api_source(*args, &block); end + sig { params(args: T.untyped, block: T.untyped).returns(T::Boolean) } def autobump?(*args, &block); end diff --git a/Library/Homebrew/sorbet/rbi/dsl/homebrew/env_config.rbi b/Library/Homebrew/sorbet/rbi/dsl/homebrew/env_config.rbi index 580b214c81..8137b80aed 100644 --- a/Library/Homebrew/sorbet/rbi/dsl/homebrew/env_config.rbi +++ b/Library/Homebrew/sorbet/rbi/dsl/homebrew/env_config.rbi @@ -127,9 +127,6 @@ module Homebrew::EnvConfig sig { returns(T::Boolean) } def forbid_casks?; end - sig { returns(T::Boolean) } - def forbid_packages_from_paths?; end - sig { returns(T.nilable(::String)) } def forbidden_casks; 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 b07393aca9..732b357147 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 @@ -156,6 +156,9 @@ class RuboCop::Cask::AST::Stanza sig { returns(T::Boolean) } def qlplugin?; end + sig { returns(T::Boolean) } + def rename?; end + sig { returns(T::Boolean) } def screen_saver?; end diff --git a/Library/Homebrew/sorbet/rbi/gems/parallel_tests@5.3.1.rbi b/Library/Homebrew/sorbet/rbi/gems/parallel_tests@5.4.0.rbi similarity index 100% rename from Library/Homebrew/sorbet/rbi/gems/parallel_tests@5.3.1.rbi rename to Library/Homebrew/sorbet/rbi/gems/parallel_tests@5.4.0.rbi diff --git a/Library/Homebrew/sorbet/rbi/gems/regexp_parser@2.10.0.rbi b/Library/Homebrew/sorbet/rbi/gems/regexp_parser@2.11.2.rbi similarity index 84% rename from Library/Homebrew/sorbet/rbi/gems/regexp_parser@2.10.0.rbi rename to Library/Homebrew/sorbet/rbi/gems/regexp_parser@2.11.2.rbi index f1d8174812..99f7d69532 100644 --- a/Library/Homebrew/sorbet/rbi/gems/regexp_parser@2.10.0.rbi +++ b/Library/Homebrew/sorbet/rbi/gems/regexp_parser@2.11.2.rbi @@ -5,275 +5,275 @@ # Please instead update this file by running `bin/tapioca gem regexp_parser`. -# source://regexp_parser//lib/regexp_parser/expression/shared.rb#1 +# source://regexp_parser//lib/regexp_parser/expression/shared.rb#3 module Regexp::Expression; end -# source://regexp_parser//lib/regexp_parser/expression/classes/alternation.rb#5 +# source://regexp_parser//lib/regexp_parser/expression/classes/alternation.rb#7 class Regexp::Expression::Alternation < ::Regexp::Expression::SequenceOperation - # source://regexp_parser//lib/regexp_parser/expression/subexpression.rb#5 + # source://regexp_parser//lib/regexp_parser/expression/classes/alternation.rb#10 def alternatives; end - # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#11 def human_name; end - # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#131 + # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#132 def match_length; end end -# source://regexp_parser//lib/regexp_parser/expression/classes/alternation.rb#6 +# source://regexp_parser//lib/regexp_parser/expression/classes/alternation.rb#8 Regexp::Expression::Alternation::OPERAND = Regexp::Expression::Alternative # A sequence of expressions, used by Alternation as one of its alternatives. # -# source://regexp_parser//lib/regexp_parser/expression/classes/alternation.rb#3 +# source://regexp_parser//lib/regexp_parser/expression/classes/alternation.rb#5 class Regexp::Expression::Alternative < ::Regexp::Expression::Sequence - # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#10 - def human_name; end -end - -# source://regexp_parser//lib/regexp_parser/expression/classes/anchor.rb#2 -module Regexp::Expression::Anchor; end - -# source://regexp_parser//lib/regexp_parser/expression/classes/anchor.rb#18 -Regexp::Expression::Anchor::BOL = Regexp::Expression::Anchor::BeginningOfLine - -# source://regexp_parser//lib/regexp_parser/expression/classes/anchor.rb#20 -Regexp::Expression::Anchor::BOS = Regexp::Expression::Anchor::BeginningOfString - -# source://regexp_parser//lib/regexp_parser/expression/classes/anchor.rb#3 -class Regexp::Expression::Anchor::Base < ::Regexp::Expression::Base - # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#148 - def match_length; end -end - -# source://regexp_parser//lib/regexp_parser/expression/classes/anchor.rb#5 -class Regexp::Expression::Anchor::BeginningOfLine < ::Regexp::Expression::Anchor::Base - # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#11 - def human_name; end -end - -# source://regexp_parser//lib/regexp_parser/expression/classes/anchor.rb#8 -class Regexp::Expression::Anchor::BeginningOfString < ::Regexp::Expression::Anchor::Base # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#12 def human_name; end end -# source://regexp_parser//lib/regexp_parser/expression/classes/anchor.rb#19 -Regexp::Expression::Anchor::EOL = Regexp::Expression::Anchor::EndOfLine +# source://regexp_parser//lib/regexp_parser/expression/classes/anchor.rb#4 +module Regexp::Expression::Anchor; end -# source://regexp_parser//lib/regexp_parser/expression/classes/anchor.rb#21 -Regexp::Expression::Anchor::EOS = Regexp::Expression::Anchor::EndOfString +# source://regexp_parser//lib/regexp_parser/expression/classes/anchor.rb#20 +Regexp::Expression::Anchor::BOL = Regexp::Expression::Anchor::BeginningOfLine # source://regexp_parser//lib/regexp_parser/expression/classes/anchor.rb#22 -Regexp::Expression::Anchor::EOSobEOL = Regexp::Expression::Anchor::EndOfStringOrBeforeEndOfLine +Regexp::Expression::Anchor::BOS = Regexp::Expression::Anchor::BeginningOfString -# source://regexp_parser//lib/regexp_parser/expression/classes/anchor.rb#6 -class Regexp::Expression::Anchor::EndOfLine < ::Regexp::Expression::Anchor::Base +# source://regexp_parser//lib/regexp_parser/expression/classes/anchor.rb#5 +class Regexp::Expression::Anchor::Base < ::Regexp::Expression::Base + # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#149 + def match_length; end +end + +# source://regexp_parser//lib/regexp_parser/expression/classes/anchor.rb#7 +class Regexp::Expression::Anchor::BeginningOfLine < ::Regexp::Expression::Anchor::Base # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#13 def human_name; end end -# source://regexp_parser//lib/regexp_parser/expression/classes/anchor.rb#9 -class Regexp::Expression::Anchor::EndOfString < ::Regexp::Expression::Anchor::Base +# source://regexp_parser//lib/regexp_parser/expression/classes/anchor.rb#10 +class Regexp::Expression::Anchor::BeginningOfString < ::Regexp::Expression::Anchor::Base # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#14 def human_name; end end -# source://regexp_parser//lib/regexp_parser/expression/classes/anchor.rb#11 -class Regexp::Expression::Anchor::EndOfStringOrBeforeEndOfLine < ::Regexp::Expression::Anchor::Base +# source://regexp_parser//lib/regexp_parser/expression/classes/anchor.rb#21 +Regexp::Expression::Anchor::EOL = Regexp::Expression::Anchor::EndOfLine + +# source://regexp_parser//lib/regexp_parser/expression/classes/anchor.rb#23 +Regexp::Expression::Anchor::EOS = Regexp::Expression::Anchor::EndOfString + +# source://regexp_parser//lib/regexp_parser/expression/classes/anchor.rb#24 +Regexp::Expression::Anchor::EOSobEOL = Regexp::Expression::Anchor::EndOfStringOrBeforeEndOfLine + +# source://regexp_parser//lib/regexp_parser/expression/classes/anchor.rb#8 +class Regexp::Expression::Anchor::EndOfLine < ::Regexp::Expression::Anchor::Base # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#15 def human_name; end end -# source://regexp_parser//lib/regexp_parser/expression/classes/anchor.rb#16 -class Regexp::Expression::Anchor::MatchStart < ::Regexp::Expression::Anchor::Base +# source://regexp_parser//lib/regexp_parser/expression/classes/anchor.rb#11 +class Regexp::Expression::Anchor::EndOfString < ::Regexp::Expression::Anchor::Base # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#16 def human_name; end end -# source://regexp_parser//lib/regexp_parser/expression/classes/anchor.rb#14 -class Regexp::Expression::Anchor::NonWordBoundary < ::Regexp::Expression::Anchor::Base +# source://regexp_parser//lib/regexp_parser/expression/classes/anchor.rb#13 +class Regexp::Expression::Anchor::EndOfStringOrBeforeEndOfLine < ::Regexp::Expression::Anchor::Base # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#17 def human_name; end - - # source://regexp_parser//lib/regexp_parser/expression/methods/negative.rb#13 - def negative?; end end -# source://regexp_parser//lib/regexp_parser/expression/classes/anchor.rb#13 -class Regexp::Expression::Anchor::WordBoundary < ::Regexp::Expression::Anchor::Base +# source://regexp_parser//lib/regexp_parser/expression/classes/anchor.rb#18 +class Regexp::Expression::Anchor::MatchStart < ::Regexp::Expression::Anchor::Base # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#18 def human_name; end end -# source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#64 -module Regexp::Expression::Assertion; end - -# source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#65 -class Regexp::Expression::Assertion::Base < ::Regexp::Expression::Group::Base - # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#148 - def match_length; end -end - -# source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#67 -class Regexp::Expression::Assertion::Lookahead < ::Regexp::Expression::Assertion::Base +# source://regexp_parser//lib/regexp_parser/expression/classes/anchor.rb#16 +class Regexp::Expression::Anchor::NonWordBoundary < ::Regexp::Expression::Anchor::Base # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#19 def human_name; end -end - -# source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#70 -class Regexp::Expression::Assertion::Lookbehind < ::Regexp::Expression::Assertion::Base - # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#20 - def human_name; end -end - -# source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#68 -class Regexp::Expression::Assertion::NegativeLookahead < ::Regexp::Expression::Assertion::Base - # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#21 - def human_name; end - - # source://regexp_parser//lib/regexp_parser/expression/methods/negative.rb#14 - def negative?; end -end - -# source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#71 -class Regexp::Expression::Assertion::NegativeLookbehind < ::Regexp::Expression::Assertion::Base - # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#22 - def human_name; end # source://regexp_parser//lib/regexp_parser/expression/methods/negative.rb#15 def negative?; end end +# source://regexp_parser//lib/regexp_parser/expression/classes/anchor.rb#15 +class Regexp::Expression::Anchor::WordBoundary < ::Regexp::Expression::Anchor::Base + # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#20 + def human_name; end +end + +# source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#66 +module Regexp::Expression::Assertion; end + +# source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#67 +class Regexp::Expression::Assertion::Base < ::Regexp::Expression::Group::Base + # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#149 + def match_length; end +end + +# source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#69 +class Regexp::Expression::Assertion::Lookahead < ::Regexp::Expression::Assertion::Base + # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#21 + def human_name; end +end + +# source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#72 +class Regexp::Expression::Assertion::Lookbehind < ::Regexp::Expression::Assertion::Base + # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#22 + def human_name; end +end + +# source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#70 +class Regexp::Expression::Assertion::NegativeLookahead < ::Regexp::Expression::Assertion::Base + # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#23 + def human_name; end + + # source://regexp_parser//lib/regexp_parser/expression/methods/negative.rb#16 + def negative?; end +end + +# source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#73 +class Regexp::Expression::Assertion::NegativeLookbehind < ::Regexp::Expression::Assertion::Base + # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#24 + def human_name; end + + # source://regexp_parser//lib/regexp_parser/expression/methods/negative.rb#17 + def negative?; end +end + # alias for symmetry between token symbol and Expression class name # -# source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#55 +# source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#57 Regexp::Expression::Backref = Regexp::Expression::Backreference -# source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#2 +# source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#4 module Regexp::Expression::Backreference; end -# source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#3 +# source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#5 class Regexp::Expression::Backreference::Base < ::Regexp::Expression::Base - # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#155 + # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#157 def match_length; end class << self - # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#140 + # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#142 def referential?; end end end -# source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#15 +# source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#17 class Regexp::Expression::Backreference::Name < ::Regexp::Expression::Backreference::Base # @return [Name] a new instance of Name # - # source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#19 - def initialize(token, options = T.unsafe(nil)); end - - # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#23 - def human_name; end - - # Returns the value of attribute name. - # - # source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#16 - def name; end - - # Returns the value of attribute name. - # - # source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#16 - def reference; end -end - -# source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#31 -class Regexp::Expression::Backreference::NameCall < ::Regexp::Expression::Backreference::Name - # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#24 - def human_name; end -end - -# source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#43 -class Regexp::Expression::Backreference::NameRecursionLevel < ::Regexp::Expression::Backreference::Name - # @return [NameRecursionLevel] a new instance of NameRecursionLevel - # - # source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#46 - def initialize(token, options = T.unsafe(nil)); end - - # Returns the value of attribute recursion_level. - # - # source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#44 - def recursion_level; end -end - -# source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#5 -class Regexp::Expression::Backreference::Number < ::Regexp::Expression::Backreference::Base - # @return [Number] a new instance of Number - # - # source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#21 def initialize(token, options = T.unsafe(nil)); end # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#25 def human_name; end - # Returns the value of attribute number. + # Returns the value of attribute name. # - # source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#6 - def number; end + # source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#18 + def name; end - # Returns the value of attribute number. + # Returns the value of attribute name. # - # source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#6 + # source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#19 def reference; end end -# source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#30 -class Regexp::Expression::Backreference::NumberCall < ::Regexp::Expression::Backreference::Number - # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#27 +# source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#33 +class Regexp::Expression::Backreference::NameCall < ::Regexp::Expression::Backreference::Name + # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#26 def human_name; end end -# source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#32 -class Regexp::Expression::Backreference::NumberCallRelative < ::Regexp::Expression::Backreference::NumberRelative - # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#28 - def human_name; end -end - -# source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#34 -class Regexp::Expression::Backreference::NumberRecursionLevel < ::Regexp::Expression::Backreference::NumberRelative - # @return [NumberRecursionLevel] a new instance of NumberRecursionLevel +# source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#45 +class Regexp::Expression::Backreference::NameRecursionLevel < ::Regexp::Expression::Backreference::Name + # @return [NameRecursionLevel] a new instance of NameRecursionLevel # - # source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#37 + # source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#48 def initialize(token, options = T.unsafe(nil)); end # Returns the value of attribute recursion_level. # - # source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#35 + # source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#46 def recursion_level; end end -# source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#25 +# source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#7 +class Regexp::Expression::Backreference::Number < ::Regexp::Expression::Backreference::Base + # @return [Number] a new instance of Number + # + # source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#11 + def initialize(token, options = T.unsafe(nil)); end + + # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#27 + def human_name; end + + # Returns the value of attribute number. + # + # source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#8 + def number; end + + # Returns the value of attribute number. + # + # source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#9 + def reference; end +end + +# source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#32 +class Regexp::Expression::Backreference::NumberCall < ::Regexp::Expression::Backreference::Number + # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#29 + def human_name; end +end + +# source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#34 +class Regexp::Expression::Backreference::NumberCallRelative < ::Regexp::Expression::Backreference::NumberRelative + # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#30 + def human_name; end +end + +# source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#36 +class Regexp::Expression::Backreference::NumberRecursionLevel < ::Regexp::Expression::Backreference::NumberRelative + # @return [NumberRecursionLevel] a new instance of NumberRecursionLevel + # + # source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#39 + def initialize(token, options = T.unsafe(nil)); end + + # Returns the value of attribute recursion_level. + # + # source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#37 + def recursion_level; end +end + +# source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#27 class Regexp::Expression::Backreference::NumberRelative < ::Regexp::Expression::Backreference::Number # Returns the value of attribute effective_number. # - # source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#26 + # source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#28 def effective_number; end # Sets the attribute effective_number # # @param value the value to set the attribute effective_number to. # - # source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#26 + # source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#28 def effective_number=(_arg0); end - # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#26 + # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#28 def human_name; end # Returns the value of attribute effective_number. # - # source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#26 + # source://regexp_parser//lib/regexp_parser/expression/classes/backreference.rb#29 def reference; end end -# source://regexp_parser//lib/regexp_parser/expression/base.rb#2 +# source://regexp_parser//lib/regexp_parser/expression/base.rb#4 class Regexp::Expression::Base include ::Regexp::Expression::Shared include ::Regexp::Expression::ReferencedExpressions @@ -281,160 +281,160 @@ class Regexp::Expression::Base # @return [Base] a new instance of Base # - # source://regexp_parser//lib/regexp_parser/expression/base.rb#5 + # source://regexp_parser//lib/regexp_parser/expression/base.rb#7 def initialize(token, options = T.unsafe(nil)); end - # source://regexp_parser//lib/regexp_parser/expression/methods/match.rb#8 + # source://regexp_parser//lib/regexp_parser/expression/methods/match.rb#13 def =~(string, offset = T.unsafe(nil)); end # @return [Boolean] # - # source://regexp_parser//lib/regexp_parser/expression/methods/options.rb#25 + # source://regexp_parser//lib/regexp_parser/expression/methods/options.rb#30 def a?; end # @return [Boolean] # - # source://regexp_parser//lib/regexp_parser/expression/methods/options.rb#25 + # source://regexp_parser//lib/regexp_parser/expression/methods/options.rb#27 def ascii_classes?; end - # source://regexp_parser//lib/regexp_parser/expression/base.rb#60 + # source://regexp_parser//lib/regexp_parser/expression/base.rb#76 def attributes; end # @return [Boolean] # - # source://regexp_parser//lib/regexp_parser/expression/methods/options.rb#8 + # source://regexp_parser//lib/regexp_parser/expression/methods/options.rb#10 def case_insensitive?; end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/base.rb#5 def conditional_level; end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/base.rb#5 def conditional_level=(_arg0); end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/base.rb#5 def custom_to_s_handling; end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/base.rb#5 def custom_to_s_handling=(_arg0); end # @return [Boolean] # - # source://regexp_parser//lib/regexp_parser/expression/methods/options.rb#20 + # source://regexp_parser//lib/regexp_parser/expression/methods/options.rb#25 def d?; end # @return [Boolean] # - # source://regexp_parser//lib/regexp_parser/expression/methods/options.rb#20 + # source://regexp_parser//lib/regexp_parser/expression/methods/options.rb#22 def default_classes?; end # @return [Boolean] # - # source://regexp_parser//lib/regexp_parser/expression/methods/options.rb#14 + # source://regexp_parser//lib/regexp_parser/expression/methods/options.rb#20 def extended?; end # @return [Boolean] # - # source://regexp_parser//lib/regexp_parser/expression/methods/options.rb#14 + # source://regexp_parser//lib/regexp_parser/expression/methods/options.rb#16 def free_spacing?; end # @return [Boolean] # - # source://regexp_parser//lib/regexp_parser/expression/base.rb#47 + # source://regexp_parser//lib/regexp_parser/expression/base.rb#49 def greedy?; end # @return [Boolean] # - # source://regexp_parser//lib/regexp_parser/expression/methods/options.rb#8 + # source://regexp_parser//lib/regexp_parser/expression/methods/options.rb#13 def i?; end # @return [Boolean] # - # source://regexp_parser//lib/regexp_parser/expression/methods/options.rb#8 + # source://regexp_parser//lib/regexp_parser/expression/methods/options.rb#14 def ignore_case?; end # @return [Boolean] # - # source://regexp_parser//lib/regexp_parser/expression/base.rb#51 + # source://regexp_parser//lib/regexp_parser/expression/base.rb#56 def lazy?; end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/base.rb#5 def level; end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/base.rb#5 def level=(_arg0); end # @return [Boolean] # - # source://regexp_parser//lib/regexp_parser/expression/methods/options.rb#3 + # source://regexp_parser//lib/regexp_parser/expression/methods/options.rb#8 def m?; end - # source://regexp_parser//lib/regexp_parser/expression/methods/match.rb#8 + # source://regexp_parser//lib/regexp_parser/expression/methods/match.rb#10 def match(string, offset = T.unsafe(nil)); end # @return [Boolean] # - # source://regexp_parser//lib/regexp_parser/expression/methods/match.rb#3 + # source://regexp_parser//lib/regexp_parser/expression/methods/match.rb#5 def match?(string); end # @return [Boolean] # - # source://regexp_parser//lib/regexp_parser/expression/methods/match.rb#3 + # source://regexp_parser//lib/regexp_parser/expression/methods/match.rb#8 def matches?(string); end # @return [Boolean] # - # source://regexp_parser//lib/regexp_parser/expression/methods/options.rb#3 + # source://regexp_parser//lib/regexp_parser/expression/methods/options.rb#5 def multiline?; end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#14 + # source://regexp_parser//lib/regexp_parser/expression/base.rb#5 def nesting_level; end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/base.rb#5 def options; end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/base.rb#5 def options=(_arg0); end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/base.rb#5 def parent; end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/base.rb#5 def parent=(_arg0); end # @return [Boolean] # - # source://regexp_parser//lib/regexp_parser/expression/base.rb#56 + # source://regexp_parser//lib/regexp_parser/expression/base.rb#58 def possessive?; end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/base.rb#5 def pre_quantifier_decorations; end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/base.rb#5 def pre_quantifier_decorations=(_arg0); end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#14 + # source://regexp_parser//lib/regexp_parser/expression/base.rb#5 def quantifier; end - # source://regexp_parser//lib/regexp_parser/expression/base.rb#17 + # source://regexp_parser//lib/regexp_parser/expression/base.rb#19 def quantify(*args); end # Deprecated. Prefer `#repetitions` which has a more uniform interface. # - # source://regexp_parser//lib/regexp_parser/expression/base.rb#26 + # source://regexp_parser//lib/regexp_parser/expression/base.rb#28 def quantity; end # @return [Boolean] # - # source://regexp_parser//lib/regexp_parser/expression/base.rb#51 + # source://regexp_parser//lib/regexp_parser/expression/base.rb#53 def reluctant?; end - # source://regexp_parser//lib/regexp_parser/expression/base.rb#31 + # source://regexp_parser//lib/regexp_parser/expression/base.rb#33 def repetitions; end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/base.rb#5 def set_level; end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/base.rb#5 def set_level=(_arg0); end # %l Level (depth) of the expression. Returns 'root' for the root @@ -470,7 +470,7 @@ class Regexp::Expression::Base # %m Most info, same as '%b %q' # %a All info, same as '%m %t' # - # source://regexp_parser//lib/regexp_parser/expression/methods/strfregexp.rb#37 + # source://regexp_parser//lib/regexp_parser/expression/methods/strfregexp.rb#100 def strfre(format = T.unsafe(nil), indent_offset = T.unsafe(nil), index = T.unsafe(nil)); end # %l Level (depth) of the expression. Returns 'root' for the root @@ -506,683 +506,691 @@ class Regexp::Expression::Base # %m Most info, same as '%b %q' # %a All info, same as '%m %t' # - # source://regexp_parser//lib/regexp_parser/expression/methods/strfregexp.rb#37 + # source://regexp_parser//lib/regexp_parser/expression/methods/strfregexp.rb#39 def strfregexp(format = T.unsafe(nil), indent_offset = T.unsafe(nil), index = T.unsafe(nil)); end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/base.rb#5 def te; end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/base.rb#5 def te=(_arg0); end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/base.rb#5 def text; end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/base.rb#5 def text=(_arg0); end - # source://regexp_parser//lib/regexp_parser/expression/base.rb#60 + # source://regexp_parser//lib/regexp_parser/expression/base.rb#62 def to_h; end - # source://regexp_parser//lib/regexp_parser/expression/base.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/base.rb#11 def to_re(format = T.unsafe(nil)); end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/base.rb#5 def token; end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/base.rb#5 def token=(_arg0); end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/base.rb#5 def ts; end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/base.rb#5 def ts=(_arg0); end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/base.rb#5 def type; end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/base.rb#5 def type=(_arg0); end # @return [Boolean] # - # source://regexp_parser//lib/regexp_parser/expression/methods/options.rb#30 + # source://regexp_parser//lib/regexp_parser/expression/methods/options.rb#35 def u?; end # @return [Boolean] # - # source://regexp_parser//lib/regexp_parser/expression/methods/options.rb#30 + # source://regexp_parser//lib/regexp_parser/expression/methods/options.rb#32 def unicode_classes?; end - # source://regexp_parser//lib/regexp_parser/expression/base.rb#21 + # source://regexp_parser//lib/regexp_parser/expression/base.rb#23 def unquantified_clone; end # @return [Boolean] # - # source://regexp_parser//lib/regexp_parser/expression/methods/options.rb#14 + # source://regexp_parser//lib/regexp_parser/expression/methods/options.rb#19 def x?; end end -# source://regexp_parser//lib/regexp_parser/expression/classes/character_set.rb#2 +# source://regexp_parser//lib/regexp_parser/expression/classes/character_set.rb#4 class Regexp::Expression::CharacterSet < ::Regexp::Expression::Subexpression # @return [CharacterSet] a new instance of CharacterSet # - # source://regexp_parser//lib/regexp_parser/expression/classes/character_set.rb#6 + # source://regexp_parser//lib/regexp_parser/expression/classes/character_set.rb#8 def initialize(token, options = T.unsafe(nil)); end - # source://regexp_parser//lib/regexp_parser/expression/classes/character_set.rb#16 + # source://regexp_parser//lib/regexp_parser/expression/classes/character_set.rb#18 def close; end # Returns the value of attribute closed. # - # source://regexp_parser//lib/regexp_parser/expression/classes/character_set.rb#3 + # source://regexp_parser//lib/regexp_parser/expression/classes/character_set.rb#5 def closed; end # Sets the attribute closed # # @param value the value to set the attribute closed to. # - # source://regexp_parser//lib/regexp_parser/expression/classes/character_set.rb#3 + # source://regexp_parser//lib/regexp_parser/expression/classes/character_set.rb#5 def closed=(_arg0); end # Returns the value of attribute closed. # - # source://regexp_parser//lib/regexp_parser/expression/classes/character_set.rb#3 + # source://regexp_parser//lib/regexp_parser/expression/classes/character_set.rb#6 def closed?; end - # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#98 + # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#99 def match_length; end - # source://regexp_parser//lib/regexp_parser/expression/classes/character_set.rb#12 + # source://regexp_parser//lib/regexp_parser/expression/classes/character_set.rb#14 def negate; end # Returns the value of attribute negative. # - # source://regexp_parser//lib/regexp_parser/expression/classes/character_set.rb#3 + # source://regexp_parser//lib/regexp_parser/expression/classes/character_set.rb#5 def negative; end # Sets the attribute negative # # @param value the value to set the attribute negative to. # - # source://regexp_parser//lib/regexp_parser/expression/classes/character_set.rb#3 + # source://regexp_parser//lib/regexp_parser/expression/classes/character_set.rb#5 def negative=(_arg0); end - # source://regexp_parser//lib/regexp_parser/expression/methods/negative.rb#16 + # source://regexp_parser//lib/regexp_parser/expression/methods/negative.rb#18 def negative?; end - # source://regexp_parser//lib/regexp_parser/expression/methods/parts.rb#15 + # source://regexp_parser//lib/regexp_parser/expression/methods/parts.rb#17 def parts; end end -# source://regexp_parser//lib/regexp_parser/expression/classes/character_set/intersection.rb#3 -class Regexp::Expression::CharacterSet::IntersectedSequence < ::Regexp::Expression::Sequence - # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#29 - def human_name; end - - # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#98 - def match_length; end -end - # source://regexp_parser//lib/regexp_parser/expression/classes/character_set/intersection.rb#5 -class Regexp::Expression::CharacterSet::Intersection < ::Regexp::Expression::SequenceOperation - # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#30 +class Regexp::Expression::CharacterSet::IntersectedSequence < ::Regexp::Expression::Sequence + # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#31 def human_name; end - # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#98 + # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#99 def match_length; end end -# source://regexp_parser//lib/regexp_parser/expression/classes/character_set/intersection.rb#6 +# source://regexp_parser//lib/regexp_parser/expression/classes/character_set/intersection.rb#7 +class Regexp::Expression::CharacterSet::Intersection < ::Regexp::Expression::SequenceOperation + # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#32 + def human_name; end + + # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#99 + def match_length; end +end + +# source://regexp_parser//lib/regexp_parser/expression/classes/character_set/intersection.rb#8 Regexp::Expression::CharacterSet::Intersection::OPERAND = Regexp::Expression::CharacterSet::IntersectedSequence -# source://regexp_parser//lib/regexp_parser/expression/classes/character_set/range.rb#3 +# source://regexp_parser//lib/regexp_parser/expression/classes/character_set/range.rb#5 class Regexp::Expression::CharacterSet::Range < ::Regexp::Expression::Subexpression - # source://regexp_parser//lib/regexp_parser/expression/classes/character_set/range.rb#8 + # source://regexp_parser//lib/regexp_parser/expression/classes/character_set/range.rb#10 def <<(exp); end # @return [Boolean] # - # source://regexp_parser//lib/regexp_parser/expression/classes/character_set/range.rb#14 + # source://regexp_parser//lib/regexp_parser/expression/classes/character_set/range.rb#16 def complete?; end - # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#31 - def human_name; end - - # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#98 - def match_length; end - - # source://regexp_parser//lib/regexp_parser/expression/methods/parts.rb#16 - def parts; end - - # source://regexp_parser//lib/regexp_parser/expression/classes/character_set/range.rb#4 - def ts; end -end - -# source://regexp_parser//lib/regexp_parser/expression/classes/character_type.rb#2 -module Regexp::Expression::CharacterType; end - -# source://regexp_parser//lib/regexp_parser/expression/classes/character_type.rb#5 -class Regexp::Expression::CharacterType::Any < ::Regexp::Expression::CharacterType::Base - # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#32 - def human_name; end -end - -# source://regexp_parser//lib/regexp_parser/expression/classes/character_type.rb#3 -class Regexp::Expression::CharacterType::Base < ::Regexp::Expression::Base - # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#98 - def match_length; end - - # source://regexp_parser//lib/regexp_parser/expression/methods/negative.rb#17 - def negative?; end -end - -# source://regexp_parser//lib/regexp_parser/expression/classes/character_type.rb#6 -class Regexp::Expression::CharacterType::Digit < ::Regexp::Expression::CharacterType::Base; end - -# source://regexp_parser//lib/regexp_parser/expression/classes/character_type.rb#15 -class Regexp::Expression::CharacterType::ExtendedGrapheme < ::Regexp::Expression::CharacterType::Base; end - -# source://regexp_parser//lib/regexp_parser/expression/classes/character_type.rb#8 -class Regexp::Expression::CharacterType::Hex < ::Regexp::Expression::CharacterType::Base; end - -# source://regexp_parser//lib/regexp_parser/expression/classes/character_type.rb#14 -class Regexp::Expression::CharacterType::Linebreak < ::Regexp::Expression::CharacterType::Base; end - -# source://regexp_parser//lib/regexp_parser/expression/classes/character_type.rb#7 -class Regexp::Expression::CharacterType::NonDigit < ::Regexp::Expression::CharacterType::Base; end - -# source://regexp_parser//lib/regexp_parser/expression/classes/character_type.rb#9 -class Regexp::Expression::CharacterType::NonHex < ::Regexp::Expression::CharacterType::Base; end - -# source://regexp_parser//lib/regexp_parser/expression/classes/character_type.rb#13 -class Regexp::Expression::CharacterType::NonSpace < ::Regexp::Expression::CharacterType::Base; end - -# source://regexp_parser//lib/regexp_parser/expression/classes/character_type.rb#11 -class Regexp::Expression::CharacterType::NonWord < ::Regexp::Expression::CharacterType::Base; end - -# source://regexp_parser//lib/regexp_parser/expression/classes/character_type.rb#12 -class Regexp::Expression::CharacterType::Space < ::Regexp::Expression::CharacterType::Base; end - -# source://regexp_parser//lib/regexp_parser/expression/classes/character_type.rb#10 -class Regexp::Expression::CharacterType::Word < ::Regexp::Expression::CharacterType::Base; end - -# source://regexp_parser//lib/regexp_parser/expression/classes/free_space.rb#8 -class Regexp::Expression::Comment < ::Regexp::Expression::FreeSpace # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#33 def human_name; end - class << self - # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#130 - def comment?; end - end + # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#99 + def match_length; end + + # source://regexp_parser//lib/regexp_parser/expression/methods/parts.rb#18 + def parts; end + + # source://regexp_parser//lib/regexp_parser/expression/classes/character_set/range.rb#6 + def ts; end end -# source://regexp_parser//lib/regexp_parser/expression/classes/conditional.rb#2 -module Regexp::Expression::Conditional; end +# source://regexp_parser//lib/regexp_parser/expression/classes/character_type.rb#4 +module Regexp::Expression::CharacterType; end -# source://regexp_parser//lib/regexp_parser/expression/classes/conditional.rb#18 -class Regexp::Expression::Conditional::Branch < ::Regexp::Expression::Sequence +# source://regexp_parser//lib/regexp_parser/expression/classes/character_type.rb#7 +class Regexp::Expression::CharacterType::Any < ::Regexp::Expression::CharacterType::Base # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#34 def human_name; end end -# source://regexp_parser//lib/regexp_parser/expression/classes/conditional.rb#9 -class Regexp::Expression::Conditional::Condition < ::Regexp::Expression::Base +# source://regexp_parser//lib/regexp_parser/expression/classes/character_type.rb#5 +class Regexp::Expression::CharacterType::Base < ::Regexp::Expression::Base + # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#99 + def match_length; end + + # source://regexp_parser//lib/regexp_parser/expression/methods/negative.rb#19 + def negative?; end +end + +# source://regexp_parser//lib/regexp_parser/expression/classes/character_type.rb#8 +class Regexp::Expression::CharacterType::Digit < ::Regexp::Expression::CharacterType::Base; end + +# source://regexp_parser//lib/regexp_parser/expression/classes/character_type.rb#17 +class Regexp::Expression::CharacterType::ExtendedGrapheme < ::Regexp::Expression::CharacterType::Base; end + +# source://regexp_parser//lib/regexp_parser/expression/classes/character_type.rb#10 +class Regexp::Expression::CharacterType::Hex < ::Regexp::Expression::CharacterType::Base; end + +# source://regexp_parser//lib/regexp_parser/expression/classes/character_type.rb#16 +class Regexp::Expression::CharacterType::Linebreak < ::Regexp::Expression::CharacterType::Base; end + +# source://regexp_parser//lib/regexp_parser/expression/classes/character_type.rb#9 +class Regexp::Expression::CharacterType::NonDigit < ::Regexp::Expression::CharacterType::Base; end + +# source://regexp_parser//lib/regexp_parser/expression/classes/character_type.rb#11 +class Regexp::Expression::CharacterType::NonHex < ::Regexp::Expression::CharacterType::Base; end + +# source://regexp_parser//lib/regexp_parser/expression/classes/character_type.rb#15 +class Regexp::Expression::CharacterType::NonSpace < ::Regexp::Expression::CharacterType::Base; end + +# source://regexp_parser//lib/regexp_parser/expression/classes/character_type.rb#13 +class Regexp::Expression::CharacterType::NonWord < ::Regexp::Expression::CharacterType::Base; end + +# source://regexp_parser//lib/regexp_parser/expression/classes/character_type.rb#14 +class Regexp::Expression::CharacterType::Space < ::Regexp::Expression::CharacterType::Base; end + +# source://regexp_parser//lib/regexp_parser/expression/classes/character_type.rb#12 +class Regexp::Expression::CharacterType::Word < ::Regexp::Expression::CharacterType::Base; end + +# source://regexp_parser//lib/regexp_parser/expression/classes/free_space.rb#10 +class Regexp::Expression::Comment < ::Regexp::Expression::FreeSpace # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#35 def human_name; end - # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#148 + class << self + # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#132 + def comment?; end + end +end + +# source://regexp_parser//lib/regexp_parser/expression/classes/conditional.rb#4 +module Regexp::Expression::Conditional; end + +# source://regexp_parser//lib/regexp_parser/expression/classes/conditional.rb#20 +class Regexp::Expression::Conditional::Branch < ::Regexp::Expression::Sequence + # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#36 + def human_name; end +end + +# source://regexp_parser//lib/regexp_parser/expression/classes/conditional.rb#11 +class Regexp::Expression::Conditional::Condition < ::Regexp::Expression::Base + # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#37 + def human_name; end + + # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#149 def match_length; end # Name or number of the referenced capturing group that determines state. # Returns a String if reference is by name, Integer if by number. # - # source://regexp_parser//lib/regexp_parser/expression/classes/conditional.rb#12 + # source://regexp_parser//lib/regexp_parser/expression/classes/conditional.rb#14 def reference; end class << self - # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#141 + # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#143 def referential?; end end end -# source://regexp_parser//lib/regexp_parser/expression/classes/conditional.rb#20 +# source://regexp_parser//lib/regexp_parser/expression/classes/conditional.rb#22 class Regexp::Expression::Conditional::Expression < ::Regexp::Expression::Subexpression - # source://regexp_parser//lib/regexp_parser/expression/classes/conditional.rb#21 + # source://regexp_parser//lib/regexp_parser/expression/classes/conditional.rb#23 def <<(exp); end # @raise [TooManyBranches] # - # source://regexp_parser//lib/regexp_parser/expression/classes/conditional.rb#25 + # source://regexp_parser//lib/regexp_parser/expression/classes/conditional.rb#27 def add_sequence(active_opts = T.unsafe(nil), params = T.unsafe(nil)); end # @raise [TooManyBranches] # - # source://regexp_parser//lib/regexp_parser/expression/classes/conditional.rb#25 + # source://regexp_parser//lib/regexp_parser/expression/classes/conditional.rb#32 def branch(active_opts = T.unsafe(nil), params = T.unsafe(nil)); end - # source://regexp_parser//lib/regexp_parser/expression/classes/conditional.rb#41 + # source://regexp_parser//lib/regexp_parser/expression/classes/conditional.rb#43 def branches; end - # source://regexp_parser//lib/regexp_parser/expression/classes/conditional.rb#37 + # source://regexp_parser//lib/regexp_parser/expression/classes/conditional.rb#39 def condition; end - # source://regexp_parser//lib/regexp_parser/expression/classes/conditional.rb#32 + # source://regexp_parser//lib/regexp_parser/expression/classes/conditional.rb#34 def condition=(exp); end - # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#36 + # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#38 def human_name; end - # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#131 + # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#132 def match_length; end - # source://regexp_parser//lib/regexp_parser/expression/methods/parts.rb#17 + # source://regexp_parser//lib/regexp_parser/expression/methods/parts.rb#19 def parts; end - # source://regexp_parser//lib/regexp_parser/expression/classes/conditional.rb#45 + # source://regexp_parser//lib/regexp_parser/expression/classes/conditional.rb#47 def reference; end class << self - # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#142 + # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#144 def referential?; end end end -# source://regexp_parser//lib/regexp_parser/expression/classes/conditional.rb#3 +# source://regexp_parser//lib/regexp_parser/expression/classes/conditional.rb#5 class Regexp::Expression::Conditional::TooManyBranches < ::Regexp::Parser::Error # @return [TooManyBranches] a new instance of TooManyBranches # - # source://regexp_parser//lib/regexp_parser/expression/classes/conditional.rb#4 + # source://regexp_parser//lib/regexp_parser/expression/classes/conditional.rb#6 def initialize; end end # alias for symmetry between Token::* and Expression::* # -# source://regexp_parser//lib/regexp_parser/expression/classes/escape_sequence.rb#29 +# source://regexp_parser//lib/regexp_parser/expression/classes/escape_sequence.rb#32 Regexp::Expression::Escape = Regexp::Expression::EscapeSequence -# source://regexp_parser//lib/regexp_parser/expression/classes/escape_sequence.rb#2 +# source://regexp_parser//lib/regexp_parser/expression/classes/escape_sequence.rb#4 module Regexp::Expression::EscapeSequence; end -# source://regexp_parser//lib/regexp_parser/expression/classes/escape_sequence.rb#22 +# source://regexp_parser//lib/regexp_parser/expression/classes/escape_sequence.rb#25 class Regexp::Expression::EscapeSequence::AbstractMetaControlSequence < ::Regexp::Expression::EscapeSequence::Base private - # source://regexp_parser//lib/regexp_parser/expression/methods/escape_sequence_codepoint.rb#40 + # source://regexp_parser//lib/regexp_parser/expression/methods/escape_sequence_codepoint.rb#48 def control_sequence_to_s(control_sequence); end - # source://regexp_parser//lib/regexp_parser/expression/methods/escape_sequence_codepoint.rb#45 + # source://regexp_parser//lib/regexp_parser/expression/methods/escape_sequence_codepoint.rb#53 def meta_char_to_codepoint(meta_char); end end # \e # -# source://regexp_parser//lib/regexp_parser/expression/classes/escape_sequence.rb#5 +# source://regexp_parser//lib/regexp_parser/expression/classes/escape_sequence.rb#7 class Regexp::Expression::EscapeSequence::AsciiEscape < ::Regexp::Expression::EscapeSequence::Base - # source://regexp_parser//lib/regexp_parser/expression/methods/escape_sequence_codepoint.rb#2 + # source://regexp_parser//lib/regexp_parser/expression/methods/escape_sequence_codepoint.rb#4 def codepoint; end end # \b # -# source://regexp_parser//lib/regexp_parser/expression/classes/escape_sequence.rb#6 +# source://regexp_parser//lib/regexp_parser/expression/classes/escape_sequence.rb#8 class Regexp::Expression::EscapeSequence::Backspace < ::Regexp::Expression::EscapeSequence::Base - # source://regexp_parser//lib/regexp_parser/expression/methods/escape_sequence_codepoint.rb#3 + # source://regexp_parser//lib/regexp_parser/expression/methods/escape_sequence_codepoint.rb#5 def codepoint; end end -# source://regexp_parser//lib/regexp_parser/expression/classes/escape_sequence.rb#3 +# source://regexp_parser//lib/regexp_parser/expression/classes/escape_sequence.rb#5 class Regexp::Expression::EscapeSequence::Base < ::Regexp::Expression::Base - # source://regexp_parser//lib/regexp_parser/expression/methods/escape_sequence_char.rb#2 + # source://regexp_parser//lib/regexp_parser/expression/methods/escape_sequence_char.rb#4 def char; end - # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#98 + # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#99 def match_length; end end # \a # -# source://regexp_parser//lib/regexp_parser/expression/classes/escape_sequence.rb#7 +# source://regexp_parser//lib/regexp_parser/expression/classes/escape_sequence.rb#9 class Regexp::Expression::EscapeSequence::Bell < ::Regexp::Expression::EscapeSequence::Base - # source://regexp_parser//lib/regexp_parser/expression/methods/escape_sequence_codepoint.rb#4 + # source://regexp_parser//lib/regexp_parser/expression/methods/escape_sequence_codepoint.rb#6 def codepoint; end end # e.g. \u000A # -# source://regexp_parser//lib/regexp_parser/expression/classes/escape_sequence.rb#18 +# source://regexp_parser//lib/regexp_parser/expression/classes/escape_sequence.rb#20 class Regexp::Expression::EscapeSequence::Codepoint < ::Regexp::Expression::EscapeSequence::Base - # source://regexp_parser//lib/regexp_parser/expression/methods/escape_sequence_codepoint.rb#16 + # source://regexp_parser//lib/regexp_parser/expression/methods/escape_sequence_codepoint.rb#18 def codepoint; end end -# source://regexp_parser//lib/regexp_parser/expression/classes/escape_sequence.rb#20 +# source://regexp_parser//lib/regexp_parser/expression/classes/escape_sequence.rb#22 class Regexp::Expression::EscapeSequence::CodepointList < ::Regexp::Expression::EscapeSequence::Base - # source://regexp_parser//lib/regexp_parser/expression/methods/escape_sequence_codepoint.rb#20 + # source://regexp_parser//lib/regexp_parser/expression/methods/escape_sequence_codepoint.rb#28 def char; end - # source://regexp_parser//lib/regexp_parser/expression/methods/escape_sequence_codepoint.rb#28 + # source://regexp_parser//lib/regexp_parser/expression/methods/escape_sequence_codepoint.rb#36 def chars; end - # source://regexp_parser//lib/regexp_parser/expression/methods/escape_sequence_codepoint.rb#24 + # source://regexp_parser//lib/regexp_parser/expression/methods/escape_sequence_codepoint.rb#32 def codepoint; end - # source://regexp_parser//lib/regexp_parser/expression/methods/escape_sequence_codepoint.rb#32 + # source://regexp_parser//lib/regexp_parser/expression/methods/escape_sequence_codepoint.rb#40 def codepoints; end - # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#164 + # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#166 def match_length; end end # e.g. \cB # -# source://regexp_parser//lib/regexp_parser/expression/classes/escape_sequence.rb#23 +# source://regexp_parser//lib/regexp_parser/expression/classes/escape_sequence.rb#26 class Regexp::Expression::EscapeSequence::Control < ::Regexp::Expression::EscapeSequence::AbstractMetaControlSequence - # source://regexp_parser//lib/regexp_parser/expression/methods/escape_sequence_codepoint.rb#52 + # source://regexp_parser//lib/regexp_parser/expression/methods/escape_sequence_codepoint.rb#60 def codepoint; end end # \f # -# source://regexp_parser//lib/regexp_parser/expression/classes/escape_sequence.rb#8 +# source://regexp_parser//lib/regexp_parser/expression/classes/escape_sequence.rb#10 class Regexp::Expression::EscapeSequence::FormFeed < ::Regexp::Expression::EscapeSequence::Base - # source://regexp_parser//lib/regexp_parser/expression/methods/escape_sequence_codepoint.rb#5 + # source://regexp_parser//lib/regexp_parser/expression/methods/escape_sequence_codepoint.rb#7 def codepoint; end end # e.g. \x0A # -# source://regexp_parser//lib/regexp_parser/expression/classes/escape_sequence.rb#17 +# source://regexp_parser//lib/regexp_parser/expression/classes/escape_sequence.rb#19 class Regexp::Expression::EscapeSequence::Hex < ::Regexp::Expression::EscapeSequence::Base - # source://regexp_parser//lib/regexp_parser/expression/methods/escape_sequence_codepoint.rb#15 + # source://regexp_parser//lib/regexp_parser/expression/methods/escape_sequence_codepoint.rb#17 def codepoint; end end # e.g. \j, \@, \😀 (ineffectual escapes) # -# source://regexp_parser//lib/regexp_parser/expression/classes/escape_sequence.rb#14 +# source://regexp_parser//lib/regexp_parser/expression/classes/escape_sequence.rb#16 class Regexp::Expression::EscapeSequence::Literal < ::Regexp::Expression::EscapeSequence::Base - # source://regexp_parser//lib/regexp_parser/expression/methods/escape_sequence_codepoint.rb#11 + # source://regexp_parser//lib/regexp_parser/expression/methods/escape_sequence_codepoint.rb#13 def codepoint; end end # e.g. \M-Z # -# source://regexp_parser//lib/regexp_parser/expression/classes/escape_sequence.rb#24 +# source://regexp_parser//lib/regexp_parser/expression/classes/escape_sequence.rb#27 class Regexp::Expression::EscapeSequence::Meta < ::Regexp::Expression::EscapeSequence::AbstractMetaControlSequence - # source://regexp_parser//lib/regexp_parser/expression/methods/escape_sequence_codepoint.rb#58 + # source://regexp_parser//lib/regexp_parser/expression/methods/escape_sequence_codepoint.rb#66 def codepoint; end end # e.g. \M-\cX # -# source://regexp_parser//lib/regexp_parser/expression/classes/escape_sequence.rb#25 +# source://regexp_parser//lib/regexp_parser/expression/classes/escape_sequence.rb#28 class Regexp::Expression::EscapeSequence::MetaControl < ::Regexp::Expression::EscapeSequence::AbstractMetaControlSequence - # source://regexp_parser//lib/regexp_parser/expression/methods/escape_sequence_codepoint.rb#64 + # source://regexp_parser//lib/regexp_parser/expression/methods/escape_sequence_codepoint.rb#72 def codepoint; end end # \n # -# source://regexp_parser//lib/regexp_parser/expression/classes/escape_sequence.rb#9 +# source://regexp_parser//lib/regexp_parser/expression/classes/escape_sequence.rb#11 class Regexp::Expression::EscapeSequence::Newline < ::Regexp::Expression::EscapeSequence::Base - # source://regexp_parser//lib/regexp_parser/expression/methods/escape_sequence_codepoint.rb#6 + # source://regexp_parser//lib/regexp_parser/expression/methods/escape_sequence_codepoint.rb#8 def codepoint; end end # e.g. \012 # -# source://regexp_parser//lib/regexp_parser/expression/classes/escape_sequence.rb#16 +# source://regexp_parser//lib/regexp_parser/expression/classes/escape_sequence.rb#18 class Regexp::Expression::EscapeSequence::Octal < ::Regexp::Expression::EscapeSequence::Base - # source://regexp_parser//lib/regexp_parser/expression/methods/escape_sequence_codepoint.rb#13 + # source://regexp_parser//lib/regexp_parser/expression/methods/escape_sequence_codepoint.rb#15 def codepoint; end end # \r # -# source://regexp_parser//lib/regexp_parser/expression/classes/escape_sequence.rb#10 +# source://regexp_parser//lib/regexp_parser/expression/classes/escape_sequence.rb#12 class Regexp::Expression::EscapeSequence::Return < ::Regexp::Expression::EscapeSequence::Base - # source://regexp_parser//lib/regexp_parser/expression/methods/escape_sequence_codepoint.rb#7 + # source://regexp_parser//lib/regexp_parser/expression/methods/escape_sequence_codepoint.rb#9 def codepoint; end end # \t # -# source://regexp_parser//lib/regexp_parser/expression/classes/escape_sequence.rb#11 +# source://regexp_parser//lib/regexp_parser/expression/classes/escape_sequence.rb#13 class Regexp::Expression::EscapeSequence::Tab < ::Regexp::Expression::EscapeSequence::Base - # source://regexp_parser//lib/regexp_parser/expression/methods/escape_sequence_codepoint.rb#8 + # source://regexp_parser//lib/regexp_parser/expression/methods/escape_sequence_codepoint.rb#10 + def codepoint; end +end + +# e.g. \xE2\x82\xAC +# +# source://regexp_parser//lib/regexp_parser/expression/classes/escape_sequence.rb#23 +class Regexp::Expression::EscapeSequence::UTF8Hex < ::Regexp::Expression::EscapeSequence::Base + # source://regexp_parser//lib/regexp_parser/expression/methods/escape_sequence_codepoint.rb#21 def codepoint; end end # \v # -# source://regexp_parser//lib/regexp_parser/expression/classes/escape_sequence.rb#12 +# source://regexp_parser//lib/regexp_parser/expression/classes/escape_sequence.rb#14 class Regexp::Expression::EscapeSequence::VerticalTab < ::Regexp::Expression::EscapeSequence::Base - # source://regexp_parser//lib/regexp_parser/expression/methods/escape_sequence_codepoint.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/methods/escape_sequence_codepoint.rb#11 def codepoint; end end -# source://regexp_parser//lib/regexp_parser/expression/classes/free_space.rb#2 +# source://regexp_parser//lib/regexp_parser/expression/classes/free_space.rb#4 class Regexp::Expression::FreeSpace < ::Regexp::Expression::Base - # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#148 + # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#149 def match_length; end # @raise [Regexp::Parser::Error] # - # source://regexp_parser//lib/regexp_parser/expression/classes/free_space.rb#3 + # source://regexp_parser//lib/regexp_parser/expression/classes/free_space.rb#5 def quantify(*_args); end class << self - # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#135 + # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#137 def decorative?; end end end -# source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#2 +# source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#4 module Regexp::Expression::Group; end # Special case. Absence group can match 0.. chars, irrespective of content. # TODO: in theory, they *can* exclude match lengths with `.`: `(?~.{3})` # -# source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#19 +# source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#21 class Regexp::Expression::Group::Absence < ::Regexp::Expression::Group::Base - # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#172 + # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#174 def match_length; end end -# source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#20 +# source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#22 class Regexp::Expression::Group::Atomic < ::Regexp::Expression::Group::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#3 +# source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#5 class Regexp::Expression::Group::Base < ::Regexp::Expression::Subexpression - # source://regexp_parser//lib/regexp_parser/expression/methods/parts.rb#18 + # source://regexp_parser//lib/regexp_parser/expression/methods/parts.rb#20 def parts; end end -# source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#40 +# source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#42 class Regexp::Expression::Group::Capture < ::Regexp::Expression::Group::Base - # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#37 + # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#39 def human_name; end # Returns the value of attribute number. # - # source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#41 + # source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#44 def identifier; end # Returns the value of attribute number. # - # source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#41 + # source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#43 def number; end # Sets the attribute number # # @param value the value to set the attribute number to. # - # source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#41 + # source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#43 def number=(_arg0); end # Returns the value of attribute number_at_level. # - # source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#41 + # source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#43 def number_at_level; end # Sets the attribute number_at_level # # @param value the value to set the attribute number_at_level to. # - # source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#41 + # source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#43 def number_at_level=(_arg0); end class << self - # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#126 + # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#128 def capturing?; end end end -# source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#60 +# source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#62 class Regexp::Expression::Group::Comment < ::Regexp::Expression::Group::Base - # source://regexp_parser//lib/regexp_parser/expression/methods/parts.rb#20 + # source://regexp_parser//lib/regexp_parser/expression/methods/parts.rb#22 def parts; end class << self - # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#131 + # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#133 def comment?; end - # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#136 + # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#138 def decorative?; end end end -# source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#45 +# source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#47 class Regexp::Expression::Group::Named < ::Regexp::Expression::Group::Capture # @return [Named] a new instance of Named # - # source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#49 + # source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#51 def initialize(token, options = T.unsafe(nil)); end - # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#38 + # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#40 def human_name; end # Returns the value of attribute name. # - # source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#46 + # source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#49 def identifier; end # Returns the value of attribute name. # - # source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#46 + # source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#48 def name; end private - # source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#54 + # source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#56 def initialize_copy(orig); end end # TODO: should split off OptionsSwitch in v3.0.0. Maybe even make it no # longer inherit from Group because it is effectively a terminal expression. # -# source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#23 +# source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#25 class Regexp::Expression::Group::Options < ::Regexp::Expression::Group::Base # Returns the value of attribute option_changes. # - # source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#24 + # source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#26 def option_changes; end # Sets the attribute option_changes # # @param value the value to set the attribute option_changes to. # - # source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#24 + # source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#26 def option_changes=(_arg0); end - # source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#31 + # source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#33 def quantify(*args); end private - # source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#26 + # source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#28 def initialize_copy(orig); end end -# source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#6 +# source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#8 class Regexp::Expression::Group::Passive < ::Regexp::Expression::Group::Base # @return [Passive] a new instance of Passive # - # source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#11 def initialize(*_arg0); end # Sets the attribute implicit # # @param value the value to set the attribute implicit to. # - # source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#7 + # source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#9 def implicit=(_arg0); end # @return [Boolean] # - # source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#14 + # source://regexp_parser//lib/regexp_parser/expression/classes/group.rb#16 def implicit?; end - # source://regexp_parser//lib/regexp_parser/expression/methods/parts.rb#19 + # source://regexp_parser//lib/regexp_parser/expression/methods/parts.rb#21 def parts; end end -# source://regexp_parser//lib/regexp_parser/expression/classes/keep.rb#2 +# source://regexp_parser//lib/regexp_parser/expression/classes/keep.rb#4 module Regexp::Expression::Keep; end # TODO: in regexp_parser v3.0.0 this should possibly be a Subexpression # that contains all expressions to its left. # -# source://regexp_parser//lib/regexp_parser/expression/classes/keep.rb#5 +# source://regexp_parser//lib/regexp_parser/expression/classes/keep.rb#7 class Regexp::Expression::Keep::Mark < ::Regexp::Expression::Base - # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#39 + # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#41 def human_name; end - # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#148 + # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#149 def match_length; end end -# source://regexp_parser//lib/regexp_parser/expression/classes/literal.rb#2 +# source://regexp_parser//lib/regexp_parser/expression/classes/literal.rb#4 class Regexp::Expression::Literal < ::Regexp::Expression::Base - # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#40 + # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#42 def human_name; end - # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#105 + # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#107 def match_length; end end -# source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#85 +# source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#87 Regexp::Expression::MatchLength = Regexp::MatchLength -# source://regexp_parser//lib/regexp_parser/expression/classes/posix_class.rb#10 +# source://regexp_parser//lib/regexp_parser/expression/classes/posix_class.rb#12 Regexp::Expression::Nonposixclass = Regexp::Expression::PosixClass -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#118 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#120 Regexp::Expression::Nonproperty = Regexp::Expression::UnicodeProperty -# source://regexp_parser//lib/regexp_parser/expression/classes/posix_class.rb#2 +# source://regexp_parser//lib/regexp_parser/expression/classes/posix_class.rb#4 class Regexp::Expression::PosixClass < ::Regexp::Expression::Base - # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#98 + # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#99 def match_length; end - # source://regexp_parser//lib/regexp_parser/expression/classes/posix_class.rb#3 + # source://regexp_parser//lib/regexp_parser/expression/classes/posix_class.rb#5 def name; end - # source://regexp_parser//lib/regexp_parser/expression/methods/negative.rb#18 + # source://regexp_parser//lib/regexp_parser/expression/methods/negative.rb#20 def negative?; end end # alias for symmetry between token symbol and Expression class name # -# source://regexp_parser//lib/regexp_parser/expression/classes/posix_class.rb#9 +# source://regexp_parser//lib/regexp_parser/expression/classes/posix_class.rb#11 Regexp::Expression::Posixclass = Regexp::Expression::PosixClass # alias for symmetry between token symbol and Expression class name # -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#117 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#119 Regexp::Expression::Property = Regexp::Expression::UnicodeProperty # TODO: in v3.0.0, maybe put Shared back into Base, and inherit from Base and @@ -1190,160 +1198,160 @@ Regexp::Expression::Property = Regexp::Expression::UnicodeProperty # or introduce an Expression::Quantifiable intermediate class. # Or actually allow chaining as a more concise but tricky solution than PR#69. # -# source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#6 +# source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#8 class Regexp::Expression::Quantifier include ::Regexp::Expression::Shared extend ::Regexp::Expression::Shared::ClassMethods # @return [Quantifier] a new instance of Quantifier # - # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#11 + # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#13 def initialize(*args); end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#9 def conditional_level; end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#9 def conditional_level=(_arg0); end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#9 def custom_to_s_handling; end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#9 def custom_to_s_handling=(_arg0); end - # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#31 + # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#32 def greedy?; end - # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#31 + # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#38 def lazy?; end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#9 def level; end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#9 def level=(_arg0); end - # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#42 + # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#44 def max; end - # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#38 + # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#40 def min; end - # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#46 + # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#48 def mode; end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#14 + # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#9 def nesting_level; end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#9 def options; end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#9 def options=(_arg0); end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#9 def parent; end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#9 def parent=(_arg0); end - # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#31 + # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#32 def possessive?; end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#9 def pre_quantifier_decorations; end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#9 def pre_quantifier_decorations=(_arg0); end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#14 + # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#9 def quantifier; end - # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#31 + # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#32 def reluctant?; end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#9 def set_level; end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#9 def set_level=(_arg0); end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#9 def te; end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#9 def te=(_arg0); end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#9 def text; end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#9 def text=(_arg0); end - # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#19 + # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#21 def to_h; end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#9 def token; end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#9 def token=(_arg0); end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#9 def ts; end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#9 def ts=(_arg0); end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#9 def type; end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#9 def type=(_arg0); end private - # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#52 + # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#54 def deprecated_old_init(token, text, _min, _max, _mode = T.unsafe(nil)); end - # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#64 + # source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#66 def derived_data; end end -# source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#9 +# source://regexp_parser//lib/regexp_parser/expression/quantifier.rb#11 Regexp::Expression::Quantifier::MODES = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/expression/methods/referenced_expressions.rb#2 +# source://regexp_parser//lib/regexp_parser/expression/methods/referenced_expressions.rb#4 module Regexp::Expression::ReferencedExpressions - # source://regexp_parser//lib/regexp_parser/expression/methods/referenced_expressions.rb#5 + # source://regexp_parser//lib/regexp_parser/expression/methods/referenced_expressions.rb#7 def referenced_expression; end # Returns the value of attribute referenced_expressions. # - # source://regexp_parser//lib/regexp_parser/expression/methods/referenced_expressions.rb#3 + # source://regexp_parser//lib/regexp_parser/expression/methods/referenced_expressions.rb#5 def referenced_expressions; end # Sets the attribute referenced_expressions # # @param value the value to set the attribute referenced_expressions to. # - # source://regexp_parser//lib/regexp_parser/expression/methods/referenced_expressions.rb#3 + # source://regexp_parser//lib/regexp_parser/expression/methods/referenced_expressions.rb#5 def referenced_expressions=(_arg0); end private - # source://regexp_parser//lib/regexp_parser/expression/methods/referenced_expressions.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/methods/referenced_expressions.rb#11 def initialize_copy(orig); end end -# source://regexp_parser//lib/regexp_parser/expression/classes/root.rb#2 +# source://regexp_parser//lib/regexp_parser/expression/classes/root.rb#4 class Regexp::Expression::Root < ::Regexp::Expression::Subexpression - # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#41 + # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#43 def human_name; end class << self - # source://regexp_parser//lib/regexp_parser/expression/classes/root.rb#3 + # source://regexp_parser//lib/regexp_parser/expression/classes/root.rb#5 def build(options = T.unsafe(nil)); end end end @@ -1355,52 +1363,52 @@ end # Used as the base class for the Alternation alternatives, Conditional # branches, and CharacterSet::Intersection intersected sequences. # -# source://regexp_parser//lib/regexp_parser/expression/sequence.rb#8 +# source://regexp_parser//lib/regexp_parser/expression/sequence.rb#10 class Regexp::Expression::Sequence < ::Regexp::Expression::Subexpression - # source://regexp_parser//lib/regexp_parser/expression/sequence.rb#27 + # source://regexp_parser//lib/regexp_parser/expression/sequence.rb#29 def quantify(token, *args); end - # source://regexp_parser//lib/regexp_parser/expression/sequence.rb#23 + # source://regexp_parser//lib/regexp_parser/expression/sequence.rb#25 def ts; end class << self - # source://regexp_parser//lib/regexp_parser/expression/sequence.rb#10 + # source://regexp_parser//lib/regexp_parser/expression/sequence.rb#12 def add_to(exp, params = T.unsafe(nil), active_opts = T.unsafe(nil)); end end end # abstract class # -# source://regexp_parser//lib/regexp_parser/expression/sequence_operation.rb#3 +# source://regexp_parser//lib/regexp_parser/expression/sequence_operation.rb#5 class Regexp::Expression::SequenceOperation < ::Regexp::Expression::Subexpression - # source://regexp_parser//lib/regexp_parser/expression/sequence_operation.rb#12 + # source://regexp_parser//lib/regexp_parser/expression/sequence_operation.rb#14 def <<(exp); end - # source://regexp_parser//lib/regexp_parser/expression/sequence_operation.rb#16 + # source://regexp_parser//lib/regexp_parser/expression/sequence_operation.rb#18 def add_sequence(active_opts = T.unsafe(nil), params = T.unsafe(nil)); end - # source://regexp_parser//lib/regexp_parser/expression/subexpression.rb#5 + # source://regexp_parser//lib/regexp_parser/expression/sequence_operation.rb#7 def operands; end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/sequence_operation.rb#8 def operator; end - # source://regexp_parser//lib/regexp_parser/expression/methods/parts.rb#22 + # source://regexp_parser//lib/regexp_parser/expression/methods/parts.rb#24 def parts; end - # source://regexp_parser//lib/regexp_parser/expression/subexpression.rb#5 + # source://regexp_parser//lib/regexp_parser/expression/sequence_operation.rb#6 def sequences; end - # source://regexp_parser//lib/regexp_parser/expression/sequence_operation.rb#8 + # source://regexp_parser//lib/regexp_parser/expression/sequence_operation.rb#10 def ts; end end # alias for symmetry between token symbol and Expression class name # -# source://regexp_parser//lib/regexp_parser/expression/classes/character_set.rb#22 +# source://regexp_parser//lib/regexp_parser/expression/classes/character_set.rb#24 Regexp::Expression::Set = Regexp::Expression::CharacterSet -# source://regexp_parser//lib/regexp_parser/expression/shared.rb#2 +# source://regexp_parser//lib/regexp_parser/expression/shared.rb#4 module Regexp::Expression::Shared mixes_in_class_methods ::Regexp::Expression::Shared::ClassMethods @@ -1409,7 +1417,7 @@ module Regexp::Expression::Shared # When changing the conditions, please make sure to update # #pretty_print_instance_variables so that it includes all relevant values. # - # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#101 + # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#103 def ==(other); end # Deep-compare two expressions for equality. @@ -1417,25 +1425,25 @@ module Regexp::Expression::Shared # When changing the conditions, please make sure to update # #pretty_print_instance_variables so that it includes all relevant values. # - # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#101 + # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#110 def ===(other); end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#51 + # source://regexp_parser//lib/regexp_parser/expression/shared.rb#53 def base_length; end - # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#124 + # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#126 def capturing?; end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#96 + # source://regexp_parser//lib/regexp_parser/expression/shared.rb#99 def coded_offset; end - # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#128 + # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#130 def comment?; end - # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#133 + # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#135 def decorative?; end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#47 + # source://regexp_parser//lib/regexp_parser/expression/shared.rb#49 def ends_at(include_quantifier = T.unsafe(nil)); end # Deep-compare two expressions for equality. @@ -1443,18 +1451,18 @@ module Regexp::Expression::Shared # When changing the conditions, please make sure to update # #pretty_print_instance_variables so that it includes all relevant values. # - # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#101 + # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#111 def eql?(other); end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#55 + # source://regexp_parser//lib/regexp_parser/expression/shared.rb#57 def full_length; end # default implementation, e.g. "atomic group", "hex escape", "word type", .. # - # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#4 + # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#6 def human_name; end - # source://regexp_parser//lib/regexp_parser/expression/methods/printing.rb#3 + # source://regexp_parser//lib/regexp_parser/expression/methods/printing.rb#5 def inspect; end # Test if this expression has the given test_token, and optionally a given @@ -1477,25 +1485,25 @@ module Regexp::Expression::Shared # # @return [Boolean] # - # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#36 + # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#38 def is?(test_token, test_type = T.unsafe(nil)); end # not an alias so as to respect overrides of #negative? # # @return [Boolean] # - # source://regexp_parser//lib/regexp_parser/expression/methods/negative.rb#8 + # source://regexp_parser//lib/regexp_parser/expression/methods/negative.rb#10 def negated?; end # @return [Boolean] # - # source://regexp_parser//lib/regexp_parser/expression/methods/negative.rb#3 + # source://regexp_parser//lib/regexp_parser/expression/methods/negative.rb#5 def negative?; end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#100 + # source://regexp_parser//lib/regexp_parser/expression/shared.rb#103 def nesting_level=(lvl); end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#92 + # source://regexp_parser//lib/regexp_parser/expression/shared.rb#95 def offset; end # Test if this expression matches an entry in the given scope spec. @@ -1534,50 +1542,50 @@ module Regexp::Expression::Shared # # @return [Boolean] # - # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#75 + # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#77 def one_of?(scope, top = T.unsafe(nil)); end # @return [Boolean] # - # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#111 + # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#113 def optional?; end # default implementation # - # source://regexp_parser//lib/regexp_parser/expression/methods/parts.rb#4 + # source://regexp_parser//lib/regexp_parser/expression/methods/parts.rb#6 def parts; end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#84 + # source://regexp_parser//lib/regexp_parser/expression/shared.rb#87 def pre_quantifier_decoration(expression_format = T.unsafe(nil)); end # Make pretty-print work despite #inspect implementation. # - # source://regexp_parser//lib/regexp_parser/expression/methods/printing.rb#12 + # source://regexp_parser//lib/regexp_parser/expression/methods/printing.rb#14 def pretty_print(q); end # Called by pretty_print (ruby/pp) and #inspect. # - # source://regexp_parser//lib/regexp_parser/expression/methods/printing.rb#17 + # source://regexp_parser//lib/regexp_parser/expression/methods/printing.rb#19 def pretty_print_instance_variables; end # @return [Boolean] # - # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#115 + # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#117 def quantified?; end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#106 + # source://regexp_parser//lib/regexp_parser/expression/shared.rb#109 def quantifier=(qtf); end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#88 + # source://regexp_parser//lib/regexp_parser/expression/shared.rb#91 def quantifier_affix(expression_format = T.unsafe(nil)); end - # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#138 + # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#140 def referential?; end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#43 + # source://regexp_parser//lib/regexp_parser/expression/shared.rb#45 def starts_at; end - # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#120 + # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#122 def terminal?; end # #to_s reproduces the original source, as an unparser would. @@ -1593,7 +1601,7 @@ module Regexp::Expression::Shared # lit.to_s(:base) # => 'a' # without quantifier # lit.to_s(:original) # => 'a +' # with quantifier AND intermittent decorations # - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#72 + # source://regexp_parser//lib/regexp_parser/expression/shared.rb#74 def to_s(format = T.unsafe(nil)); end # #to_s reproduces the original source, as an unparser would. @@ -1609,10 +1617,10 @@ module Regexp::Expression::Shared # lit.to_s(:base) # => 'a' # without quantifier # lit.to_s(:original) # => 'a +' # with quantifier AND intermittent decorations # - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#72 + # source://regexp_parser//lib/regexp_parser/expression/shared.rb#85 def to_str(format = T.unsafe(nil)); end - # source://regexp_parser//lib/regexp_parser/expression/methods/construct.rb#37 + # source://regexp_parser//lib/regexp_parser/expression/methods/construct.rb#39 def token_class; end # Test if this expression has the given test_type, which can be either @@ -1626,83 +1634,83 @@ module Regexp::Expression::Shared # # @return [Boolean] # - # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#13 + # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#15 def type?(test_type); end private - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#18 + # source://regexp_parser//lib/regexp_parser/expression/shared.rb#20 def init_from_token_and_options(token, options = T.unsafe(nil)); end - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#32 + # source://regexp_parser//lib/regexp_parser/expression/shared.rb#34 def initialize_copy(orig); end - # source://regexp_parser//lib/regexp_parser/expression/methods/parts.rb#10 + # source://regexp_parser//lib/regexp_parser/expression/methods/parts.rb#12 def intersperse(expressions, separator); end class << self # @private # - # source://regexp_parser//lib/regexp_parser/expression/shared.rb#5 + # source://regexp_parser//lib/regexp_parser/expression/shared.rb#7 def included(mod); end end end # filled in ./methods/*.rb # -# source://regexp_parser//lib/regexp_parser/expression/shared.rb#3 +# source://regexp_parser//lib/regexp_parser/expression/shared.rb#5 module Regexp::Expression::Shared::ClassMethods - # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#125 + # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#127 def capturing?; end - # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#129 + # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#131 def comment?; end # Convenience method to init a valid Expression without a Regexp::Token # # @raise [ArgumentError] # - # source://regexp_parser//lib/regexp_parser/expression/methods/construct.rb#5 + # source://regexp_parser//lib/regexp_parser/expression/methods/construct.rb#7 def construct(params = T.unsafe(nil)); end - # source://regexp_parser//lib/regexp_parser/expression/methods/construct.rb#15 + # source://regexp_parser//lib/regexp_parser/expression/methods/construct.rb#17 def construct_defaults; end - # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#134 + # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#136 def decorative?; end - # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#139 + # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#141 def referential?; end - # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#121 + # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#123 def terminal?; end - # source://regexp_parser//lib/regexp_parser/expression/methods/construct.rb#25 + # source://regexp_parser//lib/regexp_parser/expression/methods/construct.rb#27 def token_class; end end -# source://regexp_parser//lib/regexp_parser/expression/subexpression.rb#2 +# source://regexp_parser//lib/regexp_parser/expression/subexpression.rb#4 class Regexp::Expression::Subexpression < ::Regexp::Expression::Base include ::Enumerable # @return [Subexpression] a new instance of Subexpression # - # source://regexp_parser//lib/regexp_parser/expression/subexpression.rb#7 + # source://regexp_parser//lib/regexp_parser/expression/subexpression.rb#9 def initialize(token, options = T.unsafe(nil)); end - # source://regexp_parser//lib/regexp_parser/expression/subexpression.rb#20 + # source://regexp_parser//lib/regexp_parser/expression/subexpression.rb#22 def <<(exp); end - # source://regexp_parser//lib/regexp_parser/expression/subexpression.rb#27 + # source://regexp_parser//lib/regexp_parser/expression/subexpression.rb#28 def [](*args, &block); end - # source://regexp_parser//lib/regexp_parser/expression/subexpression.rb#27 + # source://regexp_parser//lib/regexp_parser/expression/subexpression.rb#28 def at(*args, &block); end - # source://regexp_parser//lib/regexp_parser/expression/subexpression.rb#33 + # source://regexp_parser//lib/regexp_parser/expression/subexpression.rb#35 def dig(*indices); end - # source://regexp_parser//lib/regexp_parser/expression/subexpression.rb#27 + # source://regexp_parser//lib/regexp_parser/expression/subexpression.rb#28 def each(*args, &block); end # Traverses the expression, passing each recursive child to the @@ -1710,68 +1718,68 @@ class Regexp::Expression::Subexpression < ::Regexp::Expression::Base # If the block takes two arguments, the indices of the children within # their parents are also passed to it. # - # source://regexp_parser//lib/regexp_parser/expression/methods/traverse.rb#8 + # source://regexp_parser//lib/regexp_parser/expression/methods/traverse.rb#10 def each_expression(include_self = T.unsafe(nil), &block); end - # source://regexp_parser//lib/regexp_parser/expression/subexpression.rb#27 + # source://regexp_parser//lib/regexp_parser/expression/subexpression.rb#28 def empty?(*args, &block); end # Returns the value of attribute expressions. # - # source://regexp_parser//lib/regexp_parser/expression/subexpression.rb#5 + # source://regexp_parser//lib/regexp_parser/expression/subexpression.rb#7 def expressions; end # Sets the attribute expressions # # @param value the value to set the attribute expressions to. # - # source://regexp_parser//lib/regexp_parser/expression/subexpression.rb#5 + # source://regexp_parser//lib/regexp_parser/expression/subexpression.rb#7 def expressions=(_arg0); end - # source://regexp_parser//lib/regexp_parser/expression/subexpression.rb#50 + # source://regexp_parser//lib/regexp_parser/expression/subexpression.rb#52 def extract_quantifier_target(quantifier_description); end - # source://regexp_parser//lib/regexp_parser/expression/subexpression.rb#27 + # source://regexp_parser//lib/regexp_parser/expression/subexpression.rb#28 def fetch(*args, &block); end # Returns a new array with the results of calling the given block once # for every expression. If a block is not given, returns an array with # each expression and its level index as an array. # - # source://regexp_parser//lib/regexp_parser/expression/methods/traverse.rb#56 + # source://regexp_parser//lib/regexp_parser/expression/methods/traverse.rb#58 def flat_map(include_self = T.unsafe(nil), &block); end - # source://regexp_parser//lib/regexp_parser/expression/subexpression.rb#27 + # source://regexp_parser//lib/regexp_parser/expression/subexpression.rb#28 def index(*args, &block); end - # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#118 + # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#120 def inner_match_length; end - # source://regexp_parser//lib/regexp_parser/expression/subexpression.rb#27 + # source://regexp_parser//lib/regexp_parser/expression/subexpression.rb#28 def join(*args, &block); end - # source://regexp_parser//lib/regexp_parser/expression/subexpression.rb#27 + # source://regexp_parser//lib/regexp_parser/expression/subexpression.rb#28 def last(*args, &block); end - # source://regexp_parser//lib/regexp_parser/expression/subexpression.rb#27 + # source://regexp_parser//lib/regexp_parser/expression/subexpression.rb#28 def length(*args, &block); end - # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#111 + # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#113 def match_length; end - # source://regexp_parser//lib/regexp_parser/expression/methods/parts.rb#21 + # source://regexp_parser//lib/regexp_parser/expression/methods/parts.rb#23 def parts; end - # source://regexp_parser//lib/regexp_parser/expression/methods/strfregexp.rb#102 + # source://regexp_parser//lib/regexp_parser/expression/methods/strfregexp.rb#114 def strfre_tree(format = T.unsafe(nil), include_self = T.unsafe(nil), separator = T.unsafe(nil)); end - # source://regexp_parser//lib/regexp_parser/expression/methods/strfregexp.rb#102 + # source://regexp_parser//lib/regexp_parser/expression/methods/strfregexp.rb#104 def strfregexp_tree(format = T.unsafe(nil), include_self = T.unsafe(nil), separator = T.unsafe(nil)); end - # source://regexp_parser//lib/regexp_parser/expression/subexpression.rb#39 + # source://regexp_parser//lib/regexp_parser/expression/subexpression.rb#41 def te; end - # source://regexp_parser//lib/regexp_parser/expression/subexpression.rb#43 + # source://regexp_parser//lib/regexp_parser/expression/subexpression.rb#45 def to_h; end # Traverses the subexpression (depth-first, pre-order) and calls the given @@ -1787,10 +1795,10 @@ class Regexp::Expression::Subexpression < ::Regexp::Expression::Base # # Returns self. # - # source://regexp_parser//lib/regexp_parser/expression/methods/traverse.rb#32 + # source://regexp_parser//lib/regexp_parser/expression/methods/traverse.rb#34 def traverse(include_self = T.unsafe(nil), &block); end - # source://regexp_parser//lib/regexp_parser/expression/subexpression.rb#27 + # source://regexp_parser//lib/regexp_parser/expression/subexpression.rb#28 def values_at(*args, &block); end # Traverses the subexpression (depth-first, pre-order) and calls the given @@ -1806,285 +1814,285 @@ class Regexp::Expression::Subexpression < ::Regexp::Expression::Base # # Returns self. # - # source://regexp_parser//lib/regexp_parser/expression/methods/traverse.rb#32 + # source://regexp_parser//lib/regexp_parser/expression/methods/traverse.rb#53 def walk(include_self = T.unsafe(nil), &block); end protected - # source://regexp_parser//lib/regexp_parser/expression/methods/traverse.rb#66 + # source://regexp_parser//lib/regexp_parser/expression/methods/traverse.rb#68 def each_expression_with_index(&block); end - # source://regexp_parser//lib/regexp_parser/expression/methods/traverse.rb#73 + # source://regexp_parser//lib/regexp_parser/expression/methods/traverse.rb#75 def each_expression_without_index(&block); end private # Override base method to clone the expressions as well. # - # source://regexp_parser//lib/regexp_parser/expression/subexpression.rb#13 + # source://regexp_parser//lib/regexp_parser/expression/subexpression.rb#15 def initialize_copy(orig); end class << self - # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#122 + # source://regexp_parser//lib/regexp_parser/expression/methods/tests.rb#124 def terminal?; end end end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#2 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#4 module Regexp::Expression::UnicodeProperty; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#108 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#110 class Regexp::Expression::UnicodeProperty::Age < ::Regexp::Expression::UnicodeProperty::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#13 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#15 class Regexp::Expression::UnicodeProperty::Alnum < ::Regexp::Expression::UnicodeProperty::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#14 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#16 class Regexp::Expression::UnicodeProperty::Alpha < ::Regexp::Expression::UnicodeProperty::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#31 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#33 class Regexp::Expression::UnicodeProperty::Any < ::Regexp::Expression::UnicodeProperty::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#15 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#17 class Regexp::Expression::UnicodeProperty::Ascii < ::Regexp::Expression::UnicodeProperty::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#32 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#34 class Regexp::Expression::UnicodeProperty::Assigned < ::Regexp::Expression::UnicodeProperty::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#3 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#5 class Regexp::Expression::UnicodeProperty::Base < ::Regexp::Expression::Base - # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#98 + # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#99 def match_length; end - # source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#4 + # source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#6 def name; end - # source://regexp_parser//lib/regexp_parser/expression/methods/negative.rb#19 + # source://regexp_parser//lib/regexp_parser/expression/methods/negative.rb#21 def negative?; end - # source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#8 + # source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#10 def shortcut; end end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#16 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#18 class Regexp::Expression::UnicodeProperty::Blank < ::Regexp::Expression::UnicodeProperty::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#109 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#111 class Regexp::Expression::UnicodeProperty::Block < ::Regexp::Expression::UnicodeProperty::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#17 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#19 class Regexp::Expression::UnicodeProperty::Cntrl < ::Regexp::Expression::UnicodeProperty::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#97 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#99 module Regexp::Expression::UnicodeProperty::Codepoint; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#100 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#102 class Regexp::Expression::UnicodeProperty::Codepoint::Any < ::Regexp::Expression::UnicodeProperty::Codepoint::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#98 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#100 class Regexp::Expression::UnicodeProperty::Codepoint::Base < ::Regexp::Expression::UnicodeProperty::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#101 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#103 class Regexp::Expression::UnicodeProperty::Codepoint::Control < ::Regexp::Expression::UnicodeProperty::Codepoint::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#102 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#104 class Regexp::Expression::UnicodeProperty::Codepoint::Format < ::Regexp::Expression::UnicodeProperty::Codepoint::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#104 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#106 class Regexp::Expression::UnicodeProperty::Codepoint::PrivateUse < ::Regexp::Expression::UnicodeProperty::Codepoint::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#103 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#105 class Regexp::Expression::UnicodeProperty::Codepoint::Surrogate < ::Regexp::Expression::UnicodeProperty::Codepoint::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#105 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#107 class Regexp::Expression::UnicodeProperty::Codepoint::Unassigned < ::Regexp::Expression::UnicodeProperty::Codepoint::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#110 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#112 class Regexp::Expression::UnicodeProperty::Derived < ::Regexp::Expression::UnicodeProperty::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#18 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#20 class Regexp::Expression::UnicodeProperty::Digit < ::Regexp::Expression::UnicodeProperty::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#111 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#113 class Regexp::Expression::UnicodeProperty::Emoji < ::Regexp::Expression::UnicodeProperty::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#112 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#114 class Regexp::Expression::UnicodeProperty::Enumerated < ::Regexp::Expression::UnicodeProperty::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#19 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#21 class Regexp::Expression::UnicodeProperty::Graph < ::Regexp::Expression::UnicodeProperty::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#34 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#36 module Regexp::Expression::UnicodeProperty::Letter; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#37 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#39 class Regexp::Expression::UnicodeProperty::Letter::Any < ::Regexp::Expression::UnicodeProperty::Letter::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#35 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#37 class Regexp::Expression::UnicodeProperty::Letter::Base < ::Regexp::Expression::UnicodeProperty::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#38 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#40 class Regexp::Expression::UnicodeProperty::Letter::Cased < ::Regexp::Expression::UnicodeProperty::Letter::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#40 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#42 class Regexp::Expression::UnicodeProperty::Letter::Lowercase < ::Regexp::Expression::UnicodeProperty::Letter::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#42 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#44 class Regexp::Expression::UnicodeProperty::Letter::Modifier < ::Regexp::Expression::UnicodeProperty::Letter::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#43 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#45 class Regexp::Expression::UnicodeProperty::Letter::Other < ::Regexp::Expression::UnicodeProperty::Letter::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#41 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#43 class Regexp::Expression::UnicodeProperty::Letter::Titlecase < ::Regexp::Expression::UnicodeProperty::Letter::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#39 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#41 class Regexp::Expression::UnicodeProperty::Letter::Uppercase < ::Regexp::Expression::UnicodeProperty::Letter::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#20 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#22 class Regexp::Expression::UnicodeProperty::Lower < ::Regexp::Expression::UnicodeProperty::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#46 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#48 module Regexp::Expression::UnicodeProperty::Mark; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#49 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#51 class Regexp::Expression::UnicodeProperty::Mark::Any < ::Regexp::Expression::UnicodeProperty::Mark::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#47 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#49 class Regexp::Expression::UnicodeProperty::Mark::Base < ::Regexp::Expression::UnicodeProperty::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#50 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#52 class Regexp::Expression::UnicodeProperty::Mark::Combining < ::Regexp::Expression::UnicodeProperty::Mark::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#53 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#55 class Regexp::Expression::UnicodeProperty::Mark::Enclosing < ::Regexp::Expression::UnicodeProperty::Mark::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#51 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#53 class Regexp::Expression::UnicodeProperty::Mark::Nonspacing < ::Regexp::Expression::UnicodeProperty::Mark::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#52 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#54 class Regexp::Expression::UnicodeProperty::Mark::Spacing < ::Regexp::Expression::UnicodeProperty::Mark::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#29 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#31 class Regexp::Expression::UnicodeProperty::Newline < ::Regexp::Expression::UnicodeProperty::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#56 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#58 module Regexp::Expression::UnicodeProperty::Number; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#59 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#61 class Regexp::Expression::UnicodeProperty::Number::Any < ::Regexp::Expression::UnicodeProperty::Number::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#57 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#59 class Regexp::Expression::UnicodeProperty::Number::Base < ::Regexp::Expression::UnicodeProperty::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#60 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#62 class Regexp::Expression::UnicodeProperty::Number::Decimal < ::Regexp::Expression::UnicodeProperty::Number::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#61 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#63 class Regexp::Expression::UnicodeProperty::Number::Letter < ::Regexp::Expression::UnicodeProperty::Number::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#62 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#64 class Regexp::Expression::UnicodeProperty::Number::Other < ::Regexp::Expression::UnicodeProperty::Number::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#21 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#23 class Regexp::Expression::UnicodeProperty::Print < ::Regexp::Expression::UnicodeProperty::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#22 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#24 class Regexp::Expression::UnicodeProperty::Punct < ::Regexp::Expression::UnicodeProperty::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#65 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#67 module Regexp::Expression::UnicodeProperty::Punctuation; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#68 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#70 class Regexp::Expression::UnicodeProperty::Punctuation::Any < ::Regexp::Expression::UnicodeProperty::Punctuation::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#66 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#68 class Regexp::Expression::UnicodeProperty::Punctuation::Base < ::Regexp::Expression::UnicodeProperty::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#72 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#74 class Regexp::Expression::UnicodeProperty::Punctuation::Close < ::Regexp::Expression::UnicodeProperty::Punctuation::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#69 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#71 class Regexp::Expression::UnicodeProperty::Punctuation::Connector < ::Regexp::Expression::UnicodeProperty::Punctuation::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#70 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#72 class Regexp::Expression::UnicodeProperty::Punctuation::Dash < ::Regexp::Expression::UnicodeProperty::Punctuation::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#74 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#76 class Regexp::Expression::UnicodeProperty::Punctuation::Final < ::Regexp::Expression::UnicodeProperty::Punctuation::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#73 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#75 class Regexp::Expression::UnicodeProperty::Punctuation::Initial < ::Regexp::Expression::UnicodeProperty::Punctuation::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#71 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#73 class Regexp::Expression::UnicodeProperty::Punctuation::Open < ::Regexp::Expression::UnicodeProperty::Punctuation::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#75 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#77 class Regexp::Expression::UnicodeProperty::Punctuation::Other < ::Regexp::Expression::UnicodeProperty::Punctuation::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#113 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#115 class Regexp::Expression::UnicodeProperty::Script < ::Regexp::Expression::UnicodeProperty::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#78 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#80 module Regexp::Expression::UnicodeProperty::Separator; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#81 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#83 class Regexp::Expression::UnicodeProperty::Separator::Any < ::Regexp::Expression::UnicodeProperty::Separator::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#79 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#81 class Regexp::Expression::UnicodeProperty::Separator::Base < ::Regexp::Expression::UnicodeProperty::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#83 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#85 class Regexp::Expression::UnicodeProperty::Separator::Line < ::Regexp::Expression::UnicodeProperty::Separator::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#84 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#86 class Regexp::Expression::UnicodeProperty::Separator::Paragraph < ::Regexp::Expression::UnicodeProperty::Separator::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#82 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#84 class Regexp::Expression::UnicodeProperty::Separator::Space < ::Regexp::Expression::UnicodeProperty::Separator::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#23 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#25 class Regexp::Expression::UnicodeProperty::Space < ::Regexp::Expression::UnicodeProperty::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#87 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#89 module Regexp::Expression::UnicodeProperty::Symbol; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#90 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#92 class Regexp::Expression::UnicodeProperty::Symbol::Any < ::Regexp::Expression::UnicodeProperty::Symbol::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#88 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#90 class Regexp::Expression::UnicodeProperty::Symbol::Base < ::Regexp::Expression::UnicodeProperty::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#92 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#94 class Regexp::Expression::UnicodeProperty::Symbol::Currency < ::Regexp::Expression::UnicodeProperty::Symbol::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#91 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#93 class Regexp::Expression::UnicodeProperty::Symbol::Math < ::Regexp::Expression::UnicodeProperty::Symbol::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#93 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#95 class Regexp::Expression::UnicodeProperty::Symbol::Modifier < ::Regexp::Expression::UnicodeProperty::Symbol::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#94 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#96 class Regexp::Expression::UnicodeProperty::Symbol::Other < ::Regexp::Expression::UnicodeProperty::Symbol::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#24 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#26 class Regexp::Expression::UnicodeProperty::Upper < ::Regexp::Expression::UnicodeProperty::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#25 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#27 class Regexp::Expression::UnicodeProperty::Word < ::Regexp::Expression::UnicodeProperty::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#27 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#29 class Regexp::Expression::UnicodeProperty::XPosixPunct < ::Regexp::Expression::UnicodeProperty::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#26 +# source://regexp_parser//lib/regexp_parser/expression/classes/unicode_property.rb#28 class Regexp::Expression::UnicodeProperty::Xdigit < ::Regexp::Expression::UnicodeProperty::Base; end -# source://regexp_parser//lib/regexp_parser/expression/classes/free_space.rb#11 +# source://regexp_parser//lib/regexp_parser/expression/classes/free_space.rb#13 class Regexp::Expression::WhiteSpace < ::Regexp::Expression::FreeSpace - # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#42 + # source://regexp_parser//lib/regexp_parser/expression/methods/human_name.rb#44 def human_name; end - # source://regexp_parser//lib/regexp_parser/expression/classes/free_space.rb#12 + # source://regexp_parser//lib/regexp_parser/expression/classes/free_space.rb#14 def merge(exp); end end @@ -2093,554 +2101,564 @@ end # normalizes tokens for the parser, and checks if they are implemented by the # given syntax flavor. # -# source://regexp_parser//lib/regexp_parser/lexer.rb#5 +# source://regexp_parser//lib/regexp_parser/lexer.rb#7 class Regexp::Lexer - # source://regexp_parser//lib/regexp_parser/lexer.rb#71 + # source://regexp_parser//lib/regexp_parser/lexer.rb#73 def emit(token); end - # source://regexp_parser//lib/regexp_parser/lexer.rb#20 + # source://regexp_parser//lib/regexp_parser/lexer.rb#22 def lex(input, syntax = T.unsafe(nil), options: T.unsafe(nil), collect_tokens: T.unsafe(nil), &block); end private - # source://regexp_parser//lib/regexp_parser/lexer.rb#91 + # source://regexp_parser//lib/regexp_parser/lexer.rb#93 def ascend(type, token); end # Returns the value of attribute block. # - # source://regexp_parser//lib/regexp_parser/lexer.rb#87 + # source://regexp_parser//lib/regexp_parser/lexer.rb#89 def block; end # Sets the attribute block # # @param value the value to set the attribute block to. # - # source://regexp_parser//lib/regexp_parser/lexer.rb#87 + # source://regexp_parser//lib/regexp_parser/lexer.rb#89 def block=(_arg0); end # if a codepoint list is followed by a quantifier, that quantifier applies # to the last codepoint, e.g. /\u{61 62 63}{3}/ =~ 'abccc' # c.f. #break_literal. # - # source://regexp_parser//lib/regexp_parser/lexer.rb#143 + # source://regexp_parser//lib/regexp_parser/lexer.rb#145 def break_codepoint_list(token); end # called by scan to break a literal run that is longer than one character # into two separate tokens when it is followed by a quantifier # - # source://regexp_parser//lib/regexp_parser/lexer.rb#123 + # source://regexp_parser//lib/regexp_parser/lexer.rb#125 def break_literal(token); end # Returns the value of attribute collect_tokens. # - # source://regexp_parser//lib/regexp_parser/lexer.rb#87 + # source://regexp_parser//lib/regexp_parser/lexer.rb#89 def collect_tokens; end # Sets the attribute collect_tokens # # @param value the value to set the attribute collect_tokens to. # - # source://regexp_parser//lib/regexp_parser/lexer.rb#87 + # source://regexp_parser//lib/regexp_parser/lexer.rb#89 def collect_tokens=(_arg0); end # Returns the value of attribute conditional_nesting. # - # source://regexp_parser//lib/regexp_parser/lexer.rb#87 + # source://regexp_parser//lib/regexp_parser/lexer.rb#89 def conditional_nesting; end # Sets the attribute conditional_nesting # # @param value the value to set the attribute conditional_nesting to. # - # source://regexp_parser//lib/regexp_parser/lexer.rb#87 + # source://regexp_parser//lib/regexp_parser/lexer.rb#89 def conditional_nesting=(_arg0); end - # source://regexp_parser//lib/regexp_parser/lexer.rb#106 + # source://regexp_parser//lib/regexp_parser/lexer.rb#108 def descend(type, token); end - # source://regexp_parser//lib/regexp_parser/lexer.rb#162 + # source://regexp_parser//lib/regexp_parser/lexer.rb#164 def merge_condition(current, last); end # Returns the value of attribute nesting. # - # source://regexp_parser//lib/regexp_parser/lexer.rb#87 + # source://regexp_parser//lib/regexp_parser/lexer.rb#89 def nesting; end # Sets the attribute nesting # # @param value the value to set the attribute nesting to. # - # source://regexp_parser//lib/regexp_parser/lexer.rb#87 + # source://regexp_parser//lib/regexp_parser/lexer.rb#89 def nesting=(_arg0); end # Returns the value of attribute preprev_token. # - # source://regexp_parser//lib/regexp_parser/lexer.rb#87 + # source://regexp_parser//lib/regexp_parser/lexer.rb#89 def preprev_token; end # Sets the attribute preprev_token # # @param value the value to set the attribute preprev_token to. # - # source://regexp_parser//lib/regexp_parser/lexer.rb#87 + # source://regexp_parser//lib/regexp_parser/lexer.rb#89 def preprev_token=(_arg0); end # Returns the value of attribute prev_token. # - # source://regexp_parser//lib/regexp_parser/lexer.rb#87 + # source://regexp_parser//lib/regexp_parser/lexer.rb#89 def prev_token; end # Sets the attribute prev_token # # @param value the value to set the attribute prev_token to. # - # source://regexp_parser//lib/regexp_parser/lexer.rb#87 + # source://regexp_parser//lib/regexp_parser/lexer.rb#89 def prev_token=(_arg0); end # Returns the value of attribute set_nesting. # - # source://regexp_parser//lib/regexp_parser/lexer.rb#87 + # source://regexp_parser//lib/regexp_parser/lexer.rb#89 def set_nesting; end # Sets the attribute set_nesting # # @param value the value to set the attribute set_nesting to. # - # source://regexp_parser//lib/regexp_parser/lexer.rb#87 + # source://regexp_parser//lib/regexp_parser/lexer.rb#89 def set_nesting=(_arg0); end # Returns the value of attribute shift. # - # source://regexp_parser//lib/regexp_parser/lexer.rb#87 + # source://regexp_parser//lib/regexp_parser/lexer.rb#89 def shift; end # Sets the attribute shift # # @param value the value to set the attribute shift to. # - # source://regexp_parser//lib/regexp_parser/lexer.rb#87 + # source://regexp_parser//lib/regexp_parser/lexer.rb#89 def shift=(_arg0); end # Returns the value of attribute tokens. # - # source://regexp_parser//lib/regexp_parser/lexer.rb#87 + # source://regexp_parser//lib/regexp_parser/lexer.rb#89 def tokens; end # Sets the attribute tokens # # @param value the value to set the attribute tokens to. # - # source://regexp_parser//lib/regexp_parser/lexer.rb#87 + # source://regexp_parser//lib/regexp_parser/lexer.rb#89 def tokens=(_arg0); end class << self - # source://regexp_parser//lib/regexp_parser/lexer.rb#16 + # source://regexp_parser//lib/regexp_parser/lexer.rb#18 def lex(input, syntax = T.unsafe(nil), options: T.unsafe(nil), collect_tokens: T.unsafe(nil), &block); end - # source://regexp_parser//lib/regexp_parser/lexer.rb#16 + # source://regexp_parser//lib/regexp_parser/lexer.rb#84 def scan(input, syntax = T.unsafe(nil), options: T.unsafe(nil), collect_tokens: T.unsafe(nil), &block); end end end -# source://regexp_parser//lib/regexp_parser/lexer.rb#12 +# source://regexp_parser//lib/regexp_parser/lexer.rb#14 Regexp::Lexer::CLOSING_TOKENS = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/lexer.rb#14 +# source://regexp_parser//lib/regexp_parser/lexer.rb#16 Regexp::Lexer::CONDITION_TOKENS = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/lexer.rb#7 +# source://regexp_parser//lib/regexp_parser/lexer.rb#9 Regexp::Lexer::OPENING_TOKENS = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#1 +# source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#3 class Regexp::MatchLength include ::Enumerable # @return [MatchLength] a new instance of MatchLength # - # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#9 + # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#11 def initialize(exp, opts = T.unsafe(nil)); end - # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#24 + # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#26 def each(opts = T.unsafe(nil)); end - # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#35 + # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#37 def endless_each; end # @return [Boolean] # - # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#44 + # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#46 def fixed?; end # @return [Boolean] # - # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#40 + # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#42 def include?(length); end - # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#60 + # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#62 def inspect; end - # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#52 + # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#54 def max; end - # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#48 + # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#50 def min; end - # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#56 + # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#58 def minmax; end - # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#65 + # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#67 def to_re; end private # Returns the value of attribute base_max. # - # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#71 + # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#73 def base_max; end # Sets the attribute base_max # # @param value the value to set the attribute base_max to. # - # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#71 + # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#73 def base_max=(_arg0); end # Returns the value of attribute base_min. # - # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#71 + # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#73 def base_min; end # Sets the attribute base_min # # @param value the value to set the attribute base_min to. # - # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#71 + # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#73 def base_min=(_arg0); end # Returns the value of attribute exp_class. # - # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#71 + # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#73 def exp_class; end # Sets the attribute exp_class # # @param value the value to set the attribute exp_class to. # - # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#71 + # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#73 def exp_class=(_arg0); end # Returns the value of attribute max_rep. # - # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#71 + # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#73 def max_rep; end # Sets the attribute max_rep # # @param value the value to set the attribute max_rep to. # - # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#71 + # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#73 def max_rep=(_arg0); end # Returns the value of attribute min_rep. # - # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#71 + # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#73 def min_rep; end # Sets the attribute min_rep # # @param value the value to set the attribute min_rep to. # - # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#71 + # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#73 def min_rep=(_arg0); end # Returns the value of attribute reify. # - # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#71 + # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#73 def reify; end # Sets the attribute reify # # @param value the value to set the attribute reify to. # - # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#71 + # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#73 def reify=(_arg0); end - # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#74 + # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#76 def test_regexp; end class << self - # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#4 + # source://regexp_parser//lib/regexp_parser/expression/methods/match_length.rb#6 def of(obj); end end end -# source://regexp_parser//lib/regexp_parser/version.rb#2 +# source://regexp_parser//lib/regexp_parser/version.rb#4 class Regexp::Parser include ::Regexp::Expression - # source://regexp_parser//lib/regexp_parser/parser.rb#25 + # source://regexp_parser//lib/regexp_parser/parser.rb#27 def parse(input, syntax = T.unsafe(nil), options: T.unsafe(nil), &block); end private - # source://regexp_parser//lib/regexp_parser/parser.rb#574 + # source://regexp_parser//lib/regexp_parser/parser.rb#577 def active_opts; end - # source://regexp_parser//lib/regexp_parser/parser.rb#99 + # source://regexp_parser//lib/regexp_parser/parser.rb#101 def anchor(token); end - # source://regexp_parser//lib/regexp_parser/parser.rb#262 + # source://regexp_parser//lib/regexp_parser/parser.rb#264 def assign_effective_number(exp); end # Assigns referenced expressions to referring expressions, e.g. if there is # an instance of Backreference::Number, its #referenced_expression is set to # the instance of Group::Capture that it refers to via its number. # - # source://regexp_parser//lib/regexp_parser/parser.rb#581 + # source://regexp_parser//lib/regexp_parser/parser.rb#584 def assign_referenced_expressions; end - # source://regexp_parser//lib/regexp_parser/parser.rb#227 + # source://regexp_parser//lib/regexp_parser/parser.rb#229 def backref(token); end - # source://regexp_parser//lib/regexp_parser/parser.rb#202 + # source://regexp_parser//lib/regexp_parser/parser.rb#204 def captured_group_count_at_level; end # Returns the value of attribute captured_group_counts. # - # source://regexp_parser//lib/regexp_parser/parser.rb#56 + # source://regexp_parser//lib/regexp_parser/parser.rb#58 def captured_group_counts; end # Sets the attribute captured_group_counts # # @param value the value to set the attribute captured_group_counts to. # - # source://regexp_parser//lib/regexp_parser/parser.rb#56 + # source://regexp_parser//lib/regexp_parser/parser.rb#58 def captured_group_counts=(_arg0); end - # source://regexp_parser//lib/regexp_parser/parser.rb#570 + # source://regexp_parser//lib/regexp_parser/parser.rb#573 def close_completed_character_set_range; end - # source://regexp_parser//lib/regexp_parser/parser.rb#210 + # source://regexp_parser//lib/regexp_parser/parser.rb#212 def close_group; end - # source://regexp_parser//lib/regexp_parser/parser.rb#538 + # source://regexp_parser//lib/regexp_parser/parser.rb#541 def close_set; end - # source://regexp_parser//lib/regexp_parser/parser.rb#269 + # source://regexp_parser//lib/regexp_parser/parser.rb#271 def conditional(token); end # Returns the value of attribute conditional_nesting. # - # source://regexp_parser//lib/regexp_parser/parser.rb#56 + # source://regexp_parser//lib/regexp_parser/parser.rb#58 def conditional_nesting; end # Sets the attribute conditional_nesting # # @param value the value to set the attribute conditional_nesting to. # - # source://regexp_parser//lib/regexp_parser/parser.rb#56 + # source://regexp_parser//lib/regexp_parser/parser.rb#58 def conditional_nesting=(_arg0); end - # source://regexp_parser//lib/regexp_parser/parser.rb#206 + # source://regexp_parser//lib/regexp_parser/parser.rb#208 def count_captured_group; end # @yield [node] # - # source://regexp_parser//lib/regexp_parser/parser.rb#216 + # source://regexp_parser//lib/regexp_parser/parser.rb#218 def decrease_nesting; end - # source://regexp_parser//lib/regexp_parser/parser.rb#305 + # source://regexp_parser//lib/regexp_parser/parser.rb#307 def escape(token); end - # source://regexp_parser//lib/regexp_parser/parser.rb#60 + # source://regexp_parser//lib/regexp_parser/parser.rb#62 def extract_options(input, options); end - # source://regexp_parser//lib/regexp_parser/parser.rb#349 + # source://regexp_parser//lib/regexp_parser/parser.rb#352 def free_space(token); end - # source://regexp_parser//lib/regexp_parser/parser.rb#114 + # source://regexp_parser//lib/regexp_parser/parser.rb#116 def group(token); end - # source://regexp_parser//lib/regexp_parser/parser.rb#509 + # source://regexp_parser//lib/regexp_parser/parser.rb#512 def increase_group_level(exp); end - # source://regexp_parser//lib/regexp_parser/parser.rb#549 + # source://regexp_parser//lib/regexp_parser/parser.rb#552 def intersection(token); end - # source://regexp_parser//lib/regexp_parser/parser.rb#360 + # source://regexp_parser//lib/regexp_parser/parser.rb#363 def keep(token); end - # source://regexp_parser//lib/regexp_parser/parser.rb#364 + # source://regexp_parser//lib/regexp_parser/parser.rb#367 def literal(token); end - # source://regexp_parser//lib/regexp_parser/parser.rb#368 + # source://regexp_parser//lib/regexp_parser/parser.rb#371 def meta(token); end - # source://regexp_parser//lib/regexp_parser/parser.rb#534 + # source://regexp_parser//lib/regexp_parser/parser.rb#537 def negate_set; end - # source://regexp_parser//lib/regexp_parser/parser.rb#299 + # source://regexp_parser//lib/regexp_parser/parser.rb#301 def nest(exp); end - # source://regexp_parser//lib/regexp_parser/parser.rb#294 + # source://regexp_parser//lib/regexp_parser/parser.rb#296 def nest_conditional(exp); end # Returns the value of attribute nesting. # - # source://regexp_parser//lib/regexp_parser/parser.rb#56 + # source://regexp_parser//lib/regexp_parser/parser.rb#58 def nesting; end # Sets the attribute nesting # # @param value the value to set the attribute nesting to. # - # source://regexp_parser//lib/regexp_parser/parser.rb#56 + # source://regexp_parser//lib/regexp_parser/parser.rb#58 def nesting=(_arg0); end # Returns the value of attribute node. # - # source://regexp_parser//lib/regexp_parser/parser.rb#56 + # source://regexp_parser//lib/regexp_parser/parser.rb#58 def node; end # Sets the attribute node # # @param value the value to set the attribute node to. # - # source://regexp_parser//lib/regexp_parser/parser.rb#56 + # source://regexp_parser//lib/regexp_parser/parser.rb#58 def node=(_arg0); end - # source://regexp_parser//lib/regexp_parser/parser.rb#165 + # source://regexp_parser//lib/regexp_parser/parser.rb#167 def open_group(token); end - # source://regexp_parser//lib/regexp_parser/parser.rb#527 + # source://regexp_parser//lib/regexp_parser/parser.rb#530 def open_set(token); end - # source://regexp_parser//lib/regexp_parser/parser.rb#130 + # source://regexp_parser//lib/regexp_parser/parser.rb#132 def options_group(token); end # Returns the value of attribute options_stack. # - # source://regexp_parser//lib/regexp_parser/parser.rb#56 + # source://regexp_parser//lib/regexp_parser/parser.rb#58 def options_stack; end # Sets the attribute options_stack # # @param value the value to set the attribute options_stack to. # - # source://regexp_parser//lib/regexp_parser/parser.rb#56 + # source://regexp_parser//lib/regexp_parser/parser.rb#58 def options_stack=(_arg0); end - # source://regexp_parser//lib/regexp_parser/parser.rb#76 + # source://regexp_parser//lib/regexp_parser/parser.rb#78 def parse_token(token); end - # source://regexp_parser//lib/regexp_parser/parser.rb#390 + # source://regexp_parser//lib/regexp_parser/parser.rb#393 def posixclass(token); end - # source://regexp_parser//lib/regexp_parser/parser.rb#397 + # source://regexp_parser//lib/regexp_parser/parser.rb#400 def property(token); end - # source://regexp_parser//lib/regexp_parser/parser.rb#479 + # source://regexp_parser//lib/regexp_parser/parser.rb#482 def quantifier(token); end - # source://regexp_parser//lib/regexp_parser/parser.rb#542 + # source://regexp_parser//lib/regexp_parser/parser.rb#545 def range(token); end # Returns the value of attribute root. # - # source://regexp_parser//lib/regexp_parser/parser.rb#56 + # source://regexp_parser//lib/regexp_parser/parser.rb#58 def root; end # Sets the attribute root # # @param value the value to set the attribute root to. # - # source://regexp_parser//lib/regexp_parser/parser.rb#56 + # source://regexp_parser//lib/regexp_parser/parser.rb#58 def root=(_arg0); end - # source://regexp_parser//lib/regexp_parser/parser.rb#379 + # source://regexp_parser//lib/regexp_parser/parser.rb#382 def sequence_operation(klass, token); end - # source://regexp_parser//lib/regexp_parser/parser.rb#515 + # source://regexp_parser//lib/regexp_parser/parser.rb#518 def set(token); end # Returns the value of attribute switching_options. # - # source://regexp_parser//lib/regexp_parser/parser.rb#56 + # source://regexp_parser//lib/regexp_parser/parser.rb#58 def switching_options; end # Sets the attribute switching_options # # @param value the value to set the attribute switching_options to. # - # source://regexp_parser//lib/regexp_parser/parser.rb#56 + # source://regexp_parser//lib/regexp_parser/parser.rb#58 def switching_options=(_arg0); end - # source://regexp_parser//lib/regexp_parser/parser.rb#198 + # source://regexp_parser//lib/regexp_parser/parser.rb#200 def total_captured_group_count; end - # source://regexp_parser//lib/regexp_parser/parser.rb#553 + # source://regexp_parser//lib/regexp_parser/parser.rb#556 def type(token); end class << self - # source://regexp_parser//lib/regexp_parser/parser.rb#21 + # source://regexp_parser//lib/regexp_parser/parser.rb#23 def parse(input, syntax = T.unsafe(nil), options: T.unsafe(nil), &block); end end end -# source://regexp_parser//lib/regexp_parser/parser.rb#128 +# source://regexp_parser//lib/regexp_parser/parser.rb#130 Regexp::Parser::ENC_FLAGS = T.let(T.unsafe(nil), Array) # base class for all gem-specific errors # -# source://regexp_parser//lib/regexp_parser/error.rb#3 +# source://regexp_parser//lib/regexp_parser/error.rb#5 class Regexp::Parser::Error < ::StandardError; end -# source://regexp_parser//lib/regexp_parser/parser.rb#127 +# source://regexp_parser//lib/regexp_parser/parser.rb#129 Regexp::Parser::MOD_FLAGS = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/parser.rb#7 +# source://regexp_parser//lib/regexp_parser/parser.rb#9 class Regexp::Parser::ParserError < ::Regexp::Parser::Error; end -# source://regexp_parser//lib/regexp_parser/parser.rb#394 +# source://regexp_parser//lib/regexp_parser/parser.rb#397 Regexp::Parser::UP = Regexp::Expression::UnicodeProperty -# source://regexp_parser//lib/regexp_parser/parser.rb#395 +# source://regexp_parser//lib/regexp_parser/parser.rb#398 Regexp::Parser::UPTokens = Regexp::Syntax::Token::UnicodeProperty -# source://regexp_parser//lib/regexp_parser/parser.rb#15 +# source://regexp_parser//lib/regexp_parser/parser.rb#17 class Regexp::Parser::UnknownTokenError < ::Regexp::Parser::ParserError # @return [UnknownTokenError] a new instance of UnknownTokenError # - # source://regexp_parser//lib/regexp_parser/parser.rb#16 + # source://regexp_parser//lib/regexp_parser/parser.rb#18 def initialize(type, token); end end -# source://regexp_parser//lib/regexp_parser/parser.rb#9 +# source://regexp_parser//lib/regexp_parser/parser.rb#11 class Regexp::Parser::UnknownTokenTypeError < ::Regexp::Parser::ParserError # @return [UnknownTokenTypeError] a new instance of UnknownTokenTypeError # - # source://regexp_parser//lib/regexp_parser/parser.rb#10 + # source://regexp_parser//lib/regexp_parser/parser.rb#12 def initialize(type, token); end end -# source://regexp_parser//lib/regexp_parser/version.rb#3 +# source://regexp_parser//lib/regexp_parser/version.rb#5 Regexp::Parser::VERSION = T.let(T.unsafe(nil), String) -# source://regexp_parser//lib/regexp_parser/scanner/errors/scanner_error.rb#3 +# source://regexp_parser//lib/regexp_parser/scanner/errors/scanner_error.rb#5 class Regexp::Scanner + # only public for #||= to work on ruby <= 2.5 + # + # source://regexp_parser//lib/regexp_parser/scanner.rb#2417 + def capturing_group_count; end + + # only public for #||= to work on ruby <= 2.5 + # + # source://regexp_parser//lib/regexp_parser/scanner.rb#2417 + def capturing_group_count=(_arg0); end + # Emits an array with the details of the scanned pattern # - # source://regexp_parser//lib/regexp_parser/scanner.rb#2363 + # source://regexp_parser//lib/regexp_parser/scanner.rb#2392 def emit(type, token, text); end # only public for #||= to work on ruby <= 2.5 # - # source://regexp_parser//lib/regexp_parser/scanner.rb#2388 + # source://regexp_parser//lib/regexp_parser/scanner.rb#2417 def literal_run; end # only public for #||= to work on ruby <= 2.5 # - # source://regexp_parser//lib/regexp_parser/scanner.rb#2388 + # source://regexp_parser//lib/regexp_parser/scanner.rb#2417 def literal_run=(_arg0); end # @raise [PrematureEndError] @@ -2653,170 +2671,182 @@ class Regexp::Scanner # Appends one or more characters to the literal buffer, to be emitted later # by a call to emit_literal. # - # source://regexp_parser//lib/regexp_parser/scanner.rb#2425 + # source://regexp_parser//lib/regexp_parser/scanner.rb#2463 def append_literal(data, ts, te); end # Returns the value of attribute block. # - # source://regexp_parser//lib/regexp_parser/scanner.rb#2392 + # source://regexp_parser//lib/regexp_parser/scanner.rb#2421 def block; end # Sets the attribute block # # @param value the value to set the attribute block to. # - # source://regexp_parser//lib/regexp_parser/scanner.rb#2392 + # source://regexp_parser//lib/regexp_parser/scanner.rb#2421 def block=(_arg0); end # Returns the value of attribute char_pos. # - # source://regexp_parser//lib/regexp_parser/scanner.rb#2392 + # source://regexp_parser//lib/regexp_parser/scanner.rb#2421 def char_pos; end # Sets the attribute char_pos # # @param value the value to set the attribute char_pos to. # - # source://regexp_parser//lib/regexp_parser/scanner.rb#2392 + # source://regexp_parser//lib/regexp_parser/scanner.rb#2421 def char_pos=(_arg0); end # Returns the value of attribute collect_tokens. # - # source://regexp_parser//lib/regexp_parser/scanner.rb#2392 + # source://regexp_parser//lib/regexp_parser/scanner.rb#2421 def collect_tokens; end # Sets the attribute collect_tokens # # @param value the value to set the attribute collect_tokens to. # - # source://regexp_parser//lib/regexp_parser/scanner.rb#2392 + # source://regexp_parser//lib/regexp_parser/scanner.rb#2421 def collect_tokens=(_arg0); end # Returns the value of attribute conditional_stack. # - # source://regexp_parser//lib/regexp_parser/scanner.rb#2392 + # source://regexp_parser//lib/regexp_parser/scanner.rb#2421 def conditional_stack; end # Sets the attribute conditional_stack # # @param value the value to set the attribute conditional_stack to. # - # source://regexp_parser//lib/regexp_parser/scanner.rb#2392 + # source://regexp_parser//lib/regexp_parser/scanner.rb#2421 def conditional_stack=(_arg0); end # Copy from ts to te from data as text # - # source://regexp_parser//lib/regexp_parser/scanner.rb#2419 + # source://regexp_parser//lib/regexp_parser/scanner.rb#2457 def copy(data, ts, te); end # Emits the literal run collected by calls to the append_literal method. # - # source://regexp_parser//lib/regexp_parser/scanner.rb#2430 + # source://regexp_parser//lib/regexp_parser/scanner.rb#2468 def emit_literal; end - # source://regexp_parser//lib/regexp_parser/scanner.rb#2465 + # source://regexp_parser//lib/regexp_parser/scanner.rb#2503 def emit_meta_control_sequence(data, ts, te, token); end - # source://regexp_parser//lib/regexp_parser/scanner.rb#2436 + # source://regexp_parser//lib/regexp_parser/scanner.rb#2474 def emit_options(text); end + # source://regexp_parser//lib/regexp_parser/scanner.rb#2428 + def extract_encoding(input_object, options); end + # Returns the value of attribute free_spacing. # - # source://regexp_parser//lib/regexp_parser/scanner.rb#2392 + # source://regexp_parser//lib/regexp_parser/scanner.rb#2421 def free_spacing; end # Sets the attribute free_spacing # # @param value the value to set the attribute free_spacing to. # - # source://regexp_parser//lib/regexp_parser/scanner.rb#2392 + # source://regexp_parser//lib/regexp_parser/scanner.rb#2421 def free_spacing=(_arg0); end # @return [Boolean] # - # source://regexp_parser//lib/regexp_parser/scanner.rb#2398 + # source://regexp_parser//lib/regexp_parser/scanner.rb#2436 def free_spacing?(input_object, options); end # Returns the value of attribute group_depth. # - # source://regexp_parser//lib/regexp_parser/scanner.rb#2392 + # source://regexp_parser//lib/regexp_parser/scanner.rb#2421 def group_depth; end # Sets the attribute group_depth # # @param value the value to set the attribute group_depth to. # - # source://regexp_parser//lib/regexp_parser/scanner.rb#2392 + # source://regexp_parser//lib/regexp_parser/scanner.rb#2421 def group_depth=(_arg0); end # @return [Boolean] # - # source://regexp_parser//lib/regexp_parser/scanner.rb#2410 + # source://regexp_parser//lib/regexp_parser/scanner.rb#2448 def in_group?; end # @return [Boolean] # - # source://regexp_parser//lib/regexp_parser/scanner.rb#2414 + # source://regexp_parser//lib/regexp_parser/scanner.rb#2452 def in_set?; end # Returns the value of attribute prev_token. # - # source://regexp_parser//lib/regexp_parser/scanner.rb#2392 + # source://regexp_parser//lib/regexp_parser/scanner.rb#2421 def prev_token; end # Sets the attribute prev_token # # @param value the value to set the attribute prev_token to. # - # source://regexp_parser//lib/regexp_parser/scanner.rb#2392 + # source://regexp_parser//lib/regexp_parser/scanner.rb#2421 def prev_token=(_arg0); end + # Returns the value of attribute regexp_encoding. + # + # source://regexp_parser//lib/regexp_parser/scanner.rb#2421 + def regexp_encoding; end + + # Sets the attribute regexp_encoding + # + # @param value the value to set the attribute regexp_encoding to. + # + # source://regexp_parser//lib/regexp_parser/scanner.rb#2421 + def regexp_encoding=(_arg0); end + # Returns the value of attribute set_depth. # - # source://regexp_parser//lib/regexp_parser/scanner.rb#2392 + # source://regexp_parser//lib/regexp_parser/scanner.rb#2421 def set_depth; end # Sets the attribute set_depth # # @param value the value to set the attribute set_depth to. # - # source://regexp_parser//lib/regexp_parser/scanner.rb#2392 + # source://regexp_parser//lib/regexp_parser/scanner.rb#2421 def set_depth=(_arg0); end # Returns the value of attribute spacing_stack. # - # source://regexp_parser//lib/regexp_parser/scanner.rb#2392 + # source://regexp_parser//lib/regexp_parser/scanner.rb#2421 def spacing_stack; end # Sets the attribute spacing_stack # # @param value the value to set the attribute spacing_stack to. # - # source://regexp_parser//lib/regexp_parser/scanner.rb#2392 + # source://regexp_parser//lib/regexp_parser/scanner.rb#2421 def spacing_stack=(_arg0); end # Returns the value of attribute tokens. # - # source://regexp_parser//lib/regexp_parser/scanner.rb#2392 + # source://regexp_parser//lib/regexp_parser/scanner.rb#2421 def tokens; end # Sets the attribute tokens # # @param value the value to set the attribute tokens to. # - # source://regexp_parser//lib/regexp_parser/scanner.rb#2392 + # source://regexp_parser//lib/regexp_parser/scanner.rb#2421 def tokens=(_arg0); end class << self - # source://regexp_parser//lib/regexp_parser/scanner.rb#2349 + # source://regexp_parser//lib/regexp_parser/scanner.rb#2377 def long_prop_map; end - # source://regexp_parser//lib/regexp_parser/scanner.rb#2353 + # source://regexp_parser//lib/regexp_parser/scanner.rb#2381 def parse_prop_map(name); end - # source://regexp_parser//lib/regexp_parser/scanner.rb#2357 - def posix_classes; end - # Scans the given regular expression text, or Regexp object and collects the # emitted token into an array that gets returned at the end. If a block is # given, it gets called for each emitted token. @@ -2829,98 +2859,103 @@ class Regexp::Scanner # lazy-load property maps when first needed # - # source://regexp_parser//lib/regexp_parser/scanner.rb#2345 + # source://regexp_parser//lib/regexp_parser/scanner.rb#2373 def short_prop_map; end end end # Invalid back reference. Used for name a number refs/calls. # -# source://regexp_parser//lib/regexp_parser/scanner/errors/validation_error.rb#44 +# source://regexp_parser//lib/regexp_parser/scanner/errors/validation_error.rb#46 class Regexp::Scanner::InvalidBackrefError < ::Regexp::Scanner::ValidationError # @return [InvalidBackrefError] a new instance of InvalidBackrefError # - # source://regexp_parser//lib/regexp_parser/scanner/errors/validation_error.rb#45 + # source://regexp_parser//lib/regexp_parser/scanner/errors/validation_error.rb#47 def initialize(what, reason); end end # Invalid group. Used for named groups. # -# source://regexp_parser//lib/regexp_parser/scanner/errors/validation_error.rb#29 +# source://regexp_parser//lib/regexp_parser/scanner/errors/validation_error.rb#31 class Regexp::Scanner::InvalidGroupError < ::Regexp::Scanner::ValidationError # @return [InvalidGroupError] a new instance of InvalidGroupError # - # source://regexp_parser//lib/regexp_parser/scanner/errors/validation_error.rb#30 + # source://regexp_parser//lib/regexp_parser/scanner/errors/validation_error.rb#32 def initialize(what, reason); end end # Invalid groupOption. Used for inline options. # TODO: should become InvalidGroupOptionError in v3.0.0 for consistency # -# source://regexp_parser//lib/regexp_parser/scanner/errors/validation_error.rb#37 +# source://regexp_parser//lib/regexp_parser/scanner/errors/validation_error.rb#39 class Regexp::Scanner::InvalidGroupOption < ::Regexp::Scanner::ValidationError # @return [InvalidGroupOption] a new instance of InvalidGroupOption # - # source://regexp_parser//lib/regexp_parser/scanner/errors/validation_error.rb#38 + # source://regexp_parser//lib/regexp_parser/scanner/errors/validation_error.rb#40 def initialize(option, text); end end # Invalid sequence format. Used for escape sequences, mainly. # -# source://regexp_parser//lib/regexp_parser/scanner/errors/validation_error.rb#22 +# source://regexp_parser//lib/regexp_parser/scanner/errors/validation_error.rb#24 class Regexp::Scanner::InvalidSequenceError < ::Regexp::Scanner::ValidationError # @return [InvalidSequenceError] a new instance of InvalidSequenceError # - # source://regexp_parser//lib/regexp_parser/scanner/errors/validation_error.rb#23 + # source://regexp_parser//lib/regexp_parser/scanner/errors/validation_error.rb#25 def initialize(what = T.unsafe(nil), where = T.unsafe(nil)); end end +# Use each_with_object for required_ruby_version >= 2.2,or #to_h for >= 2.6 +# +# source://regexp_parser//lib/regexp_parser/scanner.rb#2386 +Regexp::Scanner::POSIX_CLASSES = T.let(T.unsafe(nil), Hash) + # Unexpected end of pattern # -# source://regexp_parser//lib/regexp_parser/scanner/errors/premature_end_error.rb#3 +# source://regexp_parser//lib/regexp_parser/scanner/errors/premature_end_error.rb#5 class Regexp::Scanner::PrematureEndError < ::Regexp::Scanner::ScannerError # @return [PrematureEndError] a new instance of PrematureEndError # - # source://regexp_parser//lib/regexp_parser/scanner/errors/premature_end_error.rb#4 + # source://regexp_parser//lib/regexp_parser/scanner/errors/premature_end_error.rb#6 def initialize(where = T.unsafe(nil)); end end # General scanner error (catch all) # -# source://regexp_parser//lib/regexp_parser/scanner/errors/scanner_error.rb#5 +# source://regexp_parser//lib/regexp_parser/scanner/errors/scanner_error.rb#7 class Regexp::Scanner::ScannerError < ::Regexp::Parser::Error; end # The POSIX class name was not recognized by the scanner. # -# source://regexp_parser//lib/regexp_parser/scanner/errors/validation_error.rb#58 +# source://regexp_parser//lib/regexp_parser/scanner/errors/validation_error.rb#60 class Regexp::Scanner::UnknownPosixClassError < ::Regexp::Scanner::ValidationError # @return [UnknownPosixClassError] a new instance of UnknownPosixClassError # - # source://regexp_parser//lib/regexp_parser/scanner/errors/validation_error.rb#59 + # source://regexp_parser//lib/regexp_parser/scanner/errors/validation_error.rb#61 def initialize(text, _); end end # The property name was not recognized by the scanner. # -# source://regexp_parser//lib/regexp_parser/scanner/errors/validation_error.rb#51 +# source://regexp_parser//lib/regexp_parser/scanner/errors/validation_error.rb#53 class Regexp::Scanner::UnknownUnicodePropertyError < ::Regexp::Scanner::ValidationError # @return [UnknownUnicodePropertyError] a new instance of UnknownUnicodePropertyError # - # source://regexp_parser//lib/regexp_parser/scanner/errors/validation_error.rb#52 + # source://regexp_parser//lib/regexp_parser/scanner/errors/validation_error.rb#54 def initialize(name, _); end end # Base for all scanner validation errors # -# source://regexp_parser//lib/regexp_parser/scanner/errors/validation_error.rb#3 +# source://regexp_parser//lib/regexp_parser/scanner/errors/validation_error.rb#5 class Regexp::Scanner::ValidationError < ::Regexp::Scanner::ScannerError class << self # Centralizes and unifies the handling of validation related errors. # - # source://regexp_parser//lib/regexp_parser/scanner/errors/validation_error.rb#5 + # source://regexp_parser//lib/regexp_parser/scanner/errors/validation_error.rb#7 def for(type, problem, reason = T.unsafe(nil)); end - # source://regexp_parser//lib/regexp_parser/scanner/errors/validation_error.rb#9 + # source://regexp_parser//lib/regexp_parser/scanner/errors/validation_error.rb#11 def types; end end end @@ -2928,65 +2963,65 @@ end # After loading all the tokens the map is full. Extract all tokens and types # into the All and Types constants. # -# source://regexp_parser//lib/regexp_parser/syntax.rb#3 +# source://regexp_parser//lib/regexp_parser/syntax.rb#5 module Regexp::Syntax private - # source://regexp_parser//lib/regexp_parser/syntax/version_lookup.rb#61 + # source://regexp_parser//lib/regexp_parser/syntax/version_lookup.rb#63 def comparable(name); end - # source://regexp_parser//lib/regexp_parser/syntax/version_lookup.rb#44 + # source://regexp_parser//lib/regexp_parser/syntax/version_lookup.rb#46 def const_missing(const_name); end - # source://regexp_parser//lib/regexp_parser/syntax/version_lookup.rb#51 + # source://regexp_parser//lib/regexp_parser/syntax/version_lookup.rb#53 def fallback_version_class(version); end # Returns the syntax specification class for the given syntax # version name. The special names 'any' and '*' return Syntax::Any. # - # source://regexp_parser//lib/regexp_parser/syntax/version_lookup.rb#22 + # source://regexp_parser//lib/regexp_parser/syntax/version_lookup.rb#24 def for(name); end - # source://regexp_parser//lib/regexp_parser/syntax/version_lookup.rb#26 + # source://regexp_parser//lib/regexp_parser/syntax/version_lookup.rb#28 def new(name); end - # source://regexp_parser//lib/regexp_parser/syntax/version_lookup.rb#57 + # source://regexp_parser//lib/regexp_parser/syntax/version_lookup.rb#59 def specified_versions; end - # source://regexp_parser//lib/regexp_parser/syntax/version_lookup.rb#32 + # source://regexp_parser//lib/regexp_parser/syntax/version_lookup.rb#34 def supported?(name); end - # source://regexp_parser//lib/regexp_parser/syntax/version_lookup.rb#36 + # source://regexp_parser//lib/regexp_parser/syntax/version_lookup.rb#38 def version_class(version); end class << self - # source://regexp_parser//lib/regexp_parser/syntax/version_lookup.rb#61 + # source://regexp_parser//lib/regexp_parser/syntax/version_lookup.rb#63 def comparable(name); end - # source://regexp_parser//lib/regexp_parser/syntax/version_lookup.rb#44 + # source://regexp_parser//lib/regexp_parser/syntax/version_lookup.rb#46 def const_missing(const_name); end - # source://regexp_parser//lib/regexp_parser/syntax/version_lookup.rb#51 + # source://regexp_parser//lib/regexp_parser/syntax/version_lookup.rb#53 def fallback_version_class(version); end # Returns the syntax specification class for the given syntax # version name. The special names 'any' and '*' return Syntax::Any. # - # source://regexp_parser//lib/regexp_parser/syntax/version_lookup.rb#22 + # source://regexp_parser//lib/regexp_parser/syntax/version_lookup.rb#24 def for(name); end - # source://regexp_parser//lib/regexp_parser/syntax/version_lookup.rb#26 + # source://regexp_parser//lib/regexp_parser/syntax/version_lookup.rb#28 def new(name); end - # source://regexp_parser//lib/regexp_parser/syntax/version_lookup.rb#57 + # source://regexp_parser//lib/regexp_parser/syntax/version_lookup.rb#59 def specified_versions; end # @return [Boolean] # - # source://regexp_parser//lib/regexp_parser/syntax/version_lookup.rb#32 + # source://regexp_parser//lib/regexp_parser/syntax/version_lookup.rb#34 def supported?(name); end - # source://regexp_parser//lib/regexp_parser/syntax/version_lookup.rb#36 + # source://regexp_parser//lib/regexp_parser/syntax/version_lookup.rb#38 def version_class(version); end end end @@ -2995,19 +3030,19 @@ end # is useful during development, testing, and should be useful for some types # of transformations as well. # -# source://regexp_parser//lib/regexp_parser/syntax/any.rb#5 +# source://regexp_parser//lib/regexp_parser/syntax/any.rb#7 class Regexp::Syntax::Any < ::Regexp::Syntax::Base class << self # @return [Boolean] # - # source://regexp_parser//lib/regexp_parser/syntax/any.rb#8 + # source://regexp_parser//lib/regexp_parser/syntax/any.rb#10 def implements?(_type, _token); end end end # A lookup map of supported types and tokens in a given syntax # -# source://regexp_parser//lib/regexp_parser/syntax/base.rb#9 +# source://regexp_parser//lib/regexp_parser/syntax/base.rb#11 class Regexp::Syntax::Base include ::Regexp::Syntax::Token @@ -3015,781 +3050,834 @@ class Regexp::Syntax::Base # # @return [Base] a new instance of Base # - # source://regexp_parser//lib/regexp_parser/syntax/base.rb#99 + # source://regexp_parser//lib/regexp_parser/syntax/base.rb#101 def initialize; end - # source://regexp_parser//lib/regexp_parser/syntax/base.rb#104 + # source://regexp_parser//lib/regexp_parser/syntax/base.rb#106 def method_missing(name, *args); end private # @return [Boolean] # - # source://regexp_parser//lib/regexp_parser/syntax/base.rb#115 + # source://regexp_parser//lib/regexp_parser/syntax/base.rb#117 def respond_to_missing?(name, include_private = T.unsafe(nil)); end class << self - # source://regexp_parser//lib/regexp_parser/syntax/base.rb#46 + # source://regexp_parser//lib/regexp_parser/syntax/base.rb#48 def added_features; end # @raise [NotImplementedError] # - # source://regexp_parser//lib/regexp_parser/syntax/base.rb#40 + # source://regexp_parser//lib/regexp_parser/syntax/base.rb#46 def check!(type, token); end # @return [Boolean] # - # source://regexp_parser//lib/regexp_parser/syntax/base.rb#31 + # source://regexp_parser//lib/regexp_parser/syntax/base.rb#36 def check?(type, token); end - # source://regexp_parser//lib/regexp_parser/syntax/base.rb#26 + # source://regexp_parser//lib/regexp_parser/syntax/base.rb#28 def excludes(type, tokens); end # Returns the value of attribute features. # - # source://regexp_parser//lib/regexp_parser/syntax/base.rb#13 + # source://regexp_parser//lib/regexp_parser/syntax/base.rb#15 def features; end # Sets the attribute features # # @param value the value to set the attribute features to. # - # source://regexp_parser//lib/regexp_parser/syntax/base.rb#13 + # source://regexp_parser//lib/regexp_parser/syntax/base.rb#15 def features=(_arg0); end - # source://regexp_parser//lib/regexp_parser/syntax/base.rb#36 + # source://regexp_parser//lib/regexp_parser/syntax/base.rb#38 def implementations(type); end - # source://regexp_parser//lib/regexp_parser/syntax/base.rb#21 + # source://regexp_parser//lib/regexp_parser/syntax/base.rb#23 def implements(type, tokens); end # @raise [NotImplementedError] # - # source://regexp_parser//lib/regexp_parser/syntax/base.rb#40 + # source://regexp_parser//lib/regexp_parser/syntax/base.rb#42 def implements!(type, token); end # @return [Boolean] # - # source://regexp_parser//lib/regexp_parser/syntax/base.rb#31 + # source://regexp_parser//lib/regexp_parser/syntax/base.rb#33 def implements?(type, token); end # automatically inherit features through the syntax class hierarchy # - # source://regexp_parser//lib/regexp_parser/syntax/base.rb#16 + # source://regexp_parser//lib/regexp_parser/syntax/base.rb#18 def inherited(subclass); end - # source://regexp_parser//lib/regexp_parser/syntax/base.rb#54 + # source://regexp_parser//lib/regexp_parser/syntax/base.rb#56 def normalize(type, token); end - # source://regexp_parser//lib/regexp_parser/syntax/base.rb#74 + # source://regexp_parser//lib/regexp_parser/syntax/base.rb#76 def normalize_backref(type, token); end - # source://regexp_parser//lib/regexp_parser/syntax/base.rb#65 + # source://regexp_parser//lib/regexp_parser/syntax/base.rb#67 def normalize_group(type, token); end - # source://regexp_parser//lib/regexp_parser/syntax/base.rb#50 + # source://regexp_parser//lib/regexp_parser/syntax/base.rb#52 def removed_features; end end end -# source://regexp_parser//lib/regexp_parser/syntax/versions.rb#8 +# source://regexp_parser//lib/regexp_parser/syntax/versions.rb#10 Regexp::Syntax::CURRENT = Regexp::Syntax::V3_2_0 -# source://regexp_parser//lib/regexp_parser/syntax/version_lookup.rb#6 +# source://regexp_parser//lib/regexp_parser/syntax/version_lookup.rb#8 class Regexp::Syntax::InvalidVersionNameError < ::Regexp::Syntax::SyntaxError # @return [InvalidVersionNameError] a new instance of InvalidVersionNameError # - # source://regexp_parser//lib/regexp_parser/syntax/version_lookup.rb#7 + # source://regexp_parser//lib/regexp_parser/syntax/version_lookup.rb#9 def initialize(name); end end -# source://regexp_parser//lib/regexp_parser/syntax/base.rb#2 +# source://regexp_parser//lib/regexp_parser/syntax/base.rb#4 class Regexp::Syntax::NotImplementedError < ::Regexp::Syntax::SyntaxError # @return [NotImplementedError] a new instance of NotImplementedError # - # source://regexp_parser//lib/regexp_parser/syntax/base.rb#3 + # source://regexp_parser//lib/regexp_parser/syntax/base.rb#5 def initialize(syntax, type, token); end end -# source://regexp_parser//lib/regexp_parser/syntax.rb#4 +# source://regexp_parser//lib/regexp_parser/syntax.rb#6 class Regexp::Syntax::SyntaxError < ::Regexp::Parser::Error; end -# source://regexp_parser//lib/regexp_parser/syntax/token.rb#3 +# source://regexp_parser//lib/regexp_parser/syntax/token.rb#5 module Regexp::Syntax::Token; end -# source://regexp_parser//lib/regexp_parser/syntax/token.rb#42 +# source://regexp_parser//lib/regexp_parser/syntax/token.rb#44 Regexp::Syntax::Token::All = T.let(T.unsafe(nil), Array) # alias for symmetry between Token::* and Expression::* # -# source://regexp_parser//lib/regexp_parser/syntax/token/meta.rb#15 +# source://regexp_parser//lib/regexp_parser/syntax/token/meta.rb#17 module Regexp::Syntax::Token::Alternation; end -# source://regexp_parser//lib/regexp_parser/syntax/token/meta.rb#16 +# source://regexp_parser//lib/regexp_parser/syntax/token/meta.rb#18 Regexp::Syntax::Token::Alternation::All = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/meta.rb#17 +# source://regexp_parser//lib/regexp_parser/syntax/token/meta.rb#19 Regexp::Syntax::Token::Alternation::Type = T.let(T.unsafe(nil), Symbol) -# source://regexp_parser//lib/regexp_parser/syntax/token/anchor.rb#3 +# source://regexp_parser//lib/regexp_parser/syntax/token/anchor.rb#5 module Regexp::Syntax::Token::Anchor; end -# source://regexp_parser//lib/regexp_parser/syntax/token/anchor.rb#9 +# source://regexp_parser//lib/regexp_parser/syntax/token/anchor.rb#11 Regexp::Syntax::Token::Anchor::All = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/anchor.rb#4 +# source://regexp_parser//lib/regexp_parser/syntax/token/anchor.rb#6 Regexp::Syntax::Token::Anchor::Basic = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/anchor.rb#5 +# source://regexp_parser//lib/regexp_parser/syntax/token/anchor.rb#7 Regexp::Syntax::Token::Anchor::Extended = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/anchor.rb#7 +# source://regexp_parser//lib/regexp_parser/syntax/token/anchor.rb#9 Regexp::Syntax::Token::Anchor::MatchStart = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/anchor.rb#6 +# source://regexp_parser//lib/regexp_parser/syntax/token/anchor.rb#8 Regexp::Syntax::Token::Anchor::String = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/anchor.rb#10 +# source://regexp_parser//lib/regexp_parser/syntax/token/anchor.rb#12 Regexp::Syntax::Token::Anchor::Type = T.let(T.unsafe(nil), Symbol) -# source://regexp_parser//lib/regexp_parser/syntax/token/assertion.rb#3 +# source://regexp_parser//lib/regexp_parser/syntax/token/assertion.rb#5 module Regexp::Syntax::Token::Assertion; end -# source://regexp_parser//lib/regexp_parser/syntax/token/assertion.rb#7 +# source://regexp_parser//lib/regexp_parser/syntax/token/assertion.rb#9 Regexp::Syntax::Token::Assertion::All = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/assertion.rb#4 +# source://regexp_parser//lib/regexp_parser/syntax/token/assertion.rb#6 Regexp::Syntax::Token::Assertion::Lookahead = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/assertion.rb#5 +# source://regexp_parser//lib/regexp_parser/syntax/token/assertion.rb#7 Regexp::Syntax::Token::Assertion::Lookbehind = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/assertion.rb#8 +# source://regexp_parser//lib/regexp_parser/syntax/token/assertion.rb#10 Regexp::Syntax::Token::Assertion::Type = T.let(T.unsafe(nil), Symbol) # alias for symmetry between token symbol and Expression class name # -# source://regexp_parser//lib/regexp_parser/syntax/token/backreference.rb#31 +# source://regexp_parser//lib/regexp_parser/syntax/token/backreference.rb#33 Regexp::Syntax::Token::Backref = Regexp::Syntax::Token::Backreference -# source://regexp_parser//lib/regexp_parser/syntax/token/backreference.rb#3 +# source://regexp_parser//lib/regexp_parser/syntax/token/backreference.rb#5 module Regexp::Syntax::Token::Backreference; end -# source://regexp_parser//lib/regexp_parser/syntax/token/backreference.rb#15 +# source://regexp_parser//lib/regexp_parser/syntax/token/backreference.rb#17 Regexp::Syntax::Token::Backreference::All = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/backreference.rb#7 +# source://regexp_parser//lib/regexp_parser/syntax/token/backreference.rb#9 Regexp::Syntax::Token::Backreference::Name = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/backreference.rb#6 +# source://regexp_parser//lib/regexp_parser/syntax/token/backreference.rb#8 Regexp::Syntax::Token::Backreference::Number = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/backreference.rb#5 +# source://regexp_parser//lib/regexp_parser/syntax/token/backreference.rb#7 Regexp::Syntax::Token::Backreference::NumberRef = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/backreference.rb#4 +# source://regexp_parser//lib/regexp_parser/syntax/token/backreference.rb#6 Regexp::Syntax::Token::Backreference::Plain = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/backreference.rb#9 +# source://regexp_parser//lib/regexp_parser/syntax/token/backreference.rb#11 Regexp::Syntax::Token::Backreference::RecursionLevel = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/backreference.rb#16 +# source://regexp_parser//lib/regexp_parser/syntax/token/backreference.rb#18 Regexp::Syntax::Token::Backreference::Type = T.let(T.unsafe(nil), Symbol) -# source://regexp_parser//lib/regexp_parser/syntax/token/backreference.rb#11 +# source://regexp_parser//lib/regexp_parser/syntax/token/backreference.rb#13 Regexp::Syntax::Token::Backreference::V1_8_6 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/backreference.rb#13 +# source://regexp_parser//lib/regexp_parser/syntax/token/backreference.rb#15 Regexp::Syntax::Token::Backreference::V1_9_1 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/character_set.rb#3 +# source://regexp_parser//lib/regexp_parser/syntax/token/character_set.rb#5 module Regexp::Syntax::Token::CharacterSet; end -# source://regexp_parser//lib/regexp_parser/syntax/token/character_set.rb#7 +# source://regexp_parser//lib/regexp_parser/syntax/token/character_set.rb#9 Regexp::Syntax::Token::CharacterSet::All = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/character_set.rb#4 +# source://regexp_parser//lib/regexp_parser/syntax/token/character_set.rb#6 Regexp::Syntax::Token::CharacterSet::Basic = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/character_set.rb#5 +# source://regexp_parser//lib/regexp_parser/syntax/token/character_set.rb#7 Regexp::Syntax::Token::CharacterSet::Extended = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/character_set.rb#8 +# source://regexp_parser//lib/regexp_parser/syntax/token/character_set.rb#10 Regexp::Syntax::Token::CharacterSet::Type = T.let(T.unsafe(nil), Symbol) -# source://regexp_parser//lib/regexp_parser/syntax/token/character_type.rb#3 +# source://regexp_parser//lib/regexp_parser/syntax/token/character_type.rb#5 module Regexp::Syntax::Token::CharacterType; end -# source://regexp_parser//lib/regexp_parser/syntax/token/character_type.rb#10 +# source://regexp_parser//lib/regexp_parser/syntax/token/character_type.rb#12 Regexp::Syntax::Token::CharacterType::All = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/character_type.rb#4 +# source://regexp_parser//lib/regexp_parser/syntax/token/character_type.rb#6 Regexp::Syntax::Token::CharacterType::Basic = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/character_type.rb#8 +# source://regexp_parser//lib/regexp_parser/syntax/token/character_type.rb#10 Regexp::Syntax::Token::CharacterType::Clustered = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/character_type.rb#5 +# source://regexp_parser//lib/regexp_parser/syntax/token/character_type.rb#7 Regexp::Syntax::Token::CharacterType::Extended = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/character_type.rb#6 +# source://regexp_parser//lib/regexp_parser/syntax/token/character_type.rb#8 Regexp::Syntax::Token::CharacterType::Hex = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/character_type.rb#11 +# source://regexp_parser//lib/regexp_parser/syntax/token/character_type.rb#13 Regexp::Syntax::Token::CharacterType::Type = T.let(T.unsafe(nil), Symbol) -# source://regexp_parser//lib/regexp_parser/syntax/token/conditional.rb#3 +# source://regexp_parser//lib/regexp_parser/syntax/token/conditional.rb#5 module Regexp::Syntax::Token::Conditional; end -# source://regexp_parser//lib/regexp_parser/syntax/token/conditional.rb#9 +# source://regexp_parser//lib/regexp_parser/syntax/token/conditional.rb#11 Regexp::Syntax::Token::Conditional::All = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/conditional.rb#6 +# source://regexp_parser//lib/regexp_parser/syntax/token/conditional.rb#8 Regexp::Syntax::Token::Conditional::Condition = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/conditional.rb#4 +# source://regexp_parser//lib/regexp_parser/syntax/token/conditional.rb#6 Regexp::Syntax::Token::Conditional::Delimiters = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/conditional.rb#7 +# source://regexp_parser//lib/regexp_parser/syntax/token/conditional.rb#9 Regexp::Syntax::Token::Conditional::Separator = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/conditional.rb#11 +# source://regexp_parser//lib/regexp_parser/syntax/token/conditional.rb#13 Regexp::Syntax::Token::Conditional::Type = T.let(T.unsafe(nil), Symbol) -# source://regexp_parser//lib/regexp_parser/syntax/token/escape.rb#3 +# source://regexp_parser//lib/regexp_parser/syntax/token/escape.rb#5 module Regexp::Syntax::Token::Escape; end -# source://regexp_parser//lib/regexp_parser/syntax/token/escape.rb#8 +# source://regexp_parser//lib/regexp_parser/syntax/token/escape.rb#10 Regexp::Syntax::Token::Escape::ASCII = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/escape.rb#24 +# source://regexp_parser//lib/regexp_parser/syntax/token/escape.rb#26 Regexp::Syntax::Token::Escape::All = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/escape.rb#4 +# source://regexp_parser//lib/regexp_parser/syntax/token/escape.rb#6 Regexp::Syntax::Token::Escape::Basic = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/escape.rb#6 +# source://regexp_parser//lib/regexp_parser/syntax/token/escape.rb#8 Regexp::Syntax::Token::Escape::Control = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/escape.rb#20 +# source://regexp_parser//lib/regexp_parser/syntax/token/escape.rb#22 Regexp::Syntax::Token::Escape::Hex = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/escape.rb#13 +# source://regexp_parser//lib/regexp_parser/syntax/token/escape.rb#15 Regexp::Syntax::Token::Escape::Meta = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/escape.rb#22 +# source://regexp_parser//lib/regexp_parser/syntax/token/escape.rb#24 Regexp::Syntax::Token::Escape::Octal = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/escape.rb#25 +# source://regexp_parser//lib/regexp_parser/syntax/token/escape.rb#27 Regexp::Syntax::Token::Escape::Type = T.let(T.unsafe(nil), Symbol) -# source://regexp_parser//lib/regexp_parser/syntax/token/escape.rb#11 +# source://regexp_parser//lib/regexp_parser/syntax/token/escape.rb#13 Regexp::Syntax::Token::Escape::Unicode = T.let(T.unsafe(nil), Array) # alias for symmetry between Token::* and Expression::* # -# source://regexp_parser//lib/regexp_parser/syntax/token/escape.rb#31 +# source://regexp_parser//lib/regexp_parser/syntax/token/escape.rb#33 Regexp::Syntax::Token::EscapeSequence = Regexp::Syntax::Token::Escape -# source://regexp_parser//lib/regexp_parser/syntax/token.rb#11 +# source://regexp_parser//lib/regexp_parser/syntax/token.rb#13 module Regexp::Syntax::Token::FreeSpace; end -# source://regexp_parser//lib/regexp_parser/syntax/token.rb#12 +# source://regexp_parser//lib/regexp_parser/syntax/token.rb#14 Regexp::Syntax::Token::FreeSpace::All = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token.rb#13 +# source://regexp_parser//lib/regexp_parser/syntax/token.rb#15 Regexp::Syntax::Token::FreeSpace::Type = T.let(T.unsafe(nil), Symbol) -# source://regexp_parser//lib/regexp_parser/syntax/token/group.rb#3 +# source://regexp_parser//lib/regexp_parser/syntax/token/group.rb#5 module Regexp::Syntax::Token::Group; end -# source://regexp_parser//lib/regexp_parser/syntax/token/group.rb#17 +# source://regexp_parser//lib/regexp_parser/syntax/token/group.rb#19 Regexp::Syntax::Token::Group::All = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/group.rb#8 +# source://regexp_parser//lib/regexp_parser/syntax/token/group.rb#10 Regexp::Syntax::Token::Group::Atomic = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/group.rb#4 +# source://regexp_parser//lib/regexp_parser/syntax/token/group.rb#6 Regexp::Syntax::Token::Group::Basic = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/group.rb#10 +# source://regexp_parser//lib/regexp_parser/syntax/token/group.rb#12 Regexp::Syntax::Token::Group::Comment = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/group.rb#5 +# source://regexp_parser//lib/regexp_parser/syntax/token/group.rb#7 Regexp::Syntax::Token::Group::Extended = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/group.rb#7 +# source://regexp_parser//lib/regexp_parser/syntax/token/group.rb#9 Regexp::Syntax::Token::Group::Named = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/group.rb#9 +# source://regexp_parser//lib/regexp_parser/syntax/token/group.rb#11 Regexp::Syntax::Token::Group::Passive = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/group.rb#18 +# source://regexp_parser//lib/regexp_parser/syntax/token/group.rb#20 Regexp::Syntax::Token::Group::Type = T.let(T.unsafe(nil), Symbol) -# source://regexp_parser//lib/regexp_parser/syntax/token/group.rb#12 +# source://regexp_parser//lib/regexp_parser/syntax/token/group.rb#14 Regexp::Syntax::Token::Group::V1_8_6 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/group.rb#15 +# source://regexp_parser//lib/regexp_parser/syntax/token/group.rb#17 Regexp::Syntax::Token::Group::V2_4_1 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/keep.rb#3 +# source://regexp_parser//lib/regexp_parser/syntax/token/keep.rb#5 module Regexp::Syntax::Token::Keep; end -# source://regexp_parser//lib/regexp_parser/syntax/token/keep.rb#6 +# source://regexp_parser//lib/regexp_parser/syntax/token/keep.rb#8 Regexp::Syntax::Token::Keep::All = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/keep.rb#4 +# source://regexp_parser//lib/regexp_parser/syntax/token/keep.rb#6 Regexp::Syntax::Token::Keep::Mark = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/keep.rb#7 +# source://regexp_parser//lib/regexp_parser/syntax/token/keep.rb#9 Regexp::Syntax::Token::Keep::Type = T.let(T.unsafe(nil), Symbol) -# source://regexp_parser//lib/regexp_parser/syntax/token.rb#6 +# source://regexp_parser//lib/regexp_parser/syntax/token.rb#8 module Regexp::Syntax::Token::Literal; end -# source://regexp_parser//lib/regexp_parser/syntax/token.rb#7 +# source://regexp_parser//lib/regexp_parser/syntax/token.rb#9 Regexp::Syntax::Token::Literal::All = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token.rb#8 +# source://regexp_parser//lib/regexp_parser/syntax/token.rb#10 Regexp::Syntax::Token::Literal::Type = T.let(T.unsafe(nil), Symbol) -# source://regexp_parser//lib/regexp_parser/syntax/token.rb#4 +# source://regexp_parser//lib/regexp_parser/syntax/token.rb#6 Regexp::Syntax::Token::Map = T.let(T.unsafe(nil), Hash) -# source://regexp_parser//lib/regexp_parser/syntax/token/meta.rb#3 +# source://regexp_parser//lib/regexp_parser/syntax/token/meta.rb#5 module Regexp::Syntax::Token::Meta; end -# source://regexp_parser//lib/regexp_parser/syntax/token/meta.rb#8 +# source://regexp_parser//lib/regexp_parser/syntax/token/meta.rb#10 Regexp::Syntax::Token::Meta::All = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/meta.rb#5 +# source://regexp_parser//lib/regexp_parser/syntax/token/meta.rb#7 Regexp::Syntax::Token::Meta::Alternation = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/meta.rb#4 +# source://regexp_parser//lib/regexp_parser/syntax/token/meta.rb#6 Regexp::Syntax::Token::Meta::Basic = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/meta.rb#6 +# source://regexp_parser//lib/regexp_parser/syntax/token/meta.rb#8 Regexp::Syntax::Token::Meta::Extended = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/meta.rb#9 +# source://regexp_parser//lib/regexp_parser/syntax/token/meta.rb#11 Regexp::Syntax::Token::Meta::Type = T.let(T.unsafe(nil), Symbol) -# source://regexp_parser//lib/regexp_parser/syntax/token/posix_class.rb#3 +# source://regexp_parser//lib/regexp_parser/syntax/token/posix_class.rb#5 module Regexp::Syntax::Token::PosixClass; end -# source://regexp_parser//lib/regexp_parser/syntax/token/posix_class.rb#9 +# source://regexp_parser//lib/regexp_parser/syntax/token/posix_class.rb#11 Regexp::Syntax::Token::PosixClass::All = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/posix_class.rb#7 +# source://regexp_parser//lib/regexp_parser/syntax/token/posix_class.rb#9 Regexp::Syntax::Token::PosixClass::Extensions = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/posix_class.rb#11 +# source://regexp_parser//lib/regexp_parser/syntax/token/posix_class.rb#13 Regexp::Syntax::Token::PosixClass::NonType = T.let(T.unsafe(nil), Symbol) -# source://regexp_parser//lib/regexp_parser/syntax/token/posix_class.rb#4 +# source://regexp_parser//lib/regexp_parser/syntax/token/posix_class.rb#6 Regexp::Syntax::Token::PosixClass::Standard = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/posix_class.rb#10 +# source://regexp_parser//lib/regexp_parser/syntax/token/posix_class.rb#12 Regexp::Syntax::Token::PosixClass::Type = T.let(T.unsafe(nil), Symbol) # alias for symmetry between token symbol and Token module name # -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#749 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#764 Regexp::Syntax::Token::Property = Regexp::Syntax::Token::UnicodeProperty -# source://regexp_parser//lib/regexp_parser/syntax/token/quantifier.rb#3 +# source://regexp_parser//lib/regexp_parser/syntax/token/quantifier.rb#5 module Regexp::Syntax::Token::Quantifier; end -# source://regexp_parser//lib/regexp_parser/syntax/token/quantifier.rb#29 +# source://regexp_parser//lib/regexp_parser/syntax/token/quantifier.rb#31 Regexp::Syntax::Token::Quantifier::All = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/quantifier.rb#4 +# source://regexp_parser//lib/regexp_parser/syntax/token/quantifier.rb#6 Regexp::Syntax::Token::Quantifier::Greedy = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/quantifier.rb#22 +# source://regexp_parser//lib/regexp_parser/syntax/token/quantifier.rb#24 Regexp::Syntax::Token::Quantifier::Interval = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/quantifier.rb#26 +# source://regexp_parser//lib/regexp_parser/syntax/token/quantifier.rb#28 Regexp::Syntax::Token::Quantifier::IntervalAll = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/quantifier.rb#24 +# source://regexp_parser//lib/regexp_parser/syntax/token/quantifier.rb#26 Regexp::Syntax::Token::Quantifier::IntervalPossessive = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/quantifier.rb#23 +# source://regexp_parser//lib/regexp_parser/syntax/token/quantifier.rb#25 Regexp::Syntax::Token::Quantifier::IntervalReluctant = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/quantifier.rb#16 +# source://regexp_parser//lib/regexp_parser/syntax/token/quantifier.rb#18 Regexp::Syntax::Token::Quantifier::Possessive = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/quantifier.rb#10 +# source://regexp_parser//lib/regexp_parser/syntax/token/quantifier.rb#12 Regexp::Syntax::Token::Quantifier::Reluctant = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/quantifier.rb#30 +# source://regexp_parser//lib/regexp_parser/syntax/token/quantifier.rb#32 Regexp::Syntax::Token::Quantifier::Type = T.let(T.unsafe(nil), Symbol) -# source://regexp_parser//lib/regexp_parser/syntax/token/quantifier.rb#28 +# source://regexp_parser//lib/regexp_parser/syntax/token/quantifier.rb#30 Regexp::Syntax::Token::Quantifier::V1_8_6 = T.let(T.unsafe(nil), Array) # alias for symmetry between token symbol and Token module name # -# source://regexp_parser//lib/regexp_parser/syntax/token/character_set.rb#14 +# source://regexp_parser//lib/regexp_parser/syntax/token/character_set.rb#16 Regexp::Syntax::Token::Set = Regexp::Syntax::Token::CharacterSet # Type is the same as Backreference so keeping it here, for now. # -# source://regexp_parser//lib/regexp_parser/syntax/token/backreference.rb#20 +# source://regexp_parser//lib/regexp_parser/syntax/token/backreference.rb#22 module Regexp::Syntax::Token::SubexpressionCall; end -# source://regexp_parser//lib/regexp_parser/syntax/token/backreference.rb#24 +# source://regexp_parser//lib/regexp_parser/syntax/token/backreference.rb#26 Regexp::Syntax::Token::SubexpressionCall::All = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/backreference.rb#21 +# source://regexp_parser//lib/regexp_parser/syntax/token/backreference.rb#23 Regexp::Syntax::Token::SubexpressionCall::Name = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/backreference.rb#22 +# source://regexp_parser//lib/regexp_parser/syntax/token/backreference.rb#24 Regexp::Syntax::Token::SubexpressionCall::Number = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token.rb#43 +# source://regexp_parser//lib/regexp_parser/syntax/token.rb#45 Regexp::Syntax::Token::Types = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#3 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#5 module Regexp::Syntax::Token::UnicodeProperty; end -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#64 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#68 Regexp::Syntax::Token::UnicodeProperty::Age = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#40 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#42 Regexp::Syntax::Token::UnicodeProperty::Age_V1_9_3 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#44 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#46 Regexp::Syntax::Token::UnicodeProperty::Age_V2_0_0 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#46 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#48 Regexp::Syntax::Token::UnicodeProperty::Age_V2_2_0 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#48 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#50 Regexp::Syntax::Token::UnicodeProperty::Age_V2_3_0 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#50 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#52 Regexp::Syntax::Token::UnicodeProperty::Age_V2_4_0 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#52 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#54 Regexp::Syntax::Token::UnicodeProperty::Age_V2_5_0 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#54 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#56 Regexp::Syntax::Token::UnicodeProperty::Age_V2_6_0 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#56 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#58 Regexp::Syntax::Token::UnicodeProperty::Age_V2_6_2 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#58 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#60 Regexp::Syntax::Token::UnicodeProperty::Age_V2_6_3 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#60 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#62 Regexp::Syntax::Token::UnicodeProperty::Age_V3_1_0 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#62 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#64 Regexp::Syntax::Token::UnicodeProperty::Age_V3_2_0 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#739 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#66 +Regexp::Syntax::Token::UnicodeProperty::Age_V3_5_0 = T.let(T.unsafe(nil), Array) + +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#754 Regexp::Syntax::Token::UnicodeProperty::All = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#13 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#15 module Regexp::Syntax::Token::UnicodeProperty::Category; end -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#36 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#38 Regexp::Syntax::Token::UnicodeProperty::Category::All = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#33 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#35 Regexp::Syntax::Token::UnicodeProperty::Category::Codepoint = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#14 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#16 Regexp::Syntax::Token::UnicodeProperty::Category::Letter = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#17 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#19 Regexp::Syntax::Token::UnicodeProperty::Category::Mark = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#20 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#22 Regexp::Syntax::Token::UnicodeProperty::Category::Number = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#23 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#25 Regexp::Syntax::Token::UnicodeProperty::Category::Punctuation = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#30 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#32 Regexp::Syntax::Token::UnicodeProperty::Category::Separator = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#27 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#29 Regexp::Syntax::Token::UnicodeProperty::Category::Symbol = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#6 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#8 Regexp::Syntax::Token::UnicodeProperty::CharType_V1_9_0 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#9 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#11 Regexp::Syntax::Token::UnicodeProperty::CharType_V2_5_0 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#133 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#143 Regexp::Syntax::Token::UnicodeProperty::Derived = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#66 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#70 Regexp::Syntax::Token::UnicodeProperty::Derived_V1_9_0 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#120 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#124 Regexp::Syntax::Token::UnicodeProperty::Derived_V2_0_0 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#125 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#129 Regexp::Syntax::Token::UnicodeProperty::Derived_V2_4_0 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#129 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#133 Regexp::Syntax::Token::UnicodeProperty::Derived_V2_5_0 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#724 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#137 +Regexp::Syntax::Token::UnicodeProperty::Derived_V3_5_0 = T.let(T.unsafe(nil), Array) + +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#738 Regexp::Syntax::Token::UnicodeProperty::Emoji = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#694 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#708 Regexp::Syntax::Token::UnicodeProperty::Emoji_V2_5_0 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#702 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#716 Regexp::Syntax::Token::UnicodeProperty::Emoji_V2_6_0 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#722 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#736 Regexp::Syntax::Token::UnicodeProperty::Enumerated = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#706 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#720 Regexp::Syntax::Token::UnicodeProperty::Enumerated_V2_4_0 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#742 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#757 Regexp::Syntax::Token::UnicodeProperty::NonType = T.let(T.unsafe(nil), Symbol) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#11 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#13 Regexp::Syntax::Token::UnicodeProperty::POSIX = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#332 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#342 Regexp::Syntax::Token::UnicodeProperty::Script = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#135 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#145 Regexp::Syntax::Token::UnicodeProperty::Script_V1_9_0 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#231 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#241 Regexp::Syntax::Token::UnicodeProperty::Script_V1_9_3 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#237 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#247 Regexp::Syntax::Token::UnicodeProperty::Script_V2_0_0 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#247 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#257 Regexp::Syntax::Token::UnicodeProperty::Script_V2_2_0 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#273 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#283 Regexp::Syntax::Token::UnicodeProperty::Script_V2_3_0 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#282 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#292 Regexp::Syntax::Token::UnicodeProperty::Script_V2_4_0 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#291 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#301 Regexp::Syntax::Token::UnicodeProperty::Script_V2_5_0 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#298 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#308 Regexp::Syntax::Token::UnicodeProperty::Script_V2_6_0 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#308 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#318 Regexp::Syntax::Token::UnicodeProperty::Script_V2_6_2 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#315 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#325 Regexp::Syntax::Token::UnicodeProperty::Script_V3_1_0 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#322 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#332 Regexp::Syntax::Token::UnicodeProperty::Script_V3_2_0 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#741 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#756 Regexp::Syntax::Token::UnicodeProperty::Type = T.let(T.unsafe(nil), Symbol) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#692 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#706 Regexp::Syntax::Token::UnicodeProperty::UnicodeBlock = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#334 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#344 Regexp::Syntax::Token::UnicodeProperty::UnicodeBlock_V1_9_0 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#433 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#443 Regexp::Syntax::Token::UnicodeProperty::UnicodeBlock_V2_0_0 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#561 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#571 Regexp::Syntax::Token::UnicodeProperty::UnicodeBlock_V2_2_0 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#596 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#606 Regexp::Syntax::Token::UnicodeProperty::UnicodeBlock_V2_3_0 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#609 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#619 Regexp::Syntax::Token::UnicodeProperty::UnicodeBlock_V2_4_0 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#623 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#633 Regexp::Syntax::Token::UnicodeProperty::UnicodeBlock_V2_5_0 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#633 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#643 Regexp::Syntax::Token::UnicodeProperty::UnicodeBlock_V2_6_0 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#647 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#657 Regexp::Syntax::Token::UnicodeProperty::UnicodeBlock_V2_6_2 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#659 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#669 Regexp::Syntax::Token::UnicodeProperty::UnicodeBlock_V3_1_0 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#670 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#680 Regexp::Syntax::Token::UnicodeProperty::UnicodeBlock_V3_2_0 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#726 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#702 +Regexp::Syntax::Token::UnicodeProperty::UnicodeBlock_V3_5_0 = T.let(T.unsafe(nil), Array) + +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#740 Regexp::Syntax::Token::UnicodeProperty::V1_9_0 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#727 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#741 Regexp::Syntax::Token::UnicodeProperty::V1_9_3 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#728 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#742 Regexp::Syntax::Token::UnicodeProperty::V2_0_0 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#729 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#743 Regexp::Syntax::Token::UnicodeProperty::V2_2_0 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#730 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#744 Regexp::Syntax::Token::UnicodeProperty::V2_3_0 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#731 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#745 Regexp::Syntax::Token::UnicodeProperty::V2_4_0 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#732 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#746 Regexp::Syntax::Token::UnicodeProperty::V2_5_0 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#733 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#747 Regexp::Syntax::Token::UnicodeProperty::V2_6_0 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#734 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#748 Regexp::Syntax::Token::UnicodeProperty::V2_6_2 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#735 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#749 Regexp::Syntax::Token::UnicodeProperty::V2_6_3 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#736 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#750 Regexp::Syntax::Token::UnicodeProperty::V3_1_0 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#737 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#751 Regexp::Syntax::Token::UnicodeProperty::V3_2_0 = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/syntax/version_lookup.rb#12 +# source://regexp_parser//lib/regexp_parser/syntax/token/unicode_property.rb#752 +Regexp::Syntax::Token::UnicodeProperty::V3_5_0 = T.let(T.unsafe(nil), Array) + +# source://regexp_parser//lib/regexp_parser/syntax/version_lookup.rb#14 class Regexp::Syntax::UnknownSyntaxNameError < ::Regexp::Syntax::SyntaxError # @return [UnknownSyntaxNameError] a new instance of UnknownSyntaxNameError # - # source://regexp_parser//lib/regexp_parser/syntax/version_lookup.rb#13 + # source://regexp_parser//lib/regexp_parser/syntax/version_lookup.rb#15 def initialize(name); end end -# source://regexp_parser//lib/regexp_parser/syntax/versions/1.8.6.rb#1 +# source://regexp_parser//lib/regexp_parser/syntax/versions/1.8.6.rb#3 class Regexp::Syntax::V1_8_6 < ::Regexp::Syntax::Base; end -# source://regexp_parser//lib/regexp_parser/syntax/versions/1.9.1.rb#1 +# source://regexp_parser//lib/regexp_parser/syntax/versions/1.9.1.rb#3 class Regexp::Syntax::V1_9_1 < ::Regexp::Syntax::V1_8_6; end -# source://regexp_parser//lib/regexp_parser/syntax/versions/1.9.3.rb#1 +# source://regexp_parser//lib/regexp_parser/syntax/versions/1.9.3.rb#3 class Regexp::Syntax::V1_9_3 < ::Regexp::Syntax::V1_9_1; end -# source://regexp_parser//lib/regexp_parser/syntax/versions/2.0.0.rb#1 +# source://regexp_parser//lib/regexp_parser/syntax/versions/2.0.0.rb#3 class Regexp::Syntax::V2_0_0 < ::Regexp::Syntax::V1_9_3; end -# source://regexp_parser//lib/regexp_parser/syntax/versions/2.2.0.rb#1 +# source://regexp_parser//lib/regexp_parser/syntax/versions/2.2.0.rb#3 class Regexp::Syntax::V2_2_0 < ::Regexp::Syntax::V2_0_0; end -# source://regexp_parser//lib/regexp_parser/syntax/versions/2.3.0.rb#1 +# source://regexp_parser//lib/regexp_parser/syntax/versions/2.3.0.rb#3 class Regexp::Syntax::V2_3_0 < ::Regexp::Syntax::V2_2_0; end -# source://regexp_parser//lib/regexp_parser/syntax/versions/2.4.0.rb#1 +# source://regexp_parser//lib/regexp_parser/syntax/versions/2.4.0.rb#3 class Regexp::Syntax::V2_4_0 < ::Regexp::Syntax::V2_3_0; end -# source://regexp_parser//lib/regexp_parser/syntax/versions/2.4.1.rb#1 +# source://regexp_parser//lib/regexp_parser/syntax/versions/2.4.1.rb#3 class Regexp::Syntax::V2_4_1 < ::Regexp::Syntax::V2_4_0; end -# source://regexp_parser//lib/regexp_parser/syntax/versions/2.5.0.rb#1 +# source://regexp_parser//lib/regexp_parser/syntax/versions/2.5.0.rb#3 class Regexp::Syntax::V2_5_0 < ::Regexp::Syntax::V2_4_1; end -# source://regexp_parser//lib/regexp_parser/syntax/versions/2.6.0.rb#1 +# source://regexp_parser//lib/regexp_parser/syntax/versions/2.6.0.rb#3 class Regexp::Syntax::V2_6_0 < ::Regexp::Syntax::V2_5_0; end -# source://regexp_parser//lib/regexp_parser/syntax/versions/2.6.2.rb#1 +# source://regexp_parser//lib/regexp_parser/syntax/versions/2.6.2.rb#3 class Regexp::Syntax::V2_6_2 < ::Regexp::Syntax::V2_6_0; end -# source://regexp_parser//lib/regexp_parser/syntax/versions/2.6.3.rb#1 +# source://regexp_parser//lib/regexp_parser/syntax/versions/2.6.3.rb#3 class Regexp::Syntax::V2_6_3 < ::Regexp::Syntax::V2_6_2; end -# source://regexp_parser//lib/regexp_parser/syntax/versions/3.1.0.rb#1 +# source://regexp_parser//lib/regexp_parser/syntax/versions/3.1.0.rb#3 class Regexp::Syntax::V3_1_0 < ::Regexp::Syntax::V2_6_3; end -# source://regexp_parser//lib/regexp_parser/syntax/versions/3.2.0.rb#1 +# source://regexp_parser//lib/regexp_parser/syntax/versions/3.2.0.rb#3 class Regexp::Syntax::V3_2_0 < ::Regexp::Syntax::V3_1_0; end -# source://regexp_parser//lib/regexp_parser/syntax/version_lookup.rb#4 +# source://regexp_parser//lib/regexp_parser/syntax/versions/3.5.0.rb#1 +class Regexp::Syntax::V3_5_0 < ::Regexp::Syntax::V3_2_0; end + +# source://regexp_parser//lib/regexp_parser/syntax/version_lookup.rb#6 Regexp::Syntax::VERSION_CONST_REGEXP = T.let(T.unsafe(nil), Regexp) -# source://regexp_parser//lib/regexp_parser/syntax/version_lookup.rb#2 +# source://regexp_parser//lib/regexp_parser/syntax/version_lookup.rb#4 Regexp::Syntax::VERSION_FORMAT = T.let(T.unsafe(nil), String) -# source://regexp_parser//lib/regexp_parser/syntax/version_lookup.rb#3 +# source://regexp_parser//lib/regexp_parser/syntax/version_lookup.rb#5 Regexp::Syntax::VERSION_REGEXP = T.let(T.unsafe(nil), Regexp) -# source://regexp_parser//lib/regexp_parser/token.rb#2 +# source://regexp_parser//lib/regexp_parser/token.rb#4 Regexp::TOKEN_KEYS = T.let(T.unsafe(nil), Array) -# source://regexp_parser//lib/regexp_parser/token.rb#13 +# source://regexp_parser//lib/regexp_parser/token.rb#15 class Regexp::Token < ::Struct + # source://regexp_parser//lib/regexp_parser/token.rb#15 def conditional_level; end + + # source://regexp_parser//lib/regexp_parser/token.rb#15 def conditional_level=(_); end - # source://regexp_parser//lib/regexp_parser/token.rb#20 + # source://regexp_parser//lib/regexp_parser/token.rb#22 def length; end + # source://regexp_parser//lib/regexp_parser/token.rb#15 def level; end + + # source://regexp_parser//lib/regexp_parser/token.rb#15 def level=(_); end # Returns the value of attribute next. # - # source://regexp_parser//lib/regexp_parser/token.rb#14 + # source://regexp_parser//lib/regexp_parser/token.rb#16 def next; end # Sets the attribute next # # @param value the value to set the attribute next to. # - # source://regexp_parser//lib/regexp_parser/token.rb#14 + # source://regexp_parser//lib/regexp_parser/token.rb#16 def next=(_arg0); end - # source://regexp_parser//lib/regexp_parser/token.rb#16 + # source://regexp_parser//lib/regexp_parser/token.rb#18 def offset; end # Returns the value of attribute previous. # - # source://regexp_parser//lib/regexp_parser/token.rb#14 + # source://regexp_parser//lib/regexp_parser/token.rb#16 def previous; end # Sets the attribute previous # # @param value the value to set the attribute previous to. # - # source://regexp_parser//lib/regexp_parser/token.rb#14 + # source://regexp_parser//lib/regexp_parser/token.rb#16 def previous=(_arg0); end + # source://regexp_parser//lib/regexp_parser/token.rb#15 def set_level; end + + # source://regexp_parser//lib/regexp_parser/token.rb#15 def set_level=(_); end + + # source://regexp_parser//lib/regexp_parser/token.rb#15 def te; end + + # source://regexp_parser//lib/regexp_parser/token.rb#15 def te=(_); end + + # source://regexp_parser//lib/regexp_parser/token.rb#15 def text; end + + # source://regexp_parser//lib/regexp_parser/token.rb#15 def text=(_); end + + # source://regexp_parser//lib/regexp_parser/token.rb#15 def token; end + + # source://regexp_parser//lib/regexp_parser/token.rb#15 def token=(_); end + + # source://regexp_parser//lib/regexp_parser/token.rb#15 def ts; end + + # source://regexp_parser//lib/regexp_parser/token.rb#15 def ts=(_); end + + # source://regexp_parser//lib/regexp_parser/token.rb#15 def type; end + + # source://regexp_parser//lib/regexp_parser/token.rb#15 def type=(_); end class << self + # source://regexp_parser//lib/regexp_parser/token.rb#15 def [](*_arg0); end + + # source://regexp_parser//lib/regexp_parser/token.rb#15 def inspect; end + + # source://regexp_parser//lib/regexp_parser/token.rb#15 def keyword_init?; end + + # source://regexp_parser//lib/regexp_parser/token.rb#15 def members; end + + # source://regexp_parser//lib/regexp_parser/token.rb#15 def new(*_arg0); end end end diff --git a/Library/Homebrew/sorbet/rbi/gems/rubocop@1.78.0.rbi b/Library/Homebrew/sorbet/rbi/gems/rubocop@1.79.2.rbi similarity index 99% rename from Library/Homebrew/sorbet/rbi/gems/rubocop@1.78.0.rbi rename to Library/Homebrew/sorbet/rbi/gems/rubocop@1.79.2.rbi index d79ae6687f..08c5013d93 100644 --- a/Library/Homebrew/sorbet/rbi/gems/rubocop@1.78.0.rbi +++ b/Library/Homebrew/sorbet/rbi/gems/rubocop@1.79.2.rbi @@ -3003,6 +3003,12 @@ RuboCop::Cop::Layout::EmptyLines::LINE_OFFSET = T.let(T.unsafe(nil), Integer) RuboCop::Cop::Layout::EmptyLines::MSG = T.let(T.unsafe(nil), String) +RuboCop::Cop::Layout::EmptyLinesAfterModuleInclusion::MODULE_INCLUSION_METHODS = T.let(T.unsafe(nil), Array) + +RuboCop::Cop::Layout::EmptyLinesAfterModuleInclusion::MSG = T.let(T.unsafe(nil), String) + +RuboCop::Cop::Layout::EmptyLinesAfterModuleInclusion::RESTRICT_ON_SEND = T.let(T.unsafe(nil), Array) + RuboCop::Cop::Layout::EmptyLinesAroundAccessModifier::MSG_AFTER = T.let(T.unsafe(nil), String) RuboCop::Cop::Layout::EmptyLinesAroundAccessModifier::MSG_AFTER_FOR_ONLY_BEFORE = T.let(T.unsafe(nil), String) @@ -3629,10 +3635,14 @@ RuboCop::Cop::Lint::RedundantRequireStatement::RESTRICT_ON_SEND = T.let(T.unsafe RuboCop::Cop::Lint::RedundantRequireStatement::RUBY_22_LOADED_FEATURES = T.let(T.unsafe(nil), Array) +RuboCop::Cop::Lint::RedundantSafeNavigation::GUARANTEED_INSTANCE_METHODS = T.let(T.unsafe(nil), Array) + RuboCop::Cop::Lint::RedundantSafeNavigation::MSG = T.let(T.unsafe(nil), String) RuboCop::Cop::Lint::RedundantSafeNavigation::MSG_LITERAL = T.let(T.unsafe(nil), String) +RuboCop::Cop::Lint::RedundantSafeNavigation::MSG_NON_NIL = T.let(T.unsafe(nil), String) + RuboCop::Cop::Lint::RedundantSafeNavigation::NIL_SPECIFIC_METHODS = T.let(T.unsafe(nil), Set) RuboCop::Cop::Lint::RedundantSafeNavigation::SNAKE_CASE = T.let(T.unsafe(nil), Regexp) @@ -3845,6 +3855,8 @@ RuboCop::Cop::Lint::UselessTimes::MSG = T.let(T.unsafe(nil), String) RuboCop::Cop::Lint::UselessTimes::RESTRICT_ON_SEND = T.let(T.unsafe(nil), Array) +RuboCop::Cop::Lint::Utils::NilReceiverChecker::NIL_METHODS = T.let(T.unsafe(nil), Set) + RuboCop::Cop::Lint::Void::BINARY_OPERATORS = T.let(T.unsafe(nil), Array) RuboCop::Cop::Lint::Void::CONST_MSG = T.let(T.unsafe(nil), String) @@ -3990,6 +4002,8 @@ RuboCop::Cop::Naming::MethodName::MSG = T.let(T.unsafe(nil), String) RuboCop::Cop::Naming::MethodName::MSG_FORBIDDEN = T.let(T.unsafe(nil), String) +RuboCop::Cop::Naming::MethodName::OPERATOR_METHODS = T.let(T.unsafe(nil), Set) + RuboCop::Cop::Naming::PredicateMethod::MSG_NON_PREDICATE = T.let(T.unsafe(nil), String) RuboCop::Cop::Naming::PredicateMethod::MSG_PREDICATE = T.let(T.unsafe(nil), String) @@ -4633,8 +4647,6 @@ RuboCop::Cop::Style::AmbiguousEndlessMethodDefinition::MSG = T.let(T.unsafe(nil) RuboCop::Cop::Style::AndOr::MSG = T.let(T.unsafe(nil), String) -RuboCop::Cop::Style::ArgumentsForwarding::ADDITIONAL_ARG_TYPES = T.let(T.unsafe(nil), Array) - RuboCop::Cop::Style::ArgumentsForwarding::ARGS_MSG = T.let(T.unsafe(nil), String) RuboCop::Cop::Style::ArgumentsForwarding::BLOCK_MSG = T.let(T.unsafe(nil), String) @@ -6152,6 +6164,8 @@ RuboCop::Cop::VariableForce::ARGUMENT_DECLARATION_TYPES = T.let(T.unsafe(nil), A RuboCop::Cop::VariableForce::Assignment::MULTIPLE_LEFT_HAND_SIDE_TYPE = T.let(T.unsafe(nil), Symbol) +RuboCop::Cop::VariableForce::BRANCH_NODES = T.let(T.unsafe(nil), Array) + RuboCop::Cop::VariableForce::Branch::CLASSES_BY_TYPE = T.let(T.unsafe(nil), Hash) RuboCop::Cop::VariableForce::LOGICAL_OPERATOR_ASSIGNMENT_TYPES = T.let(T.unsafe(nil), Array) @@ -6920,7 +6934,7 @@ class RuboCop::ResultCache # # @api private # - # source://rubocop//lib/rubocop/result_cache.rb#229 + # source://rubocop//lib/rubocop/result_cache.rb#231 def context_checksum(team, options); end # @api private @@ -6939,7 +6953,7 @@ class RuboCop::ResultCache # # @api private # - # source://rubocop//lib/rubocop/result_cache.rb#220 + # source://rubocop//lib/rubocop/result_cache.rb#222 def relevant_options_digest(options); end # The checksum of the RuboCop program running the inspection. diff --git a/Library/Homebrew/sorbet/rbi/gems/ruby-lsp@0.25.0.rbi b/Library/Homebrew/sorbet/rbi/gems/ruby-lsp@0.26.1.rbi similarity index 100% rename from Library/Homebrew/sorbet/rbi/gems/ruby-lsp@0.25.0.rbi rename to Library/Homebrew/sorbet/rbi/gems/ruby-lsp@0.26.1.rbi diff --git a/Library/Homebrew/sorbet/rbi/gems/simplecov-cobertura@2.1.0.rbi b/Library/Homebrew/sorbet/rbi/gems/simplecov-cobertura@2.1.0.rbi deleted file mode 100644 index 587126f69d..0000000000 --- a/Library/Homebrew/sorbet/rbi/gems/simplecov-cobertura@2.1.0.rbi +++ /dev/null @@ -1,191 +0,0 @@ -# typed: true - -# DO NOT EDIT MANUALLY -# This is an autogenerated file for types exported from the `simplecov-cobertura` gem. -# Please instead update this file by running `bin/tapioca gem simplecov-cobertura`. - - -# source://simplecov-cobertura//lib/simplecov-cobertura/version.rb#1 -module SimpleCov - class << self - # source://simplecov/0.22.0/lib/simplecov.rb#174 - def at_exit_behavior; end - - # source://simplecov/0.22.0/lib/simplecov.rb#170 - def clear_result; end - - # source://simplecov/0.22.0/lib/simplecov.rb#86 - def collate(result_filenames, profile = T.unsafe(nil), ignore_timeout: T.unsafe(nil), &block); end - - # source://simplecov/0.22.0/lib/simplecov.rb#223 - def exit_and_report_previous_error(exit_status); end - - # source://simplecov/0.22.0/lib/simplecov.rb#200 - def exit_status_from_exception; end - - # source://simplecov/0.22.0/lib/simplecov.rb#28 - def external_at_exit; end - - # source://simplecov/0.22.0/lib/simplecov.rb#28 - def external_at_exit=(_arg0); end - - # source://simplecov/0.22.0/lib/simplecov.rb#28 - def external_at_exit?; end - - # source://simplecov/0.22.0/lib/simplecov.rb#131 - def filtered(files); end - - # source://simplecov/0.22.0/lib/simplecov.rb#268 - def final_result_process?; end - - # source://simplecov/0.22.0/lib/simplecov.rb#142 - def grouped(files); end - - # source://simplecov/0.22.0/lib/simplecov.rb#162 - def load_adapter(name); end - - # source://simplecov/0.22.0/lib/simplecov.rb#158 - def load_profile(name); end - - # source://simplecov/0.22.0/lib/simplecov.rb#24 - def pid; end - - # source://simplecov/0.22.0/lib/simplecov.rb#24 - def pid=(_arg0); end - - # source://simplecov/0.22.0/lib/simplecov.rb#213 - def previous_error?(error_exit_status); end - - # source://simplecov/0.22.0/lib/simplecov.rb#248 - def process_result(result); end - - # source://simplecov/0.22.0/lib/simplecov.rb#233 - def process_results_and_report_error; end - - # source://simplecov/0.22.0/lib/simplecov.rb#229 - def ready_to_process_results?; end - - # source://simplecov/0.22.0/lib/simplecov.rb#101 - def result; end - - # source://simplecov/0.22.0/lib/simplecov.rb#124 - def result?; end - - # source://simplecov/0.22.0/lib/simplecov.rb#256 - def result_exit_status(result); end - - # source://simplecov/0.22.0/lib/simplecov.rb#296 - def round_coverage(coverage); end - - # source://simplecov/0.22.0/lib/simplecov.rb#186 - def run_exit_tasks!; end - - # source://simplecov/0.22.0/lib/simplecov.rb#24 - def running; end - - # source://simplecov/0.22.0/lib/simplecov.rb#24 - def running=(_arg0); end - - # source://simplecov/0.22.0/lib/simplecov.rb#48 - def start(profile = T.unsafe(nil), &block); end - - # source://simplecov/0.22.0/lib/simplecov.rb#276 - def wait_for_other_processes; end - - # source://simplecov/0.22.0/lib/simplecov.rb#285 - def write_last_run(result); end - - private - - # source://simplecov/0.22.0/lib/simplecov.rb#399 - def adapt_coverage_result; end - - # source://simplecov/0.22.0/lib/simplecov.rb#371 - def add_not_loaded_files(result); end - - # source://simplecov/0.22.0/lib/simplecov.rb#302 - def initial_setup(profile, &block); end - - # source://simplecov/0.22.0/lib/simplecov.rb#363 - def lookup_corresponding_ruby_coverage_name(criterion); end - - # source://simplecov/0.22.0/lib/simplecov.rb#425 - def make_parallel_tests_available; end - - # source://simplecov/0.22.0/lib/simplecov.rb#434 - def probably_running_parallel_tests?; end - - # source://simplecov/0.22.0/lib/simplecov.rb#388 - def process_coverage_result; end - - # source://simplecov/0.22.0/lib/simplecov.rb#410 - def remove_useless_results; end - - # source://simplecov/0.22.0/lib/simplecov.rb#420 - def result_with_not_loaded_files; end - - # source://simplecov/0.22.0/lib/simplecov.rb#314 - def start_coverage_measurement; end - - # source://simplecov/0.22.0/lib/simplecov.rb#349 - def start_coverage_with_criteria; end - end -end - -# source://simplecov-cobertura//lib/simplecov-cobertura/version.rb#2 -module SimpleCov::Formatter; end - -# source://simplecov-cobertura//lib/simplecov-cobertura/version.rb#3 -class SimpleCov::Formatter::CoberturaFormatter - # @return [CoberturaFormatter] a new instance of CoberturaFormatter - # - # source://simplecov-cobertura//lib/simplecov-cobertura.rb#15 - def initialize(result_file_name: T.unsafe(nil)); end - - # source://simplecov-cobertura//lib/simplecov-cobertura.rb#19 - def format(result); end - - private - - # source://simplecov-cobertura//lib/simplecov-cobertura.rb#151 - def coverage_output(result); end - - # source://simplecov-cobertura//lib/simplecov-cobertura.rb#166 - def extract_rate(percent); end - - # source://simplecov-cobertura//lib/simplecov-cobertura.rb#170 - def project_root; end - - # source://simplecov-cobertura//lib/simplecov-cobertura.rb#162 - def resolve_filename(filename); end - - # source://simplecov-cobertura//lib/simplecov-cobertura.rb#36 - def result_to_xml(result); end - - # source://simplecov-cobertura//lib/simplecov-cobertura.rb#134 - def set_branch_attributes(line, file_line, branched_lines, branched_lines_covered); end - - # source://simplecov-cobertura//lib/simplecov-cobertura.rb#115 - def set_class_attributes(class_, file); end - - # source://simplecov-cobertura//lib/simplecov-cobertura.rb#86 - def set_coverage_attributes(coverage, result); end - - # source://simplecov-cobertura//lib/simplecov-cobertura.rb#129 - def set_line_attributes(line, file_line); end - - # source://simplecov-cobertura//lib/simplecov-cobertura.rb#103 - def set_package_attributes(package, name, result); end - - # source://simplecov-cobertura//lib/simplecov-cobertura.rb#144 - def set_xml_head(lines = T.unsafe(nil)); end -end - -# source://simplecov-cobertura//lib/simplecov-cobertura.rb#13 -SimpleCov::Formatter::CoberturaFormatter::DTD_URL = T.let(T.unsafe(nil), String) - -# source://simplecov-cobertura//lib/simplecov-cobertura.rb#12 -SimpleCov::Formatter::CoberturaFormatter::RESULT_FILE_NAME = T.let(T.unsafe(nil), String) - -# source://simplecov-cobertura//lib/simplecov-cobertura/version.rb#4 -SimpleCov::Formatter::CoberturaFormatter::VERSION = T.let(T.unsafe(nil), String) diff --git a/Library/Homebrew/sorbet/rbi/gems/simplecov-cobertura@3.0.0.rbi b/Library/Homebrew/sorbet/rbi/gems/simplecov-cobertura@3.0.0.rbi new file mode 100644 index 0000000000..f2bd37e7e7 --- /dev/null +++ b/Library/Homebrew/sorbet/rbi/gems/simplecov-cobertura@3.0.0.rbi @@ -0,0 +1,69 @@ +# typed: true + +# DO NOT EDIT MANUALLY +# This is an autogenerated file for types exported from the `simplecov-cobertura` gem. +# Please instead update this file by running `bin/tapioca gem simplecov-cobertura`. + + +# source://simplecov-cobertura//lib/simplecov-cobertura/version.rb#1 +module SimpleCov; end + +# source://simplecov-cobertura//lib/simplecov-cobertura/version.rb#2 +module SimpleCov::Formatter; end + +# source://simplecov-cobertura//lib/simplecov-cobertura/version.rb#3 +class SimpleCov::Formatter::CoberturaFormatter + # @return [CoberturaFormatter] a new instance of CoberturaFormatter + # + # source://simplecov-cobertura//lib/simplecov-cobertura.rb#13 + def initialize(result_file_name: T.unsafe(nil)); end + + # source://simplecov-cobertura//lib/simplecov-cobertura.rb#17 + def format(result); end + + private + + # source://simplecov-cobertura//lib/simplecov-cobertura.rb#162 + def extract_rate(percent); end + + # Roughly mirrors private method SimpleCov::Formatter::HTMLFormatter#output_coverage + # + # source://simplecov-cobertura//lib/simplecov-cobertura.rb#151 + def output_message(result, output_path); end + + # source://simplecov-cobertura//lib/simplecov-cobertura.rb#166 + def project_root; end + + # source://simplecov-cobertura//lib/simplecov-cobertura.rb#158 + def resolve_filename(filename); end + + # source://simplecov-cobertura//lib/simplecov-cobertura.rb#35 + def result_to_xml(result); end + + # source://simplecov-cobertura//lib/simplecov-cobertura.rb#133 + def set_branch_attributes(line, file_line, branched_lines, branched_lines_covered); end + + # source://simplecov-cobertura//lib/simplecov-cobertura.rb#114 + def set_class_attributes(class_, file); end + + # source://simplecov-cobertura//lib/simplecov-cobertura.rb#85 + def set_coverage_attributes(coverage, result); end + + # source://simplecov-cobertura//lib/simplecov-cobertura.rb#128 + def set_line_attributes(line, file_line); end + + # source://simplecov-cobertura//lib/simplecov-cobertura.rb#102 + def set_package_attributes(package, name, result); end + + # source://simplecov-cobertura//lib/simplecov-cobertura.rb#143 + def set_xml_head(lines = T.unsafe(nil)); end +end + +# source://simplecov-cobertura//lib/simplecov-cobertura.rb#11 +SimpleCov::Formatter::CoberturaFormatter::DTD_URL = T.let(T.unsafe(nil), String) + +# source://simplecov-cobertura//lib/simplecov-cobertura.rb#10 +SimpleCov::Formatter::CoberturaFormatter::RESULT_FILE_NAME = T.let(T.unsafe(nil), String) + +# source://simplecov-cobertura//lib/simplecov-cobertura/version.rb#4 +SimpleCov::Formatter::CoberturaFormatter::VERSION = T.let(T.unsafe(nil), String) diff --git a/Library/Homebrew/sorbet/rbi/gems/spoom@1.7.5.rbi b/Library/Homebrew/sorbet/rbi/gems/spoom@1.7.6.rbi similarity index 100% rename from Library/Homebrew/sorbet/rbi/gems/spoom@1.7.5.rbi rename to Library/Homebrew/sorbet/rbi/gems/spoom@1.7.6.rbi diff --git a/Library/Homebrew/tap.rb b/Library/Homebrew/tap.rb index 4d5d2df15e..76f40d5bbc 100644 --- a/Library/Homebrew/tap.rb +++ b/Library/Homebrew/tap.rb @@ -26,6 +26,8 @@ class Tap private_constant :HOMEBREW_TAP_PYPI_FORMULA_MAPPINGS_FILE HOMEBREW_TAP_SYNCED_VERSIONS_FORMULAE_FILE = "synced_versions_formulae.json" private_constant :HOMEBREW_TAP_SYNCED_VERSIONS_FORMULAE_FILE + HOMEBREW_TAP_DISABLED_NEW_USR_LOCAL_RELOCATION_FORMULAE_FILE = "disabled_new_usr_local_relocation_formulae.json" + private_constant :HOMEBREW_TAP_DISABLED_NEW_USR_LOCAL_RELOCATION_FORMULAE_FILE HOMEBREW_TAP_AUDIT_EXCEPTIONS_DIR = "audit_exceptions" private_constant :HOMEBREW_TAP_AUDIT_EXCEPTIONS_DIR HOMEBREW_TAP_STYLE_EXCEPTIONS_DIR = "style_exceptions" @@ -37,6 +39,7 @@ class Tap #{HOMEBREW_TAP_MIGRATIONS_FILE} #{HOMEBREW_TAP_PYPI_FORMULA_MAPPINGS_FILE} #{HOMEBREW_TAP_SYNCED_VERSIONS_FORMULAE_FILE} + #{HOMEBREW_TAP_DISABLED_NEW_USR_LOCAL_RELOCATION_FORMULAE_FILE} #{HOMEBREW_TAP_AUDIT_EXCEPTIONS_DIR}/*.json #{HOMEBREW_TAP_STYLE_EXCEPTIONS_DIR}/*.json ].freeze, T::Array[String]) @@ -143,6 +146,7 @@ class Tap class << self extend T::Generic + Elem = type_member(:out) { { fixed: Tap } } # @api public @@ -1034,7 +1038,7 @@ class Tap @autobump ||= T.let(autobump_packages.select do |_, p| next if p["disabled"] - next if p["deprecated"] && p["deprecation_reason"] != "unsigned" + next if p["deprecated"] && p["deprecation_reason"] != "fails_gatekeeper_check" next if p["skip_livecheck"] p["autobump"] == true @@ -1099,6 +1103,19 @@ class Tap ) end + # Array with formulae that should not be relocated to new /usr/local + sig { overridable.returns(T::Array[String]) } + def disabled_new_usr_local_relocation_formulae + @disabled_new_usr_local_relocation_formulae ||= T.let( + if (synced_file = path/HOMEBREW_TAP_DISABLED_NEW_USR_LOCAL_RELOCATION_FORMULAE_FILE).file? + JSON.parse(synced_file.read) + else + [] + end, + T.nilable(T::Array[String]), + ) + end + sig { returns(T::Boolean) } def should_report_analytics? installed? && !private? @@ -1345,13 +1362,18 @@ class CoreTap < AbstractCoreTap end, T.nilable(Pathname)) end - sig { override.params(name: String).returns(Pathname) } - def new_formula_path(name) - formula_subdir = if name.start_with?("lib") + sig { params(name: String).returns(String) } + def new_formula_subdirectory(name) + if name.start_with?("lib") "lib" else name[0].to_s end + end + + sig { override.params(name: String).returns(Pathname) } + def new_formula_path(name) + formula_subdir = new_formula_subdirectory(name) return super unless (formula_dir/formula_subdir).directory? @@ -1373,7 +1395,7 @@ class CoreTap < AbstractCoreTap ensure_installed! super else - Homebrew::API::Formula.all_renames + Homebrew::API.formula_renames end, T.nilable(T::Hash[String, String]), ) @@ -1386,7 +1408,7 @@ class CoreTap < AbstractCoreTap ensure_installed! super else - Homebrew::API::Formula.tap_migrations + Homebrew::API.formula_tap_migrations end, T.nilable(T::Hash[String, T.untyped]), ) @@ -1443,7 +1465,7 @@ class CoreTap < AbstractCoreTap if Homebrew::EnvConfig.no_install_from_api? super else - Homebrew::API::Formula.all_aliases + Homebrew::API.formula_aliases end, T.nilable(T::Hash[String, String]), ) @@ -1460,7 +1482,7 @@ class CoreTap < AbstractCoreTap def formula_names return super if Homebrew::EnvConfig.no_install_from_api? - Homebrew::API::Formula.all_formulae.keys + Homebrew::API.formula_names end sig { override.returns(T::Hash[String, Pathname]) } @@ -1469,13 +1491,12 @@ class CoreTap < AbstractCoreTap @formula_files_by_name ||= T.let( begin - tap_path = path.to_s - Homebrew::API::Formula.all_formulae.each_with_object({}) do |item, hash| - name, formula_hash = item + formula_directory_path = formula_dir.to_s + Homebrew::API.formula_names.each_with_object({}) do |name, hash| # If there's more than one item with the same path: use the longer one to prioritise more specific results. existing_path = hash[name] # Pathname equivalent is slow in a tight loop - new_path = File.join(tap_path, formula_hash.fetch("ruby_source_path")) + new_path = File.join(formula_directory_path, new_formula_subdirectory(name), "#{name.downcase}.rb") hash[name] = Pathname(new_path) if existing_path.nil? || existing_path.to_s.length < new_path.length end end, @@ -1500,14 +1521,18 @@ class CoreCaskTap < AbstractCoreTap true end - sig { override.params(token: String).returns(Pathname) } - def new_cask_path(token) - cask_subdir = if token.start_with?("font-") + sig { params(token: String).returns(String) } + def new_cask_subdirectory(token) + if token.start_with?("font-") "font/font-#{token.delete_prefix("font-")[0]}" else token[0].to_s end - cask_dir/cask_subdir/"#{token.downcase}.rb" + end + + sig { override.params(token: String).returns(Pathname) } + def new_cask_path(token) + cask_dir/new_cask_subdirectory(token)/"#{token.downcase}.rb" end sig { override.returns(T::Array[Pathname]) } @@ -1521,7 +1546,7 @@ class CoreCaskTap < AbstractCoreTap def cask_tokens return super if Homebrew::EnvConfig.no_install_from_api? - Homebrew::API::Cask.all_casks.keys + Homebrew::API.cask_tokens end sig { override.returns(T::Hash[String, Pathname]) } @@ -1530,13 +1555,12 @@ class CoreCaskTap < AbstractCoreTap @cask_files_by_name ||= T.let( begin - tap_path = path.to_s - Homebrew::API::Cask.all_casks.each_with_object({}) do |item, hash| - name, cask_hash = item + cask_directory_path = cask_dir.to_s + Homebrew::API.cask_tokens.each_with_object({}) do |name, hash| # If there's more than one item with the same path: use the longer one to prioritise more specific results. existing_path = hash[name] # Pathname equivalent is slow in a tight loop - new_path = File.join(tap_path, cask_hash.fetch("ruby_source_path")) + new_path = File.join(cask_directory_path, new_cask_subdirectory(name), "#{name.downcase}.rb") hash[name] = Pathname(new_path) if existing_path.nil? || existing_path.to_s.length < new_path.length end end, @@ -1550,7 +1574,7 @@ class CoreCaskTap < AbstractCoreTap if Homebrew::EnvConfig.no_install_from_api? super else - Homebrew::API::Cask.all_renames + Homebrew::API.cask_renames end, T.nilable(T::Hash[String, String]), ) @@ -1562,7 +1586,7 @@ class CoreCaskTap < AbstractCoreTap if Homebrew::EnvConfig.no_install_from_api? super else - Homebrew::API::Cask.tap_migrations + Homebrew::API.cask_tap_migrations end, T.nilable(T::Hash[String, T.untyped]), ) diff --git a/Library/Homebrew/test.rb b/Library/Homebrew/test.rb index 338e4d7d9b..1f2b1c8956 100644 --- a/Library/Homebrew/test.rb +++ b/Library/Homebrew/test.rb @@ -19,7 +19,10 @@ require "json/add/exception" DEFAULT_TEST_TIMEOUT_SECONDS = 5 * 60 begin - ENV.delete("HOMEBREW_FORBID_PACKAGES_FROM_PATHS") + # Undocumented opt-out for internal use. + # We need to allow formulae from paths here due to how we pass them through. + ENV["HOMEBREW_INTERNAL_ALLOW_PACKAGES_FROM_PATHS"] = "1" + args = Homebrew::DevCmd::Test.new.args Context.current = args.context @@ -55,8 +58,8 @@ begin end # Any exceptions during the test run are reported. rescue Exception => e # rubocop:disable Lint/RescueException - error_pipe.puts e.to_json - error_pipe.close + error_pipe&.puts e.to_json + error_pipe&.close ensure pid = Process.pid.to_s if which("pgrep") && which("pkill") && system("pgrep", "-P", pid, out: File::NULL) diff --git a/Library/Homebrew/test/api/internal_spec.rb b/Library/Homebrew/test/api/internal_spec.rb new file mode 100644 index 0000000000..13e6bed6b0 --- /dev/null +++ b/Library/Homebrew/test/api/internal_spec.rb @@ -0,0 +1,179 @@ +# frozen_string_literal: true + +require "api/internal" + +RSpec.describe Homebrew::API::Internal do + let(:cache_dir) { mktmpdir } + + before do + FileUtils.mkdir_p(cache_dir/"internal") + stub_const("Homebrew::API::HOMEBREW_CACHE_API", cache_dir) + end + + def mock_curl_download(stdout:) + allow(Utils::Curl).to receive(:curl_download) do |*_args, **kwargs| + kwargs[:to].write stdout + end + allow(Homebrew::API).to receive(:verify_and_parse_jws) do |json_data| + [true, json_data] + end + end + + context "for formulae" do + let(:formula_json) do + <<~JSON + { + "formulae": { + "foo": ["1.0.0", 0, "09f88b61e36045188ddb1b1ba8e402b9f3debee1770cc4ca91355eeccb5f4a38"], + "bar": ["0.4.0_5", 0, "bb6e3408f39a404770529cfce548dc2666e861077acd173825cb3138c27c205a"], + "baz": ["10.4.5_2", 2, "404c97537d65ca0b75c389e7d439dcefb9b56f34d3b98017669eda0d0501add7"] + }, + "aliases": { + "foo-alias1": "foo", + "foo-alias2": "foo", + "bar-alias": "bar" + }, + "renames": { + "foo-old": "foo", + "bar-old": "bar", + "baz-old": "baz" + }, + "tap_migrations": { + "abc": "some/tap", + "def": "another/tap" + } + } + JSON + end + let(:formula_arrays) do + { + "foo" => ["1.0.0", 0, "09f88b61e36045188ddb1b1ba8e402b9f3debee1770cc4ca91355eeccb5f4a38"], + "bar" => ["0.4.0_5", 0, "bb6e3408f39a404770529cfce548dc2666e861077acd173825cb3138c27c205a"], + "baz" => ["10.4.5_2", 2, "404c97537d65ca0b75c389e7d439dcefb9b56f34d3b98017669eda0d0501add7"], + } + end + let(:formula_stubs) do + formula_arrays.to_h do |name, (pkg_version, rebuild, sha256)| + stub = Homebrew::FormulaStub.new( + name: name, + pkg_version: PkgVersion.parse(pkg_version), + rebuild: rebuild, + sha256: sha256, + ) + [name, stub] + end + end + let(:formulae_aliases) do + { + "foo-alias1" => "foo", + "foo-alias2" => "foo", + "bar-alias" => "bar", + } + end + let(:formulae_renames) do + { + "foo-old" => "foo", + "bar-old" => "bar", + "baz-old" => "baz", + } + end + let(:formula_tap_migrations) do + { + "abc" => "some/tap", + "def" => "another/tap", + } + end + + it "returns the expected formula stubs" do + mock_curl_download stdout: formula_json + formula_stubs.each do |name, stub| + expect(described_class.formula_stub(name)).to eq stub + end + end + + it "returns the expected formula arrays" do + mock_curl_download stdout: formula_json + formula_arrays_output = described_class.formula_arrays + expect(formula_arrays_output).to eq formula_arrays + end + + it "returns the expected formula alias list" do + mock_curl_download stdout: formula_json + formula_aliases_output = described_class.formula_aliases + expect(formula_aliases_output).to eq formulae_aliases + end + + it "returns the expected formula rename list" do + mock_curl_download stdout: formula_json + formula_renames_output = described_class.formula_renames + expect(formula_renames_output).to eq formulae_renames + end + + it "returns the expected formula tap migrations list" do + mock_curl_download stdout: formula_json + formula_tap_migrations_output = described_class.formula_tap_migrations + expect(formula_tap_migrations_output).to eq formula_tap_migrations + end + end + + context "for casks" do + let(:cask_json) do + <<~JSON + { + "casks": { + "foo": { "version": "1.0.0" }, + "bar": { "version": "0.4.0" }, + "baz": { "version": "10.4.5" } + }, + "renames": { + "foo-old": "foo", + "bar-old": "bar", + "baz-old": "baz" + }, + "tap_migrations": { + "abc": "some/tap", + "def": "another/tap" + } + } + JSON + end + let(:cask_hashes) do + { + "foo" => { "version" => "1.0.0" }, + "bar" => { "version" => "0.4.0" }, + "baz" => { "version" => "10.4.5" }, + } + end + let(:cask_renames) do + { + "foo-old" => "foo", + "bar-old" => "bar", + "baz-old" => "baz", + } + end + let(:cask_tap_migrations) do + { + "abc" => "some/tap", + "def" => "another/tap", + } + end + + it "returns the expected cask hashes" do + mock_curl_download stdout: cask_json + cask_hashes_output = described_class.cask_hashes + expect(cask_hashes_output).to eq cask_hashes + end + + it "returns the expected cask rename list" do + mock_curl_download stdout: cask_json + cask_renames_output = described_class.cask_renames + expect(cask_renames_output).to eq cask_renames + end + + it "returns the expected cask tap migrations list" do + mock_curl_download stdout: cask_json + cask_tap_migrations_output = described_class.cask_tap_migrations + expect(cask_tap_migrations_output).to eq cask_tap_migrations + end + end +end diff --git a/Library/Homebrew/test/bottle_specification_spec.rb b/Library/Homebrew/test/bottle_specification_spec.rb index 51eed26c67..5c1888f7c2 100644 --- a/Library/Homebrew/test/bottle_specification_spec.rb +++ b/Library/Homebrew/test/bottle_specification_spec.rb @@ -23,7 +23,7 @@ RSpec.describe BottleSpecification do it "works with cellar" do checksums = [ - { cellar: :any_skip_relocation, tag: :arm64_big_sur, digest: "deadbeef" * 8 }, + { cellar: :any_skip_relocation, tag: :arm64_big_sur, digest: "deadbeef" * 8 }, { cellar: :any, tag: :big_sur, digest: "faceb00c" * 8 }, { cellar: "/usr/local/Cellar", tag: :catalina, digest: "baadf00d" * 8 }, { cellar: Homebrew::DEFAULT_CELLAR, tag: :mojave, digest: "8badf00d" * 8 }, diff --git a/Library/Homebrew/test/cask/artifact/symlinked_spec.rb b/Library/Homebrew/test/cask/artifact/symlinked_spec.rb new file mode 100644 index 0000000000..573310c14b --- /dev/null +++ b/Library/Homebrew/test/cask/artifact/symlinked_spec.rb @@ -0,0 +1,62 @@ +# frozen_string_literal: true + +RSpec.describe Cask::Artifact::Symlinked, :cask do + # Test the formula conflict detection functionality that applies to all symlinked artifacts + describe "#conflicting_formula" do + let(:cask) do + Cask::CaskLoader.load(cask_path("with-binary")).tap do |cask| + InstallHelper.install_without_artifacts(cask) + end + end + + let(:binary_artifact) { cask.artifacts.find { |a| a.is_a?(Cask::Artifact::Binary) } } + let(:binarydir) { cask.config.binarydir } + let(:target_path) { binarydir.join("binary") } + + around do |example| + binarydir.mkpath + + example.run + ensure + FileUtils.rm_f target_path + FileUtils.rmdir binarydir + # Clean up the fake formula directory + FileUtils.rm_rf(HOMEBREW_CELLAR/"with-binary") if (HOMEBREW_CELLAR/"with-binary").exist? + end + + context "when target is already linked from a formula" do + it "detects the conflict and skips linking with warning" do + # Create a fake formula directory structure + formula_cellar_path = HOMEBREW_CELLAR/"with-binary/1.0.0/bin" + formula_cellar_path.mkpath + formula_binary_path = formula_cellar_path/"binary" + FileUtils.touch formula_binary_path + + # Create symlink from the expected location to the formula binary + target_path.make_symlink(formula_binary_path) + + stderr = <<~EOS + Warning: It seems there is already a Binary at '#{target_path}' from formula with-binary; skipping link. + EOS + + expect do + binary_artifact.install_phase(command: NeverSudoSystemCommand, force: false) + end.to output(stderr).to_stderr + + expect(target_path).to be_a_symlink + expect(target_path.readlink).to eq(formula_binary_path) + end + end + + context "when target doesn't exist" do + it "proceeds with normal installation" do + expect do + binary_artifact.install_phase(command: NeverSudoSystemCommand, force: false) + end.not_to raise_error + + expect(target_path).to be_a_symlink + expect(target_path.readlink).to exist + end + end + end +end diff --git a/Library/Homebrew/test/cask/audit_spec.rb b/Library/Homebrew/test/cask/audit_spec.rb index 04f52dc4de..7ee1cf489c 100644 --- a/Library/Homebrew/test/cask/audit_spec.rb +++ b/Library/Homebrew/test/cask/audit_spec.rb @@ -453,6 +453,7 @@ RSpec.describe Cask::Audit, :cask do describe "signing checks" do let(:only) { ["signing"] } + let(:tap) { CoreCaskTap.instance } let(:download_double) { instance_double(Cask::Download) } let(:unpack_double) { instance_double(UnpackStrategy::Zip) } @@ -495,6 +496,31 @@ RSpec.describe Cask::Audit, :cask do expect(run).not_to error_with(/Audit\.app/) end end + + context "when quarantine support is not available" do + let(:cask) do + tmp_cask "signing-cask-test", <<~RUBY + cask 'signing-cask-test' do + version '1.0' + url "https://brew.sh/" + app 'Audit.app' + end + RUBY + end + + before do + allow(cask).to receive(:tap).and_return(tap) + + allow(Cask::Quarantine).to receive(:available?).and_return(false) + end + + it "skips signing audit with warning" do + allow(cask).to receive(:tap).and_return(tap) + + expect(audit).to receive(:odebug).with("Quarantine support is not available, skipping signing audit") + expect(run).not_to error_with(/Signature verification failed/) + end + end end describe "livecheck should be skipped", :no_api do diff --git a/Library/Homebrew/test/cask/cask_spec.rb b/Library/Homebrew/test/cask/cask_spec.rb index e08e8f90e4..106fd94625 100644 --- a/Library/Homebrew/test/cask/cask_spec.rb +++ b/Library/Homebrew/test/cask/cask_spec.rb @@ -533,5 +533,21 @@ RSpec.describe Cask::Cask, :cask do expect(h["artifacts"].first[:binary].first).to eq "$APPDIR/some/path" expect(h["caveats"]).to eq "$HOMEBREW_PREFIX and /$HOME\n" end + + context "when loaded from json file" do + let(:expected_json) { (TEST_FIXTURE_DIR/"cask/everything-with-variations.json").read.strip } + + it "returns expected hash with variations" do + expect(Homebrew::API::Cask).not_to receive(:source_download) + cask = Cask::CaskLoader::FromAPILoader.new("everything-with-variations", from_json: JSON.parse(expected_json)) + .load(config: nil) + + hash = cask.to_hash_with_variations + + expect(cask.loaded_from_api?).to be true + expect(hash).to be_a(Hash) + expect(JSON.pretty_generate(hash)).to eq(expected_json) + end + end end end diff --git a/Library/Homebrew/test/cask/dsl/rename_spec.rb b/Library/Homebrew/test/cask/dsl/rename_spec.rb new file mode 100644 index 0000000000..9b979cf2a5 --- /dev/null +++ b/Library/Homebrew/test/cask/dsl/rename_spec.rb @@ -0,0 +1,114 @@ +# frozen_string_literal: true + +RSpec.describe Cask::DSL::Rename do + subject(:rename) { described_class.new(from, to) } + + let(:from) { "Source File*.pkg" } + let(:to) { "Target File.pkg" } + + describe "#initialize" do + it "sets the from and to attributes" do + expect(rename.from).to eq("Source File*.pkg") + expect(rename.to).to eq("Target File.pkg") + end + end + + describe "#pairs" do + it "returns the attributes as a hash" do + expect(rename.pairs).to eq(from: "Source File*.pkg", to: "Target File.pkg") + end + end + + describe "#to_s" do + it "returns the stringified attributes" do + expect(rename.to_s).to eq(rename.pairs.inspect) + end + end + + describe "#perform_rename" do + let(:tmpdir) { mktmpdir } + let(:staged_path) { Pathname(tmpdir) } + + context "when staged_path does not exist" do + let(:staged_path) { Pathname("/nonexistent/path") } + + it "does nothing" do + expect { rename.perform_rename(staged_path) }.not_to raise_error + end + end + + context "when using glob patterns" do + let(:from) { "Test App*.pkg" } + let(:to) { "Test App.pkg" } + + before do + (staged_path / "Test App v1.2.3.pkg").write("test content") + (staged_path / "Test App v2.0.0.pkg").write("other content") + end + + it "renames the first matching file" do + rename.perform_rename(staged_path) + + expect(staged_path / "Test App.pkg").to exist + expect((staged_path / "Test App.pkg").read).to eq("test content") + expect(staged_path / "Test App v1.2.3.pkg").not_to exist + expect(staged_path / "Test App v2.0.0.pkg").to exist + end + end + + context "when using exact filenames" do + let(:from) { "Exact File.dmg" } + let(:to) { "New Name.dmg" } + + before do + (staged_path / "Exact File.dmg").write("dmg content") + end + + it "renames the exact file" do + rename.perform_rename(staged_path) + + expect(staged_path / "New Name.dmg").to exist + expect((staged_path / "New Name.dmg").read).to eq("dmg content") + expect(staged_path / "Exact File.dmg").not_to exist + end + end + + context "when target is in a subdirectory" do + let(:from) { "source.txt" } + let(:to) { "subdir/target.txt" } + + before do + (staged_path / "source.txt").write("content") + end + + it "creates the subdirectory and renames the file" do + rename.perform_rename(staged_path) + + expect(staged_path / "subdir" / "target.txt").to exist + expect((staged_path / "subdir" / "target.txt").read).to eq("content") + expect(staged_path / "source.txt").not_to exist + end + end + + context "when no files match the pattern" do + let(:from) { "nonexistent*.pkg" } + let(:to) { "target.pkg" } + + it "does nothing" do + rename.perform_rename(staged_path) + + expect(staged_path / "target.pkg").not_to exist + end + end + + context "when source file doesn't exist after glob" do + let(:from) { "missing.txt" } + let(:to) { "target.txt" } + + it "does nothing" do + expect { rename.perform_rename(staged_path) }.not_to raise_error + expect(staged_path / "target.txt").not_to exist + end + end + end +end diff --git a/Library/Homebrew/test/cask/dsl_spec.rb b/Library/Homebrew/test/cask/dsl_spec.rb index b93c6a33ff..9b1ef7102f 100644 --- a/Library/Homebrew/test/cask/dsl_spec.rb +++ b/Library/Homebrew/test/cask/dsl_spec.rb @@ -598,4 +598,29 @@ RSpec.describe Cask::DSL, :cask, :no_api do ] end end + + describe "rename stanza" do + it "allows setting single rename operation" do + cask = Cask::Cask.new("rename-cask") do + rename "Source*.pkg", "Target.pkg" + end + + expect(cask.rename.length).to eq(1) + expect(cask.rename.first.from).to eq("Source*.pkg") + expect(cask.rename.first.to).to eq("Target.pkg") + end + + it "allows setting multiple rename operations" do + cask = Cask::Cask.new("multi-rename-cask") do + rename "App*.pkg", "App.pkg" + rename "Doc*.dmg", "Doc.dmg" + end + + expect(cask.rename.length).to eq(2) + expect(cask.rename.first.from).to eq("App*.pkg") + expect(cask.rename.first.to).to eq("App.pkg") + expect(cask.rename.last.from).to eq("Doc*.dmg") + expect(cask.rename.last.to).to eq("Doc.dmg") + end + end end diff --git a/Library/Homebrew/test/cask/installer_spec.rb b/Library/Homebrew/test/cask/installer_spec.rb index 0aceb687a1..4702de3467 100644 --- a/Library/Homebrew/test/cask/installer_spec.rb +++ b/Library/Homebrew/test/cask/installer_spec.rb @@ -423,4 +423,94 @@ RSpec.describe Cask::Installer, :cask do end.to raise_error(Cask::CaskCannotBeInstalledError, /#{dep_name} formula was forbidden/) end end + + describe "rename operations" do + let(:tmpdir) { mktmpdir } + let(:staged_path) { Pathname(tmpdir) } + + after do + FileUtils.rm_rf(tmpdir) if tmpdir && File.exist?(tmpdir) + end + + it "processes rename operations after extraction" do + # Create test files + (staged_path / "Original App.app").mkpath + (staged_path / "Original App.app" / "Contents").mkpath + + cask = Cask::Cask.new("rename-test-cask") do + url "file://#{TEST_FIXTURE_DIR}/cask/caffeine.zip" + rename "Original App.app", "Renamed App.app" + app "Renamed App.app" + end + + # Mock the staged_path to point to our test directory + allow(cask).to receive(:staged_path).and_return(staged_path) + + installer = described_class.new(cask) + installer.send(:process_rename_operations) + + expect(staged_path / "Renamed App.app").to be_a_directory + expect(staged_path / "Original App.app").not_to exist + end + + it "handles multiple rename operations in order" do + # Create test file + (staged_path / "Original.app").mkpath + + cask = Cask::Cask.new("multi-rename-test-cask") do + url "file://#{TEST_FIXTURE_DIR}/cask/caffeine.zip" + rename "Original.app", "First Rename.app" + rename "First Rename.app", "Final Name.app" + app "Final Name.app" + end + + allow(cask).to receive(:staged_path).and_return(staged_path) + + installer = described_class.new(cask) + installer.send(:process_rename_operations) + + expect(staged_path / "Final Name.app").to be_a_directory + expect(staged_path / "Original.app").not_to exist + expect(staged_path / "First Rename.app").not_to exist + end + + it "handles glob patterns in rename operations" do + # Create test file with version + (staged_path / "Test App v1.2.3.pkg").write("test content") + + cask = Cask::Cask.new("glob-rename-test-cask") do + url "file://#{TEST_FIXTURE_DIR}/cask/caffeine.zip" + rename "Test App*.pkg", "Test App.pkg" + pkg "Test App.pkg" + end + + allow(cask).to receive(:staged_path).and_return(staged_path) + + installer = described_class.new(cask) + installer.send(:process_rename_operations) + + expect(staged_path / "Test App.pkg").to be_a_file + expect((staged_path / "Test App.pkg").read).to eq("test content") + expect(staged_path / "Test App v1.2.3.pkg").not_to exist + end + + it "does nothing when no files match rename pattern" do + # Create a different file + (staged_path / "Different.app").mkpath + + cask = Cask::Cask.new("no-match-rename-test-cask") do + url "file://#{TEST_FIXTURE_DIR}/cask/caffeine.zip" + rename "NonExistent*.app", "Target.app" + app "Different.app" + end + + allow(cask).to receive(:staged_path).and_return(staged_path) + + installer = described_class.new(cask) + + expect { installer.send(:process_rename_operations) }.not_to raise_error + expect(staged_path / "Different.app").to be_a_directory + expect(staged_path / "Target.app").not_to exist + end + end end diff --git a/Library/Homebrew/test/cmd/fetch_spec.rb b/Library/Homebrew/test/cmd/fetch_spec.rb index f63c977f9b..b8a8241ca0 100644 --- a/Library/Homebrew/test/cmd/fetch_spec.rb +++ b/Library/Homebrew/test/cmd/fetch_spec.rb @@ -26,14 +26,4 @@ RSpec.describe Homebrew::Cmd::FetchCmd do expect(HOMEBREW_CACHE/"testball2--0.1.tbz").to be_a_symlink expect(HOMEBREW_CACHE/"testball2--0.1.tbz").to exist end - - it "errors when concurrently downloading to the same destination", :integration_test do - # This test will fail if the fetch is not performed concurrently. - # N.B. this test relies on how we set up test formulae, see the `integration_test` shared context. - setup_test_formula "testball1" - setup_test_formula "testball3" - - expect { brew "fetch", "testball1", "testball3", "HOMEBREW_DOWNLOAD_CONCURRENCY" => "2" }.to be_a_failure - .and output(/Error:.*process has already locked/).to_stderr - end end diff --git a/Library/Homebrew/test/cmd/install_spec.rb b/Library/Homebrew/test/cmd/install_spec.rb index 9dda4ca985..c2f06013fd 100644 --- a/Library/Homebrew/test/cmd/install_spec.rb +++ b/Library/Homebrew/test/cmd/install_spec.rb @@ -5,6 +5,7 @@ require "cmd/shared_examples/args_parse" RSpec.describe Homebrew::Cmd::InstallCmd do include FileUtils + it_behaves_like "parseable arguments" it "installs formulae", :integration_test do diff --git a/Library/Homebrew/test/cmd/upgrade_spec.rb b/Library/Homebrew/test/cmd/upgrade_spec.rb index be692d8ae0..c39a27901a 100644 --- a/Library/Homebrew/test/cmd/upgrade_spec.rb +++ b/Library/Homebrew/test/cmd/upgrade_spec.rb @@ -5,6 +5,7 @@ require "cmd/upgrade" RSpec.describe Homebrew::Cmd::UpgradeCmd do include FileUtils + it_behaves_like "parseable arguments" it "upgrades a Formula and cleans up old versions", :integration_test do @@ -17,6 +18,18 @@ RSpec.describe Homebrew::Cmd::UpgradeCmd do expect(HOMEBREW_CELLAR/"testball/0.0.1").not_to exist end + it "links newer version when upgrade was interrupted", :integration_test do + setup_test_formula "testball" + + (HOMEBREW_CELLAR/"testball/0.1/foo").mkpath + + expect { brew "upgrade" }.to be_a_success + + expect(HOMEBREW_CELLAR/"testball/0.1").to be_a_directory + expect(HOMEBREW_PREFIX/"opt/testball").to be_a_symlink + expect(HOMEBREW_PREFIX/"var/homebrew/linked/testball").to be_a_symlink + end + it "upgrades with asking for user prompts", :integration_test do setup_test_formula "testball" (HOMEBREW_CELLAR/"testball/0.0.1/foo").mkpath diff --git a/Library/Homebrew/test/dependable_spec.rb b/Library/Homebrew/test/dependable_spec.rb index f9f38d078c..0a561ccf74 100644 --- a/Library/Homebrew/test/dependable_spec.rb +++ b/Library/Homebrew/test/dependable_spec.rb @@ -8,6 +8,7 @@ RSpec.describe Dependable do subject(:dependable) do Class.new do include Dependable + def initialize @tags = ["foo", "bar", :build] end diff --git a/Library/Homebrew/test/dev-cmd/bump_spec.rb b/Library/Homebrew/test/dev-cmd/bump_spec.rb index 31e7447e23..abfaf735f8 100644 --- a/Library/Homebrew/test/dev-cmd/bump_spec.rb +++ b/Library/Homebrew/test/dev-cmd/bump_spec.rb @@ -11,7 +11,7 @@ RSpec.describe Homebrew::DevCmd::Bump do content = <<~RUBY desc "HEAD-only test formula" homepage "https://brew.sh" - head "https://github.com/Homebrew/brew.git" + head "https://github.com/Homebrew/brew.git", branch: "main" RUBY setup_test_formula("headonly", content) diff --git a/Library/Homebrew/test/env_config_spec.rb b/Library/Homebrew/test/env_config_spec.rb index 39a2613fbf..d0d938f96e 100644 --- a/Library/Homebrew/test/env_config_spec.rb +++ b/Library/Homebrew/test/env_config_spec.rb @@ -69,4 +69,34 @@ RSpec.describe Homebrew::EnvConfig do expect(env_config.make_jobs).to eql("16") end end + + describe ".forbid_packages_from_paths?" do + before do + ENV["HOMEBREW_FORBID_PACKAGES_FROM_PATHS"] = nil + ENV["HOMEBREW_DEVELOPER"] = nil + ENV["HOMEBREW_TESTS"] = nil + end + + it "returns true if HOMEBREW_FORBID_PACKAGES_FROM_PATHS is set" do + ENV["HOMEBREW_FORBID_PACKAGES_FROM_PATHS"] = "1" + expect(env_config.forbid_packages_from_paths?).to be(true) + end + + it "returns true if HOMEBREW_DEVELOPER is not set" do + ENV["HOMEBREW_DEVELOPER"] = nil + expect(env_config.forbid_packages_from_paths?).to be(true) + end + + it "returns false if HOMEBREW_DEVELOPER is set and HOMEBREW_FORBID_PACKAGES_FROM_PATHS is not set" do + ENV["HOMEBREW_DEVELOPER"] = "1" + ENV["HOMEBREW_FORBID_PACKAGES_FROM_PATHS"] = nil + expect(env_config.forbid_packages_from_paths?).to be(false) + end + + it "returns true if both HOMEBREW_DEVELOPER and HOMEBREW_FORBID_PACKAGES_FROM_PATHS are set" do + ENV["HOMEBREW_DEVELOPER"] = "1" + ENV["HOMEBREW_FORBID_PACKAGES_FROM_PATHS"] = "1" + expect(env_config.forbid_packages_from_paths?).to be(true) + end + end end diff --git a/Library/Homebrew/test/extend/kernel_spec.rb b/Library/Homebrew/test/extend/kernel_spec.rb index 238f4573e3..7d595d3f8a 100644 --- a/Library/Homebrew/test/extend/kernel_spec.rb +++ b/Library/Homebrew/test/extend/kernel_spec.rb @@ -144,32 +144,6 @@ RSpec.describe Kernel do end end - describe "#which_all" do - let(:cmd_foo) { dir/"foo" } - let(:cmd_foo_bar) { dir/"bar/foo" } - let(:cmd_bar_baz_foo) { dir/"bar/baz/foo" } - - before do - (dir/"bar/baz").mkpath - - FileUtils.touch cmd_foo_bar - - [cmd_foo, cmd_bar_baz_foo].each do |cmd| - FileUtils.touch cmd - cmd.chmod 0744 - end - end - - it "returns an array of all executables that are found" do - path = [ - "#{dir}/bar/baz", - "#{dir}/baz:#{dir}", - "~baduserpath", - ].join(File::PATH_SEPARATOR) - expect(which_all("foo", path)).to eq([cmd_bar_baz_foo, cmd_foo]) - end - end - specify "#which_editor" do ENV["HOMEBREW_EDITOR"] = "vemate -w" ENV["HOMEBREW_PATH"] = dir diff --git a/Library/Homebrew/test/formula_auditor_spec.rb b/Library/Homebrew/test/formula_auditor_spec.rb index a442e03d42..9c5253ac1a 100644 --- a/Library/Homebrew/test/formula_auditor_spec.rb +++ b/Library/Homebrew/test/formula_auditor_spec.rb @@ -285,7 +285,7 @@ RSpec.describe Homebrew::FormulaAuditor do formula_text = <<~RUBY class Cask < Formula url "https://github.com/cask/cask/archive/v0.8.4.tar.gz" - head "https://github.com/cask/cask.git" + head "https://github.com/cask/cask.git", branch: "main" license "GPL-3.0-or-later" end RUBY @@ -301,7 +301,7 @@ RSpec.describe Homebrew::FormulaAuditor do formula_text = <<~RUBY class Cask < Formula url "https://github.com/cask/cask/archive/v0.8.4.tar.gz" - head "https://github.com/cask/cask.git" + head "https://github.com/cask/cask.git", branch: "main" license all_of: ["GPL-3.0-or-later", "MIT"] end RUBY @@ -317,7 +317,7 @@ RSpec.describe Homebrew::FormulaAuditor do formula_text = <<~RUBY class Cask < Formula url "https://github.com/cask/cask/archive/v0.8.4.tar.gz" - head "https://github.com/cask/cask.git" + head "https://github.com/cask/cask.git", branch: "main" license "GPL-3.0-or-later" => { with: "LLVM-exception" } end RUBY @@ -332,7 +332,7 @@ RSpec.describe Homebrew::FormulaAuditor do formula_text = <<~RUBY class Cask < Formula url "https://github.com/cask/cask/archive/v0.8.4.tar.gz" - head "https://github.com/cask/cask.git" + head "https://github.com/cask/cask.git", branch: "main" license "GPL-3.0-or-later" => { with: "zzz" } end RUBY @@ -351,7 +351,7 @@ RSpec.describe Homebrew::FormulaAuditor do formula_text = <<~RUBY class Cask < Formula url "https://github.com/cask/cask/archive/v0.8.4.tar.gz" - head "https://github.com/cask/cask.git" + head "https://github.com/cask/cask.git", branch: "main" license "GPL-3.0-or-later" => { with: "#{deprecated_spdx_exception}" } end RUBY @@ -371,7 +371,7 @@ RSpec.describe Homebrew::FormulaAuditor do fa = formula_auditor "cask", <<~RUBY, spdx_license_data:, online: true, new_formula: true class Cask < Formula url "https://github.com/cask/cask/archive/v0.8.4.tar.gz" - head "https://github.com/cask/cask.git" + head "https://github.com/cask/cask.git", branch: "main" license "GPL-3.0-or-later" end RUBY @@ -385,7 +385,7 @@ RSpec.describe Homebrew::FormulaAuditor do fa = formula_auditor "cask", <<~RUBY, spdx_license_data:, online: true, new_formula: true class Cask < Formula url "https://github.com/cask/cask/archive/v0.8.4.tar.gz" - head "https://github.com/cask/cask.git" + head "https://github.com/cask/cask.git", branch: "main" license any_of: ["GPL-3.0-or-later", "MIT"] end RUBY @@ -399,7 +399,7 @@ RSpec.describe Homebrew::FormulaAuditor do formula_text = <<~RUBY class Cask < Formula url "https://github.com/cask/cask/archive/v0.8.4.tar.gz" - head "https://github.com/cask/cask.git" + head "https://github.com/cask/cask.git", branch: "main" license "0BSD" end RUBY @@ -416,7 +416,7 @@ RSpec.describe Homebrew::FormulaAuditor do formula_text = <<~RUBY class Cask < Formula url "https://github.com/cask/cask/archive/v0.8.4.tar.gz" - head "https://github.com/cask/cask.git" + head "https://github.com/cask/cask.git", branch: "main" license "0BSD" end RUBY @@ -433,7 +433,7 @@ RSpec.describe Homebrew::FormulaAuditor do formula_text = <<~RUBY class Cask < Formula url "https://github.com/cask/cask/archive/v0.8.4.tar.gz" - head "https://github.com/cask/cask.git" + head "https://github.com/cask/cask.git", branch: "main" license #{license_any_mismatch} end RUBY @@ -450,7 +450,7 @@ RSpec.describe Homebrew::FormulaAuditor do formula_text = <<~RUBY class Cask < Formula url "https://github.com/cask/cask/archive/v0.8.4.tar.gz" - head "https://github.com/cask/cask.git" + head "https://github.com/cask/cask.git", branch: "main" license #{license_any} end RUBY @@ -714,6 +714,78 @@ RSpec.describe Homebrew::FormulaAuditor do expect(fa.problems).to be_empty end + it "requires `branch:` to be specified for Git head URLs" do + fa = formula_auditor "foo", <<~RUBY, online: true + class Foo < Formula + url "https://brew.sh/foo-1.0.tgz" + sha256 "31cccfc6630528db1c8e3a06f6decf2a370060b982841cfab2b8677400a5092e" + head "https://github.com/Homebrew/homebrew-test-bot.git" + end + RUBY + + fa.audit_specs + # This is `.last` because the first problem is the unreachable stable URL. + expect(fa.problems.last[:message]).to match("Git `head` URL must specify a branch name") + end + + it "suggests a detected default branch for Git head URLs" do + fa = formula_auditor "foo", <<~RUBY, online: true + class Foo < Formula + url "https://brew.sh/foo-1.0.tgz" + sha256 "31cccfc6630528db1c8e3a06f6decf2a370060b982841cfab2b8677400a5092e" + head "https://github.com/Homebrew/homebrew-test-bot.git", branch: "master" + end + RUBY + + message = "Git `head` URL must specify a branch name - try `branch: \"main\"`" + fa.audit_specs + # This is `.last` because the first problem is the unreachable stable URL. + expect(fa.problems.last[:message]).to match(message) + end + + it "ignores a pre-existing correct HEAD branch name" do + fa = formula_auditor "foo", <<~RUBY, online: true + class Foo < Formula + url "https://brew.sh/foo-1.0.tgz" + sha256 "31cccfc6630528db1c8e3a06f6decf2a370060b982841cfab2b8677400a5092e" + head "https://github.com/Homebrew/homebrew-test-bot.git", branch: "main" + end + RUBY + + fa.audit_specs + expect(fa.problems).not_to match("Git `head` URL must specify a branch name") + end + + it "ignores `branch:` for non-Git head URLs" do + fa = formula_auditor "foo", <<~RUBY, online: true + class Foo < Formula + url "https://brew.sh/foo-1.0.tgz" + sha256 "31cccfc6630528db1c8e3a06f6decf2a370060b982841cfab2b8677400a5092e" + head "https://brew.sh/foo.tgz", branch: "develop" + end + RUBY + + fa.audit_specs + expect(fa.problems).not_to match("Git `head` URL must specify a branch name") + end + + it "ignores `branch:` for `resource` URLs" do + fa = formula_auditor "foo", <<~RUBY, online: true + class Foo < Formula + url "https://brew.sh/foo-1.0.tgz" + sha256 "31cccfc6630528db1c8e3a06f6decf2a370060b982841cfab2b8677400a5092e" + + resource "bar" do + url "https://raw.githubusercontent.com/Homebrew/homebrew-core/HEAD/Formula/bar.rb" + sha256 "31cccfc6630528db1c8e3a06f6decf2a370060b982841cfab2b8677400a5092e" + end + end + RUBY + + fa.audit_specs + expect(fa.problems).not_to match("Git `head` URL must specify a branch name") + end + it "allows versions with no throttle rate" do fa = formula_auditor "bar", <<~RUBY, core_tap: true class Bar < Formula @@ -762,7 +834,7 @@ RSpec.describe Homebrew::FormulaAuditor do RUBY fa.audit_specs - expect(fa.problems.first[:message]).to match "should only be updated every 10 releases on multiples of 10" + expect(fa.problems.first[:message]).to match "Should only be updated every 10 releases on multiples of 10" end it "allows non-versioned formulae to have a `HEAD` spec" do @@ -770,7 +842,7 @@ RSpec.describe Homebrew::FormulaAuditor do class Bar < Formula url "https://brew.sh/foo-1.0.tgz" sha256 "31cccfc6630528db1c8e3a06f6decf2a370060b982841cfab2b8677400a5092e" - head "https://brew.sh/foo.git" + head "https://brew.sh/foo.git", branch: "develop" end RUBY @@ -783,7 +855,7 @@ RSpec.describe Homebrew::FormulaAuditor do class BarAT1 < Formula url "https://brew.sh/foo-1.0.tgz" sha256 "31cccfc6630528db1c8e3a06f6decf2a370060b982841cfab2b8677400a5092e" - head "https://brew.sh/foo.git" + head "https://brew.sh/foo.git", branch: "develop" end RUBY @@ -796,7 +868,7 @@ RSpec.describe Homebrew::FormulaAuditor do class Foo < Formula url "https://brew.sh/foo-1.0.tgz" sha256 "31cccfc6630528db1c8e3a06f6decf2a370060b982841cfab2b8677400a5092e" - head "https://brew.sh/foo.git" + head "https://brew.sh/foo.git", branch: "develop" end RUBY diff --git a/Library/Homebrew/test/formula_spec.rb b/Library/Homebrew/test/formula_spec.rb index ada1618966..9925d05ce6 100644 --- a/Library/Homebrew/test/formula_spec.rb +++ b/Library/Homebrew/test/formula_spec.rb @@ -1364,6 +1364,10 @@ RSpec.describe Formula do def setup_tab_for_prefix(prefix, options = {}) prefix.mkpath + + keg = Keg.new(prefix) + keg.optlink + tab = Tab.empty tab.tabfile = prefix/AbstractTab::FILENAME tab.source["path"] = options[:path].to_s if options[:path] @@ -1396,6 +1400,12 @@ RSpec.describe Formula do expect(f.outdated_kegs).not_to be_empty end + example "outdated unlinked tap installed" do + setup_tab_for_prefix(same_prefix) + Keg.new(same_prefix).remove_opt_record + expect(f.outdated_kegs).not_to be_empty + end + example "outdated follow alias and alias unchanged" do f.follow_installed_alias = true f.build = setup_tab_for_prefix(same_prefix, path: alias_path) diff --git a/Library/Homebrew/test/formula_validation_spec.rb b/Library/Homebrew/test/formula_validation_spec.rb index e578d79dce..96a5a682b1 100644 --- a/Library/Homebrew/test/formula_validation_spec.rb +++ b/Library/Homebrew/test/formula_validation_spec.rb @@ -68,7 +68,7 @@ RSpec.describe Formula do end.to fail_with_invalid :version end - specify "head-only is valid" do + specify "HEAD-only is valid" do f = formula do head "foo" end diff --git a/Library/Homebrew/test/formulary_spec.rb b/Library/Homebrew/test/formulary_spec.rb index 64897d7c30..3ab0bafb71 100644 --- a/Library/Homebrew/test/formulary_spec.rb +++ b/Library/Homebrew/test/formulary_spec.rb @@ -126,7 +126,7 @@ RSpec.describe Formulary do described_class.factory(temp_formula_path) ensure temp_formula_path.unlink - end.to raise_error(FormulaUnavailableError) + end.to raise_error(RuntimeError, /requires formulae to be in a tap, rejecting/) end it "returns a Formula when given a URL", :needs_utils_curl do @@ -141,6 +141,21 @@ RSpec.describe Formulary do end.to raise_error(FormulaUnavailableError) end + it "allows cache paths even when paths are disabled" do + ENV["HOMEBREW_FORBID_PACKAGES_FROM_PATHS"] = "1" + cache_dir = HOMEBREW_CACHE/"test_formula_cache" + cache_dir.mkpath + cache_formula_path = cache_dir/formula_path.basename + FileUtils.cp formula_path, cache_formula_path + begin + formula = described_class.factory(cache_formula_path) + expect(formula).to be_a(Formula) + ensure + cache_formula_path.unlink if cache_formula_path.exist? + cache_dir.rmdir if cache_dir.exist? + end + end + context "when given a bottle" do subject(:formula) { described_class.factory(bottle) } @@ -292,8 +307,12 @@ RSpec.describe Formulary do def formula_json_contents(extra_items = {}) { formula_name => { + "name" => formula_name, "desc" => "testball", "homepage" => "https://example.com", + "installed" => [], + "outdated" => false, + "pinned" => false, "license" => "MIT", "revision" => 0, "version_scheme" => 0, @@ -340,6 +359,7 @@ RSpec.describe Formulary do "conflicts_with" => ["conflicting_formula"], "conflicts_with_reasons" => ["it does"], "link_overwrite" => ["bin/abc"], + "linked_keg" => nil, "caveats" => "example caveat string\n/$HOME\n$HOMEBREW_PREFIX", "service" => { "name" => { macos: "custom.launchd.name", linux: "custom.systemd.name" }, @@ -447,6 +467,17 @@ RSpec.describe Formulary do end.to raise_error("Cannot build from source from abstract formula.") end + it "returns a Formula that can regenerate its JSON API" do + allow(Homebrew::API::Formula).to receive(:all_formulae).and_return formula_json_contents + + formula = described_class.factory(formula_name) + expect(formula).to be_a(Formula) + expect(formula.loaded_from_api?).to be true + + expected_hash = formula_json_contents[formula_name] + expect(formula.to_hash_with_variations).to eq(expected_hash) + end + it "returns a deprecated Formula when given a name" do allow(Homebrew::API::Formula).to receive(:all_formulae).and_return formula_json_contents(deprecate_json) diff --git a/Library/Homebrew/test/lazy_object_spec.rb b/Library/Homebrew/test/lazy_object_spec.rb index cd925f68a5..6fe87bcdfb 100644 --- a/Library/Homebrew/test/lazy_object_spec.rb +++ b/Library/Homebrew/test/lazy_object_spec.rb @@ -19,7 +19,7 @@ RSpec.describe LazyObject do describe "#!" do it "delegates to the underlying object" do - expect(!(described_class.new { false })).to be true + expect(!described_class.new { false }).to be true end end diff --git a/Library/Homebrew/test/livecheck/livecheck_spec.rb b/Library/Homebrew/test/livecheck/livecheck_spec.rb index eab430f208..2371b1358d 100644 --- a/Library/Homebrew/test/livecheck/livecheck_spec.rb +++ b/Library/Homebrew/test/livecheck/livecheck_spec.rb @@ -17,7 +17,7 @@ RSpec.describe Homebrew::Livecheck do desc "Test formula" homepage "https://brew.sh" url "https://brew.sh/test-0.0.1.tgz" - head "https://github.com/Homebrew/brew.git" + head "https://github.com/Homebrew/brew.git", branch: "main" livecheck do url "https://formulae.brew.sh/api/formula/ruby.json" @@ -252,7 +252,7 @@ RSpec.describe Homebrew::Livecheck do desc "Test formula with a duplicate URL" homepage "https://github.com/Homebrew/brew.git" url "https://brew.sh/test-0.0.1.tgz" - head "https://github.com/Homebrew/brew.git" + head "https://github.com/Homebrew/brew.git", branch: "main" end end diff --git a/Library/Homebrew/test/livecheck/skip_conditions_spec.rb b/Library/Homebrew/test/livecheck/skip_conditions_spec.rb index 94859b9404..203ea9752f 100644 --- a/Library/Homebrew/test/livecheck/skip_conditions_spec.rb +++ b/Library/Homebrew/test/livecheck/skip_conditions_spec.rb @@ -12,7 +12,7 @@ RSpec.describe Homebrew::Livecheck::SkipConditions do desc "Test formula" homepage "https://brew.sh" url "https://brew.sh/test-0.0.1.tgz" - head "https://github.com/Homebrew/brew.git" + head "https://github.com/Homebrew/brew.git", branch: "main" livecheck do url "https://formulae.brew.sh/api/formula/ruby.json" @@ -34,7 +34,7 @@ RSpec.describe Homebrew::Livecheck::SkipConditions do head_only: formula("test_head_only") do desc "HEAD-only test formula" homepage "https://brew.sh" - head "https://github.com/Homebrew/brew.git" + head "https://github.com/Homebrew/brew.git", branch: "main" end, gist: formula("test_gist") do desc "Gist test formula" @@ -79,7 +79,7 @@ RSpec.describe Homebrew::Livecheck::SkipConditions do let(:casks) do { - basic: Cask::Cask.new("test") do + basic: Cask::Cask.new("test") do version "0.0.1,2" url "https://brew.sh/test-#{version.csv.first}.tgz" @@ -92,7 +92,7 @@ RSpec.describe Homebrew::Livecheck::SkipConditions do regex(/"stable":"(\d+(?:\.\d+)+)"/i) end end, - deprecated: Cask::Cask.new("test_deprecated") do + deprecated: Cask::Cask.new("test_deprecated") do version "0.0.1" sha256 :no_check @@ -103,7 +103,7 @@ RSpec.describe Homebrew::Livecheck::SkipConditions do deprecate! date: "2020-06-25", because: :discontinued end, - disabled: Cask::Cask.new("test_disabled") do + disabled: Cask::Cask.new("test_disabled") do version "0.0.1" sha256 :no_check @@ -114,17 +114,17 @@ RSpec.describe Homebrew::Livecheck::SkipConditions do disable! date: "2020-06-25", because: :discontinued end, - future_disable_unsigned: Cask::Cask.new("test_future_disable_unsigned") do + future_disable_fails_gatekeeper_check: Cask::Cask.new("test_future_disable_fails_gatekeeper_check") do version "0.0.1" url "https://brew.sh/test-#{version}.tgz" - name "Test Future Disabled Unsigned" - desc "Future Disable Unsigned test cask" + name "Test Future Disabled Fails Gatekeeper Check" + desc "Future Disable Fails Gatekeeper Check test cask" homepage "https://brew.sh" - disable! date: "3000-06-25", because: :unsigned + disable! date: "3000-06-25", because: :fails_gatekeeper_check end, - extract_plist: Cask::Cask.new("test_extract_plist_skip") do + extract_plist: Cask::Cask.new("test_extract_plist_skip") do version "0.0.1" url "https://brew.sh/test-#{version}.tgz" @@ -136,7 +136,7 @@ RSpec.describe Homebrew::Livecheck::SkipConditions do strategy :extract_plist end end, - latest: Cask::Cask.new("test_latest") do + latest: Cask::Cask.new("test_latest") do version :latest sha256 :no_check @@ -145,7 +145,7 @@ RSpec.describe Homebrew::Livecheck::SkipConditions do desc "Latest test cask" homepage "https://brew.sh" end, - unversioned: Cask::Cask.new("test_unversioned") do + unversioned: Cask::Cask.new("test_unversioned") do version "1.2.3" sha256 :no_check @@ -154,7 +154,7 @@ RSpec.describe Homebrew::Livecheck::SkipConditions do desc "Unversioned test cask" homepage "https://brew.sh" end, - skip: Cask::Cask.new("test_skip") do + skip: Cask::Cask.new("test_skip") do version "0.0.1" url "https://brew.sh/test-#{version}.tgz" @@ -166,7 +166,7 @@ RSpec.describe Homebrew::Livecheck::SkipConditions do skip end end, - skip_with_message: Cask::Cask.new("test_skip_with_message") do + skip_with_message: Cask::Cask.new("test_skip_with_message") do version "0.0.1" url "https://brew.sh/test-#{version}.tgz" @@ -384,9 +384,10 @@ RSpec.describe Homebrew::Livecheck::SkipConditions do end end - context "when a cask without a `livecheck` block is deprecated with a future disable date because `:unsigned`" do + context "when a cask without a `livecheck` block is deprecated" \ + "with a future disable date because `:fails_gatekeeper_check`" do it "does not skip" do - expect(skip_conditions.skip_information(casks[:future_disable_unsigned])).to eq({}) + expect(skip_conditions.skip_information(casks[:future_disable_fails_gatekeeper_check])).to eq({}) end end diff --git a/Library/Homebrew/test/livecheck/strategy/gnu_spec.rb b/Library/Homebrew/test/livecheck/strategy/gnu_spec.rb index 32c8037041..81c51f3d52 100644 --- a/Library/Homebrew/test/livecheck/strategy/gnu_spec.rb +++ b/Library/Homebrew/test/livecheck/strategy/gnu_spec.rb @@ -7,7 +7,7 @@ RSpec.describe Homebrew::Livecheck::Strategy::Gnu do let(:gnu_urls) do { - no_version_dir: "https://ftp.gnu.org/gnu/abc/abc-1.2.3.tar.gz", + no_version_dir: "https://ftpmirror.gnu.org/gnu/abc/abc-1.2.3.tar.gz", software_page: "https://www.gnu.org/software/abc/", subdomain: "https://abc.gnu.org", savannah: "https://download.savannah.gnu.org/releases/abc/abc-1.2.3.tar.gz", @@ -18,15 +18,15 @@ RSpec.describe Homebrew::Livecheck::Strategy::Gnu do let(:generated) do { no_version_dir: { - url: "https://ftp.gnu.org/gnu/abc/", + url: "https://ftpmirror.gnu.org/gnu/abc/", regex: %r{href=.*?abc[._-]v?(\d+(?:\.\d+)*)(?:\.[a-z]+|/)}i, }, software_page: { - url: "https://ftp.gnu.org/gnu/abc/", + url: "https://ftpmirror.gnu.org/gnu/abc/", regex: %r{href=.*?abc[._-]v?(\d+(?:\.\d+)*)(?:\.[a-z]+|/)}i, }, subdomain: { - url: "https://ftp.gnu.org/gnu/abc/", + url: "https://ftpmirror.gnu.org/gnu/abc/", regex: %r{href=.*?abc[._-]v?(\d+(?:\.\d+)*)(?:\.[a-z]+|/)}i, }, savannah: {}, diff --git a/Library/Homebrew/test/livecheck_spec.rb b/Library/Homebrew/test/livecheck_spec.rb index 2a4b4b333c..6813ddcd25 100644 --- a/Library/Homebrew/test/livecheck_spec.rb +++ b/Library/Homebrew/test/livecheck_spec.rb @@ -8,7 +8,7 @@ RSpec.describe Livecheck do formula do homepage "https://brew.sh" url "https://brew.sh/test-0.0.1.tgz" - head "https://github.com/Homebrew/brew.git" + head "https://github.com/Homebrew/brew.git", branch: "main" end end let(:livecheck_f) { described_class.new(f.class) } diff --git a/Library/Homebrew/test/os/linux/diagnostic_spec.rb b/Library/Homebrew/test/os/linux/diagnostic_spec.rb index 4a1d23169c..0955ca3a18 100644 --- a/Library/Homebrew/test/os/linux/diagnostic_spec.rb +++ b/Library/Homebrew/test/os/linux/diagnostic_spec.rb @@ -25,4 +25,11 @@ RSpec.describe Homebrew::Diagnostic::Checks do expect(checks.check_kernel_minimum_version) .to match(/Your Linux kernel .+ is too old/) end + + specify "#check_for_symlinked_home" do + allow(File).to receive(:symlink?).with("/home").and_return(true) + + expect(checks.check_for_symlinked_home) + .to match(%r{Your /home directory is a symlink}) + end end diff --git a/Library/Homebrew/test/os/mac/diagnostic_spec.rb b/Library/Homebrew/test/os/mac/diagnostic_spec.rb index c75a2da2a4..0a8ba09c51 100644 --- a/Library/Homebrew/test/os/mac/diagnostic_spec.rb +++ b/Library/Homebrew/test/os/mac/diagnostic_spec.rb @@ -95,4 +95,101 @@ RSpec.describe Homebrew::Diagnostic::Checks do .to include("The contents of the SDKs in your Xcode installation do not match the SDK folder names") end end + + describe "#check_pkgconf_macos_sdk_mismatch" do + let(:pkg_config_formula) { instance_double(Formula, any_version_installed?: true) } + let(:tab) { instance_double(Tab, built_on: { "os_version" => "13" }) } + + before do + allow(Formula).to receive(:[]).with("pkgconf").and_return(pkg_config_formula) + allow(Tab).to receive(:for_formula).with(pkg_config_formula).and_return(tab) + end + + it "doesn't trigger when pkgconf is not installed" do + allow(Formula).to receive(:[]).with("pkgconf").and_raise(FormulaUnavailableError.new("pkgconf")) + + expect(checks.check_pkgconf_macos_sdk_mismatch).to be_nil + end + + it "doesn't trigger when no versions are installed" do + allow(pkg_config_formula).to receive(:any_version_installed?).and_return(false) + + expect(checks.check_pkgconf_macos_sdk_mismatch).to be_nil + end + + it "doesn't trigger when built_on information is missing" do + allow(tab).to receive(:built_on).and_return(nil) + + expect(checks.check_pkgconf_macos_sdk_mismatch).to be_nil + end + + it "doesn't trigger when os_version information is missing" do + allow(tab).to receive(:built_on).and_return({ "cpu_family" => "x86_64" }) + + expect(checks.check_pkgconf_macos_sdk_mismatch).to be_nil + end + + it "doesn't trigger when versions match" do + current_version = MacOS.version.to_s + allow(tab).to receive(:built_on).and_return({ "os_version" => current_version }) + + expect(checks.check_pkgconf_macos_sdk_mismatch).to be_nil + end + + it "triggers when built_on version differs from current macOS version" do + allow(MacOS).to receive(:version).and_return(MacOSVersion.new("14")) + allow(tab).to receive(:built_on).and_return({ "os_version" => "13" }) + + expect(checks.check_pkgconf_macos_sdk_mismatch).to include("brew reinstall pkgconf") + end + end + + describe "#check_cask_quarantine_support" do + it "returns nil when quarantine is available" do + allow(Cask::Quarantine).to receive(:check_quarantine_support).and_return([:quarantine_available, nil]) + expect(checks.check_cask_quarantine_support).to be_nil + end + + it "returns error when xattr is broken" do + allow(Cask::Quarantine).to receive(:check_quarantine_support).and_return([:xattr_broken, nil]) + expect(checks.check_cask_quarantine_support) + .to match("there's no working version of `xattr` on this system") + end + + it "returns error when swift is not available" do + allow(Cask::Quarantine).to receive(:check_quarantine_support).and_return([:no_swift, nil]) + expect(checks.check_cask_quarantine_support) + .to match("there's no available version of `swift` on this system") + end + + it "returns error when swift is broken due to missing CLT" do + allow(Cask::Quarantine).to receive(:check_quarantine_support).and_return([:swift_broken_clt, nil]) + expect(checks.check_cask_quarantine_support) + .to match("Swift is not working due to missing Command Line Tools") + end + + it "returns error when swift compilation failed" do + allow(Cask::Quarantine).to receive(:check_quarantine_support).and_return([:swift_compilation_failed, nil]) + expect(checks.check_cask_quarantine_support) + .to match("Swift compilation failed") + end + + it "returns error when swift runtime error occurs" do + allow(Cask::Quarantine).to receive(:check_quarantine_support).and_return([:swift_runtime_error, nil]) + expect(checks.check_cask_quarantine_support) + .to match("Swift runtime error") + end + + it "returns error when swift is not executable" do + allow(Cask::Quarantine).to receive(:check_quarantine_support).and_return([:swift_not_executable, nil]) + expect(checks.check_cask_quarantine_support) + .to match("Swift is not executable") + end + + it "returns error when swift returns unexpected error" do + allow(Cask::Quarantine).to receive(:check_quarantine_support).and_return([:swift_unexpected_error, "whoopsie"]) + expect(checks.check_cask_quarantine_support) + .to match("whoopsie") + end + end end diff --git a/Library/Homebrew/test/rubocops/components_redundancy_spec.rb b/Library/Homebrew/test/rubocops/components_redundancy_spec.rb index e65e31ae80..73b66318c9 100644 --- a/Library/Homebrew/test/rubocops/components_redundancy_spec.rb +++ b/Library/Homebrew/test/rubocops/components_redundancy_spec.rb @@ -25,7 +25,7 @@ RSpec.describe RuboCop::Cop::FormulaAudit::ComponentsRedundancy do it "reports an offense if both `head` and `head do` are present" do expect_offense(<<~RUBY) class Foo < Formula - head "https://brew.sh/foo.git" + head "https://brew.sh/foo.git", branch: "develop" head do ^^^^^^^ FormulaAudit/ComponentsRedundancy: `head` and `head do` should not be simultaneously present # stuff @@ -50,7 +50,7 @@ RSpec.describe RuboCop::Cop::FormulaAudit::ComponentsRedundancy do it "reports no offenses if `stable do` is present with a `head` method" do expect_no_offenses(<<~RUBY) class Foo < Formula - head "https://brew.sh/foo.git" + head "https://brew.sh/foo.git", branch: "develop" stable do # stuff @@ -82,17 +82,30 @@ RSpec.describe RuboCop::Cop::FormulaAudit::ComponentsRedundancy do end head do - ^^^^^^^ FormulaAudit/ComponentsRedundancy: `head do` should not be present with only `url` + ^^^^^^^ FormulaAudit/ComponentsRedundancy: `head do` should not be present with only url/branch url "https://brew.sh/foo.git" end end RUBY end + it "reports an offense if `head do` is present with only `url` and `branch`" do + expect_offense(<<~RUBY) + class Foo < Formula + url "https://brew.sh/foo-1.0.tgz" + + head do + ^^^^^^^ FormulaAudit/ComponentsRedundancy: `head do` should not be present with only url/branch + url "https://brew.sh/foo.git", branch: "develop" + end + end + RUBY + end + it "reports no offenses if `stable do` is present with `url` and `depends_on`" do expect_no_offenses(<<~RUBY) class Foo < Formula - head "https://brew.sh/foo.git" + head "https://brew.sh/foo.git", branch: "trunk" stable do url "https://brew.sh/foo-1.0.tgz" @@ -109,6 +122,7 @@ RSpec.describe RuboCop::Cop::FormulaAudit::ComponentsRedundancy do head do url "https://brew.sh/foo.git" + branch "develop" depends_on "bar" end end diff --git a/Library/Homebrew/test/rubocops/patches_spec.rb b/Library/Homebrew/test/rubocops/patches_spec.rb index 00c60d1c2b..9d9d568bda 100644 --- a/Library/Homebrew/test/rubocops/patches_spec.rb +++ b/Library/Homebrew/test/rubocops/patches_spec.rb @@ -188,8 +188,6 @@ RSpec.describe RuboCop::Cop::FormulaAudit::Patches do patch_urls = [ "https://raw.github.com/mogaal/sendemail", "https://mirrors.ustc.edu.cn/macports/trunk/", - "http://trac.macports.org/export/102865/trunk/dports/mail/uudeview/files/inews.c.patch", - "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/uber/h3/pull/362.patch?full_index=1", "https://gitlab.gnome.org/GNOME/gitg/-/merge_requests/142.diff", @@ -216,14 +214,6 @@ RSpec.describe RuboCop::Cop::FormulaAudit::Patches do expect_offense_hash(message: <<~EOS.chomp, severity: :convention, line: 5, column: 8, source:) FormulaAudit/Patches: MacPorts patches should specify a revision instead of trunk: #{patch_url} EOS - elsif patch_url.start_with?("http://trac.macports.org/") - expect_offense_hash(message: <<~EOS.chomp, severity: :convention, line: 5, column: 8, source:) - FormulaAudit/Patches: Patches from MacPorts Trac should be https://, not http: #{patch_url} - EOS - elsif patch_url.start_with?("http://bugs.debian.org/") - expect_offense_hash(message: <<~EOS.chomp, severity: :convention, line: 5, column: 8, source:) - FormulaAudit/Patches: Patches from Debian should be https://, not http: #{patch_url} - EOS elsif patch_url.match?(%r{https://github.com/[^/]*/[^/]*/pull}) expect_offense_hash(message: <<~EOS.chomp, severity: :convention, line: 5, column: 8, source:) FormulaAudit/Patches: Use a commit hash URL rather than an unstable pull request URL: #{patch_url} @@ -257,4 +247,75 @@ RSpec.describe RuboCop::Cop::FormulaAudit::Patches do end end end + + context "when auditing auditing external patches with corrector" do + it "corrects Bitbucket patch URLs to use API format" do + expect_offense(<<~RUBY) + class Foo < Formula + url "https://brew.sh/foo-1.0.tgz" + patch do + url "https://bitbucket.org/multicoreware/x265_git/commits/b354c009a60bcd6d7fc04014e200a1ee9c45c167/raw" + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FormulaAudit/Patches: Bitbucket patches should use the API URL: https://api.bitbucket.org/2.0/repositories/multicoreware/x265_git/diff/b354c009a60bcd6d7fc04014e200a1ee9c45c167 + sha256 "63376b8fdd6613a91976106d9376069274191860cd58f039b29ff16de1925621" + end + end + RUBY + + expect_correction(<<~RUBY) + class Foo < Formula + url "https://brew.sh/foo-1.0.tgz" + patch do + url "https://api.bitbucket.org/2.0/repositories/multicoreware/x265_git/diff/b354c009a60bcd6d7fc04014e200a1ee9c45c167" + sha256 "63376b8fdd6613a91976106d9376069274191860cd58f039b29ff16de1925621" + end + end + RUBY + end + + it "corrects HTTP MacPorts Trac URLs to HTTPS" do + expect_offense(<<~RUBY) + class Foo < Formula + url "https://brew.sh/foo-1.0.tgz" + patch do + url "http://trac.macports.org/export/102865/trunk/dports/mail/uudeview/files/inews.c.patch" + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FormulaAudit/Patches: Patches from MacPorts Trac should be https://, not http: http://trac.macports.org/export/102865/trunk/dports/mail/uudeview/files/inews.c.patch + sha256 "63376b8fdd6613a91976106d9376069274191860cd58f039b29ff16de1925621" + end + end + RUBY + + expect_correction(<<~RUBY) + class Foo < Formula + url "https://brew.sh/foo-1.0.tgz" + patch do + url "https://trac.macports.org/export/102865/trunk/dports/mail/uudeview/files/inews.c.patch" + sha256 "63376b8fdd6613a91976106d9376069274191860cd58f039b29ff16de1925621" + end + end + RUBY + end + + it "corrects HTTP Debian bug URLs to HTTPS" do + expect_offense(<<~RUBY) + class Foo < Formula + url "https://brew.sh/foo-1.0.tgz" + patch do + url "http://bugs.debian.org/cgi-bin/bugreport.cgi?msg=5;filename=patch-libunac1.txt;att=1;bug=623340" + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FormulaAudit/Patches: Patches from Debian should be https://, not http: http://bugs.debian.org/cgi-bin/bugreport.cgi?msg=5;filename=patch-libunac1.txt;att=1;bug=623340 + sha256 "63376b8fdd6613a91976106d9376069274191860cd58f039b29ff16de1925621" + end + end + RUBY + + expect_correction(<<~RUBY) + class Foo < Formula + url "https://brew.sh/foo-1.0.tgz" + patch do + url "https://bugs.debian.org/cgi-bin/bugreport.cgi?msg=5;filename=patch-libunac1.txt;att=1;bug=623340" + sha256 "63376b8fdd6613a91976106d9376069274191860cd58f039b29ff16de1925621" + end + end + RUBY + end + end end diff --git a/Library/Homebrew/test/rubocops/urls_spec.rb b/Library/Homebrew/test/rubocops/urls_spec.rb index a5574f9ddc..3296063995 100644 --- a/Library/Homebrew/test/rubocops/urls_spec.rb +++ b/Library/Homebrew/test/rubocops/urls_spec.rb @@ -7,9 +7,9 @@ RSpec.describe RuboCop::Cop::FormulaAudit::Urls do let(:offense_list) do [{ - "url" => "https://ftpmirror.gnu.org/lightning/lightning-2.1.0.tar.gz", - "msg" => "https://ftpmirror.gnu.org/lightning/lightning-2.1.0.tar.gz should be: " \ - "https://ftp.gnu.org/gnu/lightning/lightning-2.1.0.tar.gz", + "url" => "https://ftp.gnu.org/lightning/lightning-2.1.0.tar.gz", + "msg" => "https://ftp.gnu.org/lightning/lightning-2.1.0.tar.gz should be: " \ + "https://ftpmirror.gnu.org/gnu/lightning/lightning-2.1.0.tar.gz", "col" => 2, }, { "url" => "https://fossies.org/linux/privat/monit-5.23.0.tar.gz", @@ -209,6 +209,7 @@ RSpec.describe RuboCop::Cop::FormulaAudit::Urls do offenses = inspect_source(source) expected_offenses.zip(offenses.reverse).each do |expected, actual| + expect(actual).not_to be_nil expect(actual.message).to eq(expected[:message]) expect(actual.severity).to eq(expected[:severity]) expect(actual.line).to eq(expected[:line]) diff --git a/Library/Homebrew/test/service_spec.rb b/Library/Homebrew/test/service_spec.rb index 7fc6d6661d..29dcaf8676 100644 --- a/Library/Homebrew/test/service_spec.rb +++ b/Library/Homebrew/test/service_spec.rb @@ -68,7 +68,7 @@ RSpec.describe Homebrew::Service do expect do f.service.manual_command - end.to raise_error TypeError, "Service#keep_alive allows only [:always, :successful_exit, :crashed, :path]" + end.to raise_error TypeError, "Service#keep_alive only allows: [:always, :successful_exit, :crashed, :path]" end end diff --git a/Library/Homebrew/test/services/cli_spec.rb b/Library/Homebrew/test/services/cli_spec.rb index 000039475d..c8cbc717c2 100644 --- a/Library/Homebrew/test/services/cli_spec.rb +++ b/Library/Homebrew/test/services/cli_spec.rb @@ -46,14 +46,15 @@ RSpec.describe Homebrew::Services::Cli do it "checks the input does not exist" do expect do services_cli.check!([]) - end.to raise_error(UsageError, "Invalid usage: Formula(e) missing, please provide a formula name or use --all") + end.to raise_error(UsageError, + "Invalid usage: Formula(e) missing, please provide a formula name or use `--all`.") end it "checks the input exists" do expect do services_cli.check!("hello") end.not_to raise_error(UsageError, - "Invalid usage: Formula(e) missing, please provide a formula name or use --all") + "Invalid usage: Formula(e) missing, please provide a formula name or use `--all`.") end end @@ -88,7 +89,7 @@ RSpec.describe Homebrew::Services::Cli do expect(Homebrew::Services::System).not_to receive(:root?) expect do services_cli.start(["service_name"], "/non/existent/path") - end.to raise_error(UsageError, "Invalid usage: Provided service file does not exist") + end.to raise_error(UsageError, "Invalid usage: Provided service file does not exist.") end it "checks empty targets cause no error" do @@ -111,7 +112,7 @@ RSpec.describe Homebrew::Services::Cli do expect(Homebrew::Services::System).not_to receive(:root?) expect do services_cli.start(["service_name"], "/hfdkjshksdjhfkjsdhf/fdsjghsdkjhb") - end.to raise_error(UsageError, "Invalid usage: Provided service file does not exist") + end.to raise_error(UsageError, "Invalid usage: Provided service file does not exist.") end it "checks empty targets cause no error" do @@ -164,7 +165,7 @@ RSpec.describe Homebrew::Services::Cli do service = instance_double(Homebrew::Services::FormulaWrapper, name: "name", installed?: false) expect do services_cli.install_service_file(service, nil) - end.to raise_error(UsageError, "Invalid usage: Formula `name` is not installed") + end.to raise_error(UsageError, "Invalid usage: Formula `name` is not installed.") end it "checks service file exists" do @@ -178,7 +179,7 @@ RSpec.describe Homebrew::Services::Cli do services_cli.install_service_file(service, nil) end.to raise_error( UsageError, - "Invalid usage: Formula `name` has not implemented #plist, #service or installed a locatable service file", + "Invalid usage: Formula `name` has not implemented #plist, #service or provided a locatable service file.", ) end end diff --git a/Library/Homebrew/test/services/commands/info_spec.rb b/Library/Homebrew/test/services/commands/info_spec.rb index f8f3fc21fe..8b5c5cefee 100644 --- a/Library/Homebrew/test/services/commands/info_spec.rb +++ b/Library/Homebrew/test/services/commands/info_spec.rb @@ -17,7 +17,8 @@ RSpec.describe Homebrew::Services::Commands::Info do it "fails with empty list" do expect do described_class.run([], verbose: false, json: false) - end.to raise_error UsageError, "Invalid usage: Formula(e) missing, please provide a formula name or use --all" + end.to raise_error UsageError, + "Invalid usage: Formula(e) missing, please provide a formula name or use `--all`." end it "succeeds with items" do diff --git a/Library/Homebrew/test/services/commands/restart_spec.rb b/Library/Homebrew/test/services/commands/restart_spec.rb index c35a543dd5..a43738ea4c 100644 --- a/Library/Homebrew/test/services/commands/restart_spec.rb +++ b/Library/Homebrew/test/services/commands/restart_spec.rb @@ -13,7 +13,8 @@ RSpec.describe Homebrew::Services::Commands::Restart do it "fails with empty list" do expect do described_class.run([], nil, verbose: false) - end.to raise_error UsageError, "Invalid usage: Formula(e) missing, please provide a formula name or use --all" + end.to raise_error UsageError, + "Invalid usage: Formula(e) missing, please provide a formula name or use `--all`." end it "starts if services are not loaded" do diff --git a/Library/Homebrew/test/support/fixtures/cask/everything-with-variations.json b/Library/Homebrew/test/support/fixtures/cask/everything-with-variations.json new file mode 100644 index 0000000000..e8ba774113 --- /dev/null +++ b/Library/Homebrew/test/support/fixtures/cask/everything-with-variations.json @@ -0,0 +1,122 @@ +{ + "token": "everything-with-variations", + "full_token": "everything-with-variations", + "old_tokens": [], + "tap": "homebrew/cask", + "name": [ + "Everything" + ], + "desc": "Little bit of everything", + "homepage": "https://www.everything.app/", + "url": "https://cachefly.everything.app/releases/Everything_1.2.3.zip", + "url_specs": { + "cookies": { + "ALL": "1234" + }, + "user_agent": ":fake" + }, + "version": "1.2.3", + "autobump": true, + "no_autobump_message": null, + "skip_livecheck": false, + "installed": null, + "installed_time": null, + "bundle_version": null, + "bundle_short_version": null, + "outdated": false, + "sha256": "c64c05bdc0be845505d6e55e69e696a7f50d40846e76155f0c85d5ff5e7bbb84", + "artifacts": [ + { + "uninstall": [ + { + "launchctl": "com.every.thing.agent", + "signal": [ + [ + "TERM", + "com.every.thing.controller1" + ], + [ + "TERM", + "com.every.thing.bin" + ] + ], + "kext": "com.every.thing.driver", + "delete": "/Library/EverythingHelperTools" + } + ] + }, + { + "installer": [ + { + "script": { + "executable": "~/just/another/path/install.sh", + "args": [ + "--mode=silent" + ], + "sudo": true, + "print_stderr": false + } + } + ] + }, + { + "app": [ + "Everything.app" + ] + }, + { + "zap": [ + { + "trash": [ + "~/.everything", + "~/Library/Everything" + ] + } + ] + } + ], + "caveats": "Installing everything might take a while...\n\neverything requires a kernel extension to work.\nIf the installation fails, retry after you enable it in:\n System Settings → Privacy & Security\n\nFor more information, refer to vendor documentation or this Apple Technical Note:\n https://developer.apple.com/library/content/technotes/tn2459/_index.html\n", + "depends_on": { + "cask": [ + "something" + ], + "macos": { + ">=": [ + "10.11" + ] + } + }, + "conflicts_with": { + "formula": [ + "nothing" + ] + }, + "container": { + "type": "naked" + }, + "auto_updates": true, + "deprecated": false, + "deprecation_date": null, + "deprecation_reason": null, + "deprecation_replacement_formula": null, + "deprecation_replacement_cask": null, + "disabled": false, + "disable_date": null, + "disable_reason": null, + "disable_replacement_formula": null, + "disable_replacement_cask": null, + "tap_git_head": "abcdef1234567890abcdef1234567890abcdef12", + "languages": [ + "en", + "eo" + ], + "ruby_source_path": "Casks/everything-with-variations.rb", + "ruby_source_checksum": { + "sha256": "d8d0d6b2e5ff65388eccb82236fd3aa157b4a29bb043a1f72b97f0e9b70e8320" + }, + "variations": { + "arm64_monterey": { + "url": "https://cachefly.everything.app/releases/arm64_monterey/Everything_1.2.3.zip" + } + } +} diff --git a/Library/Homebrew/test/utils/ast/formula_ast_spec.rb b/Library/Homebrew/test/utils/ast/formula_ast_spec.rb index e97a307364..09492ac1a2 100644 --- a/Library/Homebrew/test/utils/ast/formula_ast_spec.rb +++ b/Library/Homebrew/test/utils/ast/formula_ast_spec.rb @@ -193,6 +193,7 @@ RSpec.describe Utils::AST::FormulaAST do head do url "https://brew.sh/foo.git" + branch "develop" end end RUBY @@ -205,6 +206,7 @@ RSpec.describe Utils::AST::FormulaAST do head do url "https://brew.sh/foo.git" + branch "develop" end end RUBY @@ -355,7 +357,7 @@ RSpec.describe Utils::AST::FormulaAST do described_class.new <<~RUBY.chomp class Foo < Formula url "https://brew.sh/foo-1.0.tar.gz" - head "https://brew.sh/foo.git" + head "https://brew.sh/foo.git", branch: "develop" end RUBY end @@ -364,7 +366,7 @@ RSpec.describe Utils::AST::FormulaAST do <<~RUBY.chomp class Foo < Formula url "https://brew.sh/foo-1.0.tar.gz" - head "https://brew.sh/foo.git" + head "https://brew.sh/foo.git", branch: "develop" bottle do sha256 "f7b1fc772c79c20fddf621ccc791090bc1085fcef4da6cca03399424c66e06ca" => :sierra @@ -387,6 +389,7 @@ RSpec.describe Utils::AST::FormulaAST do head do url "https://brew.sh/foo.git" + branch "develop" end end RUBY @@ -403,6 +406,7 @@ RSpec.describe Utils::AST::FormulaAST do head do url "https://brew.sh/foo.git" + branch "develop" end end RUBY diff --git a/Library/Homebrew/test/utils/shared_audits_spec.rb b/Library/Homebrew/test/utils/shared_audits_spec.rb index 9d95b84ea9..312adcb4d5 100644 --- a/Library/Homebrew/test/utils/shared_audits_spec.rb +++ b/Library/Homebrew/test/utils/shared_audits_spec.rb @@ -96,4 +96,21 @@ RSpec.describe SharedAudits do expect(described_class.gitlab_tag_from_url(url)).to eq("2.5") end end + + describe "::forgejo_tag_from_url" do + it "finds tags in basic urls" do + url = "https://codeberg.org/Aviac/codeberg-cli/archive/v0.4.11.tar.gz" + expect(described_class.forgejo_tag_from_url(url)).to eq("v0.4.11") + end + + it "finds tags in urls with subgroups" do + url = "https://codeberg.org/Aviac/codeberg-cli/archive/some/test/1.2.3.tar.gz" + expect(described_class.forgejo_tag_from_url(url)).to eq("some/test/1.2.3") + end + + it "finds tags in orgs/repos with special characters" do + url = "https://codeberg.org/Aviaca-b_cv/codeberg-cli/archive/v0.4.11.tar.gz" + expect(described_class.forgejo_tag_from_url(url)).to eq("v0.4.11") + end + end end diff --git a/Library/Homebrew/test/version_spec.rb b/Library/Homebrew/test/version_spec.rb index 092978f651..9784cffb3d 100644 --- a/Library/Homebrew/test/version_spec.rb +++ b/Library/Homebrew/test/version_spec.rb @@ -104,7 +104,7 @@ RSpec.describe Version do it "raises an error" do expect do null_version.to_str - end.to raise_error NoMethodError, "undefined method `to_str' for Version:NULL" + end.to raise_error NoMethodError, "undefined method `to_str` for Version:NULL" end end diff --git a/Library/Homebrew/uninstall.rb b/Library/Homebrew/uninstall.rb index ce19765f81..6d88d2fc3b 100644 --- a/Library/Homebrew/uninstall.rb +++ b/Library/Homebrew/uninstall.rb @@ -68,7 +68,7 @@ module Homebrew unversioned_name = f.name.gsub(/@.+$/, "") maybe_paths = Dir.glob("#{f.etc}/#{unversioned_name}*") - excluded_names = Homebrew::API::Formula.all_formulae.keys + excluded_names = Homebrew::API.formula_names maybe_paths = maybe_paths.reject do |path| # Remove extension only if a file # (e.g. directory with name "openssl@1.1" will be trimmed to "openssl@1") diff --git a/Library/Homebrew/unpack_strategy.rb b/Library/Homebrew/unpack_strategy.rb index 55c856e24e..641439634f 100644 --- a/Library/Homebrew/unpack_strategy.rb +++ b/Library/Homebrew/unpack_strategy.rb @@ -8,6 +8,7 @@ require "system_command" module UnpackStrategy extend T::Helpers include SystemCommand::Mixin + abstract! requires_ancestor { Kernel } @@ -16,6 +17,7 @@ module UnpackStrategy module ClassMethods extend T::Helpers + abstract! sig { abstract.returns(T::Array[String]) } diff --git a/Library/Homebrew/utils/analytics.rb b/Library/Homebrew/utils/analytics.rb index b06ecea5e9..a22d3f8bae 100644 --- a/Library/Homebrew/utils/analytics.rb +++ b/Library/Homebrew/utils/analytics.rb @@ -329,7 +329,9 @@ module Utils require "api" - json = Homebrew::API::Formula.fetch formula.name + return unless Homebrew::API.formula_names.include? formula.name + + json = Homebrew::API::Formula.formula_json formula.name return if json.blank? || json["analytics"].blank? output_analytics(json, args:) @@ -345,7 +347,9 @@ module Utils require "api" - json = Homebrew::API::Cask.fetch cask.token + return unless Homebrew::API.cask_tokens.include? cask.token + + json = Homebrew::API::Cask.cask_json cask.token return if json.blank? || json["analytics"].blank? output_analytics(json, args:) diff --git a/Library/Homebrew/utils/github/api.rb b/Library/Homebrew/utils/github/api.rb index 40170cf12e..048183b7cd 100644 --- a/Library/Homebrew/utils/github/api.rb +++ b/Library/Homebrew/utils/github/api.rb @@ -123,7 +123,7 @@ module GitHub end end - # Error when the user has no GitHub API credentials set at all (macOS keychain, GitHub CLI or envvar). + # Error when the user has no GitHub API credentials set at all (macOS keychain, GitHub CLI or env var). class MissingAuthenticationError < Error sig { void } def initialize diff --git a/Library/Homebrew/utils/repology.rb b/Library/Homebrew/utils/repology.rb index 54bbcb1a6f..a008be62a3 100644 --- a/Library/Homebrew/utils/repology.rb +++ b/Library/Homebrew/utils/repology.rb @@ -24,7 +24,7 @@ module Repology if Homebrew::EnvConfig.developer? $stderr.puts result&.stderr else - odebug result&.stderr + odebug result&.stderr.to_s end raise diff --git a/Library/Homebrew/utils/shared_audits.rb b/Library/Homebrew/utils/shared_audits.rb index 58b870e994..1fdc1e1921 100644 --- a/Library/Homebrew/utils/shared_audits.rb +++ b/Library/Homebrew/utils/shared_audits.rb @@ -90,6 +90,16 @@ module SharedAudits end end + sig { params(user: String, repo: String).returns(T.nilable(T::Hash[String, T.untyped])) } + def self.forgejo_repo_data(user, repo) + @forgejo_repo_data ||= T.let({}, T.nilable(T::Hash[String, T.untyped])) + @forgejo_repo_data["#{user}/#{repo}"] ||= begin + result = Utils::Curl.curl_output("https://codeberg.org/api/v1/repos/#{user}/#{repo}") + + JSON.parse(result.stdout) if result.status.success? + end + end + sig { params(user: String, repo: String, tag: String).returns(T.nilable(T::Hash[String, T.untyped])) } private_class_method def self.gitlab_release_data(user, repo, tag) id = "#{user}/#{repo}/#{tag}" @@ -125,6 +135,40 @@ module SharedAudits "#{tag} is a GitLab pre-release." end + sig { params(user: String, repo: String, tag: String).returns(T.nilable(T::Hash[String, T.untyped])) } + private_class_method def self.forgejo_release_data(user, repo, tag) + id = "#{user}/#{repo}/#{tag}" + @forgejo_release_data ||= T.let({}, T.nilable(T::Hash[String, T.untyped])) + @forgejo_release_data[id] ||= begin + result = Utils::Curl.curl_output( + "https://codeberg.org/api/v1/repos/#{user}/#{repo}/releases/tags/#{tag}", "--fail" + ) + JSON.parse(result.stdout) if result.status.success? + end + end + + sig { + params( + user: String, repo: String, tag: String, formula: T.nilable(Formula), cask: T.nilable(Cask::Cask), + ).returns( + T.nilable(String), + ) + } + def self.forgejo_release(user, repo, tag, formula: nil, cask: nil) + release = forgejo_release_data(user, repo, tag) + return unless release + return unless release["prerelease"] + + exception, version = if formula + [formula.tap&.audit_exception(:forgejo_prerelease_allowlist, formula.name), formula.version] + elsif cask + [cask.tap&.audit_exception(:forgejo_prerelease_allowlist, cask.token), cask.version] + end + return if [version, "all"].include?(exception) + + "#{tag} is a Forgejo pre-release." + end + sig { params(user: String, repo: String).returns(T.nilable(String)) } def self.github(user, repo) metadata = github_repo_data(user, repo) @@ -191,6 +235,23 @@ module SharedAudits "Bitbucket repository not notable enough (<30 forks and <75 watchers)" end + sig { params(user: String, repo: String).returns(T.nilable(String)) } + def self.forgejo(user, repo) + metadata = forgejo_repo_data(user, repo) + return if metadata.nil? + + return "Forgejo fork (not canonical repository)" if metadata["fork"] + + if (metadata["forks_count"] < 30) && (metadata["watchers_count"] < 30) && + (metadata["stars_count"] < 75) + return "Forgejo repository not notable enough (<30 forks, <30 watchers and <75 stars)" + end + + return if Date.parse(metadata["created_at"]) <= (Date.today - 30) + + "Forgejo repository too new (<30 days old)" + end + sig { params(url: String).returns(T.nilable(String)) } def self.github_tag_from_url(url) tag = url[%r{^https://github\.com/[\w-]+/[\w.-]+/archive/refs/tags/(.+)\.(tar\.gz|zip)$}, 1] @@ -202,6 +263,11 @@ module SharedAudits url[%r{^https://gitlab\.com/(?:\w[\w.-]*/){2,}-/archive/([^/]+)/}, 1] end + sig { params(url: String).returns(T.nilable(String)) } + def self.forgejo_tag_from_url(url) + url[%r{^https://codeberg\.org/[\w-]+/[\w.-]+/archive/(.+)\.(tar\.gz|zip)$}, 1] + end + sig { params(formula_or_cask: T.any(Formula, Cask::Cask)).returns(T.nilable(String)) } def self.check_deprecate_disable_reason(formula_or_cask) return if !formula_or_cask.deprecated? && !formula_or_cask.disabled? diff --git a/Library/Homebrew/utils/spdx.rb b/Library/Homebrew/utils/spdx.rb index 96c95aba7b..48eb050b0d 100644 --- a/Library/Homebrew/utils/spdx.rb +++ b/Library/Homebrew/utils/spdx.rb @@ -34,7 +34,7 @@ module SPDX sig { params(to: Pathname).void } def download_latest_license_data!(to: DATA_PATH) - data_url = "https://raw.githubusercontent.com/spdx/license-list-data/#{latest_tag}/json/" + data_url = "https://raw.githubusercontent.com/spdx/license-list-data/refs/tags/#{latest_tag}/json/" Utils::Curl.curl_download("#{data_url}licenses.json", to: to/"spdx_licenses.json") Utils::Curl.curl_download("#{data_url}exceptions.json", to: to/"spdx_exceptions.json") end diff --git a/Library/Homebrew/utils/wrapper.sh b/Library/Homebrew/utils/wrapper.sh index 20433bed90..f0b8d0a526 100644 --- a/Library/Homebrew/utils/wrapper.sh +++ b/Library/Homebrew/utils/wrapper.sh @@ -34,7 +34,7 @@ check-brew-wrapper() { then if [[ -z "${HOMEBREW_BREW_WRAPPER:-}" ]] then - odie-with-wrapper-message "but HOMEBREW_BREW_WRAPPER was unset." + odie-with-wrapper-message "but HOMEBREW_BREW_WRAPPER was unset." elif [[ "${HOMEBREW_FORCE_BREW_WRAPPER}" != "${HOMEBREW_BREW_WRAPPER}" ]] then odie-with-wrapper-message "but HOMEBREW_BREW_WRAPPER was set to ${HOMEBREW_BREW_WRAPPER}" diff --git a/Library/Homebrew/vendor/bundle/bundler/setup.rb b/Library/Homebrew/vendor/bundle/bundler/setup.rb index cd16488ea8..4b29c587f2 100644 --- a/Library/Homebrew/vendor/bundle/bundler/setup.rb +++ b/Library/Homebrew/vendor/bundle/bundler/setup.rb @@ -50,9 +50,9 @@ $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version $:.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.13.0") -$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/json-2.13.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}/extensions/arm64-darwin-20/#{Gem.extension_api_version}/json-2.13.2") +$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/json-2.13.2/lib") +$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/regexp_parser-2.11.2/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") @@ -64,7 +64,7 @@ $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version $:.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.3.1/lib") +$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/parallel_tests-5.4.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.9.0/lib") @@ -89,31 +89,31 @@ $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/rspec-3.13.1/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/rspec-github-3.0.0/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/rspec-retry-0.6.2/lib") -$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/sorbet-runtime-0.5.12357/lib") +$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/sorbet-runtime-0.5.12401/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/rspec-sorbet-1.9.2/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/rspec_junit_formatter-0.6.0/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/rubocop-ast-1.46.0/lib") $:.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.78.0/lib") +$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/rubocop-1.79.2/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.5/lib") -$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/ruby-lsp-0.25.0/lib") +$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/ruby-lsp-0.26.1/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.2") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/ruby-prof-1.7.2/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/simplecov-html-0.13.2/lib") $:.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.12357-universal-darwin/lib") -$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/sorbet-0.5.12357/lib") -$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/sorbet-static-and-runtime-0.5.12357/lib") +$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/simplecov-cobertura-3.0.0/lib") +$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/sorbet-static-0.5.12401-universal-darwin/lib") +$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/sorbet-0.5.12401/lib") +$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/sorbet-static-and-runtime-0.5.12401/lib") $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/thor-1.4.0/lib") -$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/spoom-1.7.5/lib") +$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/spoom-1.7.6/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") diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/sorbet-runtime.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/sorbet-runtime.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/sorbet-runtime.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/sorbet-runtime.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/_types.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/_types.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/_types.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/_types.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/abstract_utils.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/abstract_utils.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/abstract_utils.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/abstract_utils.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/boolean.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/boolean.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/boolean.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/boolean.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/compatibility_patches.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/compatibility_patches.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/compatibility_patches.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/compatibility_patches.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/configuration.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/configuration.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/configuration.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/configuration.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/enum.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/enum.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/enum.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/enum.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/generic.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/generic.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/generic.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/generic.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/helpers.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/helpers.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/helpers.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/helpers.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/non_forcing_constants.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/non_forcing_constants.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/non_forcing_constants.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/non_forcing_constants.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/private/abstract/data.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/private/abstract/data.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/private/abstract/data.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/private/abstract/data.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/private/abstract/declare.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/private/abstract/declare.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/private/abstract/declare.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/private/abstract/declare.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/private/abstract/hooks.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/private/abstract/hooks.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/private/abstract/hooks.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/private/abstract/hooks.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/private/abstract/validate.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/private/abstract/validate.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/private/abstract/validate.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/private/abstract/validate.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/private/caller_utils.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/private/caller_utils.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/private/caller_utils.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/private/caller_utils.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/private/casts.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/private/casts.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/private/casts.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/private/casts.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/private/class_utils.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/private/class_utils.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/private/class_utils.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/private/class_utils.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/private/decl_state.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/private/decl_state.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/private/decl_state.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/private/decl_state.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/private/final.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/private/final.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/private/final.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/private/final.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/private/methods/_methods.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/private/methods/_methods.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/private/methods/_methods.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/private/methods/_methods.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/private/methods/call_validation.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/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.12357/lib/types/private/methods/call_validation.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/private/methods/call_validation.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/private/methods/call_validation_2_6.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/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.12357/lib/types/private/methods/call_validation_2_6.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/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.12357/lib/types/private/methods/call_validation_2_7.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/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.12357/lib/types/private/methods/call_validation_2_7.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/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.12357/lib/types/private/methods/decl_builder.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/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.12357/lib/types/private/methods/decl_builder.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/private/methods/decl_builder.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/private/methods/modes.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/private/methods/modes.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/private/methods/modes.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/private/methods/modes.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/private/methods/signature.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/private/methods/signature.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/private/methods/signature.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/private/methods/signature.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/private/methods/signature_validation.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/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.12357/lib/types/private/methods/signature_validation.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/private/methods/signature_validation.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/private/mixins/mixins.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/private/mixins/mixins.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/private/mixins/mixins.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/private/mixins/mixins.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/private/retry.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/private/retry.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/private/retry.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/private/retry.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/private/runtime_levels.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/private/runtime_levels.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/private/runtime_levels.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/private/runtime_levels.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/private/sealed.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/private/sealed.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/private/sealed.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/private/sealed.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/private/types/not_typed.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/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.12357/lib/types/private/types/not_typed.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/private/types/not_typed.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/private/types/simple_pair_union.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/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.12357/lib/types/private/types/simple_pair_union.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/private/types/simple_pair_union.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/private/types/string_holder.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/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.12357/lib/types/private/types/string_holder.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/private/types/string_holder.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/private/types/type_alias.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/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.12357/lib/types/private/types/type_alias.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/private/types/type_alias.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/private/types/void.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/private/types/void.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/private/types/void.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/private/types/void.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/props/_props.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/props/_props.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/props/_props.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/props/_props.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/props/constructor.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/props/constructor.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/props/constructor.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/props/constructor.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/props/custom_type.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/props/custom_type.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/props/custom_type.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/props/custom_type.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/props/decorator.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/props/decorator.rb similarity index 99% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/props/decorator.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/props/decorator.rb index 9c82ff6f38..0baf972284 100644 --- a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/props/decorator.rb +++ b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/props/decorator.rb @@ -384,7 +384,7 @@ class T::Props::Decorator # if sensitivity_and_pii[:pii] && @class.is_a?(Class) && !T.unsafe(@class).contains_pii? raise ArgumentError.new( - 'Cannot include a pii prop in a class that declares `contains_no_pii`' + "Cannot define pii prop `#{@class}##{name}` because `#{@class}` is `contains_no_pii`" ) end end diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/props/errors.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/props/errors.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/props/errors.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/props/errors.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/props/generated_code_validation.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/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.12357/lib/types/props/generated_code_validation.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/props/generated_code_validation.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/props/has_lazily_specialized_methods.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/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.12357/lib/types/props/has_lazily_specialized_methods.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/props/has_lazily_specialized_methods.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/props/optional.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/props/optional.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/props/optional.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/props/optional.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/props/plugin.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/props/plugin.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/props/plugin.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/props/plugin.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/props/pretty_printable.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/props/pretty_printable.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/props/pretty_printable.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/props/pretty_printable.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/props/private/apply_default.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/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.12357/lib/types/props/private/apply_default.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/props/private/apply_default.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/props/private/deserializer_generator.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/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.12357/lib/types/props/private/deserializer_generator.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/props/private/deserializer_generator.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/props/private/parser.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/props/private/parser.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/props/private/parser.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/props/private/parser.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/props/private/serde_transform.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/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.12357/lib/types/props/private/serde_transform.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/props/private/serde_transform.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/props/private/serializer_generator.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/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.12357/lib/types/props/private/serializer_generator.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/props/private/serializer_generator.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/props/private/setter_factory.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/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.12357/lib/types/props/private/setter_factory.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/props/private/setter_factory.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/props/serializable.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/props/serializable.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/props/serializable.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/props/serializable.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/props/type_validation.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/props/type_validation.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/props/type_validation.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/props/type_validation.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/props/utils.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/props/utils.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/props/utils.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/props/utils.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/props/weak_constructor.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/props/weak_constructor.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/props/weak_constructor.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/props/weak_constructor.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/sig.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/sig.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/sig.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/sig.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/struct.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/struct.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/struct.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/struct.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/anything.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/anything.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/anything.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/anything.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/attached_class.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/attached_class.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/attached_class.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/attached_class.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/base.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/base.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/base.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/base.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/class_of.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/class_of.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/class_of.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/class_of.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/enum.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/enum.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/enum.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/enum.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/fixed_array.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/fixed_array.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/fixed_array.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/fixed_array.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/fixed_hash.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/fixed_hash.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/fixed_hash.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/fixed_hash.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/intersection.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/intersection.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/intersection.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/intersection.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/noreturn.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/noreturn.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/noreturn.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/noreturn.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/proc.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/proc.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/proc.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/proc.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/self_type.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/self_type.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/self_type.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/self_type.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/simple.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/simple.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/simple.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/simple.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/t_enum.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/t_enum.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/t_enum.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/t_enum.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/type_member.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/type_member.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/type_member.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/type_member.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/type_parameter.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/type_parameter.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/type_parameter.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/type_parameter.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/type_template.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/type_template.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/type_template.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/type_template.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/type_variable.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/type_variable.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/type_variable.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/type_variable.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/typed_array.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/typed_array.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/typed_array.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/typed_array.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/typed_class.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/typed_class.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/typed_class.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/typed_class.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/typed_enumerable.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/typed_enumerable.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/typed_enumerable.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/typed_enumerable.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/typed_enumerator.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/typed_enumerator.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/typed_enumerator.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/typed_enumerator.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/typed_enumerator_chain.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/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.12357/lib/types/types/typed_enumerator_chain.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/typed_enumerator_chain.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/typed_enumerator_lazy.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/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.12357/lib/types/types/typed_enumerator_lazy.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/typed_enumerator_lazy.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/typed_hash.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/typed_hash.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/typed_hash.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/typed_hash.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/typed_range.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/typed_range.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/typed_range.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/typed_range.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/typed_set.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/typed_set.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/typed_set.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/typed_set.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/union.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/union.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/union.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/union.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/untyped.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/untyped.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/types/untyped.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/types/untyped.rb diff --git a/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/utils.rb b/Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/utils.rb similarity index 100% rename from Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12357/lib/types/utils.rb rename to Library/Homebrew/vendor/bundle/ruby/3.4.0/gems/sorbet-runtime-0.5.12401/lib/types/utils.rb diff --git a/Library/Homebrew/version.rb b/Library/Homebrew/version.rb index 769fdd62d4..49d83b5084 100644 --- a/Library/Homebrew/version.rb +++ b/Library/Homebrew/version.rb @@ -15,6 +15,7 @@ class Version # A part of a {Version}. class Token extend T::Helpers + abstract! include Comparable @@ -722,7 +723,7 @@ class Version # @api public sig { returns(String) } def to_str - raise NoMethodError, "undefined method `to_str' for #{self.class}:NULL" if null? + raise NoMethodError, "undefined method `to_str` for #{self.class}:NULL" if null? T.must(version).to_str end diff --git a/Library/Homebrew/version/parser.rb b/Library/Homebrew/version/parser.rb index 99beb4f82d..8fee526d19 100644 --- a/Library/Homebrew/version/parser.rb +++ b/Library/Homebrew/version/parser.rb @@ -4,6 +4,7 @@ class Version class Parser extend T::Helpers + abstract! sig { abstract.params(spec: Pathname).returns(T.nilable(String)) } @@ -12,6 +13,7 @@ class Version class RegexParser < Parser extend T::Helpers + abstract! sig { params(regex: Regexp, block: T.nilable(T.proc.params(arg0: String).returns(String))).void } diff --git a/completions/zsh/_brew b/completions/zsh/_brew index e0e7592fb9..ce88bff9d3 100644 --- a/completions/zsh/_brew +++ b/completions/zsh/_brew @@ -1909,9 +1909,9 @@ _brew_search() { # brew services _brew_services() { _arguments \ - '--all[Run subcommand on all services]' \ + '(--file)--all[Run subcommand on all services]' \ '--debug[Display any debugging information]' \ - '--file[Use the service file from this location to `start` the service]' \ + '(--all)--file[Use the service file from this location to `start` the service]' \ '--help[Show this message]' \ '--json[Output as JSON]' \ '--keep[When stopped, don'\''t unregister the service from launching at login (or boot)]' \ diff --git a/docs/Acceptable-Casks.md b/docs/Acceptable-Casks.md index 5813f17c49..d2a2f2ff6e 100644 --- a/docs/Acceptable-Casks.md +++ b/docs/Acceptable-Casks.md @@ -61,9 +61,9 @@ Unfortunately, in the world of software there are bad actors that bundle malware But we’d still like for users to enjoy some kind of protection while minimising occurrences of legitimate developers being branded as malware carriers. To do so, we evaluate casks on a case-by-case basis and any user is free to bring a potential malware case to our attention. However, it is important to never forget the last line of defence is *always* the user. -If an app that bundles malware was not signed with an Apple Developer ID and you purposefully disabled or bypassed Gatekeeper, no action will be taken on our part. When you disable security features, you do so at your own risk. If, however, an app that bundles malware is signed, Apple can revoke its permissions and it will no longer run on the computers of users that keep security features on—we all benefit, Homebrew Cask users or not. To report a signed app that bundles malware, use [Apple’s Feedback Assistant](https://feedbackassistant.apple.com). +If an app that bundles malware was not signed with an Apple Developer ID and you purposefully disabled or bypassed Gatekeeper, no action will be taken on our part. When you disable security features, you do so at your own risk. If, however, an app that bundles malware is signed, Apple can revoke its permissions and it will no longer run on the computers of users that keep security features on—we all benefit, Homebrew Cask users or not. To report a signed app that bundles malware, use [Apple’s Feedback Assistant](https://feedbackassistant.apple.com/). -We are also open to removing casks where we feel there is enough evidence that the app is malicious. To suggest a cask for removal, submit a pull request to delete it along with your reasoning. Typically, this will mean presenting a [VirusTotal](https://www.virustotal.com) scan of the app showing it is malicious, ideally with some other reporting indicating it’s not a false positive. +We are also open to removing casks where we feel there is enough evidence that the app is malicious. To suggest a cask for removal, submit a pull request to delete it along with your reasoning. Typically, this will mean presenting a [VirusTotal](https://www.virustotal.com/) scan of the app showing it is malicious, ideally with some other reporting indicating it’s not a false positive. Likewise, software which provides both “clean” and malware-infested versions might be removed from the repository; even if we could have access to the *good* version—if its developers push for users to install the *bad* version. We do so because in these cases there’s a higher than normal risk that both versions are (or will soon become) compromised in some manner. diff --git a/docs/Adding-Software-to-Homebrew.md b/docs/Adding-Software-to-Homebrew.md index 306a25926c..6fc335694f 100644 --- a/docs/Adding-Software-to-Homebrew.md +++ b/docs/Adding-Software-to-Homebrew.md @@ -6,7 +6,7 @@ last_review_date: "1970-01-01" Is your favourite software missing from Homebrew? Then you're the perfect person to resolve this problem. -If you want to add software that is either closed source or a GUI-only program, you will want to follow the guide for [Casks](#casks). Otherwise follow the guide for [Formulae](#formulae) (see also: [Homebrew Terminology](Formula-Cookbook.md#homebrew-terminology)). +If you want to add software that is either closed source or a GUI-only program, you will want to follow the guide for [Casks](#casks). Otherwise follow the guide for [Formulae](#formulae) (see also: [Homebrew terminology](Formula-Cookbook.md#homebrew-terminology)). Before you start, please check the open pull requests for [Homebrew/homebrew-core](https://github.com/Homebrew/homebrew-core/pulls) or [Homebrew/homebrew-cask](https://github.com/Homebrew/homebrew-cask/pulls) to make sure no one else beat you to the punch. @@ -55,7 +55,7 @@ Making a new cask is easy. Follow the directions in [How to Open a Homebrew Pull #### Examples -Here’s a cask for `dixa` as an example. Note the `verified` parameter below the `url`, which is needed when [the url and homepage hostnames differ](Cask-Cookbook.md#when-url-and-homepage-domains-differ-add-verified). +Here’s a cask for `dixa` as an example. Note the `verified` parameter below the `url`, which is needed when [the URL and homepage hostnames differ](Cask-Cookbook.md#when-url-and-homepage-domains-differ-add-verified). ```ruby cask "dixa" do @@ -115,9 +115,9 @@ cask "pomello" do end ``` -Here is a last example for `fabfilter-one`, which uses a `pkg` installer to install the application instead of a stand-alone application bundle (`.app`). Note the [`uninstall pkgutil` stanza](Cask-Cookbook.md#uninstall-pkgutil), which is needed to uninstall all files that were installed using the installer. +Here is a last example for `fabfilter-one`, which uses a `pkg` installer to install the application instead of a stand-alone application bundle (`.app`). Note the [`uninstall pkgutil:`](Cask-Cookbook.md#uninstall-pkgutil) stanza, which is needed to uninstall all files that were installed using the installer. -You will also see how to adapt `version` to the download `url`. Use [our custom `version` methods](Cask-Cookbook.md#version-methods) to do so, resorting to the standard [Ruby String methods](https://ruby-doc.org/core/String.html) when they don’t suffice. +You will also see how to adapt `version` to the download `url`. Use [our custom `version` methods](Cask-Cookbook.md#version-methods) to do so, resorting to the standard [Ruby `String` methods](https://ruby-doc.org/core/String.html) when they don’t suffice. ```ruby cask "fabfilter-one" do @@ -201,7 +201,7 @@ Other commonly used stanzas are: | `caveats` | string or Ruby block providing the user with cask-specific information at install time (see [`caveats` Stanza Details](Cask-Cookbook.md#stanza-caveats)) | | `uninstall` | procedures to uninstall a cask; optional unless the `pkg` stanza is used (see [`uninstall` Stanza Details](Cask-Cookbook.md#stanza-uninstall)) | -Additional [`artifact` stanzas](Cask-Cookbook.md#at-least-one-artifact-stanza-is-also-required) may be needed for special use cases. Even more special-use stanzas are listed at [Optional Stanzas](Cask-Cookbook.md#optional-stanzas). +Additional [artifact stanzas](Cask-Cookbook.md#at-least-one-artifact-stanza-is-also-required) may be needed for special use cases. Even more special-use stanzas are listed at [Optional stanzas](Cask-Cookbook.md#optional-stanzas). #### Cask token details @@ -209,7 +209,7 @@ If a token conflicts with an already-existing cask, authors should manually make If possible, avoid creating tokens that differ only by the placement of hyphens. -To generate a token manually, or to learn about exceptions for unusual cases, see the [Token Reference](Cask-Cookbook.md#token-reference). +To generate a token manually, or to learn about exceptions for unusual cases, see the [Token reference](Cask-Cookbook.md#token-reference). #### Archives with subfolders @@ -264,7 +264,7 @@ If your application and Homebrew Cask do not work well together, feel free to [f #### Finding a home for your cask -See the [Acceptable Casks documentation](Acceptable-Casks.md#finding-a-home-for-your-cask). +See the [Acceptable Casks](Acceptable-Casks.md#finding-a-home-for-your-cask) documentation. Hop into your tap and check to make sure your new cask is there: @@ -355,7 +355,7 @@ Now go to the [`homebrew-cask` GitHub repository](https://github.com/Homebrew/ho Otherwise, click the `Contribute > Open pull request` button and choose to `compare across forks`. The base fork should be `Homebrew/homebrew-cask @ main`, and the head fork should be `my-github-username/homebrew-cask @ my-new-cask-branch`. You can also add any further comments to your pull request at this stage. -##### Congratulations +#### Congratulations You are done now, and your cask should be pulled in or otherwise noticed in a while. If a maintainer suggests some changes, just make them on the `my-new-cask-branch` branch locally and [push](#pushing). diff --git a/docs/Autobump.md b/docs/Autobump.md index 81ccefcba2..f578223ba2 100644 --- a/docs/Autobump.md +++ b/docs/Autobump.md @@ -20,7 +20,7 @@ Other formula and cask specific reasons for why a package is not autobumped are When using `no_autobump!`, a reason for exclusion must be provided. -There are two ways to indicate the reason. The preferred way is to use a pre-existing symbol, which can be found in [`NO_AUTOBUMP_REASONS_LIST`](https://rubydoc.brew.sh/top-level-namespace.html#NO_AUTOBUMP_REASONS_LIST-constant), for example: +There are two ways to indicate the reason. The preferred way is to use a pre-existing symbol, which can be found in [`NO_AUTOBUMP_REASONS_LIST`](https://rubydoc.brew.sh/top-level-namespace#NO_AUTOBUMP_REASONS_LIST-constant), for example: ```ruby no_autobump! because: :bumped_by_upstream diff --git a/docs/Cask-Cookbook.md b/docs/Cask-Cookbook.md index 4b52704fcf..84929c3139 100644 --- a/docs/Cask-Cookbook.md +++ b/docs/Cask-Cookbook.md @@ -66,6 +66,8 @@ Having a common order for stanzas makes casks easier to update and parse. Below depends_on container + rename + suite app pkg @@ -176,6 +178,7 @@ Each cask must declare one or more [artifacts](https://rubydoc.brew.sh/Cask/Arti | `container type:` | no | Symbol to override container-type autodetect. May be one of: `:air`, `:bz2`, `:cab`, `:dmg`, `:generic_unar`, `:gzip`, `:otf`, `:pkg`, `:rar`, `:seven_zip`, `:sit`, `:tar`, `:ttf`, `:xar`, `:zip`, `:naked`. (Example: [parse.rb](https://github.com/Homebrew/homebrew-cask/blob/aa461148bbb5119af26b82cccf5003e2b4e50d95/Casks/p/parse.rb#L10)) | | `auto_updates` | no | `true`. Asserts that the cask artifacts auto-update. Use if `Check for Updates…` or similar is present in an app menu, but not if it only opens a webpage and does not do the download and installation for you. | | [`no_autobump!`](#stanza-no_autobump) | no | Allowed symbol or a string. Excludes cask from autobumping if set. | +| [`rename`](#stanza-rename) | yes | A pair of strings. | ## Stanza descriptions @@ -252,6 +255,18 @@ binary "#{appdir}/Atom.app/Contents/Resources/app/atom.sh", target: "atom" Behaviour and usage of `target:` is [the same as with `app`](#renaming-the-target). However, for `binary` the select cases don’t apply as rigidly. It’s fine to take extra liberties with `target:` to be consistent with other command-line tools, like [changing case](https://github.com/Homebrew/homebrew-cask/blob/aa461148bbb5119af26b82cccf5003e2b4e50d95/Casks/g/godot.rb#L19), [removing an extension](https://github.com/Homebrew/homebrew-cask/blob/aa461148bbb5119af26b82cccf5003e2b4e50d95/Casks/f/filebot.rb#L19), or [cleaning up the name](https://github.com/Homebrew/homebrew-cask/blob/aa461148bbb5119af26b82cccf5003e2b4e50d95/Casks/f/fig.rb#L21). +### Stanza: `rename` + +The `rename` stanza provides a convenience method to rename files to provide more practical access to them. +This stanza should be used sparingly, and is reserved for scenarios where a the path of a file/directory is impossible to pre-determine. + +The example below can be used when the `pkg` path has a value such as timestamp that can't be detected without extracting the archive it is distributed within. + +```ruby +# Upstream provides a `pkg` - "foobar-.pkg" +rename "foobar-*.pkg", "foobar.pkg" +``` + ### Stanza: `caveats` 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`. @@ -654,7 +669,7 @@ The `no_autobump!` stanza excludes a cask from the autobump list. This means all no_autobump! because: :incompatible_version_format ``` -A complete list of allowed symbols can be found in [`NO_AUTOBUMP_REASONS_LIST`](https://rubydoc.brew.sh/top-level-namespace.html#NO_AUTOBUMP_REASONS_LIST-constant). +A complete list of allowed symbols can be found in [`NO_AUTOBUMP_REASONS_LIST`](https://rubydoc.brew.sh/top-level-namespace#NO_AUTOBUMP_REASONS_LIST-constant). Casks that use `strategy :extract_plist` in their `livecheck` block or have `version :latest` are always excluded from the autobump list and do not require `no_autobump!` to be declared. @@ -666,7 +681,7 @@ Refer to the [Autobump](Autobump.md) page for more information about the autobum Unlike the [token](#token-reference), which is simplified and reduced to a limited set of characters, the `name` stanza can include the proper capitalization, spacing and punctuation to match the official name of the software. For disambiguation purposes, it is recommended to spell out the name of the application, including the vendor name if necessary. A good example is the [`pycharm-ce`](https://github.com/Homebrew/homebrew-cask/blob/aa461148bbb5119af26b82cccf5003e2b4e50d95/Casks/p/pycharm-ce.rb#L9-L10) cask, whose name is spelled out as `Jetbrains PyCharm Community Edition`, even though it is likely never referenced as such anywhere. -Additional details about the software can be provided in the [`desc` stanza](#stanza-desc). +Additional details about the software can be provided in the [`desc`](#stanza-desc) stanza. The `name` stanza can be repeated multiple times if there are useful alternative names. The first instance should use the Latin alphabet. For example, see the [`cave-story`](https://github.com/Homebrew/homebrew-cask/blob/aa461148bbb5119af26b82cccf5003e2b4e50d95/Casks/c/cave-story.rb#L58-L60) cask, whose original name does not use the Latin alphabet. @@ -953,7 +968,7 @@ Arguments to `uninstall delete:` should use the following basic rules: * Paths must be absolute. * Glob expansion is performed using the [standard set of characters](https://en.wikipedia.org/wiki/Glob_(programming)). -To remove user-specific files, use the [`zap` stanza](#stanza-zap). +To remove user-specific files, use the [`zap`](#stanza-zap) stanza. #### `uninstall` *trash* @@ -1197,7 +1212,7 @@ brew uninstall --zap --force firefox #### `zap` syntax -The form of the `zap` stanza follows the [`uninstall` stanza](#stanza-uninstall). All the same directives are available. The `trash:` key is preferred over `delete:`. +The form of the `zap` stanza follows the [`uninstall`](#stanza-uninstall) stanza. All the same directives are available. The `trash:` key is preferred over `delete:`. Example: [dropbox.rb](https://github.com/Homebrew/homebrew-cask/blob/974a55ade77bb4edc8bbb80ef72eec83ae0e76c0/Casks/d/dropbox.rb#L30-L68) @@ -1289,11 +1304,11 @@ cask "calibre" do end ``` -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) +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), [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 -If a cask is available in multiple languages, you can use the [`language` stanza](#stanza-language) to switch between languages or regions based on the system locale. +If a cask is available in multiple languages, you can use the [`language`](#stanza-language) stanza to switch between languages or regions based on the system locale. ## Arbitrary Ruby methods @@ -1433,7 +1448,7 @@ To convert the App’s simplified name (above) to a token: #### 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 a specific version of the application (e.g. [`carbon-copy-cloner@5`](https://github.com/Homebrew/homebrew-cask/blob/HEAD/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 6, the token is `carbon-copy-cloner@6`. #### Casks pinned to development channels diff --git a/docs/Common-Issues.md b/docs/Common-Issues.md index cc4d2c122a..6d8c75f622 100644 --- a/docs/Common-Issues.md +++ b/docs/Common-Issues.md @@ -167,7 +167,7 @@ for replacements for deprecated, disabled, or removed formulae. Once you are satisfied with the state of your new `/opt/homebrew` Homebrew installation, you can uninstall the old `/usr/local` installation. -Download and run [the uninstaller](https://github.com/Homebrew/install/#uninstall-homebrew) script: +Download and run the [uninstaller script](https://github.com/Homebrew/install/#uninstall-homebrew): ```sh /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)" -- --path=/usr/local diff --git a/docs/Deprecating-Disabling-and-Removing-Casks.md b/docs/Deprecating-Disabling-and-Removing-Casks.md index 90b03ebc37..b0b5a32b5f 100644 --- a/docs/Deprecating-Disabling-and-Removing-Casks.md +++ b/docs/Deprecating-Disabling-and-Removing-Casks.md @@ -20,11 +20,12 @@ If a user attempts to install a deprecated cask, they will be shown a warning me A cask should be deprecated to indicate to users that the cask should not be used and will be disabled in the future. Deprecated casks should continue to be maintained by the Homebrew maintainers if they continue to be installable. If this is not possible, they should be immediately disabled. -The most common reasons for deprecation are when the upstream project is unsigned, deprecated, unmaintained or archived. +The most common reasons for deprecation are when the upstream project is deprecated, unmaintained or archived, +or the software does not pass macOS Gatekeeper checks. Casks should only be deprecated if at least one of the following are true: -- the software installed by the cask is unsigned or does not meet signature requirements for supported OS versions +- the software installed by the cask fails macOS Gatekeeper checks for supported OS versions - the software installed by the cask cannot be run on any supported OS versions - the software installed by the cask has outstanding CVEs - the software installed by the cask has been discontinued or abandoned upstream @@ -96,7 +97,7 @@ There are two ways to indicate the reason. The preferred way is to use a pre-exi - `: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 +- `:fails_gatekeeper_check`: the cask fails macOS Gatekeeper checks These reasons can be specified by their symbols (the comments show the message that will be displayed to users): diff --git a/docs/FAQ.md b/docs/FAQ.md index 6dca0305e5..cc1fdbabc5 100644 --- a/docs/FAQ.md +++ b/docs/FAQ.md @@ -73,7 +73,7 @@ Which is usually: `~/Library/Caches/Homebrew` ## My Mac `.app`s don’t find Homebrew utilities! -GUI apps on macOS don’t have Homebrew's prefix in their `PATH` by default. If you're on Mountain Lion or later, you can fix this by running `sudo launchctl config user path "$(brew --prefix)/bin:${PATH}"` and then rebooting, as documented in `man launchctl`. Note that this sets the `launchctl` `PATH` for *all users*. For earlier versions of macOS, see [this page](https://developer.apple.com/legacy/library/qa/qa1067/_index.html). +GUI apps on macOS don’t have Homebrew's prefix in their `PATH` by default. If you're on Mountain Lion or later, you can fix this by running `sudo launchctl config user path "$(brew --prefix)/bin:${PATH}"` and then rebooting, as documented in `man launchctl`. Note that this sets the `launchctl` `PATH` for *all users*. For earlier versions of macOS, see [this page](https://developer.apple.com/library/archive/qa/qa1067/_index.html). ## How do I contribute to Homebrew? diff --git a/docs/Formula-Cookbook.md b/docs/Formula-Cookbook.md index 37f7a4b252..f42e72d859 100644 --- a/docs/Formula-Cookbook.md +++ b/docs/Formula-Cookbook.md @@ -4,7 +4,7 @@ last_review_date: "1970-01-01" # Formula Cookbook -A *formula* is a package definition written in Ruby. It can be created with `brew create ` where `` is a zip or tarball, installed with `brew install `, and debugged with `brew install --debug --verbose `. Formulae use the [Formula API](https://rubydoc.brew.sh/Formula) which provides various Homebrew-specific helpers. +A *formula* is a package definition written in Ruby. It can be created with `brew create ` where `` is a zip or tarball, installed with `brew install `, and debugged with `brew install --debug --verbose `. Formulae use the [`Formula` class API](https://rubydoc.brew.sh/Formula) which provides various Homebrew-specific helpers. * Table of Contents {:toc} @@ -22,7 +22,7 @@ A *formula* is a package definition written in Ruby. It can be created with `bre | **opt prefix** | a symlink to the active version of a **keg** | `/opt/homebrew/opt/foo` | | **Cellar** | directory containing one or more named **racks** | `/opt/homebrew/Cellar` | | **Caskroom** | directory containing one or more named **casks** | `/opt/homebrew/Caskroom` | -| **external command** | `brew` subcommand defined outside of the Homebrew/brew GitHub repository | [`brew alias`](https://github.com/Homebrew/homebrew-aliases) | +| **external command** | `brew` subcommand defined outside of the Homebrew/brew GitHub repository | [`brew test-bot`](https://github.com/Homebrew/homebrew-test-bot) | | **tap** | directory (and usually Git repository) of **formulae**, **casks** and/or **external commands** | `/opt/homebrew/Library/Taps/homebrew/homebrew-core` | | **bottle** | pre-built **keg** poured into a **rack** of the **Cellar** instead of building from upstream sources | `qt--6.5.1.ventura.bottle.tar.gz` | | **tab** | information about a **keg**, e.g. whether it was poured from a **bottle** or built from source | `/opt/homebrew/Cellar/foo/0.1/INSTALL_RECEIPT.json` | @@ -305,7 +305,7 @@ We want tests that don't require any user input and test the basic functionality See the [`cmake`](https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/c/cmake.rb) formula for an example of a good test. It writes a basic `CMakeLists.txt` file into the test directory then calls CMake to generate Makefiles. This test checks that CMake doesn't e.g. segfault during basic operation. -You can check that the output is as expected with `assert_equal` or `assert_match` on the output of the [Formula assertions](https://rubydoc.brew.sh/Homebrew/Assertions) such as in this example from the [`envv`](https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/e/envv.rb) formula: +You can check that the output is as expected with `assert_equal` or `assert_match` on the output of the formula's [assertions](https://rubydoc.brew.sh/Homebrew/Assertions) such as in this example from the [`envv`](https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/e/envv.rb) formula: ```ruby assert_equal "mylist=A:C; export mylist", shell_output("#{bin}/envv del mylist B").strip @@ -460,7 +460,7 @@ end ### Standard arguments -For any formula using certain well-known build systems, there will be arguments that should be passed during compilation so that the build conforms to Homebrew standards. These have been collected into a set of `std_*_args` methods. Detailed information about each of those methods can be found in [Rubydoc](https://rubydoc.brew.sh/Formula). +For any formula using certain well-known build systems, there will be arguments that should be passed during compilation so that the build conforms to Homebrew standards. These have been collected into a set of `std_*_args` methods. Detailed information about each of those methods can be found in the [`Formula` class API](https://rubydoc.brew.sh/Formula) documentation. Most of these methods accept parameters to customize their output. For example, to set the install prefix to [**`libexec`**](#variables-for-directory-locations) for `configure` or `cmake`: @@ -592,7 +592,7 @@ Make sure you modify `s`! This block ignores the returned value. [`inreplace`](https://rubydoc.brew.sh/Utils/Inreplace) should be used instead of patches when patching something that will never be accepted upstream, e.g. making the software’s build system respect Homebrew’s installation hierarchy. If it's something that affects both Homebrew and MacPorts (i.e. macOS specific) it should be turned into an upstream submitted patch instead. -If you need to modify variables in a `Makefile`, rather than using [`change_make_var!`](https://rubydoc.brew.sh/StringInreplaceExtension.html#change_make_var!-instance_method) within an [`inreplace`](https://rubydoc.brew.sh/Utils/Inreplace), try passing them as arguments to `make`: +If you need to modify variables in a `Makefile`, rather than using [`change_make_var!`](https://rubydoc.brew.sh/StringInreplaceExtension#change_make_var!-instance_method) within an [`inreplace`](https://rubydoc.brew.sh/Utils/Inreplace), try passing them as arguments to `make`: ```ruby system "make", "target", "VAR2=value1", "VAR2=value2", "VAR3=values can have spaces" @@ -685,7 +685,7 @@ Instead of `git diff | pbcopy`, for some editors `git diff >> path/to/your/formu ## Advanced formula tricks -See the [Formula API](https://rubydoc.brew.sh/Formula) for the full list of methods available within a formula. If anything isn’t clear, you can usually figure it out by `grep`ping the `$(brew --repository homebrew/core)` directory for examples. Please submit a pull request to amend this document if you think it will help! +See the [`Formula` class API](https://rubydoc.brew.sh/Formula) documentation for the full list of methods available within a formula. If anything isn’t clear, you can usually figure it out by `grep`ping the `$(brew --repository homebrew/core)` directory for examples. Please submit a pull request to amend this document if you think it will help! ### Handling different system configurations @@ -744,7 +744,7 @@ livecheck do end ``` -For `url`/`regex` guidelines and additional `livecheck` block examples, refer to the [`brew livecheck` documentation](Brew-Livecheck.md). For more technical information on the methods used in a `livecheck` block, please refer to the [`Livecheck` class documentation](https://rubydoc.brew.sh/Livecheck). +For `url`/`regex` guidelines and additional `livecheck` block examples, refer to the [`brew livecheck`](Brew-Livecheck.md) documentation. For more technical information on the methods used in a `livecheck` block, please refer to the [`Livecheck` class](https://rubydoc.brew.sh/Livecheck) documentation. ### Excluding formula from autobumping @@ -756,7 +756,7 @@ Sometimes, we want to exclude a formula from this list, for one reason or anothe no_autobump! because: :bumped_by_upstream ``` -A complete list of allowed symbols can be found in [`NO_AUTOBUMP_REASONS_LIST`](https://rubydoc.brew.sh/top-level-namespace.html#NO_AUTOBUMP_REASONS_LIST-constant). +A complete list of allowed symbols can be found in [`NO_AUTOBUMP_REASONS_LIST`](https://rubydoc.brew.sh/top-level-namespace#NO_AUTOBUMP_REASONS_LIST-constant). See our [Autobump](Autobump.md) documentation for more information about the autobump process. @@ -841,7 +841,7 @@ end Formulae can specify an alternate download for the upstream project's development/cutting-edge source (e.g. `master`/`main`/`trunk`) using [`head`](https://rubydoc.brew.sh/Formula#head-class_method), which can be activated by passing `--HEAD` when installing. Specifying it is done in the same manner as [`url`](https://rubydoc.brew.sh/Formula#url-class_method), with added conventions for fetching from version control repositories: -* Git repositories need `branch:` specified to fetch a branch other than "master". If the repository is very large, specify `only_path` to [limit the checkout to one path](Cask-Cookbook.md#git-urls). +* Git repositories **must always** specify `branch:`. If the repository is very large, specify `only_path` to [limit the checkout to one path](Cask-Cookbook.md#git-urls). ```sh head "https://github.com/some/package.git", branch: "main" @@ -975,7 +975,7 @@ Note that in the context of Homebrew, [`libexec`](https://rubydoc.brew.sh/Formul ### File-level operations -You can use the file utilities provided by Ruby's [`FileUtils`](https://ruby-doc.org/stdlib-2.7.0/libdoc/fileutils/rdoc/FileUtils.html). These are included in the [`Formula`](https://rubydoc.brew.sh/Formula) class, so you do not need the `FileUtils.` prefix to use them. +You can use the file utilities provided by Ruby's [`FileUtils`](https://ruby-doc.org/current/stdlibs/fileutils/FileUtils.html). These are included in the [`Formula` class](https://rubydoc.brew.sh/Formula), so you do not need the `FileUtils.` prefix to use them. When creating symlinks, take special care to ensure they are *relative* symlinks. This makes it easier to create a relocatable bottle. For example, to create a symlink in `bin` to an executable in `libexec`, use: @@ -1286,7 +1286,7 @@ There are also `ENV` helper methods available for many common environment variab * `ENV.remove` - remove a string from an environment variable value * `ENV.delete` - unset an environment variable -The full list can be found in the [SharedEnvExtension](https://rubydoc.brew.sh/SharedEnvExtension.html) and [Superenv](https://rubydoc.brew.sh/Superenv.html) module documentation. +The full list can be found in the [`SharedEnvExtension` module](https://rubydoc.brew.sh/SharedEnvExtension) and [`Superenv` module](https://rubydoc.brew.sh/Superenv) documentation. ### Deprecating and disabling a formula diff --git a/docs/Homebrew-brew-Maintainer-Guide.md b/docs/Homebrew-brew-Maintainer-Guide.md index b02389f256..8d8e7cd54a 100644 --- a/docs/Homebrew-brew-Maintainer-Guide.md +++ b/docs/Homebrew-brew-Maintainer-Guide.md @@ -36,7 +36,7 @@ There are many checks that run on every PR. The following is a quick list of the - `CI / docker`: This builds and deploys a new Homebrew Docker image to GitHub Packages and Docker Hub. - `CI / test everything (macOS)`: This runs several checks on macOS including `brew tests`, `brew update-tests`, `brew test-bot --only-formulae --test-default-formula`, `brew readall` and `brew doctor`. - `CI / tests (generic OS)` and `CI / tests (Linux)`: These run `brew tests` with various options on Linux. -- `Documentation CI / linting` and `rubydoc`: These check the prose and formatting of the written documentation, and verify the [rubydoc API documentation](https://rubydoc.brew.sh) can be built without issue. +- `Documentation CI / linting` and `rubydoc`: These check the prose and formatting of the written documentation, and verify the [Homebrew Ruby API documentation](https://rubydoc.brew.sh/) can be built without issue. _Note that this list is non-exhaustive and can change over time._ diff --git a/docs/Homebrew-homebrew-core-Maintainer-Guide.md b/docs/Homebrew-homebrew-core-Maintainer-Guide.md index 69d797ec48..43b0c26c15 100644 --- a/docs/Homebrew-homebrew-core-Maintainer-Guide.md +++ b/docs/Homebrew-homebrew-core-Maintainer-Guide.md @@ -74,7 +74,7 @@ Don't merge any formula updates with failing `brew test`s. If a `test do` block ## Duplicates -We now accept stuff that comes with macOS as long as it uses `keg_only :provided_by_macos` to be keg-only by default. +We now accept stuff that comes with macOS as long as it uses `keg_only :provided_by_macos` to be [keg-only](FAQ.md#what-does-keg-only-mean) by default. ## Removing formulae diff --git a/docs/Homebrew-on-Linux.md b/docs/Homebrew-on-Linux.md index 1b55fbebea..ba190ab807 100644 --- a/docs/Homebrew-on-Linux.md +++ b/docs/Homebrew-on-Linux.md @@ -22,7 +22,7 @@ The Homebrew package manager may be used on Linux and [Windows Subsystem for Lin ## Install -Instructions for the best, supported install of Homebrew on Linux are on the [homepage](https://brew.sh). +Instructions for the best, supported install of Homebrew on Linux are on the [homepage](https://brew.sh/). The installation script installs Homebrew to `/home/linuxbrew/.linuxbrew` using *sudo*. Homebrew does not use *sudo* after installation. Using `/home/linuxbrew/.linuxbrew` allows the use of most binary packages (bottles) which will not work when installing in e.g. your personal home directory. @@ -51,7 +51,7 @@ If you're using an older distribution of Linux, installing your first package wi ## Requirements -See [Support Tiers](Support-Tiers.md) +See [Support Tiers](Support-Tiers.md#linux) for the full list of Linux requirements. To install build tools, paste at a terminal prompt: diff --git a/docs/How-To-Organize-AGM.md b/docs/How-To-Organize-AGM.md index e27bdc90f3..f8b2b08086 100644 --- a/docs/How-To-Organize-AGM.md +++ b/docs/How-To-Organize-AGM.md @@ -54,7 +54,7 @@ PLC members' roles of responsibility for planning and execution: ## Logistics Timeline -Past practice and future intent is for AGM to coincide with [FOSDEM](https://fosdem.org "Free and Open Source Developers European Meeting"), which is held in Brussels, Belgium annually typically on the Saturday and Sunday of the fifth ISO-8601 week of the calendar year, calculable with: +Past practice and future intent is for AGM to coincide with [FOSDEM](https://fosdem.org "Free and Open Source Developers European Meeting"), which is held in Brussels, Belgium annually typically on the Saturday and Sunday of the fifth ISO 8601 week of the calendar year, calculable with: ruby -rdate -e "s=ARGV[0].to_i;s.upto(s+4).map{|y|Date.commercial(y,5,6)}.each{|y|puts [y,y+1].join(' - ')}" 2024 @@ -156,7 +156,7 @@ It is important that all attendees expecting reimbursement stay in-policy. ### Meeting enhancements -* Captioning or transcription, or both - [White Coat Captioning](https://whitecoatcaptioning.com) could handle the live captioning and provide us that for a transcript. +* Captioning or transcription, or both - [White Coat Captioning](https://whitecoatcaptioning.com/) could handle the live captioning and provide us that for a transcript. * Separate meeting runner * Keep PL ideally focused on content and not agenda or tracking who's asked to speak * Should be a PLC member who is not the AC, LC, or TC diff --git a/docs/How-to-Create-and-Maintain-a-Tap.md b/docs/How-to-Create-and-Maintain-a-Tap.md index 2f3342a4d8..a06a508ced 100644 --- a/docs/How-to-Create-and-Maintain-a-Tap.md +++ b/docs/How-to-Create-and-Maintain-a-Tap.md @@ -18,7 +18,7 @@ See [homebrew/core](https://github.com/Homebrew/homebrew-core) for an example of ### Naming your formulae to avoid clashes -If a formula in your tap has the same name as a Homebrew/homebrew-core formula they cannot be installed side-by-side. If you wish to create a different version of a formula that's in Homebrew/homebrew-core (e.g. with `option`s) consider giving it a different name; e.g. `nginx-full` for a more full-featured `nginx` formula. This will allow both `nginx` and `nginx-full` to be installed at the same time (assuming one is [`keg_only`](https://rubydoc.brew.sh/Formula#keg_only-class_method) or the linked files do not clash). +If a formula in your tap has the same name as a Homebrew/homebrew-core formula they cannot be installed side-by-side. If you wish to create a different version of a formula that's in Homebrew/homebrew-core (e.g. with `option`s) consider giving it a different name; e.g. `nginx-full` for a more full-featured `nginx` formula. This will allow both `nginx` and `nginx-full` to be installed at the same time (assuming one is [keg-only](FAQ.md#what-does-keg-only-mean) or the linked files do not clash). ## Installing @@ -54,7 +54,7 @@ See [Homebrew/test-bot](https://github.com/Homebrew/homebrew-test-bot) for an ex ## Upstream taps -Some upstream software providers like to package their software in their own Homebrew tap. When their software is [eligible for Homebrew/homebrew-core](Acceptable-Formulae.md) we prefer to maintain software there for ease of updates, improved discoverability and use of tools such as [formulae.brew.sh](https://formulae.brew.sh). +Some upstream software providers like to package their software in their own Homebrew tap. When their software is [eligible for Homebrew/homebrew-core](Acceptable-Formulae.md) we prefer to maintain software there for ease of updates, improved discoverability and use of tools such as [formulae.brew.sh](https://formulae.brew.sh/). We are not willing to remove software packaged in Homebrew/homebrew-core in favour of an upstream tap. We are not willing to instruct users of our formulae to use an upstream tap instead. If upstream projects have issues with how Homebrew packages your software: please file issues (or, ideally, pull requests) to address these problems. diff --git a/docs/Installation.md b/docs/Installation.md index 32d1c285e9..dbad1bebfa 100644 --- a/docs/Installation.md +++ b/docs/Installation.md @@ -4,7 +4,7 @@ last_review_date: "2025-04-12" # Installation -Instructions for a supported install of Homebrew are on the [homepage](https://brew.sh). +Instructions for a supported install of Homebrew are on the [homepage](https://brew.sh/). The script installs Homebrew to its default, supported, best prefix (`/opt/homebrew` for Apple Silicon, `/usr/local` for macOS Intel and `/home/linuxbrew/.linuxbrew` for Linux) so that [you don’t need *sudo* after Homebrew's initial installation](FAQ.md#why-does-homebrew-say-sudo-is-bad) when you `brew install`. This prefix is required for most bottles (binary packages) to be used. It is a careful script; it can be run even if you have stuff installed in the preferred prefix already. It tells you exactly what it will do before it does it too. You have to confirm everything it will do before it starts. @@ -21,7 +21,7 @@ The macOS `.pkg` installer also installs Homebrew to its default prefix (`/opt/h ## Advanced Configuration -The Homebrew installer offers various advanced configuration settings. **Most users can skip this section and instead follow the instructions on the [homepage](https://brew.sh)!** +The Homebrew installer offers various advanced configuration settings. **Most users can skip this section and instead follow the instructions on the [homepage](https://brew.sh/)!** ### Git Remote Mirroring @@ -56,7 +56,7 @@ If you want a non-interactive run of the Homebrew installer that doesn't prompt ### Linux or Windows 10 Subsystem for Linux -Check out [the Homebrew on Linux installation documentation](Homebrew-on-Linux.md). +Check out the documentation for installing [Homebrew on Linux](Homebrew-on-Linux.md). ### Untar anywhere (unsupported) @@ -106,11 +106,9 @@ 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](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/956abfa01f0d1dba285e6d3da86587ed428f19fe/install.sh#L1075-L1091) -to see how the installer constructs the path it recommends. +For more insight, re-run the installer or inspect the [installer's source](https://github.com/Homebrew/install/blob/700c9a145d37a3f0f3bd3b7c208d7adab31bd278/install.sh#L1104-L1120) to see how the installer constructs the path it recommends. -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. +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 @@ -122,4 +120,4 @@ Uninstallation is documented in the [FAQ](FAQ.md#how-do-i-uninstall-homebrew). 3 You may need to install Xcode, the CLT, or both depending on the formula, to install a bottle (binary package) which is the only supported configuration. Downloading Xcode may require an Apple Developer account on older versions of Mac OS X. Sign up for free at [Apple's website](https://developer.apple.com/account/). -4 The one-liner installation method found on [brew.sh](https://brew.sh) uses the Bourne-again shell at `/bin/bash`. Notably, `zsh`, `fish`, `tcsh` and `csh` will not work. +4 The one-liner installation method found on [brew.sh](https://brew.sh/) uses the Bourne-again shell at `/bin/bash`. Notably, `zsh`, `fish`, `tcsh` and `csh` will not work. diff --git a/docs/Manpage.md b/docs/Manpage.md index d0f61174d8..cabe08169f 100644 --- a/docs/Manpage.md +++ b/docs/Manpage.md @@ -1411,26 +1411,26 @@ If `sudo` is passed, operate on `/Library/LaunchDaemons` or `/usr/lib/systemd/system` (started at boot). Otherwise, operate on `~/Library/LaunchAgents` or `~/.config/systemd/user` (started at login). -\[`sudo`\] `brew services` \[`list`\] (`--json`) (`--debug`) +\[`sudo`\] `brew services` \[`list`\] \[`--json`\] \[`--debug`\] : List information about all managed services for the current user (or root). Provides more output from Homebrew and `launchctl`(1) or `systemctl`(1) if run with `--debug`. -\[`sudo`\] `brew services info` (*`formula`*\|`--all`\|`--json`) +\[`sudo`\] `brew services info` (*`formula`*\|`--all`) \[`--json`\] : List all managed services for the current user (or root). -\[`sudo`\] `brew services run` (*`formula`*\|`--all`\|`--file=`) +\[`sudo`\] `brew services run` (*`formula`*\|`--all`) \[`--file=`\] : Run the service *`formula`* without registering to launch at login (or boot). -\[`sudo`\] `brew services start` (*`formula`*\|`--all`\|`--file=`) +\[`sudo`\] `brew services start` (*`formula`*\|`--all`) \[`--file=`\] : Start the service *`formula`* immediately and register it to launch at login (or boot). -\[`sudo`\] `brew services stop` (`--keep`) (`--no-wait`\|`--max-wait=`) (*`formula`*\|`--all`) +\[`sudo`\] `brew services stop` \[`--keep`\] \[`--no-wait`\|`--max-wait=`\] (*`formula`*\|`--all`) : Stop the service *`formula`* immediately and unregister it from launching at login (or boot), unless `--keep` is specified. @@ -1440,7 +1440,7 @@ If `sudo` is passed, operate on `/Library/LaunchDaemons` or : Stop the service *`formula`* immediately but keep it registered to launch at login (or boot). -\[`sudo`\] `brew services restart` (*`formula`*\|`--all`\|`--file=`) +\[`sudo`\] `brew services restart` (*`formula`*\|`--all`) \[`--file=`\] : Stop (if necessary) and start the service *`formula`* immediately and register it to launch at login (or boot). @@ -1462,14 +1462,6 @@ If `sudo` is passed, operate on `/Library/LaunchDaemons` or : 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` - -: Run *`subcommand`* on all services. - -`--json` - -: Output as JSON. - `--no-wait` : Don't wait for `stop` to finish stopping the service. @@ -1478,6 +1470,14 @@ If `sudo` is passed, operate on `/Library/LaunchDaemons` or : When stopped, don't unregister the service from launching at login (or boot). +`--all` + +: Run *`subcommand`* on all services. + +`--json` + +: Output as JSON. + ### `setup-ruby` \[*`command`* ...\] Installs and configures Homebrew's Ruby. If `command` is passed, it will only @@ -4127,6 +4127,8 @@ command execution (e.g. `$(cat file)`). : If set, Homebrew will refuse to read formulae or casks provided from file paths, e.g. `brew install ./package.rb`. + + *Default:* true unless `$HOMEBREW_DEVELOPER` is set. `HOMEBREW_FORCE_API_AUTO_UPDATE` diff --git a/docs/Python-for-Formula-Authors.md b/docs/Python-for-Formula-Authors.md index b5aa833df2..e60b2619bb 100644 --- a/docs/Python-for-Formula-Authors.md +++ b/docs/Python-for-Formula-Authors.md @@ -26,7 +26,7 @@ Formulae for apps that require Python 3 **must** declare an unconditional depend Starting with Python@3.12, Homebrew follows [PEP 668](https://peps.python.org/pep-0668/#marking-an-interpreter-as-using-an-external-package-manager). Applications must be installed into a Python [virtual environment](https://docs.python.org/3/library/venv.html) rooted in `libexec`. This prevents the app's Python modules from contaminating the system `site-packages` and vice versa. -All the Python module dependencies of the application (and their dependencies, recursively) should be declared as [`resource`](https://rubydoc.brew.sh/Formula#resource-class_method)s in the formula and installed into the virtual environment as well. Each dependency should be explicitly specified; please do not rely on `setup.py` or `pip` to perform automatic dependency resolution, for the [reasons described here](Acceptable-Formulae.md#we-dont-like-install-scripts-that-download-unversioned-things). +All the Python module dependencies of the application (and their dependencies, recursively) should be [declared as `resource`s](Formula-Cookbook.md#python-dependencies) in the formula and installed into the virtual environment as well. Each dependency should be explicitly specified; please do not rely on `setup.py` or `pip` to perform automatic dependency resolution, for the [reasons described here](Acceptable-Formulae.md#we-dont-like-install-scripts-that-download-unversioned-things). You can use `brew update-python-resources` to help you write resource stanzas. To use it, simply run `brew update-python-resources `. Sometimes, `brew update-python-resources` won't be able to automatically update the resources. If this happens, try running `brew update-python-resources --print-only ` to print the resource stanzas instead of applying the changes directly to the file. You can then copy and paste resources as needed. diff --git a/docs/Querying-Brew.md b/docs/Querying-Brew.md index 2322112133..6e30b06c4f 100644 --- a/docs/Querying-Brew.md +++ b/docs/Querying-Brew.md @@ -60,7 +60,7 @@ brew info --json=v1 --installed | jq "map(select(.keg_only == false and .linked_ ## formulae.brew.sh -[formulae.brew.sh](https://formulae.brew.sh) has a [documented JSON API](https://formulae.brew.sh/docs/api/) which provides access to the `brew info --json=v1` output without needing access to Homebrew. +[formulae.brew.sh](https://formulae.brew.sh/) has a [documented JSON API](https://formulae.brew.sh/docs/api/) which provides access to the `brew info --json=v1` output without needing access to Homebrew. ## Concluding remarks diff --git a/docs/Reproducible-Builds.md b/docs/Reproducible-Builds.md index 200ac5693c..d7a6f2f5fa 100644 --- a/docs/Reproducible-Builds.md +++ b/docs/Reproducible-Builds.md @@ -4,7 +4,7 @@ last_review_date: "1970-01-01" # Reproducible Builds -The Homebrew build environment is designed with [reproducible builds](https://reproducible-builds.org) as a goal where possible. Some convenience tools are also available to formula authors to help achieve deterministic builds. +The Homebrew build environment is designed with [reproducible builds](https://reproducible-builds.org/) as a goal where possible. Some convenience tools are also available to formula authors to help achieve deterministic builds. ## Build time diff --git a/docs/Troubleshooting.md b/docs/Troubleshooting.md index 838b0fb69a..602947a8f8 100644 --- a/docs/Troubleshooting.md +++ b/docs/Troubleshooting.md @@ -26,7 +26,7 @@ This document will help you check for common issues and make sure your issue has If your problem hasn't been solved or reported, then create an issue: 1. Collect debugging information: - * If you have a problem with installing a formula: run `brew gist-logs ` (where `` is the name of the formula) to upload the logs to a new [Gist](https://gist.github.com). + * If you have a problem with installing a formula: run `brew gist-logs ` (where `` is the name of the formula) to upload the logs to a new [Gist](https://gist.github.com/). * If your have a non-formula problem: collect the output of `brew config` and `brew doctor`. 1. Create a new issue on the issue tracker for [Homebrew/homebrew-core](https://github.com/Homebrew/homebrew-core/issues/new/choose), [Homebrew/homebrew-cask](https://github.com/Homebrew/homebrew-cask/issues/new/choose) or [Homebrew/brew](https://github.com/Homebrew/brew/issues/new/choose) and follow the instructions: diff --git a/docs/index.md b/docs/index.md index 038c9691a8..b3e37f9ebf 100644 --- a/docs/index.md +++ b/docs/index.md @@ -63,7 +63,7 @@ last_review_date: "2025-02-08" - [Type Checking with Sorbet](Typechecking.md) - [Reproducible Builds](Reproducible-Builds.md) -- [Ruby API Documentation](https://rubydoc.brew.sh) (e.g. for `Formula` etc.) +- [Ruby API Documentation](https://rubydoc.brew.sh/) (e.g. for `Formula` etc.) ## Maintainers diff --git a/docs/vale-styles/Homebrew/Abbreviations.yml b/docs/vale-styles/Homebrew/Abbreviations.yml index f51c2dd53f..2e817a4deb 100644 --- a/docs/vale-styles/Homebrew/Abbreviations.yml +++ b/docs/vale-styles/Homebrew/Abbreviations.yml @@ -12,7 +12,7 @@ swap: 'i\.e\.,': i.e. '(?