Skip to content

[python-analysis] Initial Rust infrastructure for semantic analysis#14690

Merged
elprans merged 1 commit intomainfrom
elprans/python-analysis-rust
Feb 2, 2026
Merged

[python-analysis] Initial Rust infrastructure for semantic analysis#14690
elprans merged 1 commit intomainfrom
elprans/python-analysis-rust

Conversation

@elprans
Copy link
Contributor

@elprans elprans commented Jan 21, 2026

This brings in the Rust infrastructure for semantic analysis of Python
source code. Rust is chosen because there is a large body of
high-performance high-quality work done on Python analysis by folks at
Astral (ruff and ty). An alternative would be to use Python-based infra
(i.e using stdlib parsers, mypy etc), but that would be considerably
slower and would tie us to a specific Python toolchain.

The Rust analysis crate is exposed as a WebAssembly component [1].
Speficially, we use wit-bindgen to export things from Rust and
jco-transpile to bridge them to JS/TS.

As a proof of concept, the current app/handler entrypoint detection from
build-utils is reimplemented here in Rust.

Naturally, we now requires a working Rust toolchain (minimum 1.90 with
wasm32-wasip2 target available) to build the python-analysis package.

[1] https://component-model.bytecodealliance.org/

@elprans elprans requested review from a team and ijjk as code owners January 21, 2026 19:29
@elprans elprans requested a review from a team January 21, 2026 19:29
@changeset-bot
Copy link

changeset-bot bot commented Jan 21, 2026

🦋 Changeset detected

Latest commit: be54f29

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
@vercel/python-analysis Minor

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@socket-security
Copy link

socket-security bot commented Jan 21, 2026

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Addednpm/​@​bytecodealliance/​jco-transpile@​0.1.17910010095100
Addedcargo/​wit-bindgen@​0.51.08010093100100
Addedcargo/​wit-bindgen-rust@​0.51.08110093100100
Addednpm/​@​bytecodealliance/​preview2-shim@​0.17.61001009290100

View full report

@github-actions
Copy link
Contributor

github-actions bot commented Jan 30, 2026

📦 CLI Tarball Ready

The Vercel CLI tarball for this PR is now available!

Quick Test

You can test this PR's CLI directly by running:

npx https://vercel-ppdx842ox.vercel.sh/tarballs/vercel.tgz --help

Use in vercel.json

To use this CLI version in your project builds, add to your vercel.json:

{
  "build": {
    "env": {
      "VERCEL_CLI_VERSION": "vercel@https://vercel-ppdx842ox.vercel.sh/tarballs/vercel.tgz"
    }
  }
}

@github-actions
Copy link
Contributor

github-actions bot commented Jan 30, 2026

🧪 Unit Test Strategy

Comparing: 22e856fbe54f29 (view diff)

Strategy: Code changed outside of a package - running all unit tests

⚠️ All unit tests will run because global code changes could impact all packages.

Affected packages - 41 (100%)
  1. @vercel-internals/get-package-json
  2. @vercel/backends
  3. @vercel/build-utils
  4. @vercel/cervel
  5. @vercel/cli-auth
  6. @vercel/client
  7. @vercel/config
  8. @vercel/detect-agent
  9. @vercel/edge
  10. @vercel/elysia
  11. @vercel/error-utils
  12. @vercel/express
  13. @vercel/fastify
  14. @vercel/firewall
  15. @vercel/frameworks
  16. @vercel/fs-detectors
  17. @vercel/functions
  18. @vercel/gatsby-plugin-vercel-builder
  19. @vercel/go
  20. @vercel/h3
  21. @vercel/hono
  22. @vercel/hydrogen
  23. @vercel/introspection
  24. @vercel/koa
  25. @vercel/nestjs
  26. @vercel/next
  27. @vercel/node
  28. @vercel/oidc
  29. @vercel/oidc-aws-credentials-provider
  30. @vercel/python
  31. @vercel/python-analysis
  32. @vercel/redwood
  33. @vercel/related-projects
  34. @vercel/remix-builder
  35. @vercel/routing-utils
  36. @vercel/ruby
  37. @vercel/rust
  38. @vercel/static-build
  39. @vercel/static-config
  40. examples
  41. vercel

Results

  • Unit tests: All affected packages will run unit tests
  • E2E tests: Handled separately (Version Packages PRs or run-e2e-tests label)
  • Type checks: All affected packages will run type checks

This comment is automatically generated based on the affected testing strategy

This brings in the Rust infrastructure for semantic analysis of Python
source code.  Rust is chosen because there is a large body of
high-performance high-quality work done on Python analysis by folks at
Astral (ruff and ty).  An alternative would be to use Python-based infra
(i.e using stdlib parsers, mypy etc), but that would be considerably
slower and would tie us to a specific Python toolchain.

The Rust analysis crate is exposed as a WebAssembly component [1].
Speficially, we use `wit-bindgen` to export things from Rust and
`jco-transpile` to bridge them to JS/TS.

As a proof of concept, the current app/handler entrypoint detection from
`build-utils` is reimplemented here in Rust.

Naturally, we now requires a working Rust toolchain (minimum 1.90 with
`wasm32-wasip2` target available) to build the `python-analysis` package.

