diff --git a/README.md b/README.md index 490a800..6e58e82 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,7 @@ On every build the plugin runs `scriptc coverage --print diagnostics` at | `failOnBlockers` | `true` | Fail the bundler build when coverage finds blockers | | `out` | `.scriptc/` | `-o/--out` primary output path | | `emit` | `"exe"` | `--emit`: ir, llvm, asm, obj, exe | +| `print` | , | `--print`: native-link-info or diagnostics | | `backend` | , | `--backend` code generator | | `optimization` | `"release"` | `--optimization`: release, dev, speed | | `strip` | `false` | `--strip` symbol/debug payload | diff --git a/docs/options.md b/docs/options.md index 08c328f..bdece72 100644 --- a/docs/options.md +++ b/docs/options.md @@ -19,6 +19,7 @@ Every `scriptc build` flag of the pinned release maps to a typed option. Flags a | --- | --- | --- | | `out` | `-o, --out` | Primary output path (default `.scriptc/`) | | `emit` | `--emit` | Primary output: `ir`, `llvm`, `asm`, `obj`, `exe` | +| `print` | `--print` | `native-link-info` (implies `--emit=obj`, no link) or `diagnostics` | | `backend` | `--backend` | Code generator (`llvm`) | | `optimization` | `--optimization` | `release` (-O2), `dev` (-O0 + breakpoints), `speed` (runtime inlining, inline RC) | | `strip` | `--strip` | Remove symbol/debug payload | diff --git a/package.json b/package.json index a7a5648..37fd59b 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,6 @@ "docs:build": "docmd build --cwd docs" }, "dependencies": { - "@docmd/engine-rust": "0.9.7", "unplugin": "^3.4.0" }, "peerDependencies": { @@ -52,6 +51,7 @@ }, "devDependencies": { "@docmd/core": "^0.9.7", + "@docmd/engine-rust": "0.9.8", "@types/node": "^24.0.0", "oxfmt": "^0.17.0", "oxlint": "^1.87.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6c2b617..c96048d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -166,12 +166,9 @@ importers: .: dependencies: - '@docmd/engine-rust': - specifier: 0.9.7 - version: 0.9.7 scriptc: specifier: ^0.3.0 - version: 0.3.1 + version: 0.3.6 unplugin: specifier: ^3.4.0 version: 3.4.0(esbuild@0.28.2) @@ -179,6 +176,9 @@ importers: '@docmd/core': specifier: ^0.9.7 version: 0.9.7 + '@docmd/engine-rust': + specifier: 0.9.8 + version: 0.9.8 '@types/node': specifier: ^24.0.0 version: 24.19.2 @@ -219,6 +219,10 @@ packages: resolution: {integrity: sha512-7oYVUmwCKkuEOH+8qI8C6OyVtmZapnkNWeQbsFCwYjDzjNL+z2prX68Vuo0+hJDxJ9jBYBvdipG0EUx3SgZQ9w==} engines: {node: '>=20.0.0'} + '@docmd/engine-rust@0.9.8': + resolution: {integrity: sha512-wph3cuTZMYADBDAAAXfuM6Sz2itkC+lx4RwRcVYzdG9yDOFAYidzU552VO3plbuDzUaJUxUWnsj55x//0gLOFA==} + engines: {node: '>=20.0.0'} + '@docmd/live@0.9.7': resolution: {integrity: sha512-5J1dBxUYFsTQFkWvljqUkn8YaKmCF5EKbTcQx2oQtnMOhNPWu3/K1pu2Pri/2jQ7n6NvT6EWKdPX9ky7Sg+o/A==} engines: {node: '>=20.0.0'} @@ -643,42 +647,42 @@ packages: cpu: [x64] os: [win32] - '@scriptc/cli-darwin-arm64@0.3.1': - resolution: {integrity: sha512-bi227Vhx5nxXqpsW9QnmchUpbusissbgsnFjbdjIoajun0C+qnnEGO27jW14ReBI/wRFOutgmz6GxB8DmB2tFw==} + '@scriptc/cli-darwin-arm64@0.3.6': + resolution: {integrity: sha512-YqP0veiuBLfrogd3zqe4snHh6MDoHzfq89Wwv1JUMaOQqp6Qy60Rr69buaymuAjx+KcDsrxo9WhxctGt2D7aUw==} cpu: [arm64] os: [darwin] - '@scriptc/cli-darwin-x64@0.3.1': - resolution: {integrity: sha512-x34HLGJD5aZwrVmSXxIzS0SgGHWnHKv+VigG1a2YDv1q5MgT1T+E5ruHsewCp9hkpWOAylo0OzPc27dAnKXEyw==} + '@scriptc/cli-darwin-x64@0.3.6': + resolution: {integrity: sha512-GIPYcF9elKuca4L13JqL/idL1BNRxdLD+LEIfXCDNSQzmaBZ+DePbSfaS2Q42ZhxAj8wKNZzKJBlQIbfn7rkeQ==} cpu: [x64] os: [darwin] - '@scriptc/cli-linux-arm64-gnu@0.3.1': - resolution: {integrity: sha512-hxtg0fAzUBh6dfkTB0zLpL6/nYfkZOAIG7vvefcwh2eP2v5WelExD8hjT2TxAzFyxsiAw5xXhE/Tj1v2xUrJUA==} + '@scriptc/cli-linux-arm64-gnu@0.3.6': + resolution: {integrity: sha512-9a5Y255WCfKPpUbaVOt94ABR4Jv0BIHKthIGLaRiKCNhs2U2u1aJjcaPRKEueePeLGV3pSK6tNL4l2+MdotoxA==} cpu: [arm64] os: [linux] libc: [glibc] - '@scriptc/cli-linux-arm64-musl@0.3.1': - resolution: {integrity: sha512-Mz1v9HjSVAcF0FrTUjFStqo2m4Ccep9BRiXvd/FgAfxtU9xBvyqxn52LBaoj6k0DoTelwEP0qCpYE7UaGNBfcQ==} + '@scriptc/cli-linux-arm64-musl@0.3.6': + resolution: {integrity: sha512-eNM09M80dQnDr7fmn3ynI2sZTDmOC2vu5lJ1bDzGbqymlca+KTM64bYO7ArKDqZPbBO7QSPQ8mvn4nJTf6sAJA==} cpu: [arm64] os: [linux] libc: [musl] - '@scriptc/cli-linux-x64-gnu@0.3.1': - resolution: {integrity: sha512-Q9NTbqygfAVR4co1r5qjeBaBmM9S1OvlrmgLfeENdEeubl+kZWBe6z9nGzT0sqWTg9+u9DVyVX3s1L3Jd7bNcw==} + '@scriptc/cli-linux-x64-gnu@0.3.6': + resolution: {integrity: sha512-7+gWiRe9sNlVu/FGeUOCjjHbHOSSxetahJQvGoyt+i21PDiuKZhHjx34583p/yH7rkK94dO/Sj32yE9GSftRPw==} cpu: [x64] os: [linux] libc: [glibc] - '@scriptc/cli-linux-x64-musl@0.3.1': - resolution: {integrity: sha512-a52g+AOVaJt59ECPyfHRHnWP583RSTqIv8aqL/IIBR5GdALOOIKWfFMHhdDjQnu2uMQiwI/ADam5Th3szUy8FA==} + '@scriptc/cli-linux-x64-musl@0.3.6': + resolution: {integrity: sha512-+3VQGRTjMIPbpNBsePEQ2ibR7fkZ0CR5TFgtKvfD7srrqGqPGUPCHdCW/MOau8RdlI23kcubsDnowzcqXqUwTQ==} cpu: [x64] os: [linux] libc: [musl] - '@scriptc/cli-win32-x64-msvc@0.3.1': - resolution: {integrity: sha512-f7iu7fg0Vxfn1QyE2mgU66qLAxbvx2YDm2jDzHBl1Pk2e7y2cX5k915NmpYPe2mLjeQMBipQYp8GgNP6ZOZrrA==} + '@scriptc/cli-win32-x64-msvc@0.3.6': + resolution: {integrity: sha512-Q4/H0v1Wcete0wOapMOgf4xeyQA5vlgqGrTABKjSliCqFlbBcdEgC813pKPlX+JGIiRzVQjxN6lT0BiKySzMWQ==} cpu: [x64] os: [win32] @@ -820,8 +824,8 @@ packages: resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} engines: {node: '>=6'} - scriptc@0.3.1: - resolution: {integrity: sha512-5iROCIAsGUU8TRb9XunxcydOJehl6GNaZAlVvN+nlG2tKVPHCMUNDWTLNTPgvltTkEH/iKRfZlvMB5IBjG2hKQ==} + scriptc@0.3.6: + resolution: {integrity: sha512-8A8oTz6cgV1vpVZyay0Qn8QzobFjqE8a55hndN9T9e3vLvTD/tNHG6Ym59MNLSZGak4btU0vNV2XOCKDfj9pkA==} engines: {node: '>=24'} hasBin: true @@ -946,7 +950,10 @@ snapshots: '@docmd/engine-python@0.9.7': optional: true - '@docmd/engine-rust@0.9.7': {} + '@docmd/engine-rust@0.9.7': + optional: true + + '@docmd/engine-rust@0.9.8': {} '@docmd/live@0.9.7': dependencies: @@ -1216,25 +1223,25 @@ snapshots: '@oxlint/binding-win32-x64-msvc@1.87.0': optional: true - '@scriptc/cli-darwin-arm64@0.3.1': + '@scriptc/cli-darwin-arm64@0.3.6': optional: true - '@scriptc/cli-darwin-x64@0.3.1': + '@scriptc/cli-darwin-x64@0.3.6': optional: true - '@scriptc/cli-linux-arm64-gnu@0.3.1': + '@scriptc/cli-linux-arm64-gnu@0.3.6': optional: true - '@scriptc/cli-linux-arm64-musl@0.3.1': + '@scriptc/cli-linux-arm64-musl@0.3.6': optional: true - '@scriptc/cli-linux-x64-gnu@0.3.1': + '@scriptc/cli-linux-x64-gnu@0.3.6': optional: true - '@scriptc/cli-linux-x64-musl@0.3.1': + '@scriptc/cli-linux-x64-musl@0.3.6': optional: true - '@scriptc/cli-win32-x64-msvc@0.3.1': + '@scriptc/cli-win32-x64-msvc@0.3.6': optional: true '@types/node@24.19.2': @@ -1396,15 +1403,15 @@ snapshots: punycode.js@2.3.1: {} - scriptc@0.3.1: + scriptc@0.3.6: optionalDependencies: - '@scriptc/cli-darwin-arm64': 0.3.1 - '@scriptc/cli-darwin-x64': 0.3.1 - '@scriptc/cli-linux-arm64-gnu': 0.3.1 - '@scriptc/cli-linux-arm64-musl': 0.3.1 - '@scriptc/cli-linux-x64-gnu': 0.3.1 - '@scriptc/cli-linux-x64-musl': 0.3.1 - '@scriptc/cli-win32-x64-msvc': 0.3.1 + '@scriptc/cli-darwin-arm64': 0.3.6 + '@scriptc/cli-darwin-x64': 0.3.6 + '@scriptc/cli-linux-arm64-gnu': 0.3.6 + '@scriptc/cli-linux-arm64-musl': 0.3.6 + '@scriptc/cli-linux-x64-gnu': 0.3.6 + '@scriptc/cli-linux-x64-musl': 0.3.6 + '@scriptc/cli-win32-x64-msvc': 0.3.6 supports-color@7.2.0: dependencies: diff --git a/src/scriptc.ts b/src/scriptc.ts index 0a19d21..e21a86f 100644 --- a/src/scriptc.ts +++ b/src/scriptc.ts @@ -15,6 +15,10 @@ export interface ScriptcBuildOptions { out?: string; // --emit: primary output kind (default exe). asm/obj need a platform helper. emit?: "ir" | "llvm" | "asm" | "obj" | "exe"; + // --print: machine-readable metadata instead of the output path. + // native-link-info implies --emit=obj and never links; diagnostics prints + // the versioned JSON diagnostics envelope. + print?: "native-link-info" | "diagnostics"; // --backend: code generator (llvm). backend?: string; // --optimization: release (default, -O2), dev (-O0 + breakpoints + cached @@ -59,6 +63,7 @@ export function buildArgs(o: ScriptcBuildOptions, entry: string): string[] { a.push(entry); if (o.out !== undefined) a.push("--out", o.out); if (o.emit !== undefined) a.push("--emit", o.emit); + if (o.print !== undefined) a.push("--print", o.print); if (o.backend !== undefined) a.push("--backend", o.backend); if (o.optimization !== undefined) a.push("--optimization", o.optimization); if (o.strip === true) a.push("--strip"); diff --git a/test/scriptc.test.ts b/test/scriptc.test.ts index b6b469b..903a6f9 100644 --- a/test/scriptc.test.ts +++ b/test/scriptc.test.ts @@ -47,6 +47,21 @@ test("buildArgs: scalar flags map one-to-one", () => { ]); }); +test("buildArgs: print selects a machine-readable output", () => { + assert.deepEqual(buildArgs({ print: "native-link-info" }, "e.ts"), [ + "build", + "e.ts", + "--print", + "native-link-info", + ]); + assert.deepEqual(buildArgs({ print: "diagnostics" }, "e.ts"), [ + "build", + "e.ts", + "--print", + "diagnostics", + ]); +}); + test("buildArgs: keepLlvm default emits nothing, true emits --keep-llvm", () => { assert.ok(!buildArgs({}, "e.ts").includes("--keep-llvm")); assert.ok(!buildArgs({ keepLlvm: false }, "e.ts").includes("--keep-llvm"));