Update changelog.

This commit is contained in:
Calvin Rose 2021-05-31 16:51:14 -05:00
parent 8b97a0dbbf
commit 2eadb21eb7
3 changed files with 59 additions and 10 deletions

View File

@ -1,6 +1,19 @@
# Changelog # Changelog
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
## 1.16.1 - ???
- Add `maclintf` - a utility for adding linting messages when inside macros.
- Print source code of offending line on compiler warnings and errors.
- Fix some issues with linting and re-add missing `make docs`.
- Allow controlling linting with dynamic bindings `:lint-warn`, `:lint-error`, and `:lint-levels`.
- Add `-w` and `-x` command line flags to the `janet` binary to set linting thresholds.
linting thresholds are as follows:
- :none - will never be trigger.
- :relaxed - will only trigger on `:relaxed` lints.
- :normal - will trigger on `:relaxed` and `:normal` lints.
- :strict - will trigger on `:strict`, `:normal`, and `:relaxed` lints. This will catch the most issues
but can be distracting.
## 1.16.0 - 2021-05-30 ## 1.16.0 - 2021-05-30
- Add color documentation to the `doc` macro - enable/disable with `(dyn :doc-color)`. - Add color documentation to the `doc` macro - enable/disable with `(dyn :doc-color)`.
- Remove simpler HTML docs from distribution - use website or built-in documentation instead. - Remove simpler HTML docs from distribution - use website or built-in documentation instead.

15
janet.1
View File

@ -8,6 +8,8 @@ janet \- run the Janet language abstract machine
[\fB\-l\fR \fIMODULE\fR] [\fB\-l\fR \fIMODULE\fR]
[\fB\-m\fR \fIPATH\fR] [\fB\-m\fR \fIPATH\fR]
[\fB\-c\fR \fIMODULE JIMAGE\fR] [\fB\-c\fR \fIMODULE JIMAGE\fR]
[\fB\-w\fR \fILEVEL\fR]
[\fB\-x\fR \fILEVEL\fR]
[\fB\-\-\fR] [\fB\-\-\fR]
.BR script .BR script
.BR args ... .BR args ...
@ -210,7 +212,18 @@ resulting image. Output should usually end with the .jimage extension.
Import a Janet module before running a script or repl. Multiple files can be loaded Import a Janet module before running a script or repl. Multiple files can be loaded
in this manner, and exports from each file will be made available to the script in this manner, and exports from each file will be made available to the script
or repl. or repl.
.TP
.BR \-w\ level
Set the warning linting level for Janet.
This linting level should be one of :relaxed, :none, :strict, :normal, or a
Janet number. Any linting message that is of a greater lint level than this setting will be displayed as
a warning, but not stop compilation or execution.
.TP
.BR \-x\ level
Set the error linting level for Janet.
This linting level should be one of :relaxed, :none, :strict, :normal, or a
Janet number. Any linting message that is of a greater lint level will cause a compilation error
and stop compilation.
.TP .TP
.BR \-\- .BR \-\-
Stop parsing command line arguments. All arguments after this one will be considered file names Stop parsing command line arguments. All arguments after this one will be considered file names

View File

@ -1784,6 +1784,20 @@
### ###
### ###
(defn maclintf
``When inside a macro, call this function to add a linter warning. Takes
a `fmt` argument like `string/format` which is used to format the message.``
[level fmt & args]
(def lints (dyn :macro-lints))
(when lints
(def form (dyn :macro-form))
(def [l c] (if (tuple? form) (tuple/sourcemap form) [nil nil]))
(def l (if-not (= -1 l) l))
(def c (if-not (= -1 c) c))
(def msg (string/format fmt ;args))
(array/push lints [level l c msg]))
nil)
(defn macex1 (defn macex1
``Expand macros in a form, but do not recursively expand macros. ``Expand macros in a form, but do not recursively expand macros.
See `macex` docs for info on on-binding.`` See `macex` docs for info on on-binding.``
@ -2129,8 +2143,9 @@
col col
": compile warning (" level "): ") ": compile warning (" level "): ")
(eprint msg) (eprint msg)
(print-line-col where line col) (when ec
(if ec (eprin "\e[0m")) (print-line-col where line col)
(eprin "\e[0m"))
(eflush)) (eflush))
(defn bad-compile (defn bad-compile
@ -2148,8 +2163,9 @@
(if macrof (if macrof
(debug/stacktrace macrof msg) (debug/stacktrace macrof msg)
(eprint msg)) (eprint msg))
(print-line-col where line col) (when ec
(if ec (eprin "\e[0m")) (print-line-col where line col)
(eprin "\e[0m"))
(eflush)) (eflush))
(defn curenv (defn curenv
@ -2164,7 +2180,8 @@
{:none 0 {:none 0
:relaxed 1 :relaxed 1
:normal 2 :normal 2
:strict 3}) :strict 3
:all math/inf})
(defn run-context (defn run-context
``` ```
@ -2226,10 +2243,11 @@
(def res (compile source env where lints)) (def res (compile source env where lints))
(unless (empty? lints) (unless (empty? lints)
# Convert lint levels to numbers. # Convert lint levels to numbers.
(def levels (get env :lint-levels lint-levels))
(def lint-error (get env :lint-error)) (def lint-error (get env :lint-error))
(def lint-warning (get env :lint-warn)) (def lint-warning (get env :lint-warn))
(def lint-error (or (get lint-levels lint-error lint-error) 0)) (def lint-error (or (get levels lint-error lint-error) 0))
(def lint-warning (or (get lint-levels lint-warning lint-warning) 2)) (def lint-warning (or (get levels lint-warning lint-warning) 2))
(each [level line col msg] lints (each [level line col msg] lints
(def lvl (get lint-levels level 0)) (def lvl (get lint-levels level 0))
(cond (cond
@ -3455,6 +3473,11 @@
(if-let [jp (getenv-alias "JANET_HEADERPATH")] (setdyn :headerpath jp)) (if-let [jp (getenv-alias "JANET_HEADERPATH")] (setdyn :headerpath jp))
(if-let [jprofile (getenv-alias "JANET_PROFILE")] (setdyn :profilepath jprofile)) (if-let [jprofile (getenv-alias "JANET_PROFILE")] (setdyn :profilepath jprofile))
(defn- get-lint-level
[i]
(def x (in args (+ i 1)))
(or (scan-number x) (keyword x)))
# Flag handlers # Flag handlers
(def handlers (def handlers
{"h" (fn [&] {"h" (fn [&]
@ -3505,8 +3528,8 @@
(eval-string (in args (+ i 1))) (eval-string (in args (+ i 1)))
2) 2)
"d" (fn [&] (set *debug* true) 1) "d" (fn [&] (set *debug* true) 1)
"w" (fn [i &] (set *warn-level* (keyword (in args (+ i 1)))) 2) "w" (fn [i &] (set *warn-level* (get-lint-level i)) 2)
"x" (fn [i &] (set *error-level* (keyword (in args (+ i 1)))) 2) "x" (fn [i &] (set *error-level* (get-lint-level i)) 2)
"R" (fn [&] (setdyn :profilepath nil) 1)}) "R" (fn [&] (setdyn :profilepath nil) 1)})
(defn- dohandler [n i &] (defn- dohandler [n i &]