aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorCalvin Rose <calsrose@gmail.com>2026-02-06 00:31:08 -0600
committerCalvin Rose <calsrose@gmail.com>2026-02-06 00:31:08 -0600
commit306ce892ea63293c9c5f3ee9fa7afcfe07a06ad3 (patch)
treeb00ffc931506e57dacb3f529a12b3c8c41f99728
parentRemove extra output from peg test. (diff)
parentUpdate CHANGELOG.md (diff)
Merge branch 'make-modules-easier'
-rw-r--r--CHANGELOG.md3
-rw-r--r--src/boot/boot.janet22
2 files changed, 17 insertions, 8 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0654de7c..4007ba3d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,9 @@
All notable changes to this project will be documented in this file.
## Unreleased - ???
+- Allow overriding the loader when doing imports with the `:loader` argument.
+- Allow importing modules with a path extension to do what one would expect.
+- Add `find-all` argument to `module/find`
- Add :threads, :unmarshal, :compiler, and :asm sandbox flags.
- Add support for persistent REPL history with the environment variable `JANET_HISTFILE`
- Fix a number of fuzzer-found compiler bugs
diff --git a/src/boot/boot.janet b/src/boot/boot.janet
index d2a33e24..1923eb46 100644
--- a/src/boot/boot.janet
+++ b/src/boot/boot.janet
@@ -2182,10 +2182,10 @@
(def last (in t (- (length t) 1)))
(def bound (in t 1))
(keep-syntax! t
- (array/concat
- @[(in t 0) (expand-bindings bound)]
- (tuple/slice t 2 -2)
- @[(recur last)])))
+ (array/concat
+ @[(in t 0) (expand-bindings bound)]
+ (tuple/slice t 2 -2)
+ @[(recur last)])))
(defn expandall [t]
(def args (map recur (tuple/slice t 1)))
@@ -2924,6 +2924,7 @@
(array/insert mp sys-index [(string ":sys:/:all:" ext) loader check-is-dep])
(def curall-index (find-prefix ":cur:/:all:"))
(array/insert mp curall-index [(string ":cur:/:all:" ext) loader check-relative])
+ (array/insert mp 0 [":all:" loader (fn :check-ext [x] (string/has-suffix? ext x))])
mp)
# Don't expose this externally yet - could break if custom module/paths is setup.
@@ -2976,20 +2977,22 @@
or :image if the module is found, otherwise a tuple with nil followed by
an error message.
```
- [path]
+ [path &opt find-all]
(var ret nil)
(def mp (dyn *module-paths* module/paths))
+ (def all-matches (if find-all @[]))
(each [p mod-kind checker] mp
(when (mod-filter checker path)
(if (function? p)
(when-let [res (p path)]
(set ret [res mod-kind])
- (break))
+ (if find-all (array/push all-matches ret) (break)))
(do
(def fullpath (string (module/expand-path path p)))
(when (fexists fullpath)
(set ret [fullpath mod-kind])
- (break))))))
+ (if find-all (array/push all-matches ret) (break)))))))
+ (if find-all (break all-matches))
(if ret ret
(let [expander (fn :expander [[t _ chk]]
(when (string? t)
@@ -3164,7 +3167,10 @@
(defn- require-1
[path args kargs]
- (def [fullpath mod-kind] (module/find path))
+ (def [fullpath mod-kind]
+ (if-let [loader (get kargs :loader)]
+ [path loader]
+ (module/find path)))
(unless fullpath (error mod-kind))
(def mc (dyn *module-cache* module/cache))
(def ml (dyn *module-loading* module/loading))