CTAN update: expltools

CTAN Announcements via ctan-ann <[email protected]>
Newsgroups gmane.comp.tex.ctan.announce
Organization CTAN
Message-ID <be8714b9150a7440@hogwart>
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 .
_______________________________________________
ctan-ann mailing list -- [email protected]
To unsubscribe send an email to [email protected]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.