microsoft / microsoft/TypeScript

[TypeScript] Rename Symbol doesn't work as expected with Declaration Merging

Abierto
#62,065 7 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Needs Investigation
Lenguaje dominante
Go
Estrellas
111k
Forks
14.3k
Merge medio
2 d 4 h
PR fusionados (30 d)
132

Descripción

Type: Bug

Does this issue occur when all extensions are disabled?: Yes

When renaming symbols in TypeScript, the feature doesn't take into account declaration merging. As a result, renaming symbols breaks references. Renaming the subsequent symbols to match does not fix the references. Whether the imports are explicit or default seems to have no effect.

Steps to Reproduce:

1. Create a class and a namespace with the same name, export them
2. Import the merged symbol in another file, use references to both the class and namespace
3. Attempt to rename the original class & namespace without breaking the references

```typescript
// file: MyWonderfulClass.class.ts
export class MyWonderfulClass {
// Absolutely wonderful things
}

export namespace MyWonderfulClass {
export interface MyWonderfulClassType {}
}

export default MyWonderfulClass;

```

```typescript
// file: script.ts
import MyWonderfulClass from "./MyWonderfulClass.class";

const inst = new MyWonderfulClass();
const obj: MyWonderfulClass.MyWonderfulClassType = {};

```

VS Code version: Code 1.102.0 (cb0c47c0cfaad0757385834bd89d410c78a856c0, 2025-07-09T22:10:34.600Z)
OS version: Windows_NT x64 10.0.26100
Modes:
Remote OS version: Linux x64 6.6.87.2-microsoft-standard-WSL2

System Info

|Item|Value|
|---|---|
|CPUs|13th Gen Intel(R) Core(TM) i9-13900K (32 x 2995)|
|GPU Status|2d_canvas: enabled
canvas_oop_rasterization: enabled_on
direct_rendering_display_compositor: disabled_off_ok
gpu_compositing: enabled
multiple_raster_threads: enabled_on
opengl: enabled_on
rasterization: enabled
raw_draw: disabled_off_ok
skia_graphite: disabled_off
video_decode: enabled
video_encode: enabled
vulkan: disabled_off
webgl: enabled
webgl2: enabled
webgpu: enabled
webnn: disabled_off|
|Load (avg)|undefined|
|Memory (System)|63.72GB (42.33GB free)|
|Process Argv|--crash-reporter-id cbb68604-7b21-4289-9c14-7e1fc2a74fab|
|Screen Reader|no|
|VM|0%|

|Item|Value|
|---|---|
|Remote|WSL: Ubuntu|
|OS|Linux x64 6.6.87.2-microsoft-standard-WSL2|
|CPUs|13th Gen Intel(R) Core(TM) i9-13900K (32 x 0)|
|Memory (System)|31.20GB (29.24GB free)|
|VM|0%|
Extensions (35)

Extension|Author (truncated)|Version
---|---|---
vscode-tailwindcss|bra|0.14.25
vscode-modelines|chr|2.0.6
vscode-css-modules|cli|0.5.4
vscode-eslint|dba|3.0.10
es7-react-js-snippets|dsz|4.4.3
gitlens|eam|17.3.0
vscode-html-css|ecm|2.0.13
vscode-great-icons|emm|2.1.119
php-intellisense|fel|2.3.14
vscode-firefox-debug|fir|2.15.0
auto-rename-tag|for|0.1.10
vscode-github-actions|git|0.27.2
go|gol|0.48.0
todo-tree|Gru|0.0.226
beautify|Hoo|1.5.0
rest-client|hum|0.25.1
git-graph|mhu|1.30.0
vscode-containers|ms-|2.0.3
vscode-docker|ms-|2.0.0
vscode-edge-devtools|ms-|2.1.9
remote-containers|ms-|0.422.0
remote-ssh|ms-|0.120.0
remote-ssh-edit|ms-|0.87.0
remote-wsl|ms-|0.99.0
vscode-remote-extensionpack|ms-|0.26.0
cpptools|ms-|1.26.3
powershell|ms-|2025.2.0
remote-explorer|ms-|0.5.0
remote-server|ms-|1.5.2
prisma|Pri|6.11.1
perl|ric|2.6.2
vscode-icons|vsc|12.13.0
vscode-nginx|wil|0.7.2
php-pack|xde|1.0.3
html-css-class-completion|Zig|1.20.0

A/B Experiments

```
vsliv368:30146709
vspor879:30202332
vspor708:30202333
vspor363:30204092
vscod805:30301674
binariesv615:30325510
vsaa593cf:30376535
py29gd2263:31024239
vscaat:30438848
c4g48928:30535728
azure-dev_surveyone:30548225
vscrp:30673768
962ge761:30959799
pythongtdpath:30769146
welcomedialog:30910333
pythonnoceb:30805159
asynctok:30898717
pythonmypyd1:30879173
h48ei257:31000450
pythontbext0:30879054
accentitlementsc:30995553
dsvsc016:30899300
dsvsc017:30899301
dsvsc018:30899302
cppperfnew:31000557
dsvsc020:30976470
pythonait:31006305
dsvsc021:30996838
945dj816:31013170
a69g1124:31058053
dvdeprecation:31068756
dwnewjupytercf:31046870
newcmakeconfigv2:31071590
impr_priority:31102340
nativerepl2:31139839
refactort:31108082
pythonrstrctxt:31112756
flightc:31134773
wkspc-onlycs-t:31132770
wkspc-ranged-c:31125598
fje88620:31121564
notype1:31143045
cc771715:31140165

```

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Reproduce el problema usando MyWonderfulClass.class.ts y script.ts, siguiendo los tres pasos de combinación de declaraciones indicados en el informe. Después, sigue el punto de entrada de Rename Symbol para este caso y verifica que las referencias tanto a la clase como al namespace sigan siendo válidas después de cambiar el nombre; el issue estará resuelto cuando la instancia importada y las referencias a MyWonderfulClass.MyWonderfulClassType sigan resolviéndose.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
typescript
Área
tooling
Tipo de issue
Error
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
45/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.