@ 261102.1

141231.1 · ae7f8d6ab9d29bd72f462fdafa4d7a9270706d3b

Further module system revamp (fix #659)

To import a module now use:

# Import module.jq file:
import "relative/path/to/module" as foo;

# Use the module's defs as foo::<def-name>

To import a JSON file:

# Read file.json:
import "relative/path/to/file" as $foo;
#
# Use as $foo::foo

Using `-L` now drops the builtin library path and appends the requested path to the empty array (or the result of an earlier `-L`).

Support for the `$JQ_LIBRARY_PATH` environment variable has been removed.

reading declarations

Changes to tests/modules/c/c.jq. All files

tests/modules/c/c.jq

@@ -1,12 +1,14 @@-module c {whatever:null};-import a as foo;-import d as d {search:"./"};-import d {search:"./"};-import e as e {search:"./../lib/jq"};-import f as f {search:"./../lib/jq"};+module {whatever:null};+import "a" as foo;+import "d" as d {search:"./"};+import "d" as d2{search:"./"};+import "e" as e {search:"./../lib/jq"};+import "f" as f {search:"./../lib/jq"};+import "data" as $d; def a: 0; def c:-  if meh != d::meh then error("import into namespace doesn't work")+  if $d::d[0] != {this:"is a test",that:"is too"} then error("data import is busted")+  elif d2::meh != d::meh then error("import twice doesn't work")   elif foo::a != "a" then error("foo::a didn't work as expected")   elif d::meh != "meh" then error("d::meh didn't work as expected")   elif e::bah != "bah" then error("e::bah didn't work as expected")