[1] https://component-model.bytecodealliance.org/
@elprans elprans force-pushed the elprans/python-analysis-rust branch from 7ea0bfd to be54f29 Compare February 1, 2026 21:56
@elprans elprans merged commit a909ba1 into main Feb 2, 2026
147 checks passed
@elprans elprans deleted the elprans/python-analysis-rust branch February 2, 2026 15:36
jeffsee55 pushed a commit that referenced this pull request Feb 3, 2026
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to main, this PR will
be updated.


# Releases
## vercel@50.10.0

### Minor Changes

- feat(cli): Add webhooks command for managing webhooks
([#14789](#14789))

Adds a new `webhooks` command to the Vercel CLI with the following
subcommands:

- `webhooks ls` - List all webhooks with optional `--format json` output
- `webhooks get <id>` - Get details of a specific webhook with optional
`--format json` output
- `webhooks create <url> --event <event>` - Create a new webhook with
specified events
- `webhooks rm <id>` - Remove a webhook with `--yes` flag to skip
confirmation

Webhook event types are fetched dynamically from the OpenAPI spec to
stay in sync with the API.

- Added experimental services support in the CLI new project flow. When
`VERCEL_USE_EXPERIMENTAL_SERVICES=1` is set and a project's
`vercel.json` contains `experimentalServices`, the CLI will detect and
display the configured services during project setup, automatically
selecting the "services" framework preset.
([#14776](#14776))

### Patch Changes

- Improve logsv2 command output format with compact single-line display,
text-based level labels, dynamic column widths, and smart date display
([#14767](#14767))

- Skip update check when running on Vercel to prevent unnecessary worker
spawning in build container
([#14794](#14794))

- fix --help exit codes for marketplace commands
([#14834](#14834))

- Updated dependencies
\[[`687f73cebb6ae1cdd7c7feb0910967de99a17ad6`](687f73c),
[`e7c5d5fd41e124ef7314978b351696d130e89917`](e7c5d5f),
[`c3104a1ae9dbf9048e08bb2fa85605a95b254876`](c3104a1),
[`b029736b4be8dac135bef77283f47e1450faf0a9`](b029736),
[`d36c1ad3ddaf9303041e61a0a41d973b02007988`](d36c1ad),
[`5b31b133970539986ff9e98013d2c364536bd0b5`](5b31b13)]:
    -   @vercel/next@4.15.21
    -   @vercel/python@6.5.0
    -   @vercel/remix-builder@5.5.10
    -   @vercel/backends@0.0.25
    -   @vercel/static-build@2.8.28
    -   @vercel/node@5.5.28
    -   @vercel/express@0.1.36

## @vercel/python@6.5.0

### Minor Changes

- vendor Python runtime dependencies
([#14827](#14827))

- Bump vercel-runtime version automatically on its releases
([#14842](#14842))

## @vercel/python-analysis@0.3.0

### Minor Changes

- initial implementation of Python semantic analysis in Rust
([#14690](#14690))

## @vercel/backends@0.0.25

### Patch Changes

- Improve handling of cjs/esm interop during imports
([#14798](#14798))

## @vercel/cervel@0.0.12

### Patch Changes

- Improve handling of cjs/esm interop during imports
([#14798](#14798))

- Updated dependencies
\[[`d36c1ad3ddaf9303041e61a0a41d973b02007988`](d36c1ad)]:
    -   @vercel/backends@0.0.25

## @vercel/express@0.1.36

### Patch Changes

- Updated dependencies
\[[`d36c1ad3ddaf9303041e61a0a41d973b02007988`](d36c1ad)]:
    -   @vercel/cervel@0.0.12
    -   @vercel/node@5.5.28

## @vercel/fs-detectors@5.7.20

### Patch Changes

- Added experimental services support in the CLI new project flow. When
`VERCEL_USE_EXPERIMENTAL_SERVICES=1` is set and a project's
`vercel.json` contains `experimentalServices`, the CLI will detect and
display the configured services during project setup, automatically
selecting the "services" framework preset.
([#14776](#14776))

## @vercel/functions@3.4.1

### Patch Changes

- Fix InMemoryCache to use JSON serialization for consistency with
RuntimeCache ([#14751](#14751))

InMemoryCache now serializes values with `JSON.stringify()` on set and
deserializes with `JSON.parse()` on get, matching the behavior of
RuntimeCache. This ensures consistent behavior when switching between
cache implementations (e.g., in-memory for development, remote for
production), particularly for types that don't survive JSON round-trips
like `Date`, `Map`, `Set`, and `undefined`.

## @vercel/introspection@0.0.11

### Patch Changes

- Updated dependencies
\[[`d36c1ad3ddaf9303041e61a0a41d973b02007988`](d36c1ad)]:
    -   @vercel/backends@0.0.25

## @vercel/next@4.15.21

### Patch Changes

- Strip routes-manifest.json for determinism
([#14783](#14783))

- Update Next.js adapter version
([#14801](#14801))

## @vercel/remix-builder@5.5.10

### Patch Changes

- [remix] Prevent 404 responses from being cached with immutable headers
([#14828](#14828))

## @vercel/python-runtime@0.3.0

### Minor Changes

- vendor Python runtime dependencies
([#14827](#14827))

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants