• CTAN update: expltools

    From CTAN Announcements@petra@ctan.org to CTAN Announcements on Wed Oct 1 08:27:50 2025
    From Newsgroup: comp.text.tex

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

    expltools

    bundle.

    Version: 2025-09-29
    License: lppl1.3c gpl2+

    Summary description: Development tools for expl3 programmers

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

    ## expltools 2025-09-29

    ### explcheck v0.13.0

    #### Fixes

    This version of explcheck has fixed the following bugs:

    - Do not deduplicate issues with the same identifier and range but different
    context. (#132)

    - Do not report issues E420 (Locally setting a global variable) and E421
    (Globally setting a local variable) in top-level code. (21e2023a, 61a40cb7,
    cfa7847b)

    - Support message definitions using the deprecated function `\msg_gset:nn...`.
    (3101d9ff)

    #### 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]:

    - Plan issue S105 (Needlessly ignored issue). (#130, #132)

    [warnings-and-errors]: https://github.com/witiko/expltools/releases/download/latest/warnings-and-errors.pdf

    #### Development

    This version of explcheck has implemented the following new features:

    - Support inter-file dependencies. (#129, #131)

    After this change, you may manually _group files_ from the command-line
    interface as follows:

    explcheck first.tex + second.tex , third.tex , fourth.tex

    The above command would cause the files `first.tex` and `second.tex` to be
    processed together and allow explcheck to assume that these files will always
    be used together. As a result, using e.g. a function in the file `first.tex`
    that is only defined in the file `second.tex` would no longer raise the error
    E408 (Calling an undefined function).

    To control how files are grouped by default, you may use the new command-line
    option `--group-files`. To process a group of files in Lua, you may use the
    function `process_files()` from the file `explcheck-utils.lua`:

    ``` lua
    local utils = require("explcheck-utils")
    local first_group_results = utils.process_files({"first.tex", "second.tex"})
    local second_group_results = utils.process_files({"third.tex"})
    local third_group_results = utils.process_files({"fourth.tex"})
    ```

    - Add a new command-line option `--files-from`. (#131)

    Use this option to read the list of expl3 files to check from a text file.

    - Report a warning for needlessly ignored issues. (#130, #132)

    Needlessly ignored issues produce warning S105 (Needlessly ignored issue).

    - Update the representation of segments according to [the work-in-progress TUG
    2025 paper][expltools-tug25-paper]. (#128, #133)

    Previously, calls and statements were tied to expl3 parts, similarly to
    groupings and tokens, and the notion of "nested calls" and "nested
    statements" was tackled ad-hoc. Following this change, syntactic and
    semantic analyses no longer operate on expl3 parts but on segments that
    represent blocks of either top-level or nested code in some expl3 part from
    some file in the current group of files.

    This more general notion of a block of code that may carry calls and
    statements makes it possible to dynamically support new kinds of segments
    without changing the logic of the code. Furthermore, segments can be
    easily referenced regardless of their files and expl3 parts of origin, and
    subdivided into "chunks of well-understood code", which will be the base data
    type for the flow analysis. Therefore, this change lays the groundwork for
    the implementation of the flow analysis, where we'll be working with a
    directed graph with chunks as the nodes.

    - Recognize `T`- and `F`-type arguments as code segments. (#92, #136)

    This allows issues to be reported in true- and false-branches of conditional
    functions, even if these functions are unknown or nested.

    - Report code coverage in the verbose human-readable output. (#134, #135)

    The code coverage provides an estimate of how well-understood a piece of code
    is. Circa 14% of all expl3 code and 2% of all TeX code in current TeX Live is
    considered well-understood. The cut-off for performing the flow analysis is
    likely going to be circa 95% well-understood expl3 tokens, so most code will
    initially only be analyzed using semantic analysis, not flow analysis.

    #### Continuous integration

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

    - Compare code coverage on TeX Live 2024 with a baseline. (#134, #135)

    This acts as an extra precaution against regressions. In general, changes
    should only increase the code coverage compared to the baseline.

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

    The packagerCOs Catalogue entry can be viewed at
    https://ctan.org/pkg/expltools

    The packagerCOs files themselves can be inspected at
    https://mirrors.ctan.org/support/expltools/

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

    Thanks for the upload.

    For the CTAN Team
    Petra R|+be-Pugliese

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

    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.21a-Linux NewsLink 1.2
  • From CTAN Announcements@manfred@ctan.org to ctan-ann on Sun Oct 5 21:46:06 2025
    From Newsgroup: comp.text.tex

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

    expltools

    package.

    Version: 2025-10-04
    License: lppl1.3c gpl2+

    Summary description: Development tools for expl3 programmers

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

    ## expltools 2025-10-04

    ### explcheck v0.14.0

    #### Fixes

    This version of explcheck has fixed the following bugs:

    - Do not produce a Lua error when trying to generate all compatible specifiers
    for base specifiers `T`, `F`, `p`, `w`, and `D`. (reported by @muzimuzhi in
    #137, fixed in #138)

    - Fix the description of issue S413, which was previously "Malformed variable
    or constant" rather than "Malformed variable or constant _name_".
    (reported in #137 and #139, fixed in #140)

    - Reduce the range of semantic analysis issues to the smallest possible code
    region. (reported by @muzimuzhi in #137 and #139, fixed in #140)

    This is to reduce the chance of `% noqa` comments within long statements
    inadvertently silencing issues related to other parts of the statement.
    Specifically, the ranges of the following issues were narrowed from entire
    statements to particular parts of those statements:

    1. **W401 (Unused private function) and E404 (Protected predicate function):**
    From the beginning of the function definition to the beginning of the
    function replacement text (exclusive), if any, or the whole function
    definition otherwise.

    2. **T403 (Function variant of incompatible type) and W410 (Function variant
    of deprecated type):** The argument with the list of variant specifiers.

    3. **E405 (Function variant for an undefined function):** The argument with
    the function name.

    4. **E408 (Calling an undefined function):** The undefined function name.

    5. **S412 (Malformed function name), S413 (Malformed variable or constant
    name), and S414 (Malformed quark or scan mark name):** The argument with
    the malformed name.

    6. **W415 (Unused variable or constant), W416 (Setting an undeclared
    variable), E417 (Setting a variable as a constant), E418 (Setting a
    constant), W419 (Using an undeclared variable or constant), E420 (Locally
    setting a global variable), and E421 (Globally setting a local
    variable):** The argument with the variable or constant name.

    7. **T422 (Using a variable of an incompatible type):** From the beginning
    of the variable/constant declaration/definition/use to the beginning of
    any arguments following the variable/constant names (exclusive).

    8. **W423 (Unused message):** From the beginning of the message definition
    to the beginning of the message text (exclusive).

    9. **E424 (Using an undefined message):** From the beginning of the message use
    to the first text argument (exclusive), if any, or the whole message use
    otherwise.

    10. **E425 (Incorrect parameter in message text):** The incorrect parameter token.

    11. **E427 (Comparison conditional without signature `:nnTF`):** The argument
    with the comparison conditional name.

    #### 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]:

    - Fix the documentation of issue S413 (Malformed variable or constant name).
    (reported by @muzimuzhi in #137 and #139, fixed in #140)

    The module name is mandatory in the variable and constant name, as documented
    in Section 3.2 (Formal naming syntax) of the document titled [_The `expl3`
    package and LaTeX3 programming_][expl3].

    - Change the description of issue E425 from "Incorrect parameters in message
    text" to "Incorrect parameter in message text". (#140)

    [expl3]: https://mirrors.ctan.org/macros/latex/required/l3kernel/expl3.pdf
    [warnings-and-errors]: https://github.com/witiko/expltools/releases/download/latest/warnings-and-errors.pdf

    #### Continuous integration

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

    - Generate the file `explcheck-latex3.lua` from the files `l3obsolete.txt` and
    `l3prefixes.csv` in the package `l3kernel-dev` rather than `l3kernel`. (#140)

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

    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.21a-Linux NewsLink 1.2
  • From CTAN Announcements@manfred@ctan.org to ctan-ann on Thu Oct 23 21:52:35 2025
    From Newsgroup: comp.text.tex

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

    expltools

    package.

    Version: 2025-10-22
    License: lppl1.3c gpl2+

    Summary description: Development tools for expl3 programmers

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

    ## expltools 2025-10-22

    ### explcheck v0.15.0

    #### Development

    This version of explcheck has implemented the following new features:

    - Add support for a non-standard Vim's quickfix errorformat item `%M` in the
    Lua option `error_format`. (discussed with @YDX-2147483647 in #143, added in
    #144)

    Compared to `%m`, `%M` contains not just the issue description (e.g. "unused
    private function") but also the optional issue context (e.g. "unused private
    function: `\__example_foo:n`"), just like the human-readable output ever since
    explcheck v0.12.0.

    - Recognize calls to known or defined functions and function variants as a
    new statement type `FUNCTION_CALL` distinct from `OTHER_STATEMENT`. (#141)

    For the purpose of code coverage, calls to defined functions and function
    variants are now considered well-known tokens. This has significantly
    increased code coverage on TeX Live 2024 (from ca 13% to 30% of all expl3
    tokens).

    - Only detect well-understood tokens in analyzed parts of statements. (#141)

    Specifically, this prevents us from considering e.g. the value in a variable
    definition well-understood, unless we have analyzed it. After this change,
    the code coverage should be a better lower-bound estimate of actual code
    understanding. This has significantly reduced code coverage on TeX Live 2024
    (from ca 30% to 24% of all expl3 tokens).

    - Add context for the issue S103 (Line too long). (#141)

    - Draft flow analysis. (#141)

    - Include expl3 part delimiters in the total number of bytes. (#141)

    This increases the estimated number of expl3 bytes and allows us to determine
    whether two expl3 parts are immediately adjacent when we disregard
    delimiters, which has some significance for the flow analysis.

    #### Fixes

    This version of explcheck has fixed the following bugs:

    - Fix the detection of the issue S103 (Line too long), which was previously
    often only detected in parts of the input files outside expl3 parts. (#141)

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

    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.21a-Linux NewsLink 1.2
  • From CTAN Announcements@petra@ctan.org to CTAN Announcements on Wed Nov 26 12:38:12 2025
    From Newsgroup: comp.text.tex

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

    expltools

    package.

    Version: 2025-11-24
    License: lppl1.3c gpl2+

    Summary description: Development tools for expl3 programmers

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

    ## expltools 2025-11-24

    ### explcheck v0.16.0

    #### Development

    This version of explcheck has implemented the following new features:

    - Support specifying cut-off dates for deprecations from the file
    `l3obsolete.txt` and prefixes from the file `l3prefixes.csv`.
    (suggested by @YDX-2147483647 in #147 and #149, added in #150)

    For example, here is how your config file `.explcheckrc` might look if you
    would like to only take into account the deprecations and prefixes from
    TeX Live 2024 and earlier:

    ``` toml
    [defaults]
    l3obsolete_max_deprecated_date = "2024-03-30"
    l3prefixes_max_first_registered_date = "2024-11-18"
    ```

    You may get these dates by running the script `generate-explcheck-latex3.lua`
    with files `l3obsolete.txt` and `l3prefixes.csv` from TeX Live 2024 placed in
    the current working directory or other locations indexed by the KPathSea
    library. Here is the output of the script:

    ```
    LPEG parsers and other information extracted from LaTeX3 data files.
    Generated on 2025-11-06 from the following files:
    - "l3obsolete.txt" with the latest obsolete entry from 2024-03-30
    - "l3prefixes.csv" with the latest registered prefix from 2024-11-18
    ```

    You may also just use the dates of the last update to TeX Live 2024
    (2025-03-09) for both options, see https://tug.org/historic, directory
    `systems/texlive/2024/tlnet-final`.

    #### Fixes

    This version of explcheck has fixed the following bugs:

    - Fix an attempt to index a nil value in function `count_segments()` from the
    file `explcheck-evaluation.lua`. (#150)

    This bug would surface when printing results for files whose processing
    stopped before the syntactic analysis step.

    #### Continuous integration

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

    - Use historic files "l3obsolete.txt" and "l3prefixes.csv" in CI. (#150)

    - Include example files from the `doc` subtree in regression tests. (#150)

    This has reduced code coverage from ca 24% to 21% of all expl3 tokens on
    TeX Live 2024 and from ca 22% to 20% on current TeX Live 2025 (2025-11-06).

    - Check if the configuration is minimal even for expl3 files without any
    issues. (#150)

    This is necessary to prevent incorrect recommendations to remove unnecessary
    default settings from the file `.explcheckrc` in the script
    `prune-explcheck-config.lua`.

    - Bump actions/checkout from 5 to 6. (contributed by @dependabot in #151)

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

    The packagerCOs Catalogue entry can be viewed at
    https://ctan.org/pkg/expltools

    The packagerCOs files themselves can be inspected at
    https://mirrors.ctan.org/support/expltools/

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

    Thanks for the upload.

    For the CTAN Team
    Petra R|+be-Pugliese

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

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