• CTAN update: expltools

    From CTAN Announcements@manfred@ctan.org to ctan-ann on Fri Feb 6 15:46:52 2026
    From Newsgroup: comp.text.tex

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

    expltools

    package.

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

    Summary description: Development tools for expl3 programmers

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

    ## expltools 2026-02-05

    ### explcheck v0.17.1

    #### Fixes

    This version of explcheck has fixed the following bugs:

    - Speed up processing steps before flow analysis. (#158..#161, aadd378)

    These changes improve processing time by about 15% for an average package
    file in the current TeX Live, and by up to 300% for large files like
    `expl3-code.tex`.

    #### Documentation

    This version of explcheck has made the following improvements to the documentation:

    - Specify syntax highlighting for configuration files. (contributed by
    @muzimuzhi in #157)

    #### Continuous integration

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

    - Check Lua code using [the Lua Language Server (LuaLS)][LuaLS] in addition to
    [Luacheck][]. (#161)

    [LuaLS]: https://github.com/LuaLS/lua-language-server
    [Luacheck]: https://github.com/mpeterv/luacheck

    - Add a 3-minute time limit when running explcheck over the entire TeX Live
    to prevent excessively long analyses on infinite loops. (#161) --------------------------------------------------------------------------------

    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.21b-Linux NewsLink 1.2
  • From CTAN Announcements@vincent@ctan.org to CTAN Announcements on Wed Jan 28 08:49:40 2026
    From Newsgroup: comp.text.tex


    --Apple-Mail=_6A90322E-94DF-441C-B1B8-328F8F988D19
    Content-Transfer-Encoding: quoted-printable
    Content-Type: text/plain;
    charset=utf-8

    V=C3=ADt Star=C3=BD Novotn=C3=BD submitted an update to the
    =20
    expltools
    =20
    package.
    =20
    Version: 2026-01-27
    License: lppl1.3c gpl2+
    =20
    Summary description: Development tools for expl3 programmers
    =20
    Announcement text: ----------------------------------------------------------------------
    =20
    ## expltools 2026-01-27
    =20
    ### explcheck v0.17.0
    =20
    #### Development
    =20
    This version of explcheck has implemented the following new features:
    =20
    - Implement reaching definitions algorithm for function (variant) =
    definitions
    to the flow analysis. (#152)
    =20
    This algorithm has been described in some detail in [a recent blog
    post][Expl3-Linter-11.5].
    =20
    [Expl3-Linter-11.5]: https://witiko.github.io/Expl3-Linter-11.5/ =
    "Static analysis of expl3 programs (11=C2=BD): Chunks, edges, flow =
    graphs, confidence, and reaching definitions"
    =20
    Flow analysis remains disabled by default, since no issues are =
    reported from
    it yet. To enable it, set the Lua option `stop_after =3D "flow =
    analysis"`
    either in your Lua code or your configuration file.
    =20
    After this change, you may already see preliminary flow analysis =
    results in
    explcheck's verbose output. However, unless explcheck understands =
    your file
    sufficiently well, it will typically stop before reaching the flow =
    analysis
    step and will report this in the verbose output.
    =20
    If explcheck reaches semantic analysis, you can encourage it to =
    proceed to
    flow analysis by decreasing the Lua option `min_code_coverage` =
    towards zero.
    If explcheck bails out earlier, try disabling =
    `stop_early_when_confused` or,
    ideally, improve your code quality and contribute to expltools so =
    that it can
    understand your code better. =F0=9F=98=89
    =20
    - In the syntactic analysis, fix the assignment of segment numbers to =
    `T`- and
    `F`-type arguments. (#152)
    =20
    - Add Lua options `max_reaching_definition_inner_loops` and
    `max_reaching_definition_outer_loops`. (#152)
    =20
    These options help guard against the reaching definitions algorithm =
    failing
    to converge fast.
    =20
    #### Continuous integration
    =20
    This version of explcheck has made the following changes to our =
    continuous
    integration:
    =20
    - Bump actions/download-artifact from 6 to 7. (contributed by =
    @dependabot in #153)
    =20
    - Bump actions/upload-artifact from 5 to 6. (contributed by =
    @dependabot in #154)
    =20
    - Display processing progress in the CI. (#152)
    =20
    - Analyze package files using multiple CPUs in the CI. (#152)
    =20
    This speeds up the CI by ca 40% from ca 25 minutes to ca 15 minutes.
    =20
    ----------------------------------------------------------------------
    =20
    The package=E2=80=99s Catalogue entry can be viewed at
    https://ctan.org/pkg/expltools
    =20
    The package=E2=80=99s files themselves can be inspected at
    https://mirrors.ctan.org/support/expltools/
    =20
    ----------------------------------------------------------------------
    =20
    Thanks for the upload.
    =20
    For the CTAN Team
    Vincent Goulet
    =20
    ----------------------------------------------------------------------
    =20
    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

    --Apple-Mail=_6A90322E-94DF-441C-B1B8-328F8F988D19
    Content-Transfer-Encoding: quoted-printable
    Content-Type: text/html;
    charset=utf-8

    <html aria-label=3D"message body"><head><meta http-equiv=3D"content-type" = content=3D"text/html; charset=3Dutf-8"></head><body =
    style=3D"overflow-wrap: break-word; -webkit-nbsp-mode: space; =
    line-break: after-white-space;"><div = class=3D"Apple-Mail-URLShareUserContentTopClass">V=C3=ADt Star=C3=BD = Novotn=C3=BD submitted an update to the</div><div = class=3D"Apple-Mail-URLShareWrapperClass" style=3D"position: relative = !important;"><blockquote type=3D"cite" style=3D"border-left-style: none; = color: inherit; padding: inherit; margin: inherit;"><br><span = class=3D"Apple-converted-space">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> = expltools<br><br>package.<br><br>Version: 2026-01-27<br>License: =
    lppl1.3c gpl2+<br><br>Summary description: Development tools for expl3 = programmers<br><br>Announcement = text:<br>-----------------------------------------------------------------= -----<br><br>## expltools 2026-01-27<br><br>### explcheck =
    v0.17.0<br><br>#### Development<br><br>This version of explcheck has = implemented the following new features:<br><br>- Implement reaching = definitions algorithm for function (variant) definitions<br><span = class=3D"Apple-converted-space">&nbsp;</span> to the flow analysis. = (#152)<br><br><span class=3D"Apple-converted-space">&nbsp;</span> This = algorithm has been described in some detail in [a recent blog<br><span = class=3D"Apple-converted-space">&nbsp;</span> = post][Expl3-Linter-11.5].<br><br><span = class=3D"Apple-converted-space">&nbsp;&nbsp;</span> [Expl3-Linter-11.5]: = https://witiko.github.io/Expl3-Linter-11.5/ "Static analysis of expl3 = programs (11=C2=BD): Chunks, edges, flow graphs, confidence, and =
    reaching definitions"<br><br><span = class=3D"Apple-converted-space">&nbsp;</span> Flow analysis remains =
    disabled by default, since no issues are reported from<br><span = class=3D"Apple-converted-space">&nbsp;</span> it yet. To enable it, set =
    the Lua option `stop_after =3D "flow analysis"`<br><span = class=3D"Apple-converted-space">&nbsp;</span> either in your Lua code or =
    your configuration file.<br><br><span = class=3D"Apple-converted-space">&nbsp;</span> After this change, you may = already see preliminary flow analysis results in<br><span = class=3D"Apple-converted-space">&nbsp;</span> explcheck's verbose =
    output. However, unless explcheck understands your file<br><span = class=3D"Apple-converted-space">&nbsp;</span> sufficiently well, it will = typically stop before reaching the flow analysis<br><span = class=3D"Apple-converted-space">&nbsp;</span> step and will report this =
    in the verbose output.<br><br><span = class=3D"Apple-converted-space">&nbsp;</span> If explcheck reaches =
    semantic analysis, you can encourage it to proceed to<br><span = class=3D"Apple-converted-space">&nbsp;</span> flow analysis by =
    decreasing the Lua option `min_code_coverage` towards zero.<br><span = class=3D"Apple-converted-space">&nbsp;</span> If explcheck bails out =
    earlier, try disabling `stop_early_when_confused` or,<br><span = class=3D"Apple-converted-space">&nbsp;</span> ideally, improve your code = quality and contribute to expltools so that it can<br><span = class=3D"Apple-converted-space">&nbsp;</span> understand your code =
    better. =F0=9F=98=89<br><br>- In the syntactic analysis, fix the =
    assignment of segment numbers to `T`- and<br><span = class=3D"Apple-converted-space">&nbsp;</span> `F`-type arguments. = (#152)<br><br>- Add Lua options `max_reaching_definition_inner_loops` = and<br><span class=3D"Apple-converted-space">&nbsp;</span> = `max_reaching_definition_outer_loops`. (#152)<br><br><span = class=3D"Apple-converted-space">&nbsp;</span> These options help guard = against the reaching definitions algorithm failing<br><span = class=3D"Apple-converted-space">&nbsp;</span> to converge =
    fast.<br><br>#### Continuous integration<br><br>This version of =
    explcheck has made the following changes to our = continuous<br>integration:<br><br>- Bump actions/download-artifact from =
    6 to 7. (contributed by @dependabot in #153)<br><br>- Bump = actions/upload-artifact from 5 to 6. (contributed by @dependabot in = #154)<br><br>- Display processing progress in the CI. (#152)<br><br>- =
    Analyze package files using multiple CPUs in the CI. (#152)<br><br><span = class=3D"Apple-converted-space">&nbsp;</span> This speeds up the CI by =
    ca 40% from ca 25 minutes to ca 15 = minutes.<br><br>----------------------------------------------------------= ------------<br><br>The package=E2=80=99s Catalogue entry can be viewed = at<br><span class=3D"Apple-converted-space">&nbsp;&nbsp;&nbsp;</span> = https://ctan.org/pkg/expltools<br><br>The package=E2=80=99s files =
    themselves can be inspected at<br><span = class=3D"Apple-converted-space">&nbsp;&nbsp;&nbsp;</span> = https://mirrors.ctan.org/support/expltools/<br><br>-----------------------= -----------------------------------------------<br><br>Thanks for the = upload.<br><br>For the CTAN Team<br>Vincent = Goulet<br><br>------------------------------------------------------------= ----------<br><br>CTAN is run entirely by volunteers and supported by =
    TeX user groups.<br>Please join a user group or donate to one, see = https://ctan.org/lugs<br>

    </blockquote></div></body></html>=

    --Apple-Mail=_6A90322E-94DF-441C-B1B8-328F8F988D19--
    --- Synchronet 3.21b-Linux NewsLink 1.2
  • From CTAN Announcements@petra@ctan.org to CTAN Announcements on Thu Mar 5 16:53:35 2026
    From Newsgroup: comp.text.tex

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

    expltools

    package.

    Version: 2026-03-04
    License: lppl1.3c gpl2+

    Summary description: Development tools for expl3 programmers

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

    ## expltools 2026-03-04

    ### explcheck v0.18.0

    #### Enhancements

    This version of explcheck has made the following new enhancements:

    - In human-readable output, mention that further issues may be reported after
    fixing the current errors after we have failed fast. (reported by @dbitouze
    and @muzimuzhi in #170 and #171, fixed in #175)

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

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

    1. E505 (Calling an undefined function)

    Flow analysis is now enabled by default for all package files with at least 95%
    code understanding.

    - In issue W419 (Using an undeclared variable or constant), also report
    undeclared usages through `V`- and `v`-type arguments. (#176)

    - Support the plain TeX `\newtoks` command and the corresponding deprecated
    expl3 function `\toks_new:N`. (#176)

    - Support separate command-line options `--long-option value` in addition to
    `--long-option=value`. (contributed by @muzimuzhi in #178)

    - Deprecate the command-line options `--group-files={true|false|auto}` and
    `--make-at-letter={true|false|auto}`. Add the valueless options
    `--make-at-letter`, `--make-at-other`, `--group-files`, and
    `--no-group-files`. (#178)

    The expected usage is now as follows:

    - `--make-at-letter` instead of `--make-at-letter=true`
    - `--make-at-other` instead of `--make-at-letter=false`
    - `--group-files` instead of `--group-files=true`
    - `--no-group-files` instead of `--group-files=false`
    - no option instead of `--make-at-letter=auto` and `--group-files=auto` (default)

    The deprecated options are scheduled for removal in version 1.0.0.

    #### Code understanding

    This version of explcheck introduces the following changes to code understanding
    and to how it evaluates its own level of confidence:

    - Add support for `\cs_undefine:N`. (#176)
    - Treat simple constant and variable definitions, as well as message texts, as
    well-understood. (#176)
    - Consider `FUNCTION_CALL` statements high-confidence and well-understood only
    if there are no potential low-confidence definitions of the called control
    function. (#176)

    These changes have had a mixed effect on the [code coverage][]. Overall, it has
    remained mostly stable, but coverage on the current TeX Live 2025 snapshot
    (2026-02-19) now rounds to 19%, down from the previous 20%.

    [code coverage]: https://witiko.github.io/Expl3-Linter-11/#code-coverage

    #### Fixes

    This version of explcheck has fixed the following bugs:

    - Fix an integer overflow in function `format_pathname()`. (reported by
    @muzimuzhi in #163, fixed in 776eb72)
    - Fix a failure to load TOML files whose last line is a comment without
    a trailing newline. (reported by @Chipsterjulien in jonstoler/lua-toml#27
    and by @muzimuzhi in #165, fixed in #166)
    - Record control sequence name usage and definitions in unanalyzed arguments.
    (reported by @dbitouze in #170 and #173, fixed in #174)
    - Do not produce warning S204 (Missing stylistic whitespaces) for repeated
    begin group (`{{`) or end group (`}}`). (discovered in witiko/markdown#623,
    fixed in #177)

    #### Documentation

    This version of explcheck has made the following improvements to the documentation:

    - Document that `% noqa` at the top of a file silences issues everywhere.
    (f1528f1)

    #### Continuous integration

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

    - Run LuaLS even if Luacheck failed. (95f71a1)
    - Run one additional process to reduce the problem of idle CPUs near the end
    while one worker grinds a difficult task. (#174, 19ceb45)
    - Increase the time limit for running explcheck over the entire TeX Live
    from 3 to 5 minutes. (#176)
    - Migrate from `TeX-Live/setup-texlive-action@v3` to `zauguin/install-texlive@v4`.
    (drafted by @koppor in koppor#1 and independently suggested by @muzimuzhi and
    @gucci-on-fleek in #178, added in #181)
    - Bump `actions/upload-artifact` from 6 to 7. (contributed by @dependabot in #179)
    - Bump `actions/download-artifact` from 7 to 8. (contributed by @dependabot in #180)

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

    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.21d-Linux NewsLink 1.2
  • From CTAN Announcements@vincent@ctan.org to CTAN Announcements on Wed Mar 11 10:23:54 2026
    From Newsgroup: comp.text.tex

    V|!t Star|+ Novotn|+ submitted an update to the
    expltools
    package.
    Version: 2026-03-10
    License: lppl1.3c gpl2+
    Summary description: Development tools for expl3 programmers
    Announcement text: ----------------------------------------------------------------------
    ## expltools 2026-03-10
    ### explcheck v0.18.1
    #### Fixes
    This version of explcheck has fixed the following problems:
    - Merge consecutive blocks of function (variant) definitions and function
    undefinitions into macro-statements that form flow-graph vertices instead
    of individual statements. (suggested by @lostenderman in #156, fixed in #183)
    This change improves processing time by about 10% for an average package file
    in TeX Live 2024, and by up to 98% (or 53|u) for large files such as
    `expl3-code.tex` when flow analysis is enabled despite incomplete code
    understanding. It also reduces the memory footprint of flow analysis by
    up to 3|u for those files.
    After this change, the default value of the Lua option
    `max_reaching_definition_inner_loops` has been reduced from 30,000,000
    to just 650,000 inner-loop iterations.
    - Fix the assignment of segment numbers to replacement texts. (#183)
    This would cause function definition statements to point to segments other
    than the replacement texts, confusing the flow analysis.
    This change reduces processing time by about 2% for an average package file
    in TeX Live 2024, and by up to 11% for large files such as `expl3-code.tex`
    when flow analysis is enabled despite incomplete code understanding.
    - Raise an error on ambiguous uses of `--long-option VALUE`, where `VALUE` is
    a valid command-line option. (contributed by @muzimuzhi in #185 and c48fa116) #### Docker image
    This version of explcheck has made the following changes to our Docker image `ghcr.io/witiko/expltools/explcheck`:
    - Replace Lua 5.3 with LuaJIT in `Dockerfile`. (#184)
    This change improves processing time by about 33% for an average package
    file in TeX Live 2024, and by up to 61% for large files such as
    `expl3-code.tex` when flow analysis is enabled despite incomplete code
    understanding.
    #### Continuous integration
    This version of explcheck has made the following changes to our continuous integration:
    - Run regression tests on different Lua interpreters: Lua 5.2, 5.3, 5.4,
    LuaTeX, and LuaJIT. (#184)
    - Bump `docker/login-action` from 3 to 4. (contributed by @dependabot in #186.) Overall, the changes in this release reduce the processing time for large
    files such as `expl3-code.tex` from months to hours (up to 65|u) when flow analysis is enabled despite incomplete code understanding, and reduce the memory footprint of flow analysis by up to 3|u for those files.
    While this is still insufficient for real-time use (e.g., in a language server; see ticket #68), it makes the tool practical for scenarios such as continuous integration.
    For a discussion of other potential performance improvements of the flow analysis, see ticket #156. ----------------------------------------------------------------------
    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
    Vincent Goulet ----------------------------------------------------------------------
    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.21d-Linux NewsLink 1.2
  • From CTAN Announcements@vincent@ctan.org to CTAN Announcements on Sat Mar 14 16:48:04 2026
    From Newsgroup: comp.text.tex

    V|!t Star|+ Novotn|+ submitted an update to the
    expltools
    package.
    Version: 2026-03-13
    License: lppl1.3c gpl2+
    Summary description: Development tools for expl3 programmers
    Announcement text: ----------------------------------------------------------------------
    ## expltools 2026-03-13
    ### explcheck v0.18.2
    #### Fixes
    This version of explcheck has fixed the following problems:
    - Support `c`-type arguments in variable and constants declarations,
    definitions, and uses. (#187)
    This improved [code coverage][] from ca 21% to 25% of all expl3 tokens on
    TeX Live 2024.
    - Do a better job detecting arguments in unrecognized replacement texts when
    extracting control sequence name patterns from `c`-type arguments in function
    calls. (#187)
    - In semantic analysis, consider the base variables in indirect variable
    definitions to be used, similarly to how base functions in indirect
    function definitions are considered used. (#187)
    This has removed a dozen false positive detections of issue W415 (Unused
    variable or constant) on TeX Live 2024.
    - Include `\q_no_value` among well-known expl3 control sequence names. (#187)
    - Have the issue E417 (Setting a variable as a constant) mask the issue E421
    (Globally setting a local variable). (#187)
    This has removed a couple questionable detections of the issue E421 on
    TeX Live 2024.
    - Only consider potentially used function (variant) (un)definitions in the flow
    analysis. (suggested by @lostenderman in #156, fixed in #187)
    This change improves processing time by about 3% for an average package file
    in TeX Live 2024, and by up to 91% (or 11|u) for large files such as
    `expl3-code.tex` when flow analysis is enabled despite incomplete code
    understanding. It also reduces the memory footprint of flow analysis by
    up to 4|u for those files.
    After this change, the default value of the Lua option
    `max_reaching_definition_inner_loops` has been reduced from 650,000
    to just 350,000 inner-loop iterations.
    Overall, the changes in the past two releases have reduced the processing time for large files such as `expl3-code.tex` from months to a little over an hour (up to 800|u) when flow analysis is enabled despite incomplete code understanding, and have reduced the memory footprint of flow analysis by up to 12|u for those files.
    [code-coverage]: https://witiko.github.io/Expl3-Linter-11/#code-coverage ----------------------------------------------------------------------
    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
    Vincent Goulet ----------------------------------------------------------------------
    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.21d-Linux NewsLink 1.2
  • From CTAN Announcements@vincent@ctan.org to CTAN Announcements on Tue Mar 31 21:51:32 2026
    From Newsgroup: comp.text.tex

    V|!t Star|+ Novotn|+ submitted an update to the
    expltools
    package.
    Version: 2026-03-30
    License: lppl1.3c gpl2+
    Summary description: Development tools for expl3 programmers
    Announcement text: ----------------------------------------------------------------------
    ## expltools 2026-03-30
    ### explcheck v0.19.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 Section 5.1 of the document titled [_Warnings and errors for the expl3 analysis tool_][warnings-and-errors]:
    1. E500 (Multiply defined function)
    2. W501 (Multiply defined function variant)
    3. E504 (Function variant for an undefined function)
    4. E506 (Indirect function definition from an undefined function)
    5. W507 (Setting a function before definition)
    [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:
    - Update regression baselines from TeX Live 2024 to 2025. (f57c0080..e0ce50c4) - Test TeX Live 2026. (c578802e)
    - Disable caching in the `zauguin/install-texlive` action.
    (added by @zauguin in zauguin/install-texlive#128 and 611fde4) ----------------------------------------------------------------------
    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
    Vincent Goulet ----------------------------------------------------------------------
    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 Thu Apr 9 10:35:58 2026
    From Newsgroup: comp.text.tex

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

    expltools

    package.

    Version: 2026-04-07
    License: lppl1.3c gpl2+

    Summary description: Development tools for expl3 programmers

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

    ## expltools 2026-04-07

    ### explcheck v0.19.1

    #### Fixes

    This version of explcheck has fixed the following problems:

    - Fix malformed context for issue E505 (Calling an undefined function).
    (reported by @muzimuzhi in #191, fixed in #193)

    - Do not capture a newline after expl3-like material. (#193)

    This excludes the newline from the context messages and byte ranges for
    issues like E102 (Expl3 material in non-expl3 parts).

    - Only put argument specifiers in the context of issue E201 (Unknown argument
    specifiers), not the whole control sequence name. (#193)

    This makes the context of issue E201 consistent with issue E427 (Comparison
    conditional without signature `:nnTF`).

    - Fix the context of issue W200 ("Do not use" argument specifiers) missing
    characters when the name of the control sequence ends with double-superscript
    characters, like `\tex_let:^^44`. (#193)

    - Report resolved control sequence names (like `\tex_let:D`) instead of the raw
    input text (like `\tex_let:^^44`) for issues W200 and W202 (Deprecated
    control sequences). (#193)

    - Fix an incorrect assertion in code that reports issues E500 (Multiply defined
    function) and W501 (Multiply defined function variant). (reported by
    @muzimuzhi in #192, fixed in #194)

    - Do not consider a definition being reached by itself a redefinition.
    (reported by @muzimuzhi in #192, fixed in #194)

    This prevents false positive detections of the issues E500 and W501.

    - Do not report issue E505 (Calling an undefined function) when calling empty
    functions. (reported by @muzimuzhi in #192, fixed in #194)

    - Weaken the confidence of incoming reaching definitions when the in-degree is
    greater than one. (reported by @muzimuzhi in #192, fixed in #194)

    - Do not report issues for uninteresting macro-statements that are skipped
    during flow analysis and therefore have incomplete or unreliable information
    recorded. (#194)

    - Only require definite reaching definitions for issues E500 and W501, not
    issues E504 (Function variant for an undefined function), E506 (Indirect
    function definition from an undefined function), and W507 (Setting a function
    before definition). (#194)

    #### Continuous integration

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

    - Check issue context in tests. (reported by @muzimuzhi in #191, added in #193)

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

    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@vincent@ctan.org to CTAN Announcements on Tue Apr 14 12:29:07 2026
    From Newsgroup: comp.text.tex

    V|!t Star|+ Novotn|+ submitted an update to the
    expltools
    package.
    Version: 2026-04-13
    License: lppl1.3c gpl2+
    Summary description: Development tools for expl3 programmers
    Announcement text: ----------------------------------------------------------------------
    ## expltools 2026-04-13
    ### explcheck v0.19.2
    #### Fixes
    This version of explcheck has fixed the following problems:
    - Recognize `\prop_new_linked:N` as a variable declaration statement
    and `\prop_const_from_keyval:Nn`, `\prop_const_linked_from_keyval:Nn`,
    `\prop_set_from_keyval:Nn`, and `\prop_gset_from_keyval:Nn` as
    constant and variable definition statements. (reported by @muzimuzhi in #196,
    fixed in #198)
    More generally, this change also adds support for constant definitions in the
    form `\rf?typerf-_const_from_rf?base_typerf-:*`. This improves [code coverage][] by
    37,759 expl3 tokens (~0.004% of all expl3 tokens) on TeX Live 2026.
    - Correctly differentiate between direct and indirect variable and constant
    definitions in the form `\rf?typerf-_(set|gset|const)_from_rf?base_typerf-:*`. (#198)
    - Only report issues E504 (Function variant for an undefined function),
    E506 (Indirect function definition from an undefined function), and
    W507 (Setting a function before definition) for top-level reachable segments.
    (reported by @muzimuzhi in #195, fixed in #198)
    - Do not report issue E505 (Calling an undefined function) for indirect
    definitions that resolve to well-known control sequence names.
    (reported by @muzimuzhi in #197, fixed in #198)
    [code coverage]: https://witiko.github.io/Expl3-Linter-11/#code-coverage
    #### Continuous integration
    This version of explcheck has made the following changes to our continuous integration:
    - Update the `zauguin/install-texlive` action to v4.3. (484989a)
    - Retry `tlmgr install` and `update`. (#198) ----------------------------------------------------------------------
    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
    Vincent Goulet ----------------------------------------------------------------------
    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 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