chore: update deps; restructure tests; use Map over Record
This commit is contained in:
65
Cargo.lock
generated
65
Cargo.lock
generated
@@ -429,9 +429,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clap"
|
name = "clap"
|
||||||
version = "4.5.58"
|
version = "4.5.59"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "63be97961acde393029492ce0be7a1af7e323e6bae9511ebfac33751be5e6806"
|
checksum = "c5caf74d17c3aec5495110c34cc3f78644bfa89af6c8993ed4de2790e49b6499"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap_builder",
|
"clap_builder",
|
||||||
"clap_derive",
|
"clap_derive",
|
||||||
@@ -439,9 +439,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clap_builder"
|
name = "clap_builder"
|
||||||
version = "4.5.58"
|
version = "4.5.59"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7f13174bda5dfd69d7e947827e5af4b0f2f94a4a3ee92912fba07a66150f21e2"
|
checksum = "370daa45065b80218950227371916a1633217ae42b2715b2287b606dcd618e24"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anstream",
|
"anstream",
|
||||||
"anstyle",
|
"anstyle",
|
||||||
@@ -1142,9 +1142,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures"
|
name = "futures"
|
||||||
version = "0.3.31"
|
version = "0.3.32"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876"
|
checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"futures-channel",
|
"futures-channel",
|
||||||
"futures-core",
|
"futures-core",
|
||||||
@@ -1157,9 +1157,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-channel"
|
name = "futures-channel"
|
||||||
version = "0.3.31"
|
version = "0.3.32"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10"
|
checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"futures-core",
|
"futures-core",
|
||||||
"futures-sink",
|
"futures-sink",
|
||||||
@@ -1167,15 +1167,15 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-core"
|
name = "futures-core"
|
||||||
version = "0.3.31"
|
version = "0.3.32"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e"
|
checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-executor"
|
name = "futures-executor"
|
||||||
version = "0.3.31"
|
version = "0.3.32"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f"
|
checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"futures-core",
|
"futures-core",
|
||||||
"futures-task",
|
"futures-task",
|
||||||
@@ -1184,15 +1184,15 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-io"
|
name = "futures-io"
|
||||||
version = "0.3.31"
|
version = "0.3.32"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6"
|
checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-macro"
|
name = "futures-macro"
|
||||||
version = "0.3.31"
|
version = "0.3.32"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
|
checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@@ -1201,21 +1201,21 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-sink"
|
name = "futures-sink"
|
||||||
version = "0.3.31"
|
version = "0.3.32"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7"
|
checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-task"
|
name = "futures-task"
|
||||||
version = "0.3.31"
|
version = "0.3.32"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988"
|
checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-util"
|
name = "futures-util"
|
||||||
version = "0.3.31"
|
version = "0.3.32"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81"
|
checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"futures-channel",
|
"futures-channel",
|
||||||
"futures-core",
|
"futures-core",
|
||||||
@@ -1225,7 +1225,6 @@ dependencies = [
|
|||||||
"futures-task",
|
"futures-task",
|
||||||
"memchr",
|
"memchr",
|
||||||
"pin-project-lite",
|
"pin-project-lite",
|
||||||
"pin-utils",
|
|
||||||
"slab",
|
"slab",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -1987,7 +1986,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "nix-compat"
|
name = "nix-compat"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://git.snix.dev/snix/snix.git#9d414bec7c7fff1fca6ba6d14dda6c4295521260"
|
source = "git+https://git.snix.dev/snix/snix.git#db30e92b30e18ca4d813206ac1b60d1f670adb8c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags",
|
"bitflags",
|
||||||
"bstr",
|
"bstr",
|
||||||
@@ -2010,7 +2009,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "nix-compat-derive"
|
name = "nix-compat-derive"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://git.snix.dev/snix/snix.git#9d414bec7c7fff1fca6ba6d14dda6c4295521260"
|
source = "git+https://git.snix.dev/snix/snix.git#db30e92b30e18ca4d813206ac1b60d1f670adb8c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@@ -2678,9 +2677,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rnix"
|
name = "rnix"
|
||||||
version = "0.13.0"
|
version = "0.14.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "0b8276b540c344ec04cd215fb3d35db378c2b1861cc44802c2c097f3490f6e52"
|
checksum = "c163bd17372eecdf10d351c34584b7de7c1a33be4e92a32f3fb3f5a7fe3f579b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"rowan",
|
"rowan",
|
||||||
]
|
]
|
||||||
@@ -3261,9 +3260,9 @@ checksum = "a7973cce6668464ea31f176d85b13c7ab3bba2cb3b77a2ed26abd7801688010a"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "syn"
|
name = "syn"
|
||||||
version = "2.0.115"
|
version = "2.0.116"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "6e614ed320ac28113fa64972c4262d5dbc89deacdfd00c34a3e4cea073243c12"
|
checksum = "3df424c70518695237746f84cede799c9c58fcb37450d7b23716568cc8bc69cb"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@@ -3583,9 +3582,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "toml_parser"
|
name = "toml_parser"
|
||||||
version = "1.0.8+spec-1.1.0"
|
version = "1.0.9+spec-1.1.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "0742ff5ff03ea7e67c8ae6c93cac239e0d9784833362da3f9a9c1da8dfefcbdc"
|
checksum = "702d4415e08923e7e1ef96cd5727c0dfed80b4d2fa25db9647fe5eb6f7c5a4c4"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"winnow",
|
"winnow",
|
||||||
]
|
]
|
||||||
@@ -3722,9 +3721,9 @@ checksum = "81b79ad29b5e19de4260020f8919b443b2ef0277d242ce532ec7b7a2cc8b6007"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "unicode-ident"
|
name = "unicode-ident"
|
||||||
version = "1.0.23"
|
version = "1.0.24"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "537dd038a89878be9b64dd4bd1b260315c1bb94f4d784956b81e27a088d9a09e"
|
checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "unicode-linebreak"
|
name = "unicode-linebreak"
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ dirs = "6.0"
|
|||||||
tempfile = "3.24"
|
tempfile = "3.24"
|
||||||
rusqlite = { version = "0.38", features = ["bundled"] }
|
rusqlite = { version = "0.38", features = ["bundled"] }
|
||||||
|
|
||||||
rnix = "0.13"
|
rnix = "0.14"
|
||||||
rowan = "0.16"
|
rowan = "0.16"
|
||||||
|
|
||||||
nix-js-macros = { path = "../nix-js-macros" }
|
nix-js-macros = { path = "../nix-js-macros" }
|
||||||
|
|||||||
@@ -149,13 +149,11 @@ export const unsafeGetAttrPos =
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
const positions = (attrs as NixAttrs & Record<symbol, unknown>)[ATTR_POSITIONS] as
|
const positions = attrs[ATTR_POSITIONS];
|
||||||
| Record<string, string>
|
if (!positions || !positions.has(name)) {
|
||||||
| undefined;
|
|
||||||
if (!positions || !(name in positions)) {
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
const span = positions[name];
|
const span = positions.get(name) as string;
|
||||||
return mkPos(span);
|
return mkPos(span);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -146,7 +146,7 @@ export const functionArgs = (f: NixValue): NixAttrs => {
|
|||||||
ret.set(key, true);
|
ret.set(key, true);
|
||||||
}
|
}
|
||||||
const positions = func.args.positions;
|
const positions = func.args.positions;
|
||||||
if (positions && Object.keys(positions).length > 0) {
|
if (positions) {
|
||||||
ret[ATTR_POSITIONS] = positions;
|
ret[ATTR_POSITIONS] = positions;
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
|
|||||||
@@ -314,8 +314,8 @@ interface WithScope {
|
|||||||
last: WithScope | null;
|
last: WithScope | null;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const lookupWith = (name: string, withScope: WithScope | null): NixValue => {
|
export const lookupWith = (name: string, withScope: WithScope): NixValue => {
|
||||||
let current = withScope;
|
let current: WithScope | null = withScope;
|
||||||
while (current !== null) {
|
while (current !== null) {
|
||||||
const attrs = forceAttrs(current.env);
|
const attrs = forceAttrs(current.env);
|
||||||
if (attrs.has(name)) {
|
if (attrs.has(name)) {
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ import { ATTR_POSITIONS, IS_PATH, mkAttrs, mkAttrsWithPos, mkFunction, type NixV
|
|||||||
|
|
||||||
export type NixRuntime = typeof Nix;
|
export type NixRuntime = typeof Nix;
|
||||||
|
|
||||||
const replBindings: Record<string, NixValue> = {};
|
const replBindings: Map<string, NixValue> = new Map;
|
||||||
|
|
||||||
export const Nix = {
|
export const Nix = {
|
||||||
createThunk,
|
createThunk,
|
||||||
@@ -74,9 +74,9 @@ export const Nix = {
|
|||||||
|
|
||||||
replBindings,
|
replBindings,
|
||||||
setReplBinding: (name: string, value: NixValue) => {
|
setReplBinding: (name: string, value: NixValue) => {
|
||||||
replBindings[name] = value;
|
replBindings.set(name, value);
|
||||||
},
|
},
|
||||||
getReplBinding: (name: string) => replBindings[name],
|
getReplBinding: (name: string) => replBindings.get(name),
|
||||||
};
|
};
|
||||||
|
|
||||||
globalThis.Nix = Nix;
|
globalThis.Nix = Nix;
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ export const printValue = (value: NixValue, seen: WeakSet<object> = new WeakSet(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (typeof value === "object") {
|
if (typeof value === "object") {
|
||||||
if (IS_CYCLE in value && (value as Record<symbol, unknown>)[IS_CYCLE] === true) {
|
if (IS_CYCLE in value) {
|
||||||
return "«repeated»";
|
return "«repeated»";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -68,7 +68,7 @@ export const printValue = (value: NixValue, seen: WeakSet<object> = new WeakSet(
|
|||||||
return `{${entries ? ` ${entries} ` : " "}}`;
|
return `{${entries ? ` ${entries} ` : " "}}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
return "<unknown>";
|
throw new Error("unreachable");
|
||||||
};
|
};
|
||||||
|
|
||||||
const printString = (s: string): string => {
|
const printString = (s: string): string => {
|
||||||
|
|||||||
@@ -24,18 +24,18 @@ export type NixNull = null;
|
|||||||
|
|
||||||
export const ATTR_POSITIONS = Symbol("attrPositions");
|
export const ATTR_POSITIONS = Symbol("attrPositions");
|
||||||
export type NixList = NixValue[];
|
export type NixList = NixValue[];
|
||||||
export type NixAttrs = Map<string, NixValue> & { [ATTR_POSITIONS]?: Record<string, string> };
|
export type NixAttrs = Map<string, NixValue> & { [ATTR_POSITIONS]?: Map<string, string> };
|
||||||
export type NixFunction = ((arg: NixValue) => NixValue) & { args?: NixArgs };
|
export type NixFunction = ((arg: NixValue) => NixValue) & { args?: NixArgs };
|
||||||
export class NixArgs {
|
export class NixArgs {
|
||||||
required: string[];
|
required: string[];
|
||||||
optional: string[];
|
optional: string[];
|
||||||
allowed: Set<string>;
|
allowed: Set<string>;
|
||||||
ellipsis: boolean;
|
ellipsis: boolean;
|
||||||
positions: Record<string, string>;
|
positions: Map<string, string>;
|
||||||
constructor(required: string[], optional: string[], positions: Record<string, string>, ellipsis: boolean) {
|
constructor(required: string[], optional: string[], positions: Record<string, string>, ellipsis: boolean) {
|
||||||
this.required = required;
|
this.required = required;
|
||||||
this.optional = optional;
|
this.optional = optional;
|
||||||
this.positions = positions;
|
this.positions = new Map(Object.entries(positions));
|
||||||
this.ellipsis = ellipsis;
|
this.ellipsis = ellipsis;
|
||||||
this.allowed = new Set(required.concat(optional));
|
this.allowed = new Set(required.concat(optional));
|
||||||
}
|
}
|
||||||
@@ -103,7 +103,7 @@ export const mkAttrsWithPos = (
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (Object.keys(positions).length > 0) {
|
if (Object.keys(positions).length > 0) {
|
||||||
attrs[ATTR_POSITIONS] = positions;
|
attrs[ATTR_POSITIONS] = new Map(Object.entries(positions));
|
||||||
}
|
}
|
||||||
|
|
||||||
return attrs;
|
return attrs;
|
||||||
|
|||||||
@@ -101,6 +101,12 @@ impl<Ctx: DowngradeContext> Downgrade<Ctx> for Expr {
|
|||||||
AttrSet(attrs) => attrs.downgrade(ctx),
|
AttrSet(attrs) => attrs.downgrade(ctx),
|
||||||
UnaryOp(op) => op.downgrade(ctx),
|
UnaryOp(op) => op.downgrade(ctx),
|
||||||
Ident(ident) => ident.downgrade(ctx),
|
Ident(ident) => ident.downgrade(ctx),
|
||||||
|
CurPos(curpos) => Ok(ctx.new_expr(
|
||||||
|
self::CurPos {
|
||||||
|
span: curpos.syntax().text_range(),
|
||||||
|
}
|
||||||
|
.to_ir(),
|
||||||
|
)),
|
||||||
With(with) => with.downgrade(ctx),
|
With(with) => with.downgrade(ctx),
|
||||||
HasAttr(has) => has.downgrade(ctx),
|
HasAttr(has) => has.downgrade(ctx),
|
||||||
Paren(paren) => paren
|
Paren(paren) => paren
|
||||||
@@ -265,11 +271,6 @@ impl<Ctx: DowngradeContext> Downgrade<Ctx> for ast::Ident {
|
|||||||
fn downgrade(self, ctx: &mut Ctx) -> Result<ExprId> {
|
fn downgrade(self, ctx: &mut Ctx) -> Result<ExprId> {
|
||||||
let span = self.syntax().text_range();
|
let span = self.syntax().text_range();
|
||||||
let text = self.ident_token().require(ctx, span)?.to_string();
|
let text = self.ident_token().require(ctx, span)?.to_string();
|
||||||
|
|
||||||
if text == "__curPos" {
|
|
||||||
return Ok(ctx.new_expr(CurPos { span }.to_ir()));
|
|
||||||
}
|
|
||||||
|
|
||||||
let sym = ctx.new_sym(text);
|
let sym = ctx.new_sym(text);
|
||||||
ctx.lookup(sym, span)
|
ctx.lookup(sym, span)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ use std::path::PathBuf;
|
|||||||
use std::process::exit;
|
use std::process::exit;
|
||||||
|
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use clap::{Parser, Subcommand, Args};
|
use clap::{Args, Parser, Subcommand};
|
||||||
use hashbrown::HashSet;
|
use hashbrown::HashSet;
|
||||||
use nix_js::context::Context;
|
use nix_js::context::Context;
|
||||||
use nix_js::error::Source;
|
use nix_js::error::Source;
|
||||||
@@ -28,7 +28,7 @@ struct Cli {
|
|||||||
enum Command {
|
enum Command {
|
||||||
Eval {
|
Eval {
|
||||||
#[clap(flatten)]
|
#[clap(flatten)]
|
||||||
source: ExprSource
|
source: ExprSource,
|
||||||
},
|
},
|
||||||
Repl,
|
Repl,
|
||||||
}
|
}
|
||||||
@@ -39,7 +39,7 @@ struct ExprSource {
|
|||||||
#[clap(short, long)]
|
#[clap(short, long)]
|
||||||
expr: Option<String>,
|
expr: Option<String>,
|
||||||
#[clap(short, long)]
|
#[clap(short, long)]
|
||||||
file: Option<PathBuf>
|
file: Option<PathBuf>,
|
||||||
}
|
}
|
||||||
|
|
||||||
fn create_context(#[cfg(feature = "inspector")] cli: &Cli) -> Result<Context> {
|
fn create_context(#[cfg(feature = "inspector")] cli: &Cli) -> Result<Context> {
|
||||||
@@ -150,9 +150,7 @@ fn main() -> Result<()> {
|
|||||||
)?;
|
)?;
|
||||||
|
|
||||||
match cli.command {
|
match cli.command {
|
||||||
Command::Eval { source } => {
|
Command::Eval { source } => run_eval(&mut context, source),
|
||||||
run_eval(&mut context, source)
|
|
||||||
}
|
|
||||||
Command::Repl => run_repl(&mut context),
|
Command::Repl => run_repl(&mut context),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -370,9 +370,13 @@ fn to_value<'a>(
|
|||||||
let array = val.as_array(scope);
|
let array = val.as_array(scope);
|
||||||
let attrs = (0..size)
|
let attrs = (0..size)
|
||||||
.map(|i| {
|
.map(|i| {
|
||||||
let key = array.get_index(scope, i * 2).expect("infallible index operation");
|
let key = array
|
||||||
|
.get_index(scope, i * 2)
|
||||||
|
.expect("infallible index operation");
|
||||||
let key = key.to_rust_string_lossy(scope);
|
let key = key.to_rust_string_lossy(scope);
|
||||||
let val = array.get_index(scope, i * 2 + 1).expect("infallible index operation");
|
let val = array
|
||||||
|
.get_index(scope, i * 2 + 1)
|
||||||
|
.expect("infallible index operation");
|
||||||
let val = to_value(
|
let val = to_value(
|
||||||
val,
|
val,
|
||||||
scope,
|
scope,
|
||||||
@@ -383,7 +387,8 @@ fn to_value<'a>(
|
|||||||
is_cycle_symbol,
|
is_cycle_symbol,
|
||||||
);
|
);
|
||||||
(Symbol::new(Cow::Owned(key)), val)
|
(Symbol::new(Cow::Owned(key)), val)
|
||||||
}).collect();
|
})
|
||||||
|
.collect();
|
||||||
Value::AttrSet(AttrSet::new(attrs))
|
Value::AttrSet(AttrSet::new(attrs))
|
||||||
}
|
}
|
||||||
_ if val.is_object() => {
|
_ if val.is_object() => {
|
||||||
|
|||||||
@@ -1,9 +1,5 @@
|
|||||||
mod utils;
|
use crate::utils::{eval, eval_result};
|
||||||
|
|
||||||
use nix_js::value::Value;
|
use nix_js::value::Value;
|
||||||
use utils::eval;
|
|
||||||
|
|
||||||
use crate::utils::eval_result;
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn arithmetic() {
|
fn arithmetic() {
|
||||||
@@ -1,9 +1,6 @@
|
|||||||
mod utils;
|
use crate::utils::eval;
|
||||||
|
|
||||||
use std::collections::BTreeMap;
|
|
||||||
|
|
||||||
use nix_js::value::{AttrSet, List, Value};
|
use nix_js::value::{AttrSet, List, Value};
|
||||||
use utils::eval;
|
use std::collections::BTreeMap;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn builtins_accessible() {
|
fn builtins_accessible() {
|
||||||
@@ -1,7 +1,5 @@
|
|||||||
mod utils;
|
use crate::utils::eval_result;
|
||||||
|
|
||||||
use nix_js::value::Value;
|
use nix_js::value::Value;
|
||||||
use utils::eval_result;
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn to_file_simple() {
|
fn to_file_simple() {
|
||||||
@@ -1,7 +1,5 @@
|
|||||||
mod utils;
|
use crate::utils::{eval_deep, eval_deep_result};
|
||||||
|
|
||||||
use nix_js::value::Value;
|
use nix_js::value::Value;
|
||||||
use utils::{eval_deep, eval_deep_result};
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn add_operator_preserves_derivation_context() {
|
fn add_operator_preserves_derivation_context() {
|
||||||
@@ -1,6 +1,4 @@
|
|||||||
mod utils;
|
use crate::utils::eval;
|
||||||
|
|
||||||
use utils::eval;
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_find_file_corepkg_fetchurl() {
|
fn test_find_file_corepkg_fetchurl() {
|
||||||
@@ -1,7 +1,5 @@
|
|||||||
mod utils;
|
use crate::utils::{eval, eval_result};
|
||||||
|
|
||||||
use nix_js::value::{List, Value};
|
use nix_js::value::{List, Value};
|
||||||
use utils::eval;
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn true_literal() {
|
fn true_literal() {
|
||||||
@@ -65,7 +63,7 @@ fn shadow_in_function() {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn throw_function() {
|
fn throw_function() {
|
||||||
let result = utils::eval_result("throw \"error message\"");
|
let result = eval_result("throw \"error message\"");
|
||||||
assert!(result.is_err());
|
assert!(result.is_err());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1,7 +1,5 @@
|
|||||||
mod utils;
|
use crate::utils::{eval, eval_result};
|
||||||
|
|
||||||
use nix_js::value::Value;
|
use nix_js::value::Value;
|
||||||
use utils::{eval, eval_result};
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn required_parameters() {
|
fn required_parameters() {
|
||||||
@@ -1,11 +1,8 @@
|
|||||||
mod utils;
|
use crate::utils::{eval, eval_result};
|
||||||
|
|
||||||
use nix_js::context::Context;
|
use nix_js::context::Context;
|
||||||
use nix_js::error::Source;
|
use nix_js::error::Source;
|
||||||
use nix_js::value::Value;
|
use nix_js::value::Value;
|
||||||
|
|
||||||
use crate::utils::{eval, eval_result};
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn import_absolute_path() {
|
fn import_absolute_path() {
|
||||||
let temp_dir = tempfile::tempdir().unwrap();
|
let temp_dir = tempfile::tempdir().unwrap();
|
||||||
@@ -1,7 +1,5 @@
|
|||||||
#![allow(non_snake_case)]
|
#![allow(non_snake_case)]
|
||||||
|
|
||||||
mod utils;
|
|
||||||
|
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
|
||||||
use nix_js::context::Context;
|
use nix_js::context::Context;
|
||||||
@@ -9,7 +7,7 @@ use nix_js::error::Source;
|
|||||||
use nix_js::value::Value;
|
use nix_js::value::Value;
|
||||||
|
|
||||||
fn get_lang_dir() -> PathBuf {
|
fn get_lang_dir() -> PathBuf {
|
||||||
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("tests/lang")
|
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("tests/tests/lang")
|
||||||
}
|
}
|
||||||
|
|
||||||
fn eval_file(name: &str) -> Result<(Value, Source), String> {
|
fn eval_file(name: &str) -> Result<(Value, Source), String> {
|
||||||
@@ -195,7 +193,6 @@ eval_okay_test!(partition);
|
|||||||
eval_okay_test!(path);
|
eval_okay_test!(path);
|
||||||
eval_okay_test!(pathexists);
|
eval_okay_test!(pathexists);
|
||||||
eval_okay_test!(
|
eval_okay_test!(
|
||||||
#[ignore = "rnix 0.13 regression: /${foo}-/*...*/ fails to parse"]
|
|
||||||
path_string_interpolation,
|
path_string_interpolation,
|
||||||
|| {
|
|| {
|
||||||
unsafe {
|
unsafe {
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user