Skip to content

Use native private members in rush-lib - #5939

Open
Bharat Middha (bmiddha) wants to merge 4 commits into
bmiddha/fix-no-new-null-native-privatefrom
bmiddha/native-private-fields-rush-lib
Open

Use native private members in rush-lib#5939
Bharat Middha (bmiddha) wants to merge 4 commits into
bmiddha/fix-no-new-null-native-privatefrom
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
…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
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.

1 participant