feat: show import declaration span in CannotCallNamespace error#8223
Merged
graphite-app[bot] merged 1 commit intomainfrom Feb 7, 2026
Merged
Conversation
✅ Deploy Preview for rolldown-rs canceled.
|
Copilot
AI
changed the title
[WIP] Show import namespace declaration span for CannotCallNamespace error
Show import declaration span in CannotCallNamespace error
Feb 6, 2026
sapphi-red
reviewed
Feb 7, 2026
crates/rolldown/tests/esbuild/default/call_import_namespace_warning/artifacts.snap
Outdated
Show resolved
Hide resolved
sapphi-red
approved these changes
Feb 7, 2026
Contributor
There was a problem hiding this comment.
Pull request overview
Adds richer diagnostics for CannotCallNamespace warnings by showing both the call-site span and the original namespace import declaration span, improving debuggability when users accidentally call a namespace import.
Changes:
- Extend
CannotCallNamespaceto carry an additionaldeclaration_spanand render it as a second diagnostic label. - Plumb the namespace import identifier span from AST scanning (
spec.local.span()) through import analysis into the diagnostic constructor. - Update warning snapshots to reflect the new two-location output.
Reviewed changes
Copilot reviewed 6 out of 6 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| crates/rolldown_error/src/build_diagnostic/events/cannot_call_namespace.rs | Adds declaration_span and emits a second label pointing at the namespace import declaration. |
| crates/rolldown_error/src/build_diagnostic/constructors.rs | Updates cannot_call_namespace constructor signature to accept declaration_span. |
| crates/rolldown/src/ast_scanner/mod.rs | Ensures namespace import span points to the local identifier (ns) instead of the whole * as ns specifier. |
| crates/rolldown/src/ast_scanner/import_analyzer.rs | Extracts the stored import span for namespace imports and passes it into the diagnostic. |
| crates/rolldown/tests/rolldown/warnings/cannot_call_namespace/artifacts.snap | Updates snapshots to include the new import-declaration label. |
| crates/rolldown/tests/esbuild/default/call_import_namespace_warning/artifacts.snap | Updates snapshots to include the new import-declaration label. |
Contributor
Benchmarks Rust |
Member
Merge activity
|
## ✅ Completed: Show import namespace declaration span for CannotCallNamespace error
### Summary
Successfully implemented the feature to show the import namespace declaration span in the CannotCallNamespace error message. The error now displays both:
1. The location where the namespace is incorrectly called
2. The location where it was imported/declared
### Changes Made
- [x] Modified `CannotCallNamespace` struct to include `declaration_span` field
- [x] Updated the constructor in `constructors.rs` to accept the import declaration span parameter
- [x] Modified `import_analyzer.rs` to retrieve the import declaration span from `NamedImport` and pass it to the error constructor
- [x] Updated the `on_diagnostic` method to display both spans with appropriate labels
- [x] Fixed the declaration span to point only to the identifier (e.g., `ns`) instead of the entire specifier (e.g., `* as ns`)
- [x] Verified the fix works with existing tests (2 test snapshots automatically updated)
- [x] Format Rust code and pass all linting checks
- [x] All Rust tests passing (729/729 rolldown tests, 47/47 rollup tests)
### Example Output
**Before:** Only showed where the error occurred
**After:** Shows both locations with precise span:
```
[CANNOT_CALL_NAMESPACE] Warning: Cannot call a namespace ("ns").
╭─[ test-namespace-error.js:4:1 ]
│
1 │ import * as ns from './module.js'
│ ─┬
│ ╰── "ns" is imported as a namespace here
│
4 │ ns()
│ ──┬─
│ ╰─── This will cause an error at runtime because "ns" is a module namespace object and not a function. Consider changing "ns" to a default import instead.
───╯
```
### Files Changed
- `crates/rolldown/src/ast_scanner/mod.rs` - Use `spec.local.span()` instead of `spec.span` to point to just the identifier
- `crates/rolldown_error/src/build_diagnostic/events/cannot_call_namespace.rs` - Added declaration_span field and second label
- `crates/rolldown_error/src/build_diagnostic/constructors.rs` - Updated constructor signature
- `crates/rolldown/src/ast_scanner/import_analyzer.rs` - Extract and pass declaration span
- `crates/rolldown/tests/rolldown/warnings/cannot_call_namespace/artifacts.snap` - Updated snapshot
- `crates/rolldown/tests/esbuild/default/call_import_namespace_warning/artifacts.snap` - Updated snapshot
<!-- START COPILOT CODING AGENT SUFFIX -->
<!-- START COPILOT ORIGINAL PROMPT -->
<details>
<summary>Original prompt</summary>
> Show the import namespace declaration span for CannotCallNamespace error message
</details>
<!-- START COPILOT CODING AGENT TIPS -->
---
💬 We'd love your input! Share your thoughts on Copilot coding agent in our [2 minute survey](https://gh.io/copilot-coding-agent-survey).
8770001 to
a3f2b53
Compare
This was referenced Feb 11, 2026
Closed
Merged
shulaoda
added a commit
that referenced
this pull request
Feb 11, 2026
## [1.0.0-rc.4] - 2026-02-11 💡 Granular `comments` Option - New `output.comments` option provides fine-grained control over comment preservation - The `output.legalComments` option is now deprecated and use `comments.legal` instead ### 🚀 Features - rename error name to `RolldownError` from `RollupError` (#8262) by @sapphi-red - add hidden `resolve_tsconfig` function for Vite (#8257) by @sapphi-red - rust: introduce `rolldown_watcher` (#8161) by @hyf0 - unify `comments` and `legalComments` into a single granular `comments` option (#8229) by @IWANABETHATGUY - add builtin plugin for visualizing chunk graph (#8162) by @IWANABETHATGUY - show import declaration location in AssignToImport errors (#8222) by @Copilot - show import declaration span in CannotCallNamespace error (#8223) by @Copilot - emit error when plugin accidentally removes runtime module symbols (#8203) by @IWANABETHATGUY - support tsconfig loading & inputMap for `transform` (#8180) by @sapphi-red - rolldown_plugin_vite_reporter: update warning message to link to Rolldown docs (#8205) by @sapphi-red ### 🐛 Bug Fixes - avoid panic on untranspiled JSX syntax by reporting a diagnostic error (#8226) by @IWANABETHATGUY - rolldown_plugin_vite_import_glob: relax absolute path check and improve invalid glob warning (#8219) by @shulaoda - merge chunks after detect circular reference (#8154) by @IWANABETHATGUY - rust: detect runtime module side effects based on its content (#8209) by @hyf0 ### 🚜 Refactor - rename `other` to `jsdoc` in comments options (#8256) by @IWANABETHATGUY - rename chunk-visualize plugin with bundle-analyzer plugin (#8255) by @IWANABETHATGUY - remove EXPORT_UNDEFINED_VARIABLE error (#8228) by @Copilot - consolidate missing runtime symbol errors into a single diagnostic (#8220) by @IWANABETHATGUY - stabilize `parse` and `parseSync` (#8215) by @sapphi-red - return errors instead of panicking on builtin plugin conversion failure (#8217) by @shulaoda - expose `parse` / `minify` / `transform` from `rolldown/utils` (#8214) by @sapphi-red - prepare defer chunk merging (#8153) by @IWANABETHATGUY ### 📚 Documentation - remove `<script>` escape behavior difference note from `platform` option (#8253) by @sapphi-red - TypeScript & JSX support by plugins (#8183) by @sapphi-red ### 🧪 Testing - ensure runtime module is preserved even if it's not used but has side effects (#8213) by @hyf0 ### ⚙️ Miscellaneous Tasks - deps: update oxc to v0.113.0 (#8267) by @renovate[bot] - deps: update dependency oxlint-tsgolint to v0.12.0 (#8272) by @renovate[bot] - deps: update oxc apps (#8269) by @renovate[bot] - deps: update test262 submodule for tests (#8261) by @sapphi-red - deps: update crate-ci/typos action to v1.43.4 (#8260) by @renovate[bot] - deps: update dependency esbuild to v0.27.3 (#8250) by @renovate[bot] - deps: update rust crates (#8244) by @renovate[bot] - deps: update dependency semver to v7.7.4 (#8247) by @renovate[bot] - deps: update github-actions (#8243) by @renovate[bot] - deps: update npm packages (#8245) by @renovate[bot] - deps: update oxc resolver to v11.17.1 (#8240) by @renovate[bot] - deps: update rust crate oxc_sourcemap to v6.0.2 (#8241) by @renovate[bot] - rust: handle ignored `RUSTSEC-2025-0141` cargo check error (#8235) by @hyf0 - deps: update dependency oxlint-tsgolint to v0.11.5 (#8233) by @renovate[bot] - deps: update dependency rolldown-plugin-dts to ^0.22.0 (#8232) by @renovate[bot] - deps: update crate-ci/typos action to v1.43.3 (#8225) by @renovate[bot] - deps: update dependency rolldown-plugin-dts to v0.21.9 (#8224) by @renovate[bot] - deps: update crate-ci/typos action to v1.43.2 (#8212) by @renovate[bot] - remove rolldown_plugin_vite_wasm_helper (#8207) by @shulaoda - build docs for production (#8206) by @sapphi-red Co-authored-by: shulaoda <[email protected]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
✅ Completed: Show import namespace declaration span for CannotCallNamespace error
Summary
Successfully implemented the feature to show the import namespace declaration span in the CannotCallNamespace error message. The error now displays both:
Changes Made
CannotCallNamespacestruct to includedeclaration_spanfieldconstructors.rsto accept the import declaration span parameterimport_analyzer.rsto retrieve the import declaration span fromNamedImportand pass it to the error constructoron_diagnosticmethod to display both spans with appropriate labelsns) instead of the entire specifier (e.g.,* as ns)Example Output
Before: Only showed where the error occurred
After: Shows both locations with precise span:
Files Changed
crates/rolldown/src/ast_scanner/mod.rs- Usespec.local.span()instead ofspec.spanto point to just the identifiercrates/rolldown_error/src/build_diagnostic/events/cannot_call_namespace.rs- Added declaration_span field and second labelcrates/rolldown_error/src/build_diagnostic/constructors.rs- Updated constructor signaturecrates/rolldown/src/ast_scanner/import_analyzer.rs- Extract and pass declaration spancrates/rolldown/tests/rolldown/warnings/cannot_call_namespace/artifacts.snap- Updated snapshotcrates/rolldown/tests/esbuild/default/call_import_namespace_warning/artifacts.snap- Updated snapshotOriginal prompt
💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.