@hominis/fireforge 0.45.0 → 0.46.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +409 -446
- package/dist/bin/fireforge.d.ts +1 -1
- package/dist/bin/fireforge.js +21 -15
- package/dist/build-info.json +4 -4
- package/dist/src/cli-usage-error.d.ts +46 -0
- package/dist/src/cli-usage-error.js +81 -0
- package/dist/src/cli.d.ts +7 -2
- package/dist/src/cli.js +47 -47
- package/dist/src/commands/bootstrap-checks.js +2 -1
- package/dist/src/commands/bootstrap.js +3 -4
- package/dist/src/commands/build.js +27 -17
- package/dist/src/commands/config.js +9 -9
- package/dist/src/commands/destructive-decision.d.ts +19 -0
- package/dist/src/commands/destructive-decision.js +31 -0
- package/dist/src/commands/discard.js +5 -5
- package/dist/src/commands/doctor-check-core.d.ts +4 -10
- package/dist/src/commands/doctor-check-core.js +0 -8
- package/dist/src/commands/doctor-external-toolchains.js +2 -2
- package/dist/src/commands/doctor-furnace-config-sync.d.ts +2 -2
- package/dist/src/commands/doctor-furnace-config-sync.js +20 -20
- package/dist/src/commands/doctor-furnace-jar.d.ts +1 -1
- package/dist/src/commands/doctor-furnace-jar.js +1 -1
- package/dist/src/commands/doctor-furnace.js +22 -22
- package/dist/src/commands/doctor-orphaned-harness.d.ts +10 -17
- package/dist/src/commands/doctor-orphaned-harness.js +14 -23
- package/dist/src/commands/doctor-patch-manifest.d.ts +2 -1
- package/dist/src/commands/doctor-patch-manifest.js +7 -6
- package/dist/src/commands/doctor-post-rebase-audit.js +3 -3
- package/dist/src/commands/doctor-source-pin.d.ts +12 -12
- package/dist/src/commands/doctor-source-pin.js +14 -14
- package/dist/src/commands/doctor-working-tree.d.ts +3 -3
- package/dist/src/commands/doctor-working-tree.js +3 -3
- package/dist/src/commands/doctor.d.ts +3 -1
- package/dist/src/commands/doctor.js +15 -16
- package/dist/src/commands/download.js +50 -37
- package/dist/src/commands/export-all.js +29 -12
- package/dist/src/commands/export-flow.d.ts +5 -5
- package/dist/src/commands/export-flow.js +29 -59
- package/dist/src/commands/export-placement-conflicts.d.ts +3 -3
- package/dist/src/commands/export-placement-conflicts.js +12 -12
- package/dist/src/commands/export-placement-gate.d.ts +2 -2
- package/dist/src/commands/export-placement-gate.js +7 -13
- package/dist/src/commands/export-placement-policy.d.ts +1 -1
- package/dist/src/commands/export-placement-policy.js +4 -6
- package/dist/src/commands/export-shared.d.ts +51 -32
- package/dist/src/commands/export-shared.js +17 -32
- package/dist/src/commands/export.js +14 -5
- package/dist/src/commands/furnace/apply.js +16 -16
- package/dist/src/commands/furnace/authoring-config.d.ts +13 -0
- package/dist/src/commands/furnace/authoring-config.js +19 -0
- package/dist/src/commands/furnace/chrome-doc-remove.d.ts +1 -1
- package/dist/src/commands/furnace/chrome-doc-remove.js +2 -2
- package/dist/src/commands/furnace/chrome-doc-templates.d.ts +14 -14
- package/dist/src/commands/furnace/chrome-doc-templates.js +17 -17
- package/dist/src/commands/furnace/chrome-doc-tests.d.ts +2 -2
- package/dist/src/commands/furnace/chrome-doc-tests.js +4 -4
- package/dist/src/commands/furnace/chrome-doc.d.ts +8 -8
- package/dist/src/commands/furnace/chrome-doc.js +18 -18
- package/dist/src/commands/furnace/create-browser-test.d.ts +1 -1
- package/dist/src/commands/furnace/create-browser-test.js +7 -12
- package/dist/src/commands/furnace/create-dry-run.d.ts +4 -4
- package/dist/src/commands/furnace/create-dry-run.js +6 -9
- package/dist/src/commands/furnace/create-features.d.ts +2 -2
- package/dist/src/commands/furnace/create-features.js +2 -2
- package/dist/src/commands/furnace/create-mochikit.d.ts +4 -4
- package/dist/src/commands/furnace/create-mochikit.js +7 -7
- package/dist/src/commands/furnace/create-templates.d.ts +31 -15
- package/dist/src/commands/furnace/create-templates.js +20 -19
- package/dist/src/commands/furnace/create-xpcshell.d.ts +5 -5
- package/dist/src/commands/furnace/create-xpcshell.js +8 -8
- package/dist/src/commands/furnace/create.d.ts +1 -1
- package/dist/src/commands/furnace/create.js +35 -29
- package/dist/src/commands/furnace/deploy.js +15 -6
- package/dist/src/commands/furnace/diff.js +7 -7
- package/dist/src/commands/furnace/index.js +1 -1
- package/dist/src/commands/furnace/init.js +17 -16
- package/dist/src/commands/furnace/list.js +2 -2
- package/dist/src/commands/furnace/override.d.ts +1 -1
- package/dist/src/commands/furnace/override.js +43 -34
- package/dist/src/commands/furnace/preview.js +17 -17
- package/dist/src/commands/furnace/refresh.js +15 -7
- package/dist/src/commands/furnace/remove-mutations.d.ts +9 -10
- package/dist/src/commands/furnace/remove-mutations.js +19 -19
- package/dist/src/commands/furnace/remove-state.d.ts +1 -1
- package/dist/src/commands/furnace/remove-state.js +1 -1
- package/dist/src/commands/furnace/remove.js +4 -8
- package/dist/src/commands/furnace/rename-browser-test.js +10 -15
- package/dist/src/commands/furnace/rename-xpcshell.d.ts +2 -2
- package/dist/src/commands/furnace/rename-xpcshell.js +3 -3
- package/dist/src/commands/furnace/rename.js +36 -36
- package/dist/src/commands/furnace/scan.js +3 -3
- package/dist/src/commands/furnace/status.js +19 -16
- package/dist/src/commands/furnace/sync.js +6 -6
- package/dist/src/commands/furnace/test-file-name.d.ts +28 -0
- package/dist/src/commands/furnace/test-file-name.js +39 -0
- package/dist/src/commands/furnace/validate.js +11 -12
- package/dist/src/commands/furnace/validation-output.d.ts +21 -9
- package/dist/src/commands/furnace/validation-output.js +3 -8
- package/dist/src/commands/import.js +22 -29
- package/dist/src/commands/lint-per-patch.d.ts +2 -2
- package/dist/src/commands/lint-per-patch.js +27 -12
- package/dist/src/commands/lint-per-run-checkjs.d.ts +14 -15
- package/dist/src/commands/lint-per-run-checkjs.js +14 -15
- package/dist/src/commands/lint-report.d.ts +3 -3
- package/dist/src/commands/lint-report.js +4 -4
- package/dist/src/commands/lint.d.ts +5 -4
- package/dist/src/commands/lint.js +36 -36
- package/dist/src/commands/manifest.d.ts +4 -4
- package/dist/src/commands/manifest.js +1 -1
- package/dist/src/commands/package.js +4 -6
- package/dist/src/commands/patch/compact.d.ts +2 -2
- package/dist/src/commands/patch/compact.js +19 -20
- package/dist/src/commands/patch/delete.d.ts +1 -1
- package/dist/src/commands/patch/delete.js +23 -33
- package/dist/src/commands/patch/entry-projection.d.ts +13 -0
- package/dist/src/commands/patch/entry-projection.js +24 -0
- package/dist/src/commands/patch/lint-ignore.d.ts +3 -12
- package/dist/src/commands/patch/lint-ignore.js +33 -44
- package/dist/src/commands/patch/move-files-create.d.ts +2 -2
- package/dist/src/commands/patch/move-files-create.js +29 -15
- package/dist/src/commands/patch/move-files-into.d.ts +2 -2
- package/dist/src/commands/patch/move-files-into.js +41 -37
- package/dist/src/commands/patch/move-files.js +5 -14
- package/dist/src/commands/patch/patch-context.d.ts +1 -1
- package/dist/src/commands/patch/rename.d.ts +4 -4
- package/dist/src/commands/patch/rename.js +35 -49
- package/dist/src/commands/patch/reorder.js +35 -48
- package/dist/src/commands/patch/split-plan.d.ts +7 -8
- package/dist/src/commands/patch/split-plan.js +10 -13
- package/dist/src/commands/patch/split.d.ts +2 -2
- package/dist/src/commands/patch/split.js +50 -48
- package/dist/src/commands/patch/staged-dependency-validate.d.ts +1 -1
- package/dist/src/commands/patch/staged-dependency-validate.js +3 -3
- package/dist/src/commands/patch/staged-dependency.d.ts +1 -1
- package/dist/src/commands/patch/staged-dependency.js +22 -28
- package/dist/src/commands/patch/tier.d.ts +2 -2
- package/dist/src/commands/patch/tier.js +20 -30
- package/dist/src/commands/patch-rename-map.d.ts +19 -0
- package/dist/src/commands/patch-rename-map.js +36 -0
- package/dist/src/commands/pending-resolution.d.ts +15 -0
- package/dist/src/commands/pending-resolution.js +25 -0
- package/dist/src/commands/re-export-adjacent.d.ts +25 -3
- package/dist/src/commands/re-export-adjacent.js +40 -24
- package/dist/src/commands/re-export-bulk-scan.d.ts +3 -3
- package/dist/src/commands/re-export-bulk-scan.js +23 -27
- package/dist/src/commands/re-export-drift.d.ts +10 -10
- package/dist/src/commands/re-export-drift.js +33 -33
- package/dist/src/commands/re-export-files.d.ts +2 -3
- package/dist/src/commands/re-export-files.js +52 -44
- package/dist/src/commands/re-export-lint.d.ts +29 -30
- package/dist/src/commands/re-export-lint.js +36 -29
- package/dist/src/commands/re-export-options.d.ts +1 -1
- package/dist/src/commands/re-export-options.js +1 -1
- package/dist/src/commands/re-export-register.d.ts +1 -1
- package/dist/src/commands/re-export-register.js +1 -1
- package/dist/src/commands/re-export-scan.d.ts +1 -1
- package/dist/src/commands/re-export-scan.js +12 -9
- package/dist/src/commands/re-export-single.d.ts +23 -4
- package/dist/src/commands/re-export-single.js +39 -31
- package/dist/src/commands/re-export.js +35 -17
- package/dist/src/commands/rebase/abort.js +9 -14
- package/dist/src/commands/rebase/continue.js +20 -19
- package/dist/src/commands/rebase/index.d.ts +1 -1
- package/dist/src/commands/rebase/index.js +5 -5
- package/dist/src/commands/rebase/patch-loop.d.ts +2 -2
- package/dist/src/commands/rebase/patch-loop.js +20 -24
- package/dist/src/commands/register.js +5 -5
- package/dist/src/commands/reset.js +1 -1
- package/dist/src/commands/resolve.d.ts +2 -2
- package/dist/src/commands/resolve.js +21 -13
- package/dist/src/commands/run.d.ts +0 -13
- package/dist/src/commands/run.js +38 -51
- package/dist/src/commands/setup-support.d.ts +16 -4
- package/dist/src/commands/setup-support.js +20 -20
- package/dist/src/commands/setup.js +4 -10
- package/dist/src/commands/source.js +9 -2
- package/dist/src/commands/status-check.d.ts +3 -3
- package/dist/src/commands/status-check.js +6 -6
- package/dist/src/commands/status-json.d.ts +14 -13
- package/dist/src/commands/status-json.js +9 -8
- package/dist/src/commands/status-output.d.ts +3 -3
- package/dist/src/commands/status-output.js +5 -5
- package/dist/src/commands/status-ownership.d.ts +3 -3
- package/dist/src/commands/status-ownership.js +3 -3
- package/dist/src/commands/status.js +25 -26
- package/dist/src/commands/test-build-phase.d.ts +3 -3
- package/dist/src/commands/test-build-phase.js +48 -24
- package/dist/src/commands/test-diagnose.d.ts +1 -1
- package/dist/src/commands/test-diagnose.js +20 -20
- package/dist/src/commands/test-modes.d.ts +4 -4
- package/dist/src/commands/test-modes.js +4 -5
- package/dist/src/commands/test-register.js +5 -3
- package/dist/src/commands/test-run.d.ts +11 -11
- package/dist/src/commands/test-run.js +40 -33
- package/dist/src/commands/test-stale-gate.d.ts +12 -12
- package/dist/src/commands/test-stale-gate.js +17 -17
- package/dist/src/commands/test-verdict.d.ts +19 -5
- package/dist/src/commands/test-verdict.js +26 -11
- package/dist/src/commands/test.d.ts +3 -3
- package/dist/src/commands/test.js +73 -36
- package/dist/src/commands/token-coverage.js +3 -3
- package/dist/src/commands/token-list.d.ts +26 -0
- package/dist/src/commands/token-list.js +153 -0
- package/dist/src/commands/token.js +26 -10
- package/dist/src/commands/tree.js +26 -21
- package/dist/src/commands/typecheck.d.ts +6 -6
- package/dist/src/commands/typecheck.js +16 -16
- package/dist/src/commands/verify.d.ts +3 -3
- package/dist/src/commands/verify.js +10 -10
- package/dist/src/commands/watch.js +11 -11
- package/dist/src/commands/wire.js +17 -16
- package/dist/src/core/ast-utils.d.ts +7 -7
- package/dist/src/core/ast-utils.js +8 -8
- package/dist/src/core/branding.d.ts +5 -12
- package/dist/src/core/branding.js +6 -5
- package/dist/src/core/browser-wire.d.ts +1 -1
- package/dist/src/core/browser-wire.js +10 -7
- package/dist/src/core/build-audit-platform.d.ts +32 -3
- package/dist/src/core/build-audit-platform.js +153 -13
- package/dist/src/core/build-audit-registration.d.ts +5 -5
- package/dist/src/core/build-audit-registration.js +10 -9
- package/dist/src/core/build-audit-resolve.d.ts +5 -5
- package/dist/src/core/build-audit-resolve.js +6 -6
- package/dist/src/core/build-audit-skip.d.ts +57 -0
- package/dist/src/core/build-audit-skip.js +112 -0
- package/dist/src/core/build-audit-transforms.d.ts +2 -2
- package/dist/src/core/build-audit-transforms.js +3 -3
- package/dist/src/core/build-audit.d.ts +21 -8
- package/dist/src/core/build-audit.js +142 -40
- package/dist/src/core/build-baseline-types.d.ts +19 -18
- package/dist/src/core/build-baseline-types.js +1 -1
- package/dist/src/core/build-baseline.d.ts +48 -31
- package/dist/src/core/build-baseline.js +20 -43
- package/dist/src/core/build-jar-escalation.d.ts +8 -8
- package/dist/src/core/build-jar-escalation.js +18 -17
- package/dist/src/core/build-overwrite-guard.d.ts +4 -4
- package/dist/src/core/build-overwrite-guard.js +14 -14
- package/dist/src/core/build-prepare.d.ts +4 -12
- package/dist/src/core/build-prepare.js +22 -26
- package/dist/src/core/config-mutate.js +4 -4
- package/dist/src/core/config-paths.d.ts +2 -6
- package/dist/src/core/config-paths.js +4 -2
- package/dist/src/core/config-state.d.ts +0 -6
- package/dist/src/core/config-state.js +3 -21
- package/dist/src/core/config-validate-build-audit.d.ts +8 -0
- package/dist/src/core/config-validate-build-audit.js +80 -0
- package/dist/src/core/config-validate-file-size.d.ts +1 -1
- package/dist/src/core/config-validate-file-size.js +3 -3
- package/dist/src/core/config-validate-patch-policy.d.ts +2 -2
- package/dist/src/core/config-validate-patch-policy.js +3 -3
- package/dist/src/core/config-validate-test-toolchains.d.ts +2 -2
- package/dist/src/core/config-validate-test-toolchains.js +4 -5
- package/dist/src/core/config-validate.js +22 -12
- package/dist/src/core/config.d.ts +12 -12
- package/dist/src/core/config.js +21 -25
- package/dist/src/core/coverage-extend.d.ts +16 -16
- package/dist/src/core/coverage-extend.js +20 -20
- package/dist/src/core/destructive.d.ts +14 -14
- package/dist/src/core/destructive.js +9 -9
- package/dist/src/core/diff-hunks.d.ts +2 -2
- package/dist/src/core/diff-hunks.js +7 -7
- package/dist/src/core/discard-baseline.d.ts +10 -10
- package/dist/src/core/discard-baseline.js +22 -23
- package/dist/src/core/display-state.d.ts +11 -11
- package/dist/src/core/display-state.js +12 -12
- package/dist/src/core/engine-changes.d.ts +2 -2
- package/dist/src/core/engine-changes.js +2 -2
- package/dist/src/core/engine-precondition.d.ts +5 -13
- package/dist/src/core/engine-precondition.js +5 -10
- package/dist/src/core/engine-session-lock.d.ts +18 -18
- package/dist/src/core/engine-session-lock.js +50 -54
- package/dist/src/core/export-moved-code-shape.d.ts +7 -7
- package/dist/src/core/export-moved-code-shape.js +10 -10
- package/dist/src/core/file-lock-owner.d.ts +103 -0
- package/dist/src/core/file-lock-owner.js +259 -0
- package/dist/src/core/file-lock.d.ts +14 -19
- package/dist/src/core/file-lock.js +90 -128
- package/dist/src/core/firefox-cache.d.ts +13 -1
- package/dist/src/core/firefox-cache.js +61 -36
- package/dist/src/core/firefox-download.d.ts +15 -0
- package/dist/src/core/firefox-download.js +38 -22
- package/dist/src/core/firefox-extract.d.ts +8 -7
- package/dist/src/core/firefox-extract.js +45 -27
- package/dist/src/core/firefox.d.ts +34 -36
- package/dist/src/core/firefox.js +13 -44
- package/dist/src/core/furnace-apply-dry-run.d.ts +1 -6
- package/dist/src/core/furnace-apply-dry-run.js +2 -8
- package/dist/src/core/furnace-apply-ftl.d.ts +5 -5
- package/dist/src/core/furnace-apply-ftl.js +8 -8
- package/dist/src/core/furnace-apply-helpers.d.ts +9 -20
- package/dist/src/core/furnace-apply-helpers.js +28 -39
- package/dist/src/core/furnace-apply-output.js +1 -1
- package/dist/src/core/furnace-apply-overwrite-warn.d.ts +9 -9
- package/dist/src/core/furnace-apply-overwrite-warn.js +13 -11
- package/dist/src/core/furnace-apply-undeploy-actions.d.ts +1 -1
- package/dist/src/core/furnace-apply-undeploy-actions.js +1 -1
- package/dist/src/core/furnace-apply.d.ts +4 -4
- package/dist/src/core/furnace-apply.js +50 -29
- package/dist/src/core/furnace-checksum-utils.d.ts +5 -5
- package/dist/src/core/furnace-checksum-utils.js +5 -5
- package/dist/src/core/furnace-config-custom.d.ts +1 -1
- package/dist/src/core/furnace-config-custom.js +2 -2
- package/dist/src/core/furnace-config-order.js +1 -1
- package/dist/src/core/furnace-config-tokens.d.ts +3 -3
- package/dist/src/core/furnace-config-tokens.js +3 -3
- package/dist/src/core/furnace-config-validate.js +2 -2
- package/dist/src/core/furnace-config.d.ts +5 -5
- package/dist/src/core/furnace-config.js +40 -53
- package/dist/src/core/furnace-constants.d.ts +6 -6
- package/dist/src/core/furnace-constants.js +9 -8
- package/dist/src/core/furnace-css-fragments.d.ts +6 -6
- package/dist/src/core/furnace-css-fragments.js +11 -11
- package/dist/src/core/furnace-dir-entry.d.ts +20 -0
- package/dist/src/core/furnace-dir-entry.js +21 -0
- package/dist/src/core/furnace-jsconfig.d.ts +7 -7
- package/dist/src/core/furnace-jsconfig.js +22 -20
- package/dist/src/core/furnace-operation.d.ts +22 -19
- package/dist/src/core/furnace-operation.js +38 -34
- package/dist/src/core/furnace-precondition.d.ts +10 -10
- package/dist/src/core/furnace-precondition.js +8 -8
- package/dist/src/core/furnace-refresh.d.ts +18 -6
- package/dist/src/core/furnace-refresh.js +5 -8
- package/dist/src/core/furnace-registration-ast.d.ts +2 -3
- package/dist/src/core/furnace-registration-ast.js +9 -12
- package/dist/src/core/furnace-registration-remove.d.ts +4 -4
- package/dist/src/core/furnace-registration-remove.js +6 -6
- package/dist/src/core/furnace-registration-validate.d.ts +2 -2
- package/dist/src/core/furnace-registration-validate.js +2 -2
- package/dist/src/core/furnace-registration.d.ts +7 -6
- package/dist/src/core/furnace-registration.js +29 -36
- package/dist/src/core/furnace-rollback.d.ts +1 -1
- package/dist/src/core/furnace-rollback.js +5 -5
- package/dist/src/core/furnace-scanner.js +3 -6
- package/dist/src/core/furnace-stale-export.d.ts +17 -16
- package/dist/src/core/furnace-stale-export.js +16 -15
- package/dist/src/core/furnace-staleness.d.ts +2 -2
- package/dist/src/core/furnace-staleness.js +2 -2
- package/dist/src/core/furnace-state-persist.d.ts +12 -12
- package/dist/src/core/furnace-state-persist.js +10 -10
- package/dist/src/core/furnace-step-errors.d.ts +6 -6
- package/dist/src/core/furnace-step-errors.js +6 -6
- package/dist/src/core/furnace-validate-accessibility.js +14 -14
- package/dist/src/core/furnace-validate-compatibility.js +9 -9
- package/dist/src/core/furnace-validate-registration.d.ts +2 -2
- package/dist/src/core/furnace-validate-registration.js +18 -20
- package/dist/src/core/furnace-validate-structure.d.ts +1 -1
- package/dist/src/core/furnace-validate-structure.js +4 -4
- package/dist/src/core/furnace-validate.js +9 -9
- package/dist/src/core/furnace-version-drift.d.ts +5 -5
- package/dist/src/core/furnace-version-drift.js +5 -5
- package/dist/src/core/git-base.d.ts +6 -4
- package/dist/src/core/git-base.js +29 -7
- package/dist/src/core/git-diff-new-file.d.ts +40 -0
- package/dist/src/core/git-diff-new-file.js +119 -0
- package/dist/src/core/git-diff.d.ts +13 -13
- package/dist/src/core/git-diff.js +121 -189
- package/dist/src/core/git-file-ops.d.ts +6 -13
- package/dist/src/core/git-file-ops.js +11 -35
- package/dist/src/core/git-readonly-index.d.ts +12 -14
- package/dist/src/core/git-readonly-index.js +12 -16
- package/dist/src/core/git-status.d.ts +9 -2
- package/dist/src/core/git-status.js +23 -11
- package/dist/src/core/git.d.ts +3 -9
- package/dist/src/core/git.js +28 -57
- package/dist/src/core/harness-orphans.d.ts +17 -17
- package/dist/src/core/harness-orphans.js +28 -27
- package/dist/src/core/history-log.d.ts +19 -0
- package/dist/src/core/history-log.js +29 -0
- package/dist/src/core/license-headers.d.ts +19 -18
- package/dist/src/core/license-headers.js +29 -28
- package/dist/src/core/mach-build-artifacts.d.ts +21 -21
- package/dist/src/core/mach-build-artifacts.js +23 -23
- package/dist/src/core/mach-error-hints.d.ts +5 -10
- package/dist/src/core/mach-error-hints.js +14 -14
- package/dist/src/core/mach-known-noise-filter.d.ts +42 -38
- package/dist/src/core/mach-known-noise-filter.js +57 -56
- package/dist/src/core/mach-mozconfig.d.ts +6 -6
- package/dist/src/core/mach-mozconfig.js +17 -16
- package/dist/src/core/mach-python.d.ts +3 -0
- package/dist/src/core/mach-python.js +13 -7
- package/dist/src/core/mach-resource-shim.d.ts +24 -12
- package/dist/src/core/mach-resource-shim.js +124 -21
- package/dist/src/core/mach.d.ts +59 -73
- package/dist/src/core/mach.js +47 -115
- package/dist/src/core/marionette-port.d.ts +15 -30
- package/dist/src/core/marionette-port.js +46 -89
- package/dist/src/core/marionette-preflight.d.ts +6 -6
- package/dist/src/core/marionette-preflight.js +32 -50
- package/dist/src/core/markdown-table.d.ts +9 -9
- package/dist/src/core/markdown-table.js +14 -14
- package/dist/src/core/mochitest-server-port.d.ts +8 -8
- package/dist/src/core/mochitest-server-port.js +17 -17
- package/dist/src/core/module-resolution-preflight.d.ts +8 -8
- package/dist/src/core/module-resolution-preflight.js +11 -11
- package/dist/src/core/moz-manifest-helpers.d.ts +7 -7
- package/dist/src/core/moz-manifest-helpers.js +7 -7
- package/dist/src/core/moz-manifest-register.d.ts +1 -1
- package/dist/src/core/moz-manifest-register.js +2 -2
- package/dist/src/core/moz-manifest-rules.js +46 -42
- package/dist/src/core/moz-manifest-tokenizers.js +1 -1
- package/dist/src/core/ownership-table.d.ts +5 -5
- package/dist/src/core/ownership-table.js +7 -7
- package/dist/src/core/parser-fallback.d.ts +3 -3
- package/dist/src/core/parser-fallback.js +3 -3
- package/dist/src/core/patch-apply-fuzz.d.ts +5 -5
- package/dist/src/core/patch-apply-fuzz.js +13 -13
- package/dist/src/core/patch-apply.d.ts +13 -14
- package/dist/src/core/patch-apply.js +36 -42
- package/dist/src/core/patch-export-coverage.d.ts +0 -9
- package/dist/src/core/patch-export-coverage.js +1 -30
- package/dist/src/core/patch-export-update.d.ts +21 -4
- package/dist/src/core/patch-export-update.js +7 -6
- package/dist/src/core/patch-export.d.ts +20 -30
- package/dist/src/core/patch-export.js +55 -77
- package/dist/src/core/patch-files.d.ts +0 -4
- package/dist/src/core/patch-files.js +0 -11
- package/dist/src/core/patch-identifier-suggest.d.ts +1 -1
- package/dist/src/core/patch-identifier-suggest.js +4 -4
- package/dist/src/core/patch-lint-binary.d.ts +12 -18
- package/dist/src/core/patch-lint-cache.d.ts +18 -2
- package/dist/src/core/patch-lint-cache.js +16 -19
- package/dist/src/core/patch-lint-checkjs.d.ts +55 -38
- package/dist/src/core/patch-lint-checkjs.js +78 -64
- package/dist/src/core/patch-lint-chrome-jsdoc.d.ts +8 -9
- package/dist/src/core/patch-lint-chrome-jsdoc.js +10 -11
- package/dist/src/core/patch-lint-creators.d.ts +5 -9
- package/dist/src/core/patch-lint-creators.js +3 -3
- package/dist/src/core/patch-lint-cross.d.ts +27 -19
- package/dist/src/core/patch-lint-cross.js +67 -110
- package/dist/src/core/patch-lint-css.d.ts +1 -1
- package/dist/src/core/patch-lint-css.js +15 -11
- package/dist/src/core/patch-lint-diff-tag.d.ts +5 -5
- package/dist/src/core/patch-lint-diff-tag.js +5 -5
- package/dist/src/core/patch-lint-diff.d.ts +4 -4
- package/dist/src/core/patch-lint-diff.js +4 -4
- package/dist/src/core/patch-lint-file-size.d.ts +3 -3
- package/dist/src/core/patch-lint-file-size.js +6 -6
- package/dist/src/core/patch-lint-forward-registration.d.ts +58 -0
- package/dist/src/core/patch-lint-forward-registration.js +210 -0
- package/dist/src/core/patch-lint-jsdoc.d.ts +2 -2
- package/dist/src/core/patch-lint-jsdoc.js +46 -46
- package/dist/src/core/patch-lint-module-registration.d.ts +3 -9
- package/dist/src/core/patch-lint-module-registration.js +1 -1
- package/dist/src/core/patch-lint-mozbuild.d.ts +1 -1
- package/dist/src/core/patch-lint-mozbuild.js +10 -10
- package/dist/src/core/patch-lint-observer.d.ts +3 -3
- package/dist/src/core/patch-lint-observer.js +7 -7
- package/dist/src/core/patch-lint-ownership.d.ts +6 -6
- package/dist/src/core/patch-lint-ownership.js +6 -6
- package/dist/src/core/patch-lint-prettier.d.ts +6 -6
- package/dist/src/core/patch-lint-prettier.js +7 -7
- package/dist/src/core/patch-lint-queue-types.d.ts +60 -0
- package/dist/src/core/patch-lint-queue-types.js +12 -0
- package/dist/src/core/patch-lint-staged-registration.d.ts +61 -0
- package/dist/src/core/patch-lint-staged-registration.js +90 -0
- package/dist/src/core/patch-lint-unmanaged-companion.d.ts +23 -23
- package/dist/src/core/patch-lint-unmanaged-companion.js +26 -26
- package/dist/src/core/patch-lint.d.ts +41 -35
- package/dist/src/core/patch-lint.js +52 -49
- package/dist/src/core/patch-lock.d.ts +1 -1
- package/dist/src/core/patch-lock.js +11 -11
- package/dist/src/core/patch-manifest-consistency.d.ts +7 -7
- package/dist/src/core/patch-manifest-consistency.js +16 -17
- package/dist/src/core/patch-manifest-files-affected.d.ts +1 -1
- package/dist/src/core/patch-manifest-files-affected.js +3 -3
- package/dist/src/core/patch-manifest-io.d.ts +14 -14
- package/dist/src/core/patch-manifest-io.js +35 -34
- package/dist/src/core/patch-manifest-query.d.ts +1 -1
- package/dist/src/core/patch-manifest-query.js +4 -4
- package/dist/src/core/patch-manifest-resolve.d.ts +5 -5
- package/dist/src/core/patch-manifest-resolve.js +7 -7
- package/dist/src/core/patch-manifest-validate.js +3 -3
- package/dist/src/core/patch-manifest.d.ts +2 -2
- package/dist/src/core/patch-manifest.js +2 -2
- package/dist/src/core/patch-parse.d.ts +32 -21
- package/dist/src/core/patch-parse.js +40 -15
- package/dist/src/core/patch-policy.js +15 -27
- package/dist/src/core/patch-registration-refs.d.ts +4 -4
- package/dist/src/core/patch-registration-refs.js +7 -7
- package/dist/src/core/patch-source-metadata.d.ts +1 -3
- package/dist/src/core/patch-source-metadata.js +0 -4
- package/dist/src/core/patch-transform.d.ts +8 -16
- package/dist/src/core/patch-transform.js +13 -23
- package/dist/src/core/process-cpu-time.d.ts +1 -1
- package/dist/src/core/process-cpu-time.js +6 -6
- package/dist/src/core/rebase-session.d.ts +9 -15
- package/dist/src/core/rebase-session.js +13 -25
- package/dist/src/core/register-browser-content.js +3 -2
- package/dist/src/core/register-browser-test.js +2 -1
- package/dist/src/core/register-module.js +2 -1
- package/dist/src/core/register-result.d.ts +1 -1
- package/dist/src/core/register-result.js +1 -1
- package/dist/src/core/register-scaffold.d.ts +2 -2
- package/dist/src/core/register-scaffold.js +8 -7
- package/dist/src/core/register-shared-css.d.ts +3 -3
- package/dist/src/core/register-shared-css.js +6 -5
- package/dist/src/core/register-xpcshell-test.d.ts +2 -2
- package/dist/src/core/register-xpcshell-test.js +2 -2
- package/dist/src/core/run-log-redact.d.ts +38 -0
- package/dist/src/core/run-log-redact.js +69 -0
- package/dist/src/core/run-log.d.ts +21 -10
- package/dist/src/core/run-log.js +76 -27
- package/dist/src/core/shared-ftl.d.ts +2 -2
- package/dist/src/core/shared-ftl.js +6 -6
- package/dist/src/core/signal-critical.d.ts +2 -2
- package/dist/src/core/signal-critical.js +4 -6
- package/dist/src/core/smoke-patterns.d.ts +5 -6
- package/dist/src/core/smoke-patterns.js +15 -20
- package/dist/src/core/state-file.d.ts +15 -4
- package/dist/src/core/state-file.js +14 -1
- package/dist/src/core/status-binary.d.ts +8 -8
- package/dist/src/core/status-binary.js +12 -12
- package/dist/src/core/status-classify.d.ts +17 -17
- package/dist/src/core/status-classify.js +13 -12
- package/dist/src/core/test-changed-prefs.d.ts +12 -12
- package/dist/src/core/test-changed-prefs.js +40 -25
- package/dist/src/core/test-harness-crash.d.ts +39 -39
- package/dist/src/core/test-harness-crash.js +69 -69
- package/dist/src/core/test-harness-output.d.ts +7 -7
- package/dist/src/core/test-harness-output.js +7 -7
- package/dist/src/core/test-harness-verdict-notes.d.ts +13 -14
- package/dist/src/core/test-harness-verdict-notes.js +4 -4
- package/dist/src/core/test-path-scope.d.ts +8 -8
- package/dist/src/core/test-path-scope.js +11 -11
- package/dist/src/core/test-stale-check.d.ts +22 -23
- package/dist/src/core/test-stale-check.js +31 -30
- package/dist/src/core/test-stale-symlink.d.ts +1 -1
- package/dist/src/core/test-stale-symlink.js +1 -1
- package/dist/src/core/test-stall-triage.d.ts +9 -9
- package/dist/src/core/test-stall-triage.js +22 -22
- package/dist/src/core/test-xpcshell-retry.d.ts +26 -7
- package/dist/src/core/test-xpcshell-retry.js +14 -11
- package/dist/src/core/token-category.d.ts +35 -2
- package/dist/src/core/token-category.js +67 -58
- package/dist/src/core/token-coverage.js +4 -5
- package/dist/src/core/token-dark-mode.d.ts +9 -9
- package/dist/src/core/token-dark-mode.js +13 -25
- package/dist/src/core/token-docs.d.ts +1 -1
- package/dist/src/core/token-inventory.d.ts +56 -0
- package/dist/src/core/token-inventory.js +109 -0
- package/dist/src/core/token-manager.d.ts +4 -4
- package/dist/src/core/token-manager.js +22 -22
- package/dist/src/core/token-scaffold.d.ts +4 -4
- package/dist/src/core/token-scaffold.js +4 -4
- package/dist/src/core/token-variant.d.ts +14 -14
- package/dist/src/core/token-variant.js +52 -53
- package/dist/src/core/toolchain-preflight.d.ts +15 -15
- package/dist/src/core/toolchain-preflight.js +23 -23
- package/dist/src/core/tree-cow.d.ts +3 -5
- package/dist/src/core/tree-cow.js +8 -8
- package/dist/src/core/tree-guard.d.ts +3 -3
- package/dist/src/core/tree-guard.js +23 -23
- package/dist/src/core/tree-store.d.ts +15 -15
- package/dist/src/core/tree-store.js +39 -38
- package/dist/src/core/typecheck-shim.d.ts +16 -15
- package/dist/src/core/typecheck-shim.js +26 -25
- package/dist/src/core/typecheck.d.ts +12 -12
- package/dist/src/core/typecheck.js +33 -33
- package/dist/src/core/wire-destroy.d.ts +2 -2
- package/dist/src/core/wire-destroy.js +5 -5
- package/dist/src/core/wire-dom-fragment.d.ts +3 -3
- package/dist/src/core/wire-dom-fragment.js +12 -23
- package/dist/src/core/wire-init.d.ts +2 -2
- package/dist/src/core/wire-init.js +7 -7
- package/dist/src/core/wire-subscript.d.ts +1 -1
- package/dist/src/core/wire-subscript.js +3 -3
- package/dist/src/core/wire-utils.d.ts +9 -9
- package/dist/src/core/wire-utils.js +16 -28
- package/dist/src/core/xpcshell-appdir.d.ts +20 -20
- package/dist/src/core/xpcshell-appdir.js +28 -30
- package/dist/src/core/xpcshell-profile-dir.d.ts +3 -3
- package/dist/src/core/xpcshell-profile-dir.js +7 -7
- package/dist/src/errors/base.d.ts +69 -16
- package/dist/src/errors/base.js +95 -26
- package/dist/src/errors/build.d.ts +6 -6
- package/dist/src/errors/build.js +26 -34
- package/dist/src/errors/codes.d.ts +10 -10
- package/dist/src/errors/codes.js +10 -10
- package/dist/src/errors/config.d.ts +0 -14
- package/dist/src/errors/config.js +13 -34
- package/dist/src/errors/download.d.ts +13 -0
- package/dist/src/errors/download.js +53 -24
- package/dist/src/errors/furnace.d.ts +2 -2
- package/dist/src/errors/furnace.js +8 -9
- package/dist/src/errors/git.d.ts +9 -9
- package/dist/src/errors/git.js +21 -31
- package/dist/src/errors/patch.d.ts +3 -3
- package/dist/src/errors/patch.js +11 -13
- package/dist/src/errors/rebase.d.ts +1 -1
- package/dist/src/errors/rebase.js +8 -8
- package/dist/src/errors/run.d.ts +1 -1
- package/dist/src/errors/run.js +1 -1
- package/dist/src/index.d.ts +4 -4
- package/dist/src/index.js +4 -4
- package/dist/src/types/commands/options.d.ts +155 -200
- package/dist/src/types/commands/patches.d.ts +19 -19
- package/dist/src/types/commands/project.d.ts +3 -3
- package/dist/src/types/config.d.ts +52 -19
- package/dist/src/types/furnace.d.ts +17 -17
- package/dist/src/types/index.d.ts +0 -1
- package/dist/src/types/json.d.ts +3 -3
- package/dist/src/types/json.js +2 -2
- package/dist/src/types/typecheck.d.ts +3 -3
- package/dist/src/utils/assert.d.ts +4 -16
- package/dist/src/utils/assert.js +7 -24
- package/dist/src/utils/build-info.d.ts +6 -6
- package/dist/src/utils/build-info.js +6 -6
- package/dist/src/utils/child-env.d.ts +7 -6
- package/dist/src/utils/child-env.js +5 -5
- package/dist/src/utils/concurrency.d.ts +2 -2
- package/dist/src/utils/concurrency.js +2 -2
- package/dist/src/utils/elapsed.js +10 -1
- package/dist/src/utils/errors.d.ts +8 -8
- package/dist/src/utils/errors.js +8 -8
- package/dist/src/utils/fs.d.ts +1 -1
- package/dist/src/utils/fs.js +15 -20
- package/dist/src/utils/hash.d.ts +12 -0
- package/dist/src/utils/hash.js +16 -0
- package/dist/src/utils/line-dispatch.d.ts +15 -0
- package/dist/src/utils/line-dispatch.js +48 -0
- package/dist/src/utils/logger.d.ts +4 -4
- package/dist/src/utils/logger.js +11 -11
- package/dist/src/utils/machine-output.js +2 -2
- package/dist/src/utils/options.d.ts +14 -20
- package/dist/src/utils/options.js +26 -27
- package/dist/src/utils/package-root.js +5 -14
- package/dist/src/utils/paths.d.ts +4 -4
- package/dist/src/utils/paths.js +4 -4
- package/dist/src/utils/platform.d.ts +0 -4
- package/dist/src/utils/process-group.d.ts +10 -9
- package/dist/src/utils/process-group.js +37 -36
- package/dist/src/utils/process.d.ts +70 -55
- package/dist/src/utils/process.js +129 -179
- package/dist/src/utils/ps-duration.d.ts +4 -4
- package/dist/src/utils/ps-duration.js +9 -9
- package/dist/src/utils/regex.d.ts +4 -4
- package/dist/src/utils/regex.js +7 -7
- package/dist/src/utils/sleep.d.ts +26 -0
- package/dist/src/utils/sleep.js +31 -0
- package/dist/src/utils/stdio-drain.d.ts +7 -7
- package/dist/src/utils/stdio-drain.js +8 -8
- package/dist/src/utils/validation.d.ts +12 -49
- package/dist/src/utils/validation.js +26 -36
- package/docs/README.md +2 -2
- package/docs/configuration.md +163 -69
- package/docs/exit-codes.md +66 -49
- package/docs/furnace.md +20 -19
- package/docs/lifecycle-invariants.md +414 -247
- package/docs/machine-output.md +58 -34
- package/docs/patch-workflow.md +48 -44
- package/docs/run-logs.md +72 -28
- package/docs/testing.md +105 -98
- package/docs/verification-trees.md +23 -22
- package/package.json +7 -6
- package/dist/src/commands/rebase.d.ts +0 -4
- package/dist/src/commands/rebase.js +0 -5
- package/dist/src/core/patch-artifact-normalize.d.ts +0 -21
- package/dist/src/core/patch-artifact-normalize.js +0 -24
- package/dist/src/core/patch-lint-reexports.d.ts +0 -7
- package/dist/src/core/patch-lint-reexports.js +0 -8
- package/dist/src/core/wire-targets.d.ts +0 -7
- package/dist/src/core/wire-targets.js +0 -8
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
// SPDX-License-Identifier: EUPL-1.2
|
|
2
2
|
/**
|
|
3
3
|
* Recognizes the one shape where the undefined-identifier hint sends the
|
|
4
|
-
* operator at the wrong remedy
|
|
4
|
+
* operator at the wrong remedy, and where taking that remedy would mask a
|
|
5
5
|
* real bug.
|
|
6
6
|
*
|
|
7
7
|
* The shape: helpers are hoisted out of duplicated test files into a new
|
|
8
8
|
* `head_settings.js` that a managed `head.js` pulls in with
|
|
9
9
|
* `loadSubScript`. Until that companion is exported it belongs to no patch,
|
|
10
|
-
* so the per-patch checkJs program
|
|
11
|
-
* roots
|
|
10
|
+
* so the per-patch checkJs program, which only ever loads patch-owned
|
|
11
|
+
* roots, cannot see any of its declarations. Every use of every hoisted
|
|
12
12
|
* helper is then reported as `Cannot find name`, and the generic hint
|
|
13
13
|
* offers three remedies of which the shim is the easiest: adding the
|
|
14
|
-
* globals to `extraShim` makes all of the warnings disappear
|
|
14
|
+
* globals to `extraShim` makes all of the warnings disappear and makes a
|
|
15
15
|
* genuinely missing helper undetectable forever after.
|
|
16
16
|
*
|
|
17
|
-
* The warnings themselves are correct
|
|
18
|
-
* of a file that is in no patch. Only the advice is wrong.
|
|
19
|
-
* already knows ownership, so when every undefined name in a file
|
|
20
|
-
* declared at the top level of an
|
|
21
|
-
* it can name that file and the adoption command instead.
|
|
17
|
+
* The warnings themselves are correct: they are the per-patch program's
|
|
18
|
+
* honest view of a file that is in no patch. Only the advice is wrong.
|
|
19
|
+
* FireForge already knows ownership, so when every undefined name in a file
|
|
20
|
+
* is declared at the top level of an unmanaged file that a managed head
|
|
21
|
+
* loads, it can name that file and the adoption command instead.
|
|
22
22
|
*
|
|
23
|
-
* Detection is
|
|
24
|
-
* be reachable from an actual `loadSubScript` call, and
|
|
23
|
+
* Detection is conservative on both halves: a companion must
|
|
24
|
+
* be reachable from an actual `loadSubScript` call, and every undefined
|
|
25
25
|
* name must resolve inside it. One unresolved name means the file may
|
|
26
26
|
* genuinely be missing a helper, and the generic hint stays.
|
|
27
27
|
*/
|
|
@@ -34,13 +34,13 @@ import { UNDEFINED_IDENTIFIER_HINT } from './typecheck-shim.js';
|
|
|
34
34
|
* The mochitest idiom is
|
|
35
35
|
* `Services.scriptloader.loadSubScript(getRootDirectory(gTestPath) + "head_settings.js", this)`,
|
|
36
36
|
* so the useful signal is the `.js` literal inside the call, not a
|
|
37
|
-
* resolvable URL
|
|
37
|
+
* resolvable URL. The path half is computed at runtime.
|
|
38
38
|
*/
|
|
39
39
|
export function findLoadSubScriptTargets(source) {
|
|
40
40
|
const targets = [];
|
|
41
41
|
// Scanned to the statement terminator rather than to a closing paren:
|
|
42
42
|
// the idiomatic argument is itself a call (`getRootDirectory(gTestPath) +
|
|
43
|
-
// "head_settings.js"`), so a non-greedy `\)` stops on the
|
|
43
|
+
// "head_settings.js"`), so a non-greedy `\)` stops on the inner paren and
|
|
44
44
|
// never reaches the literal.
|
|
45
45
|
for (const call of source.matchAll(/loadSubScript\s*\(/g)) {
|
|
46
46
|
const from = call.index + call[0].length;
|
|
@@ -60,7 +60,7 @@ const CALL_SCAN_LIMIT = 400;
|
|
|
60
60
|
* Top-level declaration names in a script-scope file.
|
|
61
61
|
*
|
|
62
62
|
* Regex rather than a TS program on purpose: this runs only to decide the
|
|
63
|
-
*
|
|
63
|
+
* wording of a hint, the file is outside every program the
|
|
64
64
|
* pass built, and a missed declaration degrades to the generic hint rather
|
|
65
65
|
* than to a wrong answer. Matching is anchored at column zero so a nested
|
|
66
66
|
* declaration inside a function body is not mistaken for a global.
|
|
@@ -93,8 +93,8 @@ function extractUndefinedIdentifier(message) {
|
|
|
93
93
|
* Resolves the unmanaged companions reachable from a set of managed head
|
|
94
94
|
* files, given a reader for repo-relative file content.
|
|
95
95
|
*
|
|
96
|
-
* A candidate qualifies only when it is
|
|
97
|
-
* can be read
|
|
96
|
+
* A candidate qualifies only when it is not in `ownedFiles` and its content
|
|
97
|
+
* can be read. An unreadable or absent target is simply not a companion,
|
|
98
98
|
* and the generic hint applies.
|
|
99
99
|
*
|
|
100
100
|
* @param heads - Repo-relative managed head files, with their sources
|
|
@@ -129,10 +129,10 @@ export async function resolveUnmanagedCompanions(heads, ownedFiles, readFile) {
|
|
|
129
129
|
* The replacement hint, when every undefined name resolves in one
|
|
130
130
|
* unmanaged companion.
|
|
131
131
|
*
|
|
132
|
-
* States the ownership fact first (
|
|
133
|
-
*
|
|
134
|
-
*
|
|
135
|
-
*
|
|
132
|
+
* States the ownership fact first (the diagnosis), then the adoption
|
|
133
|
+
* command, and explicitly rules the shim out. The shim is what an operator
|
|
134
|
+
* reaches for by default here, and it is the one remedy that permanently
|
|
135
|
+
* hides a genuinely missing helper.
|
|
136
136
|
*/
|
|
137
137
|
export function formatUnmanagedCompanionHint(companion) {
|
|
138
138
|
return (`(undefined identifier — every one of them is declared in ${companion.file}, which ` +
|
|
@@ -143,7 +143,7 @@ export function formatUnmanagedCompanionHint(companion) {
|
|
|
143
143
|
`missing helper with them.)`);
|
|
144
144
|
}
|
|
145
145
|
/**
|
|
146
|
-
* Picks the companion that explains
|
|
146
|
+
* Picks the companion that explains every undefined identifier in
|
|
147
147
|
* `messages`, or undefined when none does.
|
|
148
148
|
*
|
|
149
149
|
* @param messages - Diagnostic messages reported for one file
|
|
@@ -155,16 +155,16 @@ export function explainUndefinedIdentifiers(messages, companions) {
|
|
|
155
155
|
.filter((name) => name !== undefined);
|
|
156
156
|
if (names.length === 0)
|
|
157
157
|
return undefined;
|
|
158
|
-
// Only the undefined-identifier diagnostics are explained here
|
|
159
|
-
// carrying
|
|
158
|
+
// Only the undefined-identifier diagnostics are explained here. A file
|
|
159
|
+
// carrying other type errors still gets those reported untouched.
|
|
160
160
|
return companions.find((companion) => names.every((name) => companion.declarations.has(name)));
|
|
161
161
|
}
|
|
162
162
|
/**
|
|
163
|
-
* Reads the head files in the owned test set and resolves the
|
|
163
|
+
* Reads the head files in the owned test set and resolves the unmanaged
|
|
164
164
|
* companions they pull in with `loadSubScript`. Hoisting shared helpers
|
|
165
165
|
* into such a companion leaves it unowned until export, and every use of
|
|
166
166
|
* every helper then reports `Cannot find name` from an honest per-patch
|
|
167
|
-
* program
|
|
167
|
+
* program. See `patch-lint-unmanaged-companion.ts` for why the generic
|
|
168
168
|
* hint is actively harmful there.
|
|
169
169
|
*
|
|
170
170
|
* Best-effort: an unreadable head simply contributes no companions.
|
|
@@ -195,7 +195,7 @@ export async function collectUnmanagedCompanions(repoDir, files, ownedFiles) {
|
|
|
195
195
|
}
|
|
196
196
|
/**
|
|
197
197
|
* Swaps the generic undefined-identifier hint for the ownership hint when
|
|
198
|
-
* one unmanaged companion explains
|
|
198
|
+
* one unmanaged companion explains every undefined name in the file. Any
|
|
199
199
|
* other issue in the list is returned untouched.
|
|
200
200
|
*/
|
|
201
201
|
export function retargetUnmanagedCompanionHints(issues, companions) {
|
|
@@ -2,11 +2,12 @@ import type { PatchLintIssue } from '../types/commands/index.js';
|
|
|
2
2
|
import type { FireForgeConfig, ProjectLicense } from '../types/config.js';
|
|
3
3
|
import { type CommentStyle } from './license-headers.js';
|
|
4
4
|
import { lintPatchedCss } from './patch-lint-css.js';
|
|
5
|
-
export * from './patch-lint-
|
|
5
|
+
export * from './patch-lint-cross.js';
|
|
6
|
+
export { buildModifiedFileAdditionsFromDiff, detectNewFilesInDiff } from './patch-lint-diff.js';
|
|
6
7
|
export { lintPatchedCss };
|
|
7
8
|
/**
|
|
8
|
-
* Canonical `[check] file: message` rendering of a patch-lint issue
|
|
9
|
-
* one string shape every reporter and refusal message uses, so operators
|
|
9
|
+
* Canonical `[check] file: message` rendering of a patch-lint issue. It is
|
|
10
|
+
* the one string shape every reporter and refusal message uses, so operators
|
|
10
11
|
* can grep one format across lint output and refusal details.
|
|
11
12
|
*/
|
|
12
13
|
export declare function formatPatchLintIssue(issue: Pick<PatchLintIssue, 'check' | 'file' | 'message'>): string;
|
|
@@ -37,27 +38,28 @@ export declare function hasBrowserChromeAssertion(strippedContent: string): bool
|
|
|
37
38
|
*/
|
|
38
39
|
export declare function commentStyleForFile(file: string): CommentStyle | null;
|
|
39
40
|
/**
|
|
40
|
-
* Decides whether a
|
|
41
|
-
* `missing-license-header` rule.
|
|
42
|
-
* `lintNewFileHeaders` (the rule) and `autoFixLicenseHeaders` (the
|
|
41
|
+
* Decides whether a new file's leading header satisfies the
|
|
42
|
+
* `missing-license-header` rule. It is the single owner of the acceptance
|
|
43
|
+
* policy: `lintNewFileHeaders` (the rule) and `autoFixLicenseHeaders` (the
|
|
43
44
|
* interactive export fixer) must agree, or the fixer offers to stack a
|
|
44
45
|
* second header onto a file the lint already accepts.
|
|
45
46
|
*
|
|
46
47
|
* Accepted shapes, in order:
|
|
47
|
-
* - the project's own header for the file's comment style
|
|
48
|
-
* - under `browser/branding/`,
|
|
48
|
+
* - the project's own header for the file's comment style.
|
|
49
|
+
* - under `browser/branding/`, any recognised license header in the
|
|
49
50
|
* matching style: the setup-generated branding directory is copied from
|
|
50
51
|
* Firefox's `unofficial` template and arrives with Mozilla MPL-2.0
|
|
51
|
-
* headers
|
|
52
|
-
* even when the fork's own code is 0BSD / EUPL-1.2 / GPL-2.0-or-later
|
|
53
|
-
* - on an MPL-2.0 project, any recognised header in the matching style
|
|
52
|
+
* headers, legitimate for copyright purposes (the assets are Mozilla's)
|
|
53
|
+
* even when the fork's own code is 0BSD / EUPL-1.2 / GPL-2.0-or-later.
|
|
54
|
+
* - on an MPL-2.0 project, any recognised header in the matching style.
|
|
54
55
|
* - the verbatim upstream MPL-2.0 block header (`/* … *\/`, optionally
|
|
55
|
-
* behind a leading editor-directive comment)
|
|
56
|
+
* behind a leading editor-directive comment) regardless of the project
|
|
56
57
|
* license, on any file whose comment syntax is the block form (JS and
|
|
57
58
|
* CSS): a file copied from the Firefox tree legitimately keeps Mozilla's
|
|
58
59
|
* header for provenance in an EUPL/GPL/0BSD project too. Only the block
|
|
59
|
-
* form is accepted
|
|
60
|
-
*
|
|
60
|
+
* form is accepted, because the `// `-style MPL header is
|
|
61
|
+
* FireForge-generated rather than upstream provenance, and `hash`-style
|
|
62
|
+
* files (FTL) stay excluded
|
|
61
63
|
* because `/* … *\/` is not a comment there.
|
|
62
64
|
*
|
|
63
65
|
* @param file - Engine-relative path of the new file
|
|
@@ -87,7 +89,7 @@ export declare function lintNewFileHeaders(repoDir: string, newFiles: string[],
|
|
|
87
89
|
* @param patchOwnedFiles - Optional set of patch-owned `.sys.mjs` paths for scoped JSDoc enforcement
|
|
88
90
|
* @param patchOwnedChromeScripts - Optional set of patch-owned chrome
|
|
89
91
|
* subscripts (`.js` non-`.sys.mjs`) for scoped chrome-script JSDoc
|
|
90
|
-
* enforcement. Built by {@link resolvePatchOwnedChromeScripts}
|
|
92
|
+
* enforcement. Built by {@link resolvePatchOwnedChromeScripts}. Passed
|
|
91
93
|
* separately from `patchOwnedFiles` so the `runCheckJs` consumer (which
|
|
92
94
|
* only accepts `.sys.mjs`) is not silently broadened.
|
|
93
95
|
* @returns Array of lint issues
|
|
@@ -120,7 +122,7 @@ export type PatchSizeTierDecision = {
|
|
|
120
122
|
* Decides which `large-patch-lines` threshold tier applies to a patch.
|
|
121
123
|
* Exported so `runPatchLint` and the per-patch `lint` command can
|
|
122
124
|
* surface the tier choice to the operator *without* depending on
|
|
123
|
-
* `lintPatchSize`'s internal return shape
|
|
125
|
+
* `lintPatchSize`'s internal return shape. The rule itself stays a
|
|
124
126
|
* pure issues-array API, and the decision is computed separately for
|
|
125
127
|
* the sole purpose of reporting.
|
|
126
128
|
*
|
|
@@ -128,25 +130,29 @@ export type PatchSizeTierDecision = {
|
|
|
128
130
|
* The test tier beats branding because a table-driven regression test
|
|
129
131
|
* is legitimately large independent of whether the patch also claims
|
|
130
132
|
* branding shape, and the test-tier thresholds are already more
|
|
131
|
-
* permissive than branding
|
|
133
|
+
* permissive than branding, so "tests beat branding" is the
|
|
132
134
|
* defensive-for-tests choice.
|
|
133
135
|
*/
|
|
134
136
|
export declare function resolvePatchSizeTier(filesAffected: ReadonlyArray<string>, patchTier?: 'branding'): PatchSizeTierDecision;
|
|
135
|
-
/**
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
* {@link countNonBinaryDiffLines} so consumers can build waiver-freshness
|
|
139
|
-
* checks against the SAME numbers `large-patch-lines` /
|
|
140
|
-
* `large-patch-files` fire on instead of mirroring them.
|
|
141
|
-
*/
|
|
142
|
-
export declare function getPatchSizeThresholds(tier: 'general' | 'test' | 'branding'): {
|
|
137
|
+
/** Line and file-count thresholds governing one patch-size tier. */
|
|
138
|
+
export interface PatchSizeThresholds {
|
|
139
|
+
/** Added-line counts at which notice/warning/error issues fire. */
|
|
143
140
|
lines: {
|
|
144
141
|
notice: number;
|
|
145
142
|
warning: number;
|
|
146
143
|
error: number;
|
|
147
144
|
};
|
|
145
|
+
/** Maximum number of files a patch may touch before an issue fires. */
|
|
148
146
|
maxFiles: number;
|
|
149
|
-
}
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Read-only view of the size thresholds a tier enforces.
|
|
150
|
+
* Public-API companion to {@link resolvePatchSizeTier} /
|
|
151
|
+
* {@link countNonBinaryDiffLines} so consumers can build waiver-freshness
|
|
152
|
+
* checks against the same numbers `large-patch-lines` /
|
|
153
|
+
* `large-patch-files` fire on instead of mirroring them.
|
|
154
|
+
*/
|
|
155
|
+
export declare function getPatchSizeThresholds(tier: 'general' | 'test' | 'branding'): PatchSizeThresholds;
|
|
150
156
|
/**
|
|
151
157
|
* Checks patch size and emits advisory warnings.
|
|
152
158
|
*
|
|
@@ -176,7 +182,7 @@ export declare function lintModifiedFileHeaders(repoDir: string, affectedFiles:
|
|
|
176
182
|
export interface LintExportedPatchOptions {
|
|
177
183
|
/**
|
|
178
184
|
* Cross-patch context for ownership resolution. Present whenever the
|
|
179
|
-
* caller has a loaded patch queue
|
|
185
|
+
* caller has a loaded patch queue. Absent for the ad-hoc single-diff
|
|
180
186
|
* paths that have no queue to resolve against.
|
|
181
187
|
*/
|
|
182
188
|
patchQueueCtx?: import('./patch-lint-cross.js').PatchQueueContext;
|
|
@@ -192,7 +198,7 @@ export interface LintExportedPatchOptions {
|
|
|
192
198
|
* Explicit tier override, threaded from `PatchMetadata.tier`. When
|
|
193
199
|
* `"branding"` forces the branding thresholds on the
|
|
194
200
|
* `large-patch-lines` rule. Callers with a per-patch manifest context
|
|
195
|
-
* (re-export, per-patch lint) should pass this
|
|
201
|
+
* (re-export, per-patch lint) should pass this. Aggregate-mode callers
|
|
196
202
|
* without a specific patch context omit it and fall through to
|
|
197
203
|
* auto-detection.
|
|
198
204
|
*/
|
|
@@ -202,12 +208,12 @@ export interface LintExportedPatchOptions {
|
|
|
202
208
|
* The ad-hoc `fireforge lint <files>` path passes a cross-patch file
|
|
203
209
|
* list that does not correspond to a single patch, so it suppresses the
|
|
204
210
|
* synthetic combined-list size check here and re-evaluates the size
|
|
205
|
-
* rules per owning patch instead
|
|
211
|
+
* rules per owning patch instead, never synthesising a phantom
|
|
206
212
|
* oversized patch from the operator's file selection.
|
|
207
213
|
*/
|
|
208
214
|
skipPatchSize?: boolean;
|
|
209
215
|
/**
|
|
210
|
-
* Restrict checkJs diagnostics to these repo-relative files
|
|
216
|
+
* Restrict checkJs diagnostics to these repo-relative files. Module
|
|
211
217
|
* resolution still spans every owned file in `patchQueueCtx`. Export and
|
|
212
218
|
* re-export pass the patch under export so cross-patch `resource:///`
|
|
213
219
|
* imports resolve against the whole queue while only that patch's
|
|
@@ -216,15 +222,15 @@ export interface LintExportedPatchOptions {
|
|
|
216
222
|
checkJsReportScope?: ReadonlySet<string>;
|
|
217
223
|
/**
|
|
218
224
|
* Pre-computed checkJs issues for this patch. When provided, the internal
|
|
219
|
-
* checkJs invocation is skipped and these are appended verbatim
|
|
225
|
+
* checkJs invocation is skipped and these are appended verbatim: the
|
|
220
226
|
* per-patch lint path builds one queue-wide checkJs program and
|
|
221
227
|
* attributes findings per patch instead of rebuilding per patch.
|
|
222
228
|
*/
|
|
223
229
|
precomputedCheckJs?: readonly PatchLintIssue[];
|
|
224
230
|
/**
|
|
225
|
-
* Invoked with the issues
|
|
226
|
-
* when any were. Suppression semantics are unchanged
|
|
227
|
-
*
|
|
231
|
+
* Invoked with the issues dropped by the `ignoreChecks` waiver filter,
|
|
232
|
+
* when any were. Suppression semantics are unchanged (the returned issue
|
|
233
|
+
* list still excludes them), but the caller can report
|
|
228
234
|
* the measurement a waived size finding carried (per-patch NOTICE lines
|
|
229
235
|
* and the `--report` JSON) instead of losing it entirely.
|
|
230
236
|
*/
|
|
@@ -237,7 +243,7 @@ export interface LintExportedPatchOptions {
|
|
|
237
243
|
* @param affectedFiles - File paths (relative to repoDir) affected by the patch
|
|
238
244
|
* @param diffContent - Raw unified diff string
|
|
239
245
|
* @param config - Project configuration
|
|
240
|
-
* @param options - Optional context and behaviour switches
|
|
246
|
+
* @param options - Optional context and behaviour switches. See
|
|
241
247
|
* {@link LintExportedPatchOptions}. Every optional input lives here
|
|
242
248
|
* rather than in a positional tail: four of the five call sites had to
|
|
243
249
|
* pass `undefined` placeholders to reach the one member they wanted.
|
|
@@ -22,11 +22,12 @@ import { invokePatchLintPrettier } from './patch-lint-prettier.js';
|
|
|
22
22
|
// The cross-patch lint infrastructure (queue context builder,
|
|
23
23
|
// duplicate-creation and forward-import rules, ignore marker) lives in
|
|
24
24
|
// `patch-lint-cross.ts` so the per-patch and cross-patch rule bodies each
|
|
25
|
-
// stay within the per-file line budget.
|
|
26
|
-
//
|
|
27
|
-
export * from './patch-lint-
|
|
25
|
+
// stay within the per-file line budget. Its surface is re-exported here so
|
|
26
|
+
// callers keep importing from one module.
|
|
27
|
+
export * from './patch-lint-cross.js';
|
|
28
|
+
export { buildModifiedFileAdditionsFromDiff, detectNewFilesInDiff } from './patch-lint-diff.js';
|
|
28
29
|
// The CSS rule bodies live in `patch-lint-css.ts` (same per-file-budget
|
|
29
|
-
// split as the other rule families)
|
|
30
|
+
// split as the other rule families). Re-export the imported binding so
|
|
30
31
|
// callers and tests keep importing `lintPatchedCss` from this module.
|
|
31
32
|
export { lintPatchedCss };
|
|
32
33
|
// ---------------------------------------------------------------------------
|
|
@@ -47,8 +48,8 @@ function countContentLines(content) {
|
|
|
47
48
|
return lines.length;
|
|
48
49
|
}
|
|
49
50
|
/**
|
|
50
|
-
* Canonical `[check] file: message` rendering of a patch-lint issue
|
|
51
|
-
* one string shape every reporter and refusal message uses, so operators
|
|
51
|
+
* Canonical `[check] file: message` rendering of a patch-lint issue. It is
|
|
52
|
+
* the one string shape every reporter and refusal message uses, so operators
|
|
52
53
|
* can grep one format across lint output and refusal details.
|
|
53
54
|
*/
|
|
54
55
|
export function formatPatchLintIssue(issue) {
|
|
@@ -94,8 +95,8 @@ const PATCH_LINE_THRESHOLDS = {
|
|
|
94
95
|
* `browser/branding/<name>/` subtree.
|
|
95
96
|
*
|
|
96
97
|
* Calibrated against a fresh-fork branding export, which lands around
|
|
97
|
-
* 15
|
|
98
|
-
* copied upstream CSS). That is the
|
|
98
|
+
* 15-16k lines (localized brand.ftl across many locales + SVG path data +
|
|
99
|
+
* copied upstream CSS). That is the minimum branding diff, so it must
|
|
99
100
|
* surface as a soft `notice` rather than a `warning`: the warning band
|
|
100
101
|
* sits above it with ~13% headroom, and the error band at roughly 2× the
|
|
101
102
|
* baseline, where non-branding work is probably bundled in.
|
|
@@ -110,7 +111,7 @@ const PATCH_LINE_THRESHOLDS = {
|
|
|
110
111
|
/**
|
|
111
112
|
* File-count thresholds for the `large-patch-files` rule, mirroring the tier
|
|
112
113
|
* shape of {@link PATCH_LINE_THRESHOLDS}. A single warning-only threshold
|
|
113
|
-
* per tier is intentional
|
|
114
|
+
* per tier is intentional: file count expresses scope, not blast radius,
|
|
114
115
|
* and there is no error band that would block export.
|
|
115
116
|
*
|
|
116
117
|
* The branding tier sits well above the typical floor because branding
|
|
@@ -121,7 +122,7 @@ const PATCH_LINE_THRESHOLDS = {
|
|
|
121
122
|
* genuinely bloated patch.
|
|
122
123
|
*
|
|
123
124
|
* Test tier matches general because a test-only patch rarely touches many
|
|
124
|
-
* files (a single regression test usually adds 1
|
|
125
|
+
* files (a single regression test usually adds 1-3 fixtures). The elevation
|
|
125
126
|
* in {@link PATCH_LINE_THRESHOLDS.test} addresses big table-driven test
|
|
126
127
|
* bodies, not file fan-out.
|
|
127
128
|
*/
|
|
@@ -144,10 +145,10 @@ const SPLIT_HINT = 'Consider splitting into smaller, focused patches — ' +
|
|
|
144
145
|
* branding patches legitimately need to touch to register the new branding
|
|
145
146
|
* flavor with the top-level configure. A predicate requiring every file to
|
|
146
147
|
* live under `browser/branding/` drops a branding patch that also touches
|
|
147
|
-
* `browser/moz.configure`
|
|
148
|
+
* `browser/moz.configure` (the canonical registration point) into the
|
|
148
149
|
* general lint tier.
|
|
149
150
|
*
|
|
150
|
-
*
|
|
151
|
+
* Narrow on purpose: add entries only when a genuine branding patch
|
|
151
152
|
* cannot be expressed without a specific registration sibling. Pinned
|
|
152
153
|
* against ESR 140.x conventions at time of writing.
|
|
153
154
|
*/
|
|
@@ -158,7 +159,7 @@ const BRANDING_REGISTRATION_FILES = new Set([
|
|
|
158
159
|
/**
|
|
159
160
|
* Returns true when a patch qualifies for the branding threshold tier:
|
|
160
161
|
* every file lives either under `browser/branding/` or in the narrow
|
|
161
|
-
* registration allowlist,
|
|
162
|
+
* registration allowlist, and the patch contains at least one file
|
|
162
163
|
* under `browser/branding/` (guard against a config-only patch
|
|
163
164
|
* accidentally qualifying as branding).
|
|
164
165
|
*
|
|
@@ -200,7 +201,7 @@ export function isTestFile(file) {
|
|
|
200
201
|
return /^(?:browser_|test_|xpcshell_).*\.js$/.test(basename);
|
|
201
202
|
}
|
|
202
203
|
/**
|
|
203
|
-
* Narrower scope than `isTestFile
|
|
204
|
+
* Narrower scope than `isTestFile`: only browser-chrome test files
|
|
204
205
|
* (`browser_*.js` under a `/test/` or `/tests/` directory). Excludes
|
|
205
206
|
* `head.js` and `head_*.js` test helpers.
|
|
206
207
|
*/
|
|
@@ -220,28 +221,29 @@ function isBrowserChromeTestFile(file) {
|
|
|
220
221
|
* Each alternative must sit at a call boundary: preceded by something that
|
|
221
222
|
* is not an identifier character, `.`, `#`, or `-`. A plain
|
|
222
223
|
* `strippedContent.includes(tok)` over `Assert.`, `ok(`, `is(`, `isnot(`,
|
|
223
|
-
* `isDeeply(` lets any identifier merely *ending* in one satisfy the gate
|
|
224
|
-
* `this.axis(3)` contains `is(`, `book(` contains `ok(`,
|
|
225
|
-
* `promiseIsDeeply(` contains `isDeeply(
|
|
224
|
+
* `isDeeply(` lets any identifier merely *ending* in one satisfy the gate:
|
|
225
|
+
* `this.axis(3)` contains `is(`, `book(` contains `ok(`, and
|
|
226
|
+
* `promiseIsDeeply(` contains `isDeeply(`, so an assertion-free smoke test
|
|
226
227
|
* using any such call clears the floor.
|
|
227
228
|
*
|
|
228
|
-
* The namespaced arm must name a member
|
|
229
|
+
* The namespaced arm must name a member and a call. Matching the namespace
|
|
229
230
|
* and its dot alone re-opens the same hole from the other side:
|
|
230
231
|
* `SimpleTest` is mostly *harness* API, so `SimpleTest.finish()`,
|
|
231
232
|
* `SimpleTest.waitForExplicitFinish()` and `SimpleTest.requestCompleteLog()`
|
|
232
|
-
* would each clear the floor on their own
|
|
233
|
+
* would each clear the floor on their own, which are the exact calls an
|
|
233
234
|
* assertion-free smoke test contains. The enumeration below is the
|
|
234
235
|
* mochitest/xpcshell assertion surface both namespaces share, and it is what
|
|
235
236
|
* the user-facing message names.
|
|
236
237
|
*
|
|
237
238
|
* Two qualified spellings of the bare four also count: `window.ok(...)` (the
|
|
238
|
-
* globals
|
|
239
|
-
*
|
|
240
|
-
* assertion-free. `SpecialPowers.ok(` stays excluded
|
|
239
|
+
* globals are window properties) and an optional-chained `win?.ok(...)`.
|
|
240
|
+
* Blocking those flags tests whose only assertions are real as
|
|
241
|
+
* assertion-free. `SpecialPowers.ok(` stays excluded: that is API surface,
|
|
241
242
|
* not an assertion.
|
|
242
243
|
*
|
|
243
|
-
*
|
|
244
|
-
* than resolvable sources, and the surrounding rule is a floor, not
|
|
244
|
+
* Textual rather than AST-based, on purpose: this runs over patch bodies
|
|
245
|
+
* rather than resolvable sources, and the surrounding rule is a floor, not
|
|
246
|
+
* a proof.
|
|
245
247
|
*/
|
|
246
248
|
const ASSERTION_MEMBERS = [
|
|
247
249
|
'ok',
|
|
@@ -262,7 +264,7 @@ const ASSERTION_MEMBERS = [
|
|
|
262
264
|
'stringContains',
|
|
263
265
|
'throws',
|
|
264
266
|
'rejects',
|
|
265
|
-
// `todo`, `todo_is`, `todo_isnot`, `info`-free
|
|
267
|
+
// `todo`, `todo_is`, `todo_isnot`, `info`-free: todo* record an expected
|
|
266
268
|
// failure, which is still a recorded assertion outcome.
|
|
267
269
|
'todo',
|
|
268
270
|
'todo_is',
|
|
@@ -289,27 +291,28 @@ export function commentStyleForFile(file) {
|
|
|
289
291
|
// License header lint
|
|
290
292
|
// ---------------------------------------------------------------------------
|
|
291
293
|
/**
|
|
292
|
-
* Decides whether a
|
|
293
|
-
* `missing-license-header` rule.
|
|
294
|
-
* `lintNewFileHeaders` (the rule) and `autoFixLicenseHeaders` (the
|
|
294
|
+
* Decides whether a new file's leading header satisfies the
|
|
295
|
+
* `missing-license-header` rule. It is the single owner of the acceptance
|
|
296
|
+
* policy: `lintNewFileHeaders` (the rule) and `autoFixLicenseHeaders` (the
|
|
295
297
|
* interactive export fixer) must agree, or the fixer offers to stack a
|
|
296
298
|
* second header onto a file the lint already accepts.
|
|
297
299
|
*
|
|
298
300
|
* Accepted shapes, in order:
|
|
299
|
-
* - the project's own header for the file's comment style
|
|
300
|
-
* - under `browser/branding/`,
|
|
301
|
+
* - the project's own header for the file's comment style.
|
|
302
|
+
* - under `browser/branding/`, any recognised license header in the
|
|
301
303
|
* matching style: the setup-generated branding directory is copied from
|
|
302
304
|
* Firefox's `unofficial` template and arrives with Mozilla MPL-2.0
|
|
303
|
-
* headers
|
|
304
|
-
* even when the fork's own code is 0BSD / EUPL-1.2 / GPL-2.0-or-later
|
|
305
|
-
* - on an MPL-2.0 project, any recognised header in the matching style
|
|
305
|
+
* headers, legitimate for copyright purposes (the assets are Mozilla's)
|
|
306
|
+
* even when the fork's own code is 0BSD / EUPL-1.2 / GPL-2.0-or-later.
|
|
307
|
+
* - on an MPL-2.0 project, any recognised header in the matching style.
|
|
306
308
|
* - the verbatim upstream MPL-2.0 block header (`/* … *\/`, optionally
|
|
307
|
-
* behind a leading editor-directive comment)
|
|
309
|
+
* behind a leading editor-directive comment) regardless of the project
|
|
308
310
|
* license, on any file whose comment syntax is the block form (JS and
|
|
309
311
|
* CSS): a file copied from the Firefox tree legitimately keeps Mozilla's
|
|
310
312
|
* header for provenance in an EUPL/GPL/0BSD project too. Only the block
|
|
311
|
-
* form is accepted
|
|
312
|
-
*
|
|
313
|
+
* form is accepted, because the `// `-style MPL header is
|
|
314
|
+
* FireForge-generated rather than upstream provenance, and `hash`-style
|
|
315
|
+
* files (FTL) stay excluded
|
|
313
316
|
* because `/* … *\/` is not a comment there.
|
|
314
317
|
*
|
|
315
318
|
* @param file - Engine-relative path of the new file
|
|
@@ -373,7 +376,7 @@ export async function lintNewFileHeaders(repoDir, newFiles, config) {
|
|
|
373
376
|
* @param patchOwnedFiles - Optional set of patch-owned `.sys.mjs` paths for scoped JSDoc enforcement
|
|
374
377
|
* @param patchOwnedChromeScripts - Optional set of patch-owned chrome
|
|
375
378
|
* subscripts (`.js` non-`.sys.mjs`) for scoped chrome-script JSDoc
|
|
376
|
-
* enforcement. Built by {@link resolvePatchOwnedChromeScripts}
|
|
379
|
+
* enforcement. Built by {@link resolvePatchOwnedChromeScripts}. Passed
|
|
377
380
|
* separately from `patchOwnedFiles` so the `runCheckJs` consumer (which
|
|
378
381
|
* only accepts `.sys.mjs`) is not silently broadened.
|
|
379
382
|
* @returns Array of lint issues
|
|
@@ -447,7 +450,7 @@ export async function lintPatchedJs(repoDir, affectedFiles, newFiles, config, pa
|
|
|
447
450
|
const chromeMode = config.patchLint?.chromeScriptJsDoc;
|
|
448
451
|
issues.push(...lintChromeScriptJsDocForFile(file, content, isChromeOwned, chromeMode));
|
|
449
452
|
// 3b. Assertion floor for browser-chrome tests touched by this patch
|
|
450
|
-
// (covers both newly introduced files and modified upstream tests
|
|
453
|
+
// (covers both newly introduced files and modified upstream tests:
|
|
451
454
|
// a patch that strips the last `Assert.equal` from an existing
|
|
452
455
|
// browser_*.js silently passed under the old `isNew` gate).
|
|
453
456
|
const assertionFloor = config.patchLint?.testAssertionFloor;
|
|
@@ -505,7 +508,7 @@ export function lintModificationComments(diffContent, config) {
|
|
|
505
508
|
* Decides which `large-patch-lines` threshold tier applies to a patch.
|
|
506
509
|
* Exported so `runPatchLint` and the per-patch `lint` command can
|
|
507
510
|
* surface the tier choice to the operator *without* depending on
|
|
508
|
-
* `lintPatchSize`'s internal return shape
|
|
511
|
+
* `lintPatchSize`'s internal return shape. The rule itself stays a
|
|
509
512
|
* pure issues-array API, and the decision is computed separately for
|
|
510
513
|
* the sole purpose of reporting.
|
|
511
514
|
*
|
|
@@ -513,7 +516,7 @@ export function lintModificationComments(diffContent, config) {
|
|
|
513
516
|
* The test tier beats branding because a table-driven regression test
|
|
514
517
|
* is legitimately large independent of whether the patch also claims
|
|
515
518
|
* branding shape, and the test-tier thresholds are already more
|
|
516
|
-
* permissive than branding
|
|
519
|
+
* permissive than branding, so "tests beat branding" is the
|
|
517
520
|
* defensive-for-tests choice.
|
|
518
521
|
*/
|
|
519
522
|
export function resolvePatchSizeTier(filesAffected, patchTier) {
|
|
@@ -530,7 +533,7 @@ export function resolvePatchSizeTier(filesAffected, patchTier) {
|
|
|
530
533
|
* Read-only view of the size thresholds a tier enforces.
|
|
531
534
|
* Public-API companion to {@link resolvePatchSizeTier} /
|
|
532
535
|
* {@link countNonBinaryDiffLines} so consumers can build waiver-freshness
|
|
533
|
-
* checks against the
|
|
536
|
+
* checks against the same numbers `large-patch-lines` /
|
|
534
537
|
* `large-patch-files` fire on instead of mirroring them.
|
|
535
538
|
*/
|
|
536
539
|
export function getPatchSizeThresholds(tier) {
|
|
@@ -557,7 +560,7 @@ export function lintPatchSize(filesAffected, lineCount, patchTier) {
|
|
|
557
560
|
// thresholds because a big regression test is legitimate (table-driven
|
|
558
561
|
// harnesses run into the thousands of lines). Branding patches get their
|
|
559
562
|
// own tier so a first export of setup-generated branding does not fire the
|
|
560
|
-
// general hard limit
|
|
563
|
+
// general hard limit. See `PATCH_LINE_THRESHOLDS.branding` and
|
|
561
564
|
// `PATCH_FILES_THRESHOLDS.branding` above. An explicit `patchTier` opt-in
|
|
562
565
|
// forces branding even when `isBrandingOnlyPatch` cannot reach the patch's
|
|
563
566
|
// actual shape (a branding patch that also touches a non-allowlisted
|
|
@@ -653,7 +656,7 @@ export async function lintModifiedFileHeaders(repoDir, affectedFiles, newFiles)
|
|
|
653
656
|
* @param affectedFiles - File paths (relative to repoDir) affected by the patch
|
|
654
657
|
* @param diffContent - Raw unified diff string
|
|
655
658
|
* @param config - Project configuration
|
|
656
|
-
* @param options - Optional context and behaviour switches
|
|
659
|
+
* @param options - Optional context and behaviour switches. See
|
|
657
660
|
* {@link LintExportedPatchOptions}. Every optional input lives here
|
|
658
661
|
* rather than in a positional tail: four of the five call sites had to
|
|
659
662
|
* pass `undefined` placeholders to reach the one member they wanted.
|
|
@@ -687,7 +690,7 @@ export async function lintExportedPatch(repoDir, affectedFiles, diffContent, con
|
|
|
687
690
|
];
|
|
688
691
|
if (options?.precomputedCheckJs) {
|
|
689
692
|
// Per-patch lint built one queue-wide program and already attributed
|
|
690
|
-
// this patch's findings
|
|
693
|
+
// this patch's findings, so append them instead of rebuilding the program.
|
|
691
694
|
issues.push(...options.precomputedCheckJs);
|
|
692
695
|
}
|
|
693
696
|
else if (config.patchLint?.checkJs) {
|
|
@@ -704,10 +707,10 @@ export async function lintExportedPatch(repoDir, affectedFiles, diffContent, con
|
|
|
704
707
|
}
|
|
705
708
|
}
|
|
706
709
|
}
|
|
707
|
-
// Prettier over patch-owned .sys.mjs.
|
|
708
|
-
// precomputedCheckJs short-circuit: it is a separate tool with
|
|
709
|
-
// gate, and a queue-wide program has no equivalent to share.
|
|
710
|
-
// the files
|
|
710
|
+
// Prettier over patch-owned .sys.mjs. Kept out of the
|
|
711
|
+
// precomputedCheckJs short-circuit on purpose: it is a separate tool with
|
|
712
|
+
// its own gate, and a queue-wide program has no equivalent to share.
|
|
713
|
+
// Scoped to the files this patch owns, run from engine/ so its own config
|
|
711
714
|
// and ignore file decide (see `patch-lint-prettier.ts`).
|
|
712
715
|
const prettierGate = config.patchLint?.prettier ?? 'off';
|
|
713
716
|
if (prettierGate !== 'off' && patchOwnedFiles.size > 0) {
|
|
@@ -716,7 +719,7 @@ export async function lintExportedPatch(repoDir, affectedFiles, diffContent, con
|
|
|
716
719
|
}
|
|
717
720
|
// Filter out ignored checks last so every rule still runs (keeps the
|
|
718
721
|
// implementation uniform) but suppressed rules do not surface. We do not
|
|
719
|
-
// reclassify severities
|
|
722
|
+
// reclassify severities: an ignored error simply drops, mirroring how
|
|
720
723
|
// inline `fireforge-ignore: <check>` markers work in the CSS and
|
|
721
724
|
// forward-import rules.
|
|
722
725
|
if (ignoreChecks && ignoreChecks.size > 0) {
|
|
@@ -23,7 +23,7 @@ export interface PatchDirectoryLockOptions {
|
|
|
23
23
|
* is held, so an unlocked caller silently reintroduces the interleaving the
|
|
24
24
|
* lock exists to prevent.
|
|
25
25
|
*
|
|
26
|
-
* Fail-open on an unreadable owner record,
|
|
26
|
+
* Fail-open on an unreadable owner record, on purpose: `withFileLock`
|
|
27
27
|
* treats writing that record as non-fatal, so a live holder can legitimately
|
|
28
28
|
* have no readable PID and asserting on its presence would fire on a lock we
|
|
29
29
|
* really do hold.
|