Skip to content

Fix syntax contexts in server action transform#91210

Merged
mischnic merged 1 commit intocanaryfrom
mischnic/fix-server-action-syntax-context
Mar 11, 2026
Merged

Fix syntax contexts in server action transform#91210
mischnic merged 1 commit intocanaryfrom
mischnic/fix-server-action-syntax-context

Conversation

@mischnic
Copy link
Member

@mischnic mischnic commented Mar 11, 2026

let x: Ident = IdentName::new(name, span).into();

should never be done. It uses SyntaxContext::default() for the Ident. So from swc's perspective, you are referring to a different variable than you think. When constructing an Ident, you should usually always provide a SyntaxContext.

I think this would pose a problem in Webpack because it serializes it into a code string again, but for Turbopack these SyntaxContext are important.

@nextjs-bot nextjs-bot added created-by: Turbopack team PRs by the Turbopack team. Turbopack Related to Turbopack with Next.js. labels Mar 11, 2026
Copy link
Member Author

mischnic commented Mar 11, 2026

@mischnic mischnic marked this pull request as ready for review March 11, 2026 17:13
@mischnic mischnic changed the title server actions: fix syntax contexts Fix syntax contexts in server action transform. Mar 11, 2026
@mischnic mischnic changed the title Fix syntax contexts in server action transform. Fix syntax contexts in server action transform Mar 11, 2026
@mischnic mischnic requested review from a team and unstubbable March 11, 2026 17:14
@nextjs-bot
Copy link
Collaborator

nextjs-bot commented Mar 11, 2026

Failing test suites

Commit: 8f9f1a8 | About building and testing Next.js

pnpm test-start test/e2e/app-dir/next-after-app-static/build-time/build-time.test.ts (job)

  • after() in static pages > runs after during build (DD)
Expand output

● after() in static pages › runs after during build

