From Newsgroup: comp.text.tex
V|!t Star|+ Novotn|+ submitted an update to the
expltools
package.
Version: 2026-05-03
License: lppl1.3c gpl2+
Summary description: Development tools for expl3 programmers
Announcement text: --------------------------------------------------------------------------------
## expltools 2026-05-03
### explcheck v0.20.0
#### New features
This version of explcheck has implemented the following new features:
- Add more support for flow analysis. (#188)
This adds support for the following issues from the document titled
[_Warnings and errors for the expl3 analysis tool_][warnings-and-errors]:
1. E428 (Unexpandable or restricted-expandable boolean expression)
1. W429 (Defined an unexpandable function as unprotected)
2. W502 (Unused private function)
3. W503 (Unused private function variant)
Out of these issues, warning W429 is particularly pervasive, being reported
for 573 package files in TeX Live 2025.
- In `explcheck-latex3.lua`, add `definitions["function"]` and
`definitions.variable` properties with LPEG parsers that accept LaTeX3
standard-library function and variable names, respectively, and capture their
properties, such as expandability and the date when they were added or most
recently updated. (#201, co-authored by @josephwright in latex3/latex3#1885
and latex3/latex3#1886)
For example, `lpeg.match(definitions["function"], "msg_expandable_error:nn")`,
where `definitions = require("explcheck-latex3").definitions`, returns
the Lua table `{ EXP = "full", added = "2015-08-06" }`.
These parsers are generated by `generate-explcheck-latex3.lua` from a new
third-party submodule at `third-party/latex3`, which points to a reasonably
recent version of the LaTeX3 development repository. At commit
latex3/latex3@ff6927ae8, the parsers recognize 4,850 LaTeX3 standard-library
functions and 339 variables.
- Support multiple user config files being specified in the command-line option
`--config-file` and the corresponding Lua option `config_file`. (discussed
with @muzimuzhi in #203, added in #201)
- Add Lua option `defined_csnames` that specifies which control sequences
should always be assumed to be defined. (discussed with @muzimuzhi and
@alceu-frigeri in #206, added in #201)
This option provides a more fine-grained alternative to the earlier
`imported_prefixes`. For example, suppose the control sequences
`\module_foo:` and `\module_bar:` are imported and should always be
considered defined. A coarse-grained way to express this is:
``` toml
[defaults]
imported_prefixes = ["module"]
```
However, this also suppresses warnings and errors for all control sequence
names matching `\module_*`, as well as message names matching `module/*`,
which may be undesirable. Using `defined_csnames`, the same intent can be
expressed more precisely:
``` toml
[defaults]
defined_csnames = ["module_foo:", "module_bar:"]
```
This way, only warnings and errors related to the listed control sequence
names are suppressed.
- Add Lua option `latex3_definitions_max_added_date`, which limits how recent
LaTeX3 standard-library function and variable definitions are considered
during analysis. (#201)
This affects issues E428 and E508 (Unexpandable or restricted-expandable
boolean expression) and W429 and W512 (Defined an unexpandable function as
unprotected), as well as any issues that are only reported for user-defined
functions and variables, not for LaTeX3 standard-library ones.
For example, your config file `.explcheckrc` might look as follows if you
want to only consider deprecations, prefixes, and definitions from
TeX Live 2025 and earlier:
``` toml
[defaults]
l3obsolete_max_deprecated_date = "2025-09-29"
l3prefixes_max_first_registered_date = "2025-12-02"
latex3_definitions_max_added_date = "2025-07-08"
```
These dates can be obtained by running `generate-explcheck-latex3.lua` with
the Git submodule `third-party/latex3` checked out at a commit corresponding
to TeX Live 2025. One reasonable approximation is the Git tag `2026-01-19`,
since `/usr/local/texlive/2025/texmf-dist/tex/latex/l3kernel/expl3-code.tex`
in the Docker image `texlive/texlive:TL2025-historic` contains
`\def\ExplFileDate{2026-01-19}`. The script then produces output such as:
```
LPEG parsers and other information extracted from LaTeX3 data files.
Generated on 2026-04-30 from the following files:
- "l3obsolete.txt" with the latest obsolete entry from 2025-09-29: `\l_keys_choice_tl`
- "l3prefixes.csv" with the latest registered prefix from 2025-12-02: "asmejour"
- 85 "l3*.dtx" files with 4,753 function and 340 variable definitions:
- Latest added function or variable from 2025-07-08: `\tl_retokenize:n`
- Latest updated function or variable from 2025-09-29: `\l_keys_choice_int`
```
#### Warnings and errors
This version of explcheck has made the following changes to the document titled [_Warnings and errors for the expl3 analysis tool_][warnings-and-errors]:
- Remove planned issues E509 (Expanding an unexpandable function) and E510
(Fully-expanding a restricted-expandable function), since none of these
constitute an error: the functions simply remain unexpanded. (#201)
- Plan for weaker versions of the issues E508 (Unexpandable or
restricted-expandable boolean expression) and W512 (Defined an unexpandable
function as unprotected) in semantic analysis under the identifiers E428 and
W429, respectively, and the same names. (#201)
- Plan for further analysis of integer expressions in Section "Caveats". (#201)
#### Continuous integration
This version of explcheck has made the following changes to our continuous integration:
- Bump `softprops/action-gh-release` from 2 to 3. (contributed by @dependabot
in #199)
- Check that third-party submodules are up-to-date. (#201)
[warnings-and-errors]:
https://github.com/witiko/expltools/releases/download/latest/warnings-and-errors.pdf
--------------------------------------------------------------------------------
This package is located at
https://mirrors.ctan.org/support/expltools
More information is at
https://ctan.org/pkg/expltools
--------------------------------------------------------------------------------
Thanks for the upload.
For the CTAN Team
Manfred Lotz
CTAN is run entirely by volunteers and supported by TeX user groups.
Please join a user group or donate to one, see
https://ctan.org/lugs .
--- Synchronet 3.21f-Linux NewsLink 1.2