• CTAN update: expltools

    From CTAN Announcements@manfred@ctan.org to ctan-ann on Tue May 5 14:07:51 2026
    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
  • From CTAN Announcements@manfred@ctan.org to ctan-ann on Wed May 13 16:06:35 2026
    From Newsgroup: comp.text.tex

    V|!t Star|+ Novotn|+ submitted an update to the

    expltools

    package.

    Version: 2026-05-12
    License: lppl1.3c gpl2+

    Summary description: Development tools for expl3 programmers

    Announcement text: --------------------------------------------------------------------------------

    ## expltools 2026-05-12

    ### explcheck v0.21.0

    #### New features

    This version of explcheck has implemented the following new features:

    - Add command-line option `--inline-config`. (suggested by @muzimuzhi in #203,
    added in #211)

    This option accepts a TOML string that is treated as a config file,
    overriding any options specified in config files. The option may be specified
    repeatedly; when the same Lua option appears in multiple TOML strings, later
    occurrences take precedence.

    With this option, you can set ad-hoc Lua options without creating a config
    file. For example, to disable the Lua option `stop_early_when_confused`, you
    can write `--inline-config defaults.stop_early_when_confused=false`.

    - Support specifying Lua options at the top level of the config file.
    (suggested by @muzimuzhi in #203, added in #211)

    This allows you to omit the `[defaults]` section from your config file. For
    example, the following is now a complete valid config file:

    ``` toml
    max_line_length = 120
    ignored_issues = ["w100", "S"]
    ```

    This also simplifies the use of the `--inline-config` command-line option:
    you can now write `--inline-config stop_early_when_confused=false` without
    the previously required `defaults.` prefix.

    - Change the semantics of the Lua options
    `max_reaching_definition_inner_loops` and
    `max_reaching_definition_outer_loops` to perform a partial reaching
    definition analysis when the limits are exceeded. (#212, 975f91d)

    Previously, exceeding either limit would cause explcheck to abort the
    analysis. Now, processing only aborts when the number of reaching definition
    loops exceeds the theoretical upper bounds, which indicates a bug. By
    contrast, when the limits specified by these options are exceeded, explcheck
    now continues with a partial analysis. This may lead to false positive issues
    reported by the flow analysis, but can also greatly improve performance.

    #### Fixes

    This version of explcheck has fixed the following problems:

    - Do not report issue W429 (Defined an unexpandable function as unprotected)
    for restricted-expandable functions. (e507747)

    - Fix potentially untrue assertion predicates in the flow analysis. (reported
    by @muzimuzhi in #208, fixed in #209)

    - Do not expect the `statements` key in all segments. (#212)

    Some segment types such as `BOOLEAN_EXPRESSION` only contain `calls`, not
    `statements`.

    #### Deprecations

    This version of explcheck has deprecated the following features and scheduled them for removal in v1.0.0:

    - Rename the Lua option `config_file` to `config_files` and deprecate
    `config_file`. (#211)

    - Deprecate the command-line option `--expl3-detection-strategy`. (#211)

    If you rely on this option, you may set it using `--inline-config`. For
    example, you would replace `--expl3-detection-strategy always` with
    `--inline-config 'expl3_detection_strategy = "always"'.

    #### Continuous integration

    This version of explcheck has made the following changes to our continuous integration (CI):

    - Run the flow analysis on the whole TeX Live in the CI. (#208, #210, #212,
    975f91d, 59be8c3)
    - Cancel previous CI run from the same branch or pull request. (cae310d)
    - Do not run the CI when tags are pushed. (d88b2f1, 8c7a960)

    --------------------------------------------------------------------------------

    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.22a-Linux NewsLink 1.2
  • From CTAN Announcements via ctan-ann@erik@ctan.org to ctan-ann on Sun May 31 14:47:40 2026
    From Newsgroup: comp.text.tex

    V|!t Star|+ Novotn|+ submitted an update to the

    expltools

    package.

    Version number: 2026-05-29
    License type: lppl1.3c gpl2+

    Summary description: Development tools for expl3 programmers

    Announcement text: ----------------------------------------------------------------------


    ## expltools 2026-05-29

    ### explcheck v0.22.0

    #### New features

    This version of explcheck has implemented the following new features:

    - Add more support for flow analysis. (#218)

    This adds support for the following issues from the document titled
    [_Warnings and errors for the expl3 analysis tool_][warnings-and-errors]:

    1. W517 (Unused variable or constant)

    - In the semantic analysis, add a call type for standalone variable or constant
    control sequences. (#213, #215)

    Previously, standalone variable or constant control sequences were considered
    other unrecognized tokens. This has improved [code coverage][] by 33,294
    expl3 tokens (~0.4% of all expl3 tokens) on TeX Live 2025.

    - Perform semantic analysis on boolean expression segments. (#213, #215)

    - Detect boolean expression segments in calls to control sequences like
    `\bool_if:nTF`. (#215, #217)

    - Emit both `VARIABLE_DECLARATION` and `VARIABLE_DEFINITION` statements for
    constant definitions like `\tl_const:Nn`. (#218)

    Previously, only a `VARIABLE_DEFINITION` statement would have been produced,
    requiring special-casing for issues like W415 (Unused variable or constant),
    W416 (Setting an undeclared variable), and W419 (Using an undeclared variable
    or constant).

    - In flow analysis, draw `VARIABLE_USE` and `VARIABLE_USE_RETURN` edges. (#218)

    - Include the number of reaching definition loops in verbose command-line
    output. (#218)

    #### Fixes

    This version of explcheck has fixed the following problems:

    - Do not report issue W415 (Unused variable or constant) for defined box
    variables. (reported by @dcpurton in #214, fixed in #216)

    Defining box variables can have useful side effects even if the variable
    isn't used elsewhere.

    - In the semantic analysis, consider `\rf?typerf-_log:*` a variable use. (#217)

    - Reduce false positive detections of issues E408 (Calling an undefined
    function), E411 (Indirect function definition from an undefined function),
    and W416 (Setting an undeclared variable). (#218)

    This was achieved by using pattern-based matching for only partially
    understood variable declarations and function definitions.

    #### 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 issue W511 (Defined an expandable function as protected), since
    it doesn't actually constitute an issue: there are good reasons to protect a
    function from expansion, even if it is otherwise expandable. (#213)

    #### Housekeeping

    This version of explcheck has completed the following housekeeping tasks:

    - Reduce repetition in the function `analyze_group_wide_statements()` from
    `explcheck-semantic-analysis.lua` by introducing two new mechanisms:
    maybe-trackers and statement category lists and indices. (#217)

    #### Continuous integration

    This version of explcheck has made the following changes to our continuous integration (CI):

    - In the CI, force flow analysis for TeX Live 2025 rather than the latest TeX
    Live, so that we can compare the diff against our 2025 baselines. (ea03ec0) - In the CI, check that the `lua-toml` submodule is up-to-date even if checking
    the `latex3` submodule failed. (340f6bc)

    #### Dependencies

    This version of explcheck has made the following changes to third-party Git submodules and other dependencies:

    - Update the `latex3` submodule from 2026-04-28-dev to 2026-05-15-dev. (85b126a)

    [code coverage]: https://witiko.github.io/Expl3-Linter-11/#code-coverage
    [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://www.ctan.org/pkg/expltools

    ------------------------------------------------------------------------

    Thanks for the upload.

    For the CTAN Team
    Erik Braun

    ------------------------------------------------------------------------

    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.22a-Linux NewsLink 1.2
  • From CTAN Announcements@manfred@ctan.org to ctan-ann on Fri Jun 26 17:13:49 2026
    From Newsgroup: comp.text.tex

    V|!t Star|+ Novotn|+ submitted an update to the

    expltools

    package.

    Version: 2026-06-25
    License: lppl1.3c gpl2+

    Summary description: Development tools for expl3 programmers

    Announcement text: --------------------------------------------------------------------------------
    ## expltools 2026-06-25

    ### explcheck v0.23.0

    #### Dependencies

    This version of explcheck has made the following changes to third-party Git submodules and other dependencies:

    - Update the `latex3` submodule from 2026-05-15-dev to 2026-05-26-dev. (61b5ce2)
    - Update the `latex3` submodule from 2026-05-26-dev to 2026-06-19-dev. (25d108d)
    - Bump `actions/checkout` from 6 to 7. (contributed by @dependabot in #222) --------------------------------------------------------------------------------

    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.22a-Linux NewsLink 1.2