• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

source-academy / py-slang / 29982158969
86%

Build:
DEFAULT BRANCH: main
Ran 23 Jul 2026 05:43AM UTC
Jobs 1
Files 116
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

23 Jul 2026 05:26AM UTC coverage: 86.13%. Remained the same
29982158969

push

github

web-flow
Add Pyodide evaluator: real CPython via WebAssembly, gated by py-slang validation (#312)

* Add Pyodide evaluator: real CPython via WebAssembly, gated by py-slang validation

PyodideEvaluator1-4 run chunks through the same parser + Resolver every
other engine uses (with that chapter's feature validators and stdlib
groups, so the Resolver still recognizes print/len/etc.) before handing
validated code to a real CPython runtime via pyodide — full stdlib, real
`import numpy`-style packages via micropip. PyodideEvaluatorFull skips
the chapter gate entirely for unrestricted Python.

Ports the reusable parts of the pyodide half of PR #117 (credit: veehz)
against the current architecture, minus the PyTorch bridge (separate
scope, see follow-up issue) and fixes two bugs the original had: a
process-wide "helper loaded" flag that broke a second PyodideEvaluator
instance's own pyodide runtime, and validateChunk() never actually
checking analyze()'s returned errors. Also adds REPL-style cross-chunk
name tracking so a later chunk can see an earlier chunk's globals,
which the original never had.

pyodide's Node-side loader needs a dynamic import() that only works
under `node --experimental-vm-modules`, which compiles the whole test
tree as real ESM and drops __dirname (used throughout the rest of the
suite) — incompatible module-target requirements, not just a runtime
quirk. `yarn test:pyodide` runs the two pyodide test files under that
flag separately from the default `yarn test`, wired into CI as its own
step.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KrwJGug3rCXijRseRjys9V

* format

* Address CodeRabbit review on #312: narrower exception, shadowing, scope, atomicity

- installMissingImports: catch only ModuleNotFoundError, not bare Exception,
  so a package that's installed but fails during its own import surfaces
  that real error instead of being misdiagnosed as "missing".
- currentGlobalNames: re... (continued)

4388 of 5483 branches covered (80.03%)

Branch coverage included in aggregate %.

9491 of 10631 relevant lines covered (89.28%)

178983.9 hits per line

Jobs
ID Job ID Ran Files Coverage
1 29982158969.1 23 Jul 2026 05:43AM UTC 116
86.13
GitHub Action Run
Source Files on build 29982158969
  • Tree
  • List 116
  • Changed 0
  • Source Changed 0
  • Coverage Changed 0
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #29982158969
  • 2b33312b on github
  • Prev Build on main (#29981136218)
  • Next Build on main (#29985107634)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc