Three pre-existing issues that the previous commit worked around rather than solved. Test global pollution. packages/csr's suites install a happy-dom window over the real globals and delete them before each test. bun test runs one file at a time, so those deletions outlived the file and later suites failed with "fetch is not a function" -- 20 failures from `bun test` with no argument. They now restore what they captured. The editor's Node tests shim the vscode host by patching Module._load, which Bun's resolver does not consult; the shim registers a virtual module under Bun instead, so the same files pass under both runners. Multi-cursor tag auto-close. The handler now closes the tag at every caret. Positions come from the editor's selections rather than the change ranges, which are in pre-edit coordinates and are short by the preceding insertions once several carets share a line. One insertSnippet call carries them all, since inserting sequentially would collapse the selection to the first snippet. Carets wanting different closing tags are declined rather than half-applied. Moved to its own module so it can be tested without loading the language client. Runtime size. Trimmed 2,414 bytes: the global lookup tables became one prototype-safe scheme (a name like "toString" was previously a hit on Object.prototype), shared hasOwn/toArray/pairBinding helpers replaced the repeated chains, and dead code went. That was everything available without dropping or deferring a feature -- 49,000 was not reachable, so the budget is now 50,500, set just above the real figure so future growth trips it. Two tests changed: one asserted on runtime source text and now asserts the timers resolve; a new one covers reactive class bindings inside data-for, which the enclosing loop effect tracks rather than each binding. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
40 lines
1.2 KiB
JavaScript
40 lines
1.2 KiB
JavaScript
"use strict";
|
|
|
|
/**
|
|
* Supply a stub `vscode` host so extension sources can be unit tested.
|
|
*
|
|
* These files run under `node --test` (see the package's test script), where
|
|
* patching `Module._load` is enough. A bare `bun test` from the repository
|
|
* root also picks them up by filename, and Bun resolves `require` through its
|
|
* own resolver without consulting `Module._load` -- so under Bun the same
|
|
* files failed with "Cannot find package 'vscode'". Registering a virtual
|
|
* module covers that case, leaving one shim that works under both runners.
|
|
*
|
|
* Returns a function restoring the original loader.
|
|
*/
|
|
function installVsCodeHost(stub) {
|
|
const Module = require("node:module");
|
|
|
|
if (typeof Bun !== "undefined") {
|
|
require("bun").plugin({
|
|
name: "vscode-host-stub",
|
|
setup(build) {
|
|
build.module("vscode", () => ({ exports: stub, loader: "object" }));
|
|
},
|
|
});
|
|
return () => {};
|
|
}
|
|
|
|
const originalLoad = Module._load;
|
|
Module._load = function load(request, parent, isMain) {
|
|
if (request === "vscode") return stub;
|
|
return originalLoad.call(this, request, parent, isMain);
|
|
};
|
|
|
|
return () => {
|
|
Module._load = originalLoad;
|
|
};
|
|
}
|
|
|
|
module.exports = { installVsCodeHost };
|