CTAN Comprehensive TeX Archive Network

CTAN update: expltools

Date: August 19, 2025 7:25:25 PM CEST
Vít Starý Novotný 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

expltools – Development tools for expl3 programmers

This bundle introduces explcheck, a static analysis tool for developers working with expl3 code. Currently in its initial release, explcheck aims to help developers identify potential issues and improve code quality. In the future, this bundle may expand to include additional development tools for expl3.

Packageexpltools
Version 2025-08-18
Copyright2024–2025 Vít Starý Novotný
MaintainerVít Starý Novotný

Announcements

more

Guest Book Sitemap Contact Contact Author