can not run export while server is running, use next.stop() first

  251 |   ) {
  252 |     if (this.childProcess) {
> 253 |       throw new Error(
      |             ^
  254 |         `can not run export while server is running, use next.stop() first`
  255 |       )
  256 |     }

  at NextStartInstance.build (lib/next-modes/next-start.ts:253:13)
  at Object.build (e2e/app-dir/next-after-app-static/build-time/build-time.test.ts:36:36)

@codspeed-hq
Copy link

codspeed-hq bot commented Mar 11, 2026

Merging this PR will improve performance by 3.02%

⚡ 1 improved benchmark
✅ 16 untouched benchmarks
⏩ 3 skipped benchmarks1

Performance Changes

Mode Benchmark BASE HEAD Efficiency
Simulation packages-bundle.js[full] 1.2 s 1.2 s +3.02%

Comparing mischnic/fix-server-action-syntax-context (8f9f1a8) with canary (29812f2)

Open in CodSpeed

Footnotes

  1. 3 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports.

@nextjs-bot
Copy link
Collaborator

nextjs-bot commented Mar 11, 2026

Stats from current PR

✅ No significant changes detected

📊 All Metrics
📖 Metrics Glossary

Dev Server Metrics:

  • Listen = TCP port starts accepting connections
  • First Request = HTTP server returns successful response
  • Cold = Fresh build (no cache)
  • Warm = With cached build artifacts

Build Metrics:

  • Fresh = Clean build (no .next directory)
  • Cached = With existing .next directory

Change Thresholds:

  • Time: Changes < 50ms AND < 10%, OR < 2% are insignificant
  • Size: Changes < 1KB AND < 1% are insignificant
  • All other changes are flagged to catch regressions

⚡ Dev Server

Metric Canary PR Change Trend
Cold (Listen) 914ms 915ms █▁▁▁█
Cold (Ready in log) 904ms 910ms ▅▆██▃
Cold (First Request) 1.672s 1.638s ▃███▁
Warm (Listen) 965ms 962ms █▁▁▁▁
Warm (Ready in log) 927ms 927ms ▇▁▂▂▅
Warm (First Request) 707ms 705ms ▆▄▂▇▅
📦 Dev Server (Webpack) (Legacy)

📦 Dev Server (Webpack)

Metric Canary PR Change Trend
Cold (Listen) 456ms 455ms ▁▁▁▁▁
Cold (Ready in log) 434ms 435ms ▃▃▁▃▁
Cold (First Request) 1.875s 1.844s ▂▂▁▂▁
Warm (Listen) 456ms 456ms ▁▁▁▁▁
Warm (Ready in log) 435ms 435ms ▄▃▁▃▁
Warm (First Request) 1.844s 1.860s ▂▂▁▂▁

⚡ Production Builds

Metric Canary PR Change Trend
Fresh Build 6.367s 6.516s ▇▁▁▁▂
Cached Build 6.377s 6.433s ▇▁▁▁▃
📦 Production Builds (Webpack) (Legacy)

📦 Production Builds (Webpack)

Metric Canary PR Change Trend
Fresh Build 13.981s 13.915s ▁▁▁▁▁
Cached Build 14.192s 14.127s ▁▁▁▁▁
node_modules Size 477 MB 477 MB ▁▁▁▁▁
📦 Bundle Sizes

Bundle Sizes

⚡ Turbopack

Client

Main Bundles: **402 kB** → **402 kB** ✅ -25 B

80 files with content-based hashes (individual files not comparable between builds)

Server

Middleware
Canary PR Change
middleware-b..fest.js gzip 770 B 764 B
Total 770 B 764 B ✅ -6 B
Build Details
Build Manifests
Canary PR Change
_buildManifest.js gzip 450 B 451 B
Total 450 B 451 B ⚠️ +1 B

📦 Webpack

Client

Main Bundles
Canary PR Change
5528-HASH.js gzip 5.54 kB N/A -
6280-HASH.js gzip 59.6 kB N/A -
6335.HASH.js gzip 169 B N/A -
912-HASH.js gzip 4.59 kB N/A -
e8aec2e4-HASH.js gzip 62.6 kB N/A -
framework-HASH.js gzip 59.7 kB 59.7 kB
main-app-HASH.js gzip 255 B 252 B 🟢 3 B (-1%)
main-HASH.js gzip 39.2 kB 39.2 kB
webpack-HASH.js gzip 1.68 kB 1.68 kB
262-HASH.js gzip N/A 4.59 kB -
2889.HASH.js gzip N/A 169 B -
5602-HASH.js gzip N/A 5.55 kB -
6948ada0-HASH.js gzip N/A 62.6 kB -
9544-HASH.js gzip N/A 60.3 kB -
Total 233 kB 234 kB ⚠️ +731 B
Polyfills
Canary PR Change
polyfills-HASH.js gzip 39.4 kB 39.4 kB
Total 39.4 kB 39.4 kB
Pages
Canary PR Change
_app-HASH.js gzip 194 B 194 B
_error-HASH.js gzip 183 B 180 B 🟢 3 B (-2%)
css-HASH.js gzip 331 B 330 B
dynamic-HASH.js gzip 1.81 kB 1.81 kB
edge-ssr-HASH.js gzip 256 B 256 B
head-HASH.js gzip 351 B 352 B
hooks-HASH.js gzip 384 B 383 B
image-HASH.js gzip 580 B 581 B
index-HASH.js gzip 260 B 260 B
link-HASH.js gzip 2.51 kB 2.51 kB
routerDirect..HASH.js gzip 320 B 319 B
script-HASH.js gzip 386 B 386 B
withRouter-HASH.js gzip 315 B 315 B
1afbb74e6ecf..834.css gzip 106 B 106 B
Total 7.98 kB 7.98 kB ✅ -1 B

Server

Edge SSR
Canary PR Change
edge-ssr.js gzip 125 kB 125 kB
page.js gzip 257 kB 257 kB
Total 382 kB 382 kB ⚠️ +403 B
Middleware
Canary PR Change
middleware-b..fest.js gzip 618 B 616 B
middleware-r..fest.js gzip 156 B 155 B
middleware.js gzip 43.8 kB 43.9 kB
edge-runtime..pack.js gzip 842 B 842 B
Total 45.4 kB 45.5 kB ⚠️ +91 B
Build Details
Build Manifests
Canary PR Change
_buildManifest.js gzip 715 B 718 B
Total 715 B 718 B ⚠️ +3 B
Build Cache
Canary PR Change
0.pack gzip 4.07 MB 4.08 MB
index.pack gzip 103 kB 102 kB
index.pack.old gzip 104 kB 104 kB
Total 4.28 MB 4.28 MB ⚠️ +2.29 kB

🔄 Shared (bundler-independent)

Runtimes
Canary PR Change
app-page-exp...dev.js gzip 323 kB 323 kB
app-page-exp..prod.js gzip 171 kB 171 kB
app-page-tur...dev.js gzip 322 kB 322 kB
app-page-tur..prod.js gzip 171 kB 171 kB
app-page-tur...dev.js gzip 319 kB 319 kB
app-page-tur..prod.js gzip 169 kB 169 kB
app-page.run...dev.js gzip 319 kB 319 kB
app-page.run..prod.js gzip 170 kB 170 kB
app-route-ex...dev.js gzip 70.9 kB 70.9 kB
app-route-ex..prod.js gzip 49.3 kB 49.3 kB
app-route-tu...dev.js gzip 70.9 kB 70.9 kB
app-route-tu..prod.js gzip 49.3 kB 49.3 kB
app-route-tu...dev.js gzip 70.5 kB 70.5 kB
app-route-tu..prod.js gzip 49.1 kB 49.1 kB
app-route.ru...dev.js gzip 70.5 kB 70.5 kB
app-route.ru..prod.js gzip 49 kB 49 kB
dist_client_...dev.js gzip 324 B 324 B
dist_client_...dev.js gzip 326 B 326 B
dist_client_...dev.js gzip 318 B 318 B
dist_client_...dev.js gzip 317 B 317 B
pages-api-tu...dev.js gzip 43.3 kB 43.3 kB
pages-api-tu..prod.js gzip 32.9 kB 32.9 kB
pages-api.ru...dev.js gzip 43.2 kB 43.2 kB
pages-api.ru..prod.js gzip 32.9 kB 32.9 kB
pages-turbo....dev.js gzip 52.6 kB 52.6 kB
pages-turbo...prod.js gzip 38.5 kB 38.5 kB
pages.runtim...dev.js gzip 52.6 kB 52.6 kB
pages.runtim..prod.js gzip 38.5 kB 38.5 kB
server.runti..prod.js gzip 62 kB 62 kB
Total 2.84 MB 2.84 MB ⚠️ +1 B
📎 Tarball URL
https://vercel-packages.vercel.app/next/commits/8f9f1a8dc0abecf0f0f77a7375162c3b539cbdbf/next

@mischnic mischnic force-pushed the mischnic/fix-server-action-syntax-context branch from d12749b to 8f9f1a8 Compare March 11, 2026 18:32
Copy link
Contributor

@unstubbable unstubbable left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ACK

@mischnic mischnic merged commit 196ed2b into canary Mar 11, 2026
286 of 288 checks passed
@mischnic mischnic deleted the mischnic/fix-server-action-syntax-context branch March 11, 2026 21:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

created-by: Turbopack team PRs by the Turbopack team. Turbopack Related to Turbopack with Next.js.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants