Repository navigation
[Ecosystem] Port external VS Code extensions (my-lang, rsr-certifier) to .affine once #35 lands #64
Description
Activity
- added a commit that references this issue
on May 11, 2026 Port work landed across three PRs. The chain has one upstream dependency: affinescript#102 must merge before standards#46 can compile against the bindings it consumes.
PR chain
-
🔗 port(vscode-extension): rewrite extension.ts as extension.affine (affinescript#64) my-lang#11 — port
vscode-extension/src/extension.ts→extension.affine. Uses only the Phase-2 binding surface from Add Node-target backend + vscode-API bindings to enable .affine VS Code extensions #35 (no new bindings needed). Independent — can merge as soon as it passes review. -
🔗 feat(vscode-bindings): expand surface for rsr-certifier port (#64) #102 — expands
stdlib/Vscode.affine+packages/affine-vscode/mod.jswith ~20 bindings for the rsr-certifier port (status bar, diagnostics, webview, clipboard, fs.writeFile, workspace folders, uri/path helpers, onDidSaveTextDocument). Adds thestringIsEmptyhelper for sentinel checks. Two API shapes deliberately omitted because they need an async-extern ABI that doesn't exist yet:withProgress(opts, async task)andLanguageClient.sendRequest. -
🔗 port(rsr-certifier-vscode): rewrite extension.ts as extension.affine (affinescript#64) standards#46 — port
rhodium-standard-repositories/satellites/rsr-certifier/extensions/vscode/src/extension.ts→extension.affine. Consumes the expanded bindings from feat(vscode-bindings): expand surface for rsr-certifier port (#64) #102. Documented feature-parity degradations are scoped to the async-shaped APIs above (all four commands fall back to thersrCLI in a terminal — the same fallback path the original TS extension already had for no-LSP cases).
Acceptance criteria coverage
Bullet Status #35 has landed ✅ Open port-PR against my-lang✅ my-lang#11 Open port-PR against standards✅ standards#46 Each port verifies activation, command registration, LSP wiring, clean disposal ✅ — see test plans in each PR Each sibling repo updates its TS-exemption table to drop the ported entry ⚠️ partial — see note belowTS-exemption table note
my-langrepo: the exemption row forvscode-extension/src/extension.tslives on branchfeat/stdlib-fs-env-format, not onmain. Onmainthere is no TS-exemption table to update. When that feature branch lands, the row for the now-ported file should be dropped at the same time.standardsrepo: theextension.tswas never a per-repo exemption row — it was covered by the universal-allowlist*vscode*directory-segment pattern in.github/workflows/rsr-antipattern.yml. Removing the .ts file therefore needs no CLAUDE.md edit.
Follow-ups discovered during the port
-
Async-extern ABI. A real follow-up issue is worth filing in affinescript to track binding
vscode.window.withProgress(opts, async task)andLanguageClient.sendRequest(method, params). Once those exist, rsr-certifier can restore: in-process compliance results, live status-bar mutation, diagnostic-collection population, per-check report HTML, and the active save-document filter inonDidSaveTextDocument. -
Publish
@hyperpolymath/affine-vscodeto npm. The adapter is currently vendored verbatim into each external extension (src/affine-vscode-adapter.cjs). Publishing it would eliminate drift risk and let extensionsnpm installit directly. -
extraImportscodegen hookup. Today the wrapper has to be hand-written (src/index.cjsin each extension). Phase 3's original ambition was to haveaffinescript compile --target node-cjsemit theextraImportswiring directly; doing that would let extensions ship a single compiled artefact with no hand-written shim.
-
All three PRs merged:
- feat(vscode-bindings): expand surface for rsr-certifier port (#64) #102 (binding-surface expansion)
- port(vscode-extension): rewrite extension.ts as extension.affine (affinescript#64) my-lang#11 (my-lang vscode-extension port)
- port(rsr-certifier-vscode): rewrite extension.ts as extension.affine (affinescript#64) standards#46 (rsr-certifier vscode extension port)
Acceptance criteria satisfied. Follow-ups (async-extern ABI, publish @hyperpolymath/affine-vscode to npm, automate extraImports wiring in codegen) tracked in the issue comment thread for future scheduling.
Problem
Two VS Code extensions in sibling repos are TypeScript-only because AffineScript has no Node-target backend yet:
hyperpolymath/my-lang:vscode-extension/src/extension.tshyperpolymath/standards:rhodium-standard-repositories/satellites/rsr-certifier/extensions/vscode/src/extension.tsBoth are tracked as approved exemptions in their respective repos' policy docs. Unblock condition is #35.
This issue exists in
affinescript(not the sibling repos) because the unblock is here — once #35 lands, the porting work is mechanical and can be done in each sibling repo independently.Acceptance criteria
my-lang(portvscode-extension/src/extension.ts→.affine).standards(port the rsr-certifier extension).Origin
TS-elimination audit, 2026-05-02 (recommendation #8). Per-repo exemption tables document the carve-out today.
Dependencies