Missing ngtsc diagnostics for invalid inputs, outputs, queries and signal APIs
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 52/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- angular, rust, typescript
- Área
- compilers
Línea de trabajo
Start in crates/oxc_angular_compiler/src/directive/property_decorators.rs and directive/decorator.rs, then compare the corresponding ngtsc checks in shared.ts and input_output_parse_options.ts. Review initializer_api_usage_rule.ts for NG8110. Use the checklist snippets as repro cases; done means the expected diagnostics are emitted and the incorrect bindings, queries, and metadata are no longer produced.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
ngtsc 22.1.7 rejects each form below. OXC (main and #504 tip, 3e0b07f) compiles them with no diagnostic. Often the output is wrong too: a binding is dropped, duplicated, or a query is registered twice.
Each snippet uses import {Component, Directive, Input, Output, EventEmitter, ViewChild, ContentChild, input, output, viewChild, model} from '@angular/core';.
Checklist
ngtsc message is exact (codes shown as NGxxxx). The OXC column is #504 tip; main is the same.
- Decorator on a signal query.
@ViewChild('a') q = viewChild('a');
ngtsc:NG1050: Using @ViewChild with a signal-based query is not allowed.(same for@ContentChildetc.)
OXC: no error. Emits a decoratorɵɵviewQuery. -
input()/model()not used directly as a field initializer.a = input(0)!;,m = model(0)!;,a = input(0) satisfies any;,constructor() { const x = input(0); }
ngtsc:NG8110: Unsupported call to the input function. This function can only be called in the initializer of a class member.(modelgives "...the model function...")
OXC: no error. The input is silently left out ofinputs. - Signal API on a
private/#privatemember.private a = input(0);/#a = input(0);
ngtsc:NG1053: Cannot use "input" on a class member that is declared as private. Update the class field to be either: public, public readonly, protected(... declared as ES private. ...for#a)
OXC: no error.privatecompiles as a normal input.#ais silently dropped. - Signal option alias is not a string literal.
a = input(0, {alias: 1 as any});,o = output({alias: 1 as any});, andinput(0, {alias: ALIAS})withALIASimported from another file
ngtsc:NG1010: Alias needs to be a string that is statically analyzable.
OXC: no error. The alias is ignored (inputs:{a:[1,"a"]},outputs:{o:"o"}). - Two members bound to the same public name.
@Input('y') x: any; @Input() y: any;
ngtsc:NG1054: Input 'y' is bound to both 'x' and 'y'.
Same for outputs:NG1054: Output 'y' is bound to both 'x' and 'y'.
OXC: no error. Both are emitted (outputs:{x:"y",y:"y"}). - Two query decorators on one member.
@ViewChild('a') @ContentChild('b') q: any;
ngtsc:NG1006: Cannot combine multiple query decorators.
OXC: no error. Emits both acontentQueryand aviewQuerywriting toctx.q. -
@Inputtogether with a query decorator.@Input() @ViewChild('a') q: any;
ngtsc:NG1006: Cannot combine @Input decorators with query decorators
OXC: no error. Emits bothinputs:{q:"q"}and aviewQuery. - Static members.
@Input() static a: any;→NG1100: Input "a" is incorrectly declared as static member of "D".@ViewChild('a') static q: any;→NG1100: Query is incorrectly declared on a static class member.@Output() static o = new EventEmitter();→NG1100: Output is incorrectly declared on a static class member.
OXC: no error. All three are emitted as if they were instance members.
-
@Output()on a setter.@Output() set o(v: any) {}
ngtsc compiles it:outputs: { o: "o" }. With a bad argument,@Output(1 as any) set o(v: any) {}, it reportsNG1010: @Output decorator argument must resolve to a string Value is of type 'number'.
OXC: drops the output (nooutputs,{}in.d.ts) and does not check the argument. - Directive with
selector: ''.@Directive({selector: ''}) export class D {}
ngtsc:NG2004: Directive D has no selector, please add it!
OXC: no error. EmitsɵɵdefineDirective({type:D})and""as the.d.tsselector. (Components withselector: ''are tracked separately.)
Where ngtsc raises them (Angular v22.0.0 source)
packages/compiler-cli/src/ngtsc/annotations/directive/src/shared.ts: NG2004, NG1006 ×2, NG1054 ×2, NG1100 ×3, NG1050.../annotations/directive/src/initializer_function_access.ts: NG1053.../annotations/directive/src/input_output_parse_options.ts: alias NG1010.../validation/src/rules/initializer_api_usage_rule.ts: NG8110 (a source-file check, not part of the decorator handler)
On the OXC side, most belong in crates/oxc_angular_compiler/src/directive/property_decorators.rs and directive/decorator.rs.
On main?
Yes, all of them. The stack doesn't change these cases.
- Lenguaje dominante
- Rust
- Estrellas
- 232
- Forks
- 21
- Merge medio
- 1 d 23 h
- PR fusionados (30 d)
- 53
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de voidzero-dev/oxc-angular-compiler
-
fix(emit): spread arguments in calls and `new` are dropped (`f(...P)` → `f(P)`)Posiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
voidzero-dev/oxc-angular-compiler#511 ·
Los mantenedores suelen responder en 1 día
-
fix(emit): arrow functions in metadata lose default parameter values and `async`Posiblemente ocupada @Brooooooklyn la tomó hoy. Abiertobug
Dificultad 4/5 3-5 días Aptitud para principiantes 58/100
voidzero-dev/oxc-angular-compiler#512 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 3/5 1-2 días Aptitud para principiantes 78/100
voidzero-dev/oxc-angular-compiler#510 ·
Los mantenedores suelen responder en 1 día
-
fix(aot): a user binding named `i0` collides with the injected `import * as i0 from '@angular/core'`Abiertobug
Dificultad 4/5 3-5 días Aptitud para principiantes 68/100
voidzero-dev/oxc-angular-compiler#509 ·
Los mantenedores suelen responder en 1 día
-
question
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
voidzero-dev/oxc-angular-compiler#507 ·
Los mantenedores suelen responder en 1 día
Todos los issues de voidzero-dev/oxc-angular-compiler
Issues similares
-
app enhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 80/100
elodin-sys/elodin#890 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
guidance-ai/llguidance#391 ·
-
documentation
Dificultad 1/5 Menos de una hora Aptitud para principiantes 85/100
Verifiedz/Shimmer#144 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
点击设置提示`操作未能完成,详情请查看应用日志`Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
Y-ASLant/ElegantClipboard#166 ·