Skip to content

Use native private members in rush-lib - #5939

Open
Bharat Middha (bmiddha) wants to merge 5 commits into
mainfrom
bmiddha/native-private-fields-rush-lib
Open

Use native private members in rush-lib#5939
Bharat Middha (bmiddha) wants to merge 5 commits into
mainfrom
bmiddha/native-private-fields-rush-lib

Conversation

@bmiddha

@bmiddha Bharat Middha (bmiddha) commented Aug 19, 2026

Copy link
Copy Markdown
Member

Summary

  • convert TypeScript-private fields, methods, and accessors in @microsoft/rush-lib to ECMAScript #private members
  • replace private-member destructuring with direct private access
  • keep a small set of TypeScript-private test seams where tests intentionally synthesize, inspect, or spy on class internals
  • keep package behavior and public APIs unchanged

Validation

  • rush build --to @microsoft/rush-lib --verbose
  • heft test --clean (741 tests)

Dependency

Stacked on #5947, which fixes @rushstack/no-new-null handling for ECMAScript private members. Narrow suppressions remain because these packages consume the released decoupled plugin; they can be removed after the patched plugin is published and adopted.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 8ebd5bf2-c44b-42d5-be25-e7936d4b0a14
Convert TypeScript-only private methods, getters, and setters in
libraries/rush-lib to ECMAScript # private syntax, matching the
private field migration already on this branch.

Preserved as TypeScript-only private (not converted) because tests
rely on reflection-style access that true private members do not
support:
- OperationBuildCache#tryCollectPathsToCacheAsync (accessed via
  bracket-notation string literal in tests)
- RushPnpmCommandLineParser (entire class): its test suite
  constructs partial instances via Object.create(prototype) and
  assigns/reads members directly, which is incompatible with real
  private fields
- Telemetry#flushAsyncTasks (accessed through an Omit<> interface
  cast in tests)
- RushCommandLineParser#reportErrorAndSetExitCode (monkey-patched
  onto the prototype by test mocks to prevent process.exit)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 8ebd5bf2-c44b-42d5-be25-e7936d4b0a14
The decoupled ESLint plugin does not recognize native private methods, causing no-new-null to report a false positive.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 8ebd5bf2-c44b-42d5-be25-e7936d4b0a14
@bmiddha Bharat Middha (bmiddha) changed the title Use native private fields in rush-lib Use native private members in rush-lib Aug 20, 2026
Treat PrivateIdentifier class keys like TypeScript private members so no-new-null does not report private API types.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 8ebd5bf2-c44b-42d5-be25-e7936d4b0a14
…rivate' into bmiddha/native-private-fields-rush-lib
@bmiddha
Bharat Middha (bmiddha) changed the base branch from main to bmiddha/fix-no-new-null-native-private August 20, 2026 06:05
@mojaza
Mo Jazayeri (mojaza) requested a balanced review from Copilot August 21, 2026 18:42

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Migrates Rush library internals from TypeScript-private members to native ECMAScript #private members without changing public behavior.

Changes:

  • Converted private fields, methods, accessors, and internal references.
  • Replaced private-member destructuring with direct access.
  • Preserved intentional test seams and updated affected tests.

Reviewed changes

Copilot reviewed 129 out of 129 changed files in this pull request and generated no comments.

Show a summary per file
File Description
libraries/rush-lib/src/utilities/TarExecutable.ts Migrates tar execution internals.
libraries/rush-lib/src/utilities/Stopwatch.ts Migrates stopwatch state.
libraries/rush-lib/src/utilities/OverlappingPathAnalyzer.ts Migrates path-tree root.
libraries/rush-lib/src/utilities/HotlinkManager.ts Migrates hotlink state and helpers.
libraries/rush-lib/src/utilities/CollatedTerminalProvider.ts Migrates terminal provider state.
libraries/rush-lib/src/utilities/AsyncRecycler.ts Migrates recycler state and helper.
libraries/rush-lib/src/pluginFramework/RushSession.ts Migrates session options and factories.
libraries/rush-lib/src/pluginFramework/PluginLoader/PluginLoaderBase.ts Migrates plugin-loading helpers.
libraries/rush-lib/src/pluginFramework/logging/Logger.ts Migrates logger state and accessor.
libraries/rush-lib/src/logic/yarn/YarnShrinkwrapFile.ts Migrates Yarn shrinkwrap state.
libraries/rush-lib/src/logic/versionMismatch/VersionMismatchFinderProject.ts Migrates project file manager.
libraries/rush-lib/src/logic/versionMismatch/VersionMismatchFinderCommonVersions.ts Migrates common-version internals.
libraries/rush-lib/src/logic/versionMismatch/VersionMismatchFinder.ts Migrates mismatch analysis state.
libraries/rush-lib/src/logic/UnlinkManager.ts Migrates unlink configuration and helper.
libraries/rush-lib/src/logic/test/Telemetry.test.ts Corrects telemetry test seam type.
libraries/rush-lib/src/logic/TempProjectHelper.ts Migrates temporary-project state.
libraries/rush-lib/src/logic/Telemetry.ts Migrates telemetry internals while preserving test seam.
libraries/rush-lib/src/logic/setup/TerminalInput.ts Migrates password prompt state.
libraries/rush-lib/src/logic/setup/KeyboardLoop.ts Migrates keyboard-loop state and callbacks.
libraries/rush-lib/src/logic/setup/ArtifactoryConfiguration.ts Migrates configuration filename.
libraries/rush-lib/src/logic/selectors/VersionPolicyProjectSelectorParser.ts Migrates selector configuration.
libraries/rush-lib/src/logic/selectors/TagProjectSelectorParser.ts Migrates tag selector configuration.
libraries/rush-lib/src/logic/selectors/SubspaceSelectorParser.ts Migrates subspace selector configuration.
libraries/rush-lib/src/logic/selectors/PathProjectSelectorParser.ts Migrates path selector state.
libraries/rush-lib/src/logic/selectors/NamedProjectSelectorParser.ts Migrates named selector configuration.
libraries/rush-lib/src/logic/selectors/GitChangedProjectSelectorParser.ts Migrates Git selector state.
libraries/rush-lib/src/logic/PurgeManager.ts Migrates purge state and helper.
libraries/rush-lib/src/logic/PublishGit.ts Migrates Git publishing state.
libraries/rush-lib/src/logic/ProjectImpactGraphGenerator.ts Migrates graph-generation internals.
libraries/rush-lib/src/logic/ProjectCommandSet.ts Migrates script lookup map.
libraries/rush-lib/src/logic/PrereleaseToken.ts Migrates prerelease token state.
libraries/rush-lib/src/logic/pnpm/PnpmWorkspaceFile.ts Migrates workspace package storage.
libraries/rush-lib/src/logic/pnpm/PnpmProjectShrinkwrapFile.ts Migrates shrinkwrap traversal helpers.
libraries/rush-lib/src/logic/pnpm/PnpmOptionsConfiguration.ts Migrates PNPM configuration state.
libraries/rush-lib/src/logic/pnpm/PnpmLinkManager.ts Migrates PNPM linking helpers.
libraries/rush-lib/src/logic/pnpm/PnpmfileConfiguration.ts Migrates PNPM hook context.
libraries/rush-lib/src/logic/PackageLookup.ts Migrates package lookup map.
libraries/rush-lib/src/logic/operations/ValidateOperationsPlugin.ts Migrates plugin terminal state.
libraries/rush-lib/src/logic/operations/test/MockOperationRunner.ts Migrates mock runner callback.
libraries/rush-lib/src/logic/operations/ShellOperationRunner.ts Migrates shell runner state.
libraries/rush-lib/src/logic/operations/ProjectLogWritable.ts Migrates log writer handles.
libraries/rush-lib/src/logic/operations/PnpmSyncCopyOperationPlugin.ts Migrates plugin terminal state.
libraries/rush-lib/src/logic/operations/PeriodicCallback.ts Migrates timer and callback state.
libraries/rush-lib/src/logic/operations/OperationStateFile.ts Migrates operation state.
libraries/rush-lib/src/logic/operations/OperationResultSummarizerPlugin.ts Migrates summarizer terminal.
libraries/rush-lib/src/logic/operations/OperationMetadataManager.ts Migrates metadata paths.
libraries/rush-lib/src/logic/operations/OperationChunkTap.ts Migrates chunk callback state.
libraries/rush-lib/src/logic/operations/NodeDiagnosticDirPlugin.ts Migrates diagnostics directory.
libraries/rush-lib/src/logic/operations/LegacySkipPlugin.ts Migrates plugin options.
libraries/rush-lib/src/logic/operations/IPCOperationRunner.ts Migrates IPC runner state.
libraries/rush-lib/src/logic/operations/DebugHashesPlugin.ts Migrates debug terminal state.
libraries/rush-lib/src/logic/operations/ConsoleTimelinePlugin.ts Migrates timeline terminal state.
libraries/rush-lib/src/logic/operations/BuildPlanPlugin.ts Migrates build-plan terminal state.
libraries/rush-lib/src/logic/operations/AsyncOperationQueue.ts Migrates queue state and destructuring.
libraries/rush-lib/src/logic/npm/NpmShrinkwrapFile.ts Migrates NPM shrinkwrap state.
libraries/rush-lib/src/logic/npm/NpmLinkManager.ts Migrates NPM linking helper.
libraries/rush-lib/src/logic/InteractiveUpgrader.ts Migrates interactive-upgrade helpers.
libraries/rush-lib/src/logic/incremental/InputsSnapshot.ts Migrates snapshot caches and generator.
libraries/rush-lib/src/logic/EventHooksManager.ts Migrates event-hook state.
libraries/rush-lib/src/logic/DependencyAnalyzer.ts Migrates dependency analysis state.
libraries/rush-lib/src/logic/cobuild/DisjointSet.ts Migrates disjoint-set internals.
libraries/rush-lib/src/logic/cobuild/CobuildLock.ts Migrates cobuild context.
libraries/rush-lib/src/logic/ChangeManager.ts Migrates change-management state.
libraries/rush-lib/src/logic/ChangeFiles.ts Migrates change-file cache and helper.
libraries/rush-lib/src/logic/buildCache/test/OperationBuildCache.test.ts Uses the public cache ID accessor.
libraries/rush-lib/src/logic/base/BaseShrinkwrapFile.ts Migrates version-check helper.
libraries/rush-lib/src/logic/base/BasePackage.ts Migrates child lookup map.
libraries/rush-lib/src/logic/ApprovedPackagesChecker.ts Migrates approval-check state.
libraries/rush-lib/src/cli/actions/UpgradeInteractiveAction.ts Migrates command parameters.
libraries/rush-lib/src/cli/actions/UpdateCloudCredentialsAction.ts Migrates credential parameters.
libraries/rush-lib/src/cli/actions/UpdateAction.ts Migrates update parameters.
libraries/rush-lib/src/cli/actions/ScanAction.ts Migrates scan flags.
libraries/rush-lib/src/cli/actions/PurgeAction.ts Migrates purge flag.
libraries/rush-lib/src/cli/actions/LinkPackageAction.ts Migrates project-selection helper.
libraries/rush-lib/src/cli/actions/LinkAction.ts Migrates force flag.
libraries/rush-lib/src/cli/actions/InstallAction.ts Migrates install parameters.
libraries/rush-lib/src/cli/actions/InitSubspaceAction.ts Migrates subspace parameter.
libraries/rush-lib/src/cli/actions/InitDeployAction.ts Migrates deployment parameters.
libraries/rush-lib/src/cli/actions/InitAutoinstallerAction.ts Migrates autoinstaller parameter.
libraries/rush-lib/src/cli/actions/InitAction.ts Migrates initialization state and helpers.
libraries/rush-lib/src/cli/actions/DeployAction.ts Migrates deployment action state.
libraries/rush-lib/src/cli/actions/CheckAction.ts Migrates check parameters.
libraries/rush-lib/src/cli/actions/BridgePackageAction.ts Migrates bridge parameters and helper.
libraries/rush-lib/src/cli/actions/BaseRushAction.ts Migrates base action state and helpers.
libraries/rush-lib/src/cli/actions/BaseInstallAction.ts Migrates installation helpers.
libraries/rush-lib/src/cli/actions/AlertAction.ts Migrates alert parameters.
libraries/rush-lib/src/cli/actions/AddAction.ts Migrates package-add flags.
libraries/rush-lib/src/api/VersionPolicyConfiguration.ts Migrates version-policy file helpers.
libraries/rush-lib/src/api/VersionPolicy.ts Migrates version-policy internals.
libraries/rush-lib/src/api/SaveCallbackPackageJsonEditor.ts Migrates save callback.
libraries/rush-lib/src/api/RushProjectConfiguration.ts Migrates validation cache.
libraries/rush-lib/src/api/RushPluginsConfiguration.ts Migrates plugin configuration filename.
libraries/rush-lib/src/api/RushConfigurationProject.ts Migrates project state and relationship caches.
libraries/rush-lib/src/api/LastInstallFlag.ts Migrates validity-check helper.
libraries/rush-lib/src/api/EventHooks.ts Migrates event-hook map.
libraries/rush-lib/src/api/CustomTipsConfiguration.ts Migrates message-writing helper.
libraries/rush-lib/src/api/CommonVersionsConfiguration.ts Migrates common-version state and callbacks.
libraries/rush-lib/src/api/CommandLineConfiguration.ts Migrates phase translation internals.
libraries/rush-lib/src/api/CobuildConfiguration.ts Migrates cobuild provider state.
libraries/rush-lib/src/api/ChangeFile.ts Migrates change-file state and helpers.
libraries/rush-lib/src/api/ApprovedPackagesConfiguration.ts Migrates approved-package storage and helpers.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Base automatically changed from bmiddha/fix-no-new-null-native-private to main August 21, 2026 18:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Needs triage

Development

Successfully merging this pull request may close these issues.

2 participants