Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

fix(emit): spread arguments in calls and `new` are dropped (`f(...P)` → `f(P)`)

Fermée Adaptée aux débutants
#511 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

Une pull request liée a déjà été fusionnée.

  • #556 par @Brooooooklyn — fusionnée

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
85/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
angular, rust, typescript
Domaine
compilers

Piste de recherche

Lisez crates/oxc_angular_compiler/src/output/oxc_converter.rs, en vous concentrant sur convert_call_expression_with_optional et convert_new_expression ; comparez leur gestion des arguments spread avec le chemin des tableaux. Utilisez les reproductions de décorateurs fournies pour vérifier la sortie émise : les spreads dans les arguments d’appel et de new doivent rester des spreads, comme dans la sortie de ngtsc.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

bug

When decorator metadata is copied into the output, ... in call and new arguments is lost. This changes runtime behavior, not only the setClassMetadata copy. For example, providers: f(...P) is emitted as ɵɵProvidersFeature(f(P)).

Repro

import {Component} from '@angular/core';
const P: any[] = [];
function f(...a: any[]) { return a; }
class Box { constructor(...a: any[]) {} }
@Component({selector: 'c', template: '', providers: f(...P)})
export class C {}
@Component({selector: 'c2', template: '', providers: [{provide: 'T', useValue: new Box(...P)}, ...P]})
export class C2 {}

OXC (main and #504 tip)

features:[i0.ɵɵProvidersFeature(f(P))]
// setClassMetadata
args:[{selector:"c",template:"",providers:f(P)}]
// C2
i0.ɵɵProvidersFeature([{provide:"T",useValue:new Box(P)},...P])

ngtsc 22.1.7

features: [i0.ɵɵProvidersFeature(f(...P))]
args: [{ selector: 'c', template: '', providers: f(...P) }]
i0.ɵɵProvidersFeature([{ provide: 'T', useValue: new Box(...P) }, ...P])

Array spread (...P in an array) is already kept.

Where

crates/oxc_angular_compiler/src/output/oxc_converter.rs (main): convert_call_expression_with_optional and convert_new_expression turn Argument::SpreadElement into its plain argument. They should wrap it in OutputExpression::SpreadElement, as the array path does.

Also (shape only)

A member with only non-Angular decorators is left out of the setClassMetadata prop map. ngtsc lists it with an empty array:

function Foo(): PropertyDecorator { return () => {}; }
@Component({selector: 'c', template: ''})
export class C { @Foo() x: any; @Input() y: any; }
  • OXC: {y:[{type:Input}]}
  • ngtsc: { x: [], y: [{ type: Input }] }

Only the shape differs: the entry is an empty decorator list. Worth matching only if the compare suite needs it.

On main?

Yes, both.

Langage dominant
Rust
Étoiles
232
Forks
21
Merge moyen
1 j 15 h
PR mergées (30 j)
65

Préparer son environnement

Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de voidzero-dev/oxc-angular-compiler

Toutes les issues de voidzero-dev/oxc-angular-compiler

Issues similaires

Plus d'issues Rust

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.