1
0
mirror of https://github.com/janet-lang/janet synced 2024-11-24 17:27:18 +00:00

Add module/add-paths

This should make it much easier to make custom DSLs work
well with the import system. No need to mess about with import paths,
 things will just work.
This commit is contained in:
Calvin Rose 2020-01-12 20:59:45 -06:00
parent 2df8660f8b
commit f709d7eb40
2 changed files with 24 additions and 17 deletions

View File

@ -9,6 +9,7 @@ All notable changes to this project will be documented in this file.
will generate warnings when compiled against other versions.
- Remove Emscripten build. Instead, use the amalgamated source code with a custom toolchain.
- Update documentation.
- Add `module/add-paths`
- Fix segfault regression when macros are called with bad arity.
### 1.6.0 - 2019-12-22

View File

@ -1925,27 +1925,33 @@
from searching that path template if the filter doesn't match the input
path. The filter can be a string or a predicate function, and
is often a file extension, including the period."
@[# Relative to (dyn :current-file "./."). Path must start with .
[":cur:/:all:.jimage" :image check-.]
[":cur:/:all:.janet" :source check-.]
[":cur:/:all:/init.janet" :source check-.]
[":cur:/:all::native:" :native check-.]
# As a path from (os/cwd)
[":all:.jimage" :image not-check-.]
[":all:.janet" :source not-check-.]
[":all:/init.janet" :source not-check-.]
[":all::native:" :native not-check-.]
# System paths
[":sys:/:all:.jimage" :image not-check-.]
[":sys:/:all:.janet" :source not-check-.]
[":sys:/:all:/init.janet" :source not-check-.]
[":sys:/:all::native:" :native not-check-.]])
@[])
(setdyn :syspath (boot/opts "JANET_PATH"))
(setdyn :headerpath (boot/opts "JANET_HEADERPATH"))
(defn module/add-paths
"Add paths to module/paths for a given loader such that
the generated paths behave like other module types, including
relative imports and syspath imports. ext is the file extension
to associate with this module type, including the dot. loader is the
keyword name of a loader that is module/loaders. Returns the modified module/paths."
[ext loader]
(defn- find-prefix
[pre]
(or (find-index |(string/has-prefix? pre ($ 0)) module/paths) 0))
(array/insert module/paths 0 [(string ":cur:/:all:" ext) loader check-.])
(def all-index (find-prefix ":all:"))
(array/insert module/paths all-index [(string ":all:" ext) loader not-check-.])
(def sys-index (find-prefix ":sys:"))
(array/insert module/paths sys-index [(string ":sys:/:all:" ext) loader not-check-.])
module/paths)
(module/add-paths ":native:" :native)
(module/add-paths "/init.janet" :source)
(module/add-paths ".janet" :source)
(module/add-paths ".jimage" :image)
# Version of fexists that works even with a reduced OS
(if-let [has-stat (_env 'os/stat)]
(let [stat (has-stat :value)]