Commit Graph
839 Commits
Author SHA1 Message Date
Pietro Cerutti 8fb4c4f49d Simplify and reduce diffs with master 2026-08-28 19:10:29 +00:00
Pietro Cerutti f39447a4ee Clarify semantics 2026-08-28 18:19:30 +00:00
Pietro Cerutti 5c45e611a8 Extend the scope of truthy if-let bindings to the fal branch
The `if-let` construct - together with the fact that only `nil` and `false` are falsey - is very handy to express monadic chains over maybe/optional values:

```janet
(if-let [resp (make-http-request)       # is nil on failure
         {:status stat :body body} resp # always truthy, binds `stat` and `body`
         check (= 200 stat)             # continue only on 200 OK
         json (json/decode body true)   # is nil on failure
         {:foo foo} json]
  foo)
```

However, none of the bindings are available in the false branch, which
could be helpful to have for error reporting or fallback logic:

```janet
(if-let [resp (make-http-request)
         {:status stat :body body} resp
         check (= 200 stat)
         json (json/decode body true)
         {:foo foo} json]
  foo
  (if (= 401 stat) # unauthorized, refresh the token
    (try-again)
    nil))
```

This PR makes all symbols introduced by the bindings of an `if-let` available in all branches.
2026-08-27 11:36:22 +00:00
sogaiuandsogaiu 96e07aab36 Improve docstring for last (#1829)
Co-authored-by: sogaiu <983021772@users.noreply.github.com>
2026-08-23 11:05:00 -05:00
sogaiuandsogaiu 4815812827 Improve docstring for loop (#1830)
Co-authored-by: sogaiu <983021772@users.noreply.github.com>
2026-08-23 11:04:49 -05:00
sogaiuandsogaiu 284990a043 Improve docstring for update (#1827)
Co-authored-by: sogaiu <983021772@users.noreply.github.com>
2026-08-22 15:00:40 -05:00
sogaiuandsogaiu f545c91581 Improve docstring for interleave (#1825)
Co-authored-by: sogaiu <983021772@users.noreply.github.com>
2026-08-22 15:00:11 -05:00
sogaiuandsogaiu 2c630e0f5c Improve docstrings for sum and friends (#1824)
Co-authored-by: sogaiu <983021772@users.noreply.github.com>
2026-08-21 08:26:26 -05:00
Calvin Rose 2c3995eb33 Make order of path resolution from JANET_PATH more intuitive.
Also match shell convention, with strict searching from left to right
instead of right to left by default. The _first_ element will be bound
to (dyn *syspath*), not the last.

Potentially breaking change for complicated, custom setups
2026-08-21 07:21:24 -05:00
sogaiuandsogaiu 3251197477 Improve docstrings for keep, map, and mapcat (#1821)
Co-authored-by: sogaiu <983021772@users.noreply.github.com>
2026-08-20 09:39:48 -05:00
sogaiuandsogaiu 83558579ce Improve docstrings for all, some, and count (#1820)
Co-authored-by: sogaiu <983021772@users.noreply.github.com>
2026-08-20 08:48:05 -05:00
sogaiuandsogaiu ef07dc347f Improve docstrings of every? and any? (#1819)
Co-authored-by: sogaiu <983021772@users.noreply.github.com>
2026-08-20 08:47:54 -05:00
sogaiuandsogaiu 36db9988b0 Improve docstrings for reverse and reverse! (#1818)
Co-authored-by: sogaiu <983021772@users.noreply.github.com>
2026-08-19 09:56:20 -05:00
sogaiuandsogaiu f9f7a529b2 Improve docstrings of reduce and friends (#1817)
Co-authored-by: sogaiu <983021772@users.noreply.github.com>
2026-08-19 09:56:07 -05:00
sogaiuandsogaiu 16c6bb5fda Improve docstrings for each and friends (#1816)
Co-authored-by: sogaiu <983021772@users.noreply.github.com>
2026-08-19 09:55:43 -05:00
sogaiuandsogaiu 59b72ba072 Improve docstrings of filter and friends (#1815)
Co-authored-by: sogaiu <983021772@users.noreply.github.com>
2026-08-18 08:17:16 -05:00
sogaiuandsogaiu 04b48de8b4 Align find* and index-of details (#1811)
Co-authored-by: sogaiu <983021772@users.noreply.github.com>
2026-08-17 20:24:24 -05:00
Calvin Rose b09aec83a2 Add t-switch to allow easily using libraries as CLI tools.
Rather than needing to create wrapper scripts for utilities, `janet -t
mylib <args...>` can be a simple, if somewhat awkward, alternative for
portable command line tooling. Also use spork/fmt on boot.janet.
2026-08-17 15:43:38 -05:00
sogaiuandsogaiu 3d03d083c7 Improve index-of docstring (#1809)
Co-authored-by: sogaiu <983021772@users.noreply.github.com>
2026-08-17 07:56:24 -05:00
sogaiuandsogaiu 5229244a1b Improve completeness of *-in docstrings (#1805)
Co-authored-by: sogaiu <983021772@users.noreply.github.com>
2026-08-16 14:12:26 -05:00
sogaiuandsogaiu 5b438d9440 Tweak frequencies and group-by (#1806)
Co-authored-by: sogaiu <983021772@users.noreply.github.com>
2026-08-16 14:12:18 -05:00
sogaiuandsogaiu 4aa21c0591 Tweak flatten* docstrings (#1804)
Co-authored-by: sogaiu <983021772@users.noreply.github.com>
2026-08-16 09:22:16 -05:00
sogaiuandsogaiu 291e2222bb Improve clarity of some docstrings (#1800)
Co-authored-by: sogaiu <983021772@users.noreply.github.com>
2026-08-15 14:38:33 -05:00
sogaiuandsogaiu f6fd6bdc29 Improve completeness of sort* docstrings (#1798)
Co-authored-by: sogaiu <983021772@users.noreply.github.com>
2026-08-15 12:27:36 -05:00
sogaiuandsogaiu 1e91591c19 Improve completeness of some docstrings (#1791)
Co-authored-by: sogaiu <983021772@users.noreply.github.com>
2026-08-15 12:06:05 -05:00
sogaiuandsogaiu 3f1b31a528 Improve consistency of some docstrings (#1794)
Co-authored-by: sogaiu <983021772@users.noreply.github.com>
2026-08-15 12:05:39 -05:00
Calvin Rose e3c6893080 whitespace 2026-08-15 11:36:34 -05:00
Calvin Rose 27000deed5 Address #1790 - limit number of automatic parameters.
This also improves the error behavior of malformed automatic parameters
so that the error conditions are better defined. Previously, large
indices like 88888888888888 would actually simply be converted to
symbols and fail later. This change puts strict limitations on this
conversion process - If a symbol is of the form "$<str>" and
(scan-number str) returns non-nil, the result must be a valid index. In
this way, symbols like `$1.1` will result in an immediate macro expansion error
rather than (usually) and unknown binding error.
2026-08-15 11:35:15 -05:00
sogaiuandsogaiu 331e8544bc Simplify frequencies implementation (#1793)
* Add tests for frequencies

* Simplify frequencies implementation

---------

Co-authored-by: sogaiu <983021772@users.noreply.github.com>
2026-08-08 09:30:20 -05:00
sogaiuandsogaiu f362e8f0fa Improve comprehensiveness of first docstring (#1789)
Co-authored-by: sogaiu <983021772@users.noreply.github.com>
2026-08-02 16:56:20 -05:00
Jacob Mealey 54411dc536 Fix typos in boot.janet (#1774) 2026-06-28 08:51:27 -05:00
Calvin Rose bef6cb5d74 Address issue #1746
This will have the side effect of breaking loading image dicts from
older Janet versions with these contents.
2026-05-08 18:42:50 -05:00
Calvin Rose 8b89901298 Deduplicate lints.
Why see the same message twice?
2026-03-15 18:27:13 -05:00
Calvin Rose c63c6740d9 First pass at linting binding shadowing.
Prevent redefining bindings by accident. There are
a few cases where we want to allow this, such as the `default` macro, so
we allow a keyword :shadow to be included in the `def` expression to
turn off this lint.

TODO:
* Clean up test suite to remove binding shadowing
* Make sure that we don't get lints with *redef* turned on
* Add positive and negative tests for lint messages.
* Add location of shadowed binding in message
2026-03-15 11:24:07 -05:00
sogaiuandsogaiu b160f4f5c0 Macro hygiene tweaks (#1727)
* Tweak hygiene for when-with, if-with, when-let

* Tweak hygiene for loop1 helper

* Tweak hygiene for repeat

* Tweak hygiene for seq and catseq

* Tweak hygiene for -?> and -?>>

* Tweak hygiene for varfn

* Tweak hygiene for ev/with-deadline

* Tweak hygiene for ffi/defbind-alias + ffi/defbind

---------

Co-authored-by: sogaiu <983021772@users.noreply.github.com>
2026-03-11 19:06:43 -05:00
Calvin Rose a0cc867f14 Improve macro hygiene in boot.janet. 2026-03-09 19:46:55 -05:00
Calvin Rose e8f9c12935 Fix regression where private main was not run. 2026-03-01 10:52:52 -06:00
Calvin Rose 32d75c9e49 Dup io file descriptors when marshalling closable files.
For unclosable files, no need to dup, but for closable files we can get
a resource leak. Valgrind and similar tools won't catch this but IO will
unexpectedly start going to the wrong descriptor if a file was
transferred to a new thread, closed, and then a new file was created.
2026-03-01 10:39:50 -06:00
Calvin Rose 2602bec017 Check stderr for redirection before turning on/off color. 2026-02-21 08:17:12 -06:00
Calvin Rose d636502c32 Fix vestigial doc string. 2026-02-18 08:41:31 -06:00
Calvin Rose 739d9d9fe3 Expose module/add-syspath and update CHANGELOG.md 2026-02-15 22:20:54 -06:00
Calvin Rose 1557f9da78 Don't reference argv after fiber may have been resized. 2026-02-15 21:54:42 -06:00
Calvin Rose 529d8c9e4a Improve ability to load modules by full path.
Be explicit when we are including this functionality. Add a function
module/add-file-extension that can do this programatically.
2026-02-15 21:10:26 -06:00
sogaiuandsogaiu abd7bb1110 Use snprintf instead of sprintf (#1711)
Co-authored-by: sogaiu <983021772@users.noreply.github.com>
2026-02-14 09:04:33 -06:00
Calvin Rose 2a54154976 Don't use preload on absolute paths.
When importing full paths, the old preload code was preventing
(import <fullpath> :fresh true) from working as expected.
2026-02-13 19:36:09 -06:00
Calvin Rose 196f27af3d Update CHANGELOG.md 2026-02-05 20:01:00 -06:00
Calvin Rose 42c0096ce7 Allow simpler loading of modules.
E.g.

(import project/file.janet :as file)
(import ./project/file.janet :as file)
(import /home/me/project/file.janet :as file)

Will now do what you expect. When loading with a file extension, this
will first check directly if the relative (or absolute) path exists.

Also expands `module/find` to be able to show all matches for a given
module name without needing to try and catch import errors. Lastly, one
can also override the module/find functionality by passing `:loader`
directly.

E.g.

(import ./macoslib.dylib :loader :native :as my-thing)

Which will allow easily bypassing all module/find logic;
"./macoslib.dylib" will be passed directly to the :native loader
`(get module/loaders :native)`.

The module system was previously left open to customization but with
defaults to encourage a more typical style. However, these qol
improvements are more than worth it and can in some cases let people
stop fighting the module system.
2026-02-05 19:45:30 -06:00
Calvin Rose 497e363401 Make sure named argumnets are compiled before destructured params.
This handles an edge-case when combing destructured and named
parameters that produced spurious and confusing compiler lints.
2026-01-31 19:34:26 -06:00
Calvin Rose 8e2ec997f0 Update copyright. 2026-01-31 10:33:57 -06:00
Calvin Rose e1897e1865 More documentation. 2026-01-29 07:50:23 -06:00