• CTAN update: expltools

    From CTAN Announcements@erik@ctan.org to ctan-ann on Tue Aug 19 21:25:25 2025
    From Newsgroup: comp.text.tex

    V0t Star2 Novotn2 submitted an update to the

    expltools

    package.

    Version number: 2025-08-18
    License type: lppl1.3c gpl2+

    Summary description: Development tools for expl3 programmers

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


    ## expltools 2025-08-18

    ### explcheck v0.12.0

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

    - Postpone planned issue E417 (Multiply declared variable or constant) to flow
    analysis, under the identifier E519 and the same name. (#110, #112)

    - Postpone planned issue E242 (Multiply defined message) to flow analysis,
    under the identifier E524 and the same name. (#110, #112)

    - Plan for a weaker version of issue E522 (Too few arguments supplied to
    message) to semantic analysis under the identifier E425 and the same name.
    (#110, #112)

    - Remove issues S205 (Malformed function name), S206 (Malformed variable or
    constant name), and S207 (Malformed quark or scan mark name) and replan them
    to semantic analysis under the identifiers S412, S413, and S414, respectively,
    and the same names. (reported by @u-fischer in #109, added in #117)

    - Plan for a new issue E417 (Setting a variable as a constant). (#119)

    - Unplan issues W419 (Using a token list variable or constant without
    an accessor) and E420 (Using non-token-list variable or constant without
    an accessor). (#121)

    - Reclassify the planned errors E421 and E518 (Using an undefined variable or
    constant) as warnings W421 and W518, respectively. (#121)

    - Unplan issues W424 and E521 (Setting an undefined message). (#127)

    - Reclassify and rename the planned errors E426 and E522 (Too few arguments
    supplied to message) to W426 and W522 (Incorrect number of arguments supplied
    to message), respectively. (#127)

    #### Development

    This version of explcheck has implemented the following new features:

    - Include contextual information in human-readable issue descriptions.
    (suggested by @u-fischer at TUG 2025, reported in #110, added in #112)

    - Improve autodetection of expl3 for small example files. (c5ad7a4)

    Previously, we added a new Lua option `min_expl3like_material`, which would
    require at least 5 instances of expl3-like material for a file without
    standard expl3 delimiters to be recognized as expl3. However, this penalizes
    small example files, where there are only a few calls.

    After this change, the option has been renamed to
    `min_expl3like_material_count` and a new Lua option
    `min_expl3like_material_ratio` has been added that specifies the minimum
    portion of the file that must be occupied by expl3 material (defaults to 0.5,
    i.e. 50%) before it is automatically recognized as expl3 regardless.

    - Make `% noqa` comments at the beginning of a file silence issues everywhere.
    (suggested by @FrankMittelbach at TUG 2025, reported in #111, added in #116)

    - Add more support for semantic analysis. (#117..#122, #127)

    This adds support for all remaining issues from Section 4 of the document
    titled [_Warnings and errors for the expl3 analysis tool_][warnings-and-errors]:

    1. S412 (Malformed function name)
    2. S413 (Malformed function name)
    3. S414 (Malformed quark or scan mark name)
    4. W415 (Unused variable or constant)
    5. W416 (Setting an undeclared variable)
    6. E417 (Setting a variable as a constant)
    7. E418 (Setting a constant)
    8. W419 (Using an undeclared variable or constant)
    9. E420 (Locally setting a global variable)
    10. E421 (Globally setting a local variable)
    11. T422 (Using a variable of an incompatible type)
    12. W423 (Unused message)
    13. E424 (Using an undefined message)
    14. E425 (Incorrect parameters in message text)
    15. W426 (Incorrect number of arguments supplied to message)
    16. E427 (Comparison conditional without signature `:nnTF`)

    - Add Lua option `suppressed_issue_map`.

    This option defines a mapping between issues that suppress one or more
    other issues. At this point, this option only maps issue W200 ("Do not use"
    argument specifiers) to issues S412, S413, and S414, so that defining
    functions, variables, and constants with malformed names and a "do not use"
    specifier (`:D`) only produces issue W200 and not also S412, S413, and S414.

    In the future, this option will be highly used for issues from the flow
    analysis that have a weaker version in the semantic analysis. In these cases,
    the weaker version will always suppress the stronger version of an issue.

    - Make the Lua option `ignored_options`, the command-line option
    `--ignored-options`, the TeX comments `% noqa` and the Lua function
    `issues:ignore()` treat the issue identifiers as prefixes. (#123, #125)

    This allows you to e.g. ignore all style warnings on the current line with
    `% noqa: s`, all general warnings that originate from the semantic analysis
    with `--ignored-issues=W4`, etc.

    - Add Lua option `stop_after`. (#124, #126)

    This option allows you to specify after which processing step the analysis
    should stop. If an advanced processing step reports false positive issues
    on a complex expl3 file, this option can be used to reduce the number of
    false positive detections.

    - Add Lua option `stop_early_when_confused`. (#124, #126)

    This option, which is enabled by default, allows the processing steps to
    indicate that they are confused by the results of the previous processing
    steps and stop any further processing. If an advanced processing step reports
    false positive issues, then this option should stop the step from running
    and reduce the number of false positive detections.

    #### Fixes

    This version of explcheck has fixed the following bugs:

    - Prevent command-line option `--no-config-file` from raising the error
    `Config file "" does not exist`.
    (reported by @muzimuzhi in #107, fixed in 41446d0)

    - Do not report issue W401 (Unused private function) for well-known and
    imported prefixes. (#115)

    - Correctly parse indirect applications of creator functions via
    `\cs_generate_from_arg_count:NNnn`. (#118)

    - Properly use lazy matching and backtracking in control sequence name patterns
    produced during the semantic analysis. (#120)

    Previously, only wildcards at the end of a name would function properly (lazy
    matching) and any partial matches by previous patterns would prevent any
    potential matches by future patterns (backtracking). Both limitations were
    due to parsing expression grammars (PEGs) being greedy and non-backtracking
    by default. As a result, many wildcards would not match even though they
    should have.

    #### Continuous integration

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

    - Rename GitHub Action `teatimeguest/setup-texlive-action@v3` to `TeX-Live/...`.
    (reported by @pablogonz in markdown#576, fixed in 28ba10b5)

    - Bump actions/checkout and actions/download-artifact from 4 to 5.
    (contributed by @dependabot in #113 and #114)

    - Check Lua code blocks in `README.md` with luacheck. (1d21b97, 42f7504, 7b97271)

    #### Distribution

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

    - Install Bash in the Docker image. (e8c4a08)


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

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