Skip to content

Fix using declarations when Symbol is shadowed#63541

Open
xsourabhsharma wants to merge 1 commit into
microsoft:mainfrom
xsourabhsharma:fix-using-symbol-shadow
Open

Fix using declarations when Symbol is shadowed#63541
xsourabhsharma wants to merge 1 commit into
microsoft:mainfrom
xsourabhsharma:fix-using-symbol-shadow

Conversation

@xsourabhsharma
Copy link
Copy Markdown

Fixes #63522

This updates the disposable resource emit helper to resolve disposable symbols through globalThis.Symbol, so local declarations named Symbol do not shadow the global Symbol constructor used by using and await using emit.

A regression test covers both using and await using when a module exports a class named Symbol.

Tests run:

  • npx hereby runtests --tests=usingDeclarationsShadowedGlobalSymbol
  • npx hereby runtests --tests=usingDeclarations
  • npx hereby runtests-parallel

Copilot AI review requested due to automatic review settings June 6, 2026 04:28
@github-project-automation github-project-automation Bot moved this to Not started in PR Backlog Jun 6, 2026
@typescript-bot typescript-bot added For Backlog Bug PRs that fix a backlog bug labels Jun 6, 2026
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Note

Copilot was unable to run its full agentic suite in this review.

Adds coverage and updates the __addDisposableResource emit helper to correctly reference the global Symbol when a local Symbol binding shadows it.

Changes:

  • Add a new conformance test for using/await using when Symbol is shadowed in user code.
  • Update the emitted __addDisposableResource helper to read Symbol from globalThis and guard against missing globals.
  • Refresh affected test baselines to match the updated helper text.

Reviewed changes

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

Show a summary per file
File Description
tests/cases/conformance/statements/VariableStatements/usingDeclarations/usingDeclarationsShadowedGlobalSymbol.ts New test ensuring disposal symbols are taken from globalThis.Symbol even if Symbol is shadowed.
tests/baselines/reference/usingDeclarationsShadowedGlobalSymbol.js New baseline for the added conformance test.
tests/baselines/reference/usingDeclarationsNamedEvaluationDecoratorsAndClassFields.js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/usingDeclarationsInForOf.1(target=es5).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/usingDeclarationsInForOf.1(target=es2022).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/usingDeclarationsInForOf.1(target=es2017).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/usingDeclarationsInForOf.1(target=es2015).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/usingDeclarationsInForAwaitOf(target=es5).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/usingDeclarationsInForAwaitOf(target=es2022).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/usingDeclarationsInForAwaitOf(target=es2017).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/usingDeclarationsInForAwaitOf(target=es2015).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/usingDeclarationsInFor(target=es5).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/usingDeclarationsInFor(target=es2022).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/usingDeclarationsInFor(target=es2017).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/usingDeclarationsInFor(target=es2015).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/usingDeclarations.3(target=es5).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/usingDeclarations.3(target=es2022).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/usingDeclarations.3(target=es2017).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/usingDeclarations.3(target=es2015).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/usingDeclarations.2(target=es5).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/usingDeclarations.2(target=es2022).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/usingDeclarations.2(target=es2017).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/usingDeclarations.2(target=es2015).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/usingDeclarations.12(usedefineforclassfields=true).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/usingDeclarations.12(usedefineforclassfields=false).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/usingDeclarations.11(target=es5).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/usingDeclarations.11(target=es2015).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/usingDeclarations.1(target=es5).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/usingDeclarations.1(target=es2022).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/usingDeclarations.1(target=es2017).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/usingDeclarations.1(target=es2015).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/transpile/jsWithSourceMapBasic(sourceMap=true).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/transpile/jsWithSourceMapBasic(sourceMap=false).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/transpile/jsWithInlineSourceMapBasic(inlineSourceMap=true).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/transpile/jsWithInlineSourceMapBasic(inlineSourceMap=false).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/transpile/declarationBasicSyntax(declarationMap=true).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/transpile/declarationBasicSyntax(declarationMap=false).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/awaitUsingDeclarationsInForOf.5(target=es5).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/awaitUsingDeclarationsInForOf.1(target=es5).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/awaitUsingDeclarationsInForOf.1(target=es2022).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/awaitUsingDeclarationsInForOf.1(target=es2017).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/awaitUsingDeclarationsInForOf.1(target=es2015).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/awaitUsingDeclarationsInForAwaitOf.3(target=es5).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/awaitUsingDeclarationsInForAwaitOf(target=es5).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/awaitUsingDeclarationsInForAwaitOf(target=es2022).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/awaitUsingDeclarationsInForAwaitOf(target=es2017).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/awaitUsingDeclarationsInForAwaitOf(target=es2015).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/awaitUsingDeclarationsInFor(target=es5).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/awaitUsingDeclarationsInFor(target=es2022).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/awaitUsingDeclarationsInFor(target=es2017).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/awaitUsingDeclarationsInFor(target=es2015).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/awaitUsingDeclarations.3(target=es5).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/awaitUsingDeclarations.3(target=es2022).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/awaitUsingDeclarations.3(target=es2017).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/awaitUsingDeclarations.3(target=es2015).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/awaitUsingDeclarations.2(target=es5).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/awaitUsingDeclarations.2(target=es2022).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/awaitUsingDeclarations.2(target=es2017).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/awaitUsingDeclarations.2(target=es2015).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/awaitUsingDeclarations.1(target=es5).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/awaitUsingDeclarations.1(target=es2022).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/awaitUsingDeclarations.1(target=es2017).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
tests/baselines/reference/awaitUsingDeclarations.1(target=es2015).js Baseline update reflecting new __addDisposableResource global Symbol lookup and guards.
src/compiler/factory/emitHelpers.ts Updates __addDisposableResource helper emit to reference globalThis.Symbol and handle missing globals safely.

@xsourabhsharma
Copy link
Copy Markdown
Author

@microsoft-github-policy-service agree

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

For Backlog Bug PRs that fix a backlog bug

Projects

Status: Not started

Development

Successfully merging this pull request may close these issues.

Declarations that shadow global Symbol break emit for using declarations

3 participants