partial: host binding map keys are not always quoted like ngtsc (`click:` vs `"click":`)

未關閉 適合新手
#686 0 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視

維護者通常 1 天內回覆

還沒有人認領這個 Issue。

評估

難度
2/5
預估耗時
1-3 小時
新手友好度
76/100
Issue 類型
缺陷
描述清晰度
描述清楚
活躍度
活躍
技術堆疊
angular, rust
領域
compilers, testing

研究方向

從 partial/directive.rs 和 partial/component.rs 著手,特別關注 is_unsafe_object_key,並將它們對 host binding 鍵的處理方式與 issue 中描述的 ngtsc 行為進行比較。接著更新 partial_directive_test.rs 和 partial_component_test.rs 中的預期結果;當簡單的 host binding 鍵在 partial 輸出中加上引號,且測試也反映這一點時,工作就完成了。

由索引模型根據 Issue 內容生成。

描述

Found while reviewing #682. Text-only difference: both linkers read the result the same way.

Angular (compileHostMetadata → toOptionalLiteralMap, compiler.mjs:28098) sets quoted: true on every key of host.attributes / listeners / properties.

Oxc (partial/directive.rs / partial/component.rs, is_unsafe_object_key) only quotes keys with . or -, or keys the emitter finds are not identifiers.

@Directive({ selector: '[d]', host: { '(click)': 'a()', '[disabled]': 'b', 'role': 'x' } })
export class D {}
compilationMode: 'partial' output
ngtsc 22.2.2 host: { attributes: { "role": "x" }, listeners: { "click": "a()" }, properties: { "disabled": "b" } }
Oxc host:{attributes:{role:"x"},listeners:{click:"a()"},properties:{disabled:"b"}}

Impact: a byte-for-byte diff against ngtsc output (parity tests, fuzz diffing) flags every directive with a simple host binding. The tests in partial_directive_test.rs / partial_component_test.rs pin the unquoted form, so they would change with a fix.

主要語言
Rust
星號
245
分支
26
平均合併
1 天 42 分鐘
30 天內合併 PR
83

環境準備

這個專案沒有提供開發容器、Dockerfile 或貢獻指南,環境需要你自己搭建:先看它的 README,通用步驟見我們的新手貢獻指南。

從這裡開始

  1. 先讀完整個 Issue,再讀專案的貢獻指南。
  2. 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
  3. Fork 儲存庫,在一個分支上完成修改。
  4. 送出 Pull Request,並在描述裡引用這個 Issue 編號。

voidzero-dev/oxc-angular-compiler 的其他 Issue

查看 voidzero-dev/oxc-angular-compiler 的全部 Issue

相似的 Issue

更多 Rust Issue

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。