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
_______________________________________________
ctan-ann mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to