Missing ngtsc diagnostics for invalid inputs, outputs, queries and signal APIs
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 52/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- angular, rust, typescript
- Ambito
- compilers
Direzione di ricerca
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.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
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.
- Lingua principale
- Rust
- Stelle
- 232
- Fork
- 21
- Merge medio
- 1g 23h
- PR unite (30g)
- 53
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di voidzero-dev/oxc-angular-compiler
-
fix(emit): spread arguments in calls and `new` are dropped (`f(...P)` → `f(P)`)Forse già presa Una pull request collegata a questa issue è aperta o già unita. Apertabug
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
voidzero-dev/oxc-angular-compiler#511 ·
I maintainer di solito rispondono entro 1 giorno
-
fix(emit): arrow functions in metadata lose default parameter values and `async`Forse già presa @Brooooooklyn l’ha presa oggi. Apertabug
Difficoltà 4/5 3-5 giorni Idoneità per principianti 58/100
voidzero-dev/oxc-angular-compiler#512 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 3/5 1-2 giorni Idoneità per principianti 78/100
voidzero-dev/oxc-angular-compiler#510 ·
I maintainer di solito rispondono entro 1 giorno
-
fix(aot): a user binding named `i0` collides with the injected `import * as i0 from '@angular/core'`Apertabug
Difficoltà 4/5 3-5 giorni Idoneità per principianti 68/100
voidzero-dev/oxc-angular-compiler#509 ·
I maintainer di solito rispondono entro 1 giorno
-
question
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
voidzero-dev/oxc-angular-compiler#507 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di voidzero-dev/oxc-angular-compiler
Issue simili
-
app enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 80/100
elodin-sys/elodin#890 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
guidance-ai/llguidance#391 ·
-
documentation
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 85/100
Verifiedz/Shimmer#144 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
点击设置提示`操作未能完成,详情请查看应用日志`Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
Y-ASLant/ElegantClipboard#166 ·