fix(parser): improve invalid import property access diagnostic#22693
Conversation
import property access diagnostic
There was a problem hiding this comment.
Pull request overview
Updates the parser’s diagnostic for invalid import.<property> usage to reflect all supported import property-access forms (including import.source() and import.defer()), and refreshes coverage snapshots accordingly.
Changes:
- Replace the old
import.meta-only error with a newinvalid_import_propertydiagnostic that lists the allowedimport.*forms. - Update parser coverage snapshots to match the new diagnostic text.
- Add a new negative fixture covering
import.sync(...)as an invalidimportproperty access.
Reviewed changes
Copilot reviewed 2 out of 7 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| tasks/coverage/snapshots/parser_typescript.snap | Updates expected diagnostic text for invalid import.<property> cases in TypeScript coverage snapshots. |
| tasks/coverage/snapshots/parser_test262.snap | Updates expected diagnostic text for invalid import.UNKNOWN(...) Test262 cases. |
| tasks/coverage/snapshots/parser_misc.snap | Updates negative test count and adds snapshot entry for the new import.sync(...) failure fixture. |
| tasks/coverage/snapshots/parser_babel.snap | Updates expected diagnostic text for Babel fixture coverage snapshots. |
| tasks/coverage/misc/fail/import-sync-expression.js | Adds a new negative fixture to ensure invalid import.sync(...) is diagnosed correctly. |
| crates/oxc_parser/src/js/expression.rs | Switches the fatal error emitted for invalid import.<property> to the new diagnostic. |
| crates/oxc_parser/src/diagnostics.rs | Introduces invalid_import_property diagnostic message listing allowed import property-access forms. |
7f5d428 to
e968f9e
Compare
Merging this PR will not alter performance
Comparing Footnotes
|
Merge activity
|
) This improves the parser diagnostic for invalid `import.<property>` access. Previously, invalid properties like `import.sync("baz")` were reported as if only `import.meta` were valid, which is misleading now that `import.source()` and `import.defer()` are also supported. Before: ```text × The only valid meta property for import is import.meta ╭─[index.ts] 37 │ 38 │ import.foo(); ────────── 39 │ ╰──── ``` After: ```text × The only valid property accesses on import are `import.meta`, `import.source()`, and `import.defer()` ╭─[index.ts] 37 │ 38 │ import.foo(); ────────── 39 │ ╰──── ``` Also adds a coverage fixture for the `import.sync("baz")` case and updates the parser coverage snapshots.
e968f9e to
e184f74
Compare
### 🚀 Features - e857b0c napi/minify: Expose legalComments option and result (#20370) (Boshen) - 661132d parser: More friendly error messages for rest assignment target and rest binding element (#22719) (sapphi-red) - ee659b6 transformer/legacy-decorator: Add `strictNullChecks` option for nullable-union design:type (#22266) (Kyle Cannon) ### 🐛 Bug Fixes - e1d064e transformer/class-properties: Reparent lifted private method helpers (#22716) (Cameron) - 4ac0fca minifier: Preserve `0 && (module.exports = { ... })` cjs-module-lexer hint (#22729) (Dunqing) - 40ff611 minifier: Mark peephole loop changed when dropping dead-after-throw statement (#22722) (Dunqing) - 2f7b210 codegen: Emit pife-arrow/function leading comments inside the wrap (#22720) (Dunqing) - e184f74 parser: Improve invalid `import` property access diagnostic (#22693) (camc314) - 7baed9c transformer/private-method: Clear inherited strict flags (#22508) (camc314) - a9ad27e parser: Keep annotation comments leading without preceding newline (#22711) (Dunqing) - 9ea4d64 minifier: Re-evaluate pure/no-side-effects flags after peephole inlining (#22595) (Dunqing) - 07afbb6 minifier: Drop empty-body IIFE wrapper when called with arguments (#22589) (Dunqing) - fa7c463 semantic: Correct TS enum member symbol spans (#22689) (camc314) - 26b9396 semantic: Resolve parameter decorators outside parameter scope (#22623) (camc314) - b284045 parser: Switch to module goal eagerly on `export` (#22684) (Boshen) - dfa931d semantic: Propagate unresolved auto-increment enum value instead of defaulting to 0 (#22646) (Dunqing) - 69a6ba6 transformer/legacy-decorator: Emit Array for ReadonlyArray<T> in decorator metadata (#22265) (Kyle Cannon) - e421ef0 transformer/legacy-decorator: Return runtime binding for design:type (#22640) (Dunqing) - d61e1d7 codegen: Preserve verbatim text of pure/no-side-effects comments (#22525) (Dunqing) - 702b14e minifier: Preserve IIFE structure in DCE-only mode (#22547) (Dunqing) - 917da24 parser: Apply PURE comment through member-access chains (#22566) (Dunqing) - a069b1c codegen: Preserve quotes for cjs-module-lexer equality strings (#22551) (Dunqing) ### ⚡ Performance - 2f623b0 semantic: Skip unresolved checks for re-exports (#22660) (camc314) - 0d9553d semantic: Early-exit `check_object_expression` for objects with <2 properties (#22668) (Dunqing) - d721ad9 semantic: Use direct grandparent lookup for TS type parameters (#22658) (camc314) - 0aff288 semantic: Reorder numeric literal strict mode checks (#22657) (camc314) - 4d5ddb1 semantic: Reorder binding identifier checks (#22656) (camc314) - e32acd8 semantic: Reorder identifier ambient binding check (#22653) (camc314) - 09fe178 semantic: Reorder ident reference strict mode check (#22652) (camc314) - 4b6add2 semantic: Avoid duplicate ident clone for bindings (#22663) (camc314) - 82f9662 parser: Check identifier kind before context flag (#22662) (camc314) - d7cd951 parser: Fast path identifier parsing and inline operator helpers (#22650) (Boshen) - 7b84314 semantic: Use direct byte access for numeric leading-zero check (#22642) (camc314) - 0345a31 semantic: Pre-size class elements hash map (#22618) (camc314) - 04d3065 minifier: Drop per-call buffers in try_fold_concat (#22596) (Dunqing) - 4f289f1 semantic: Resolve_references_for_current_scope without a temp Vec (#22599) (Dunqing) - e862c15 semantic: Avoid heap alloc for var hoist scope ids (#22603) (Dunqing) - 8ff8674 semantic: Early return if `excess` is `0` in `Stats::increase_by` (#22616) (camc314) - 7a4120e semantic: Pre-reserve unresolved_references using Stats::references (#22580) (Dunqing) Co-authored-by: Dunqing <[email protected]>
This improves the parser diagnostic for invalid
import.<property>access.Previously, invalid properties like
import.sync("baz")were reported as if onlyimport.metawere valid, which is misleading now thatimport.source()andimport.defer()are also supported.Before:
After:
Also adds a coverage fixture for the
import.sync("baz")case and updates the parser coverage snapshots.