Development¶
Code structure¶
The tool is implemented as a set of reviewers, each with its own focus. The reviewers keep track of their comments as the LaTeX file is processed line by line. Once the entire file has passed, all diagnostics are printed to the console, referencing line numbers. A summary is also outputted at the end. As the reviewers are independent of one another, adding new ones does not break existing features.
Reviewer implementations are located in source/reviewers/. All inherit
from the base class in source/reviewers/reviewer.py, and a central
rule registry is in source/reviewers/rules.py.
Rule identity¶
Every diagnostic refers to one immutable Rule in the central registry.
The registry contains the error code, name, message template, severity,
and documentation path. A Diagnostic adds the context for one
occurrence: source filename, line, and the rendered message.
Reviewer prefixes:
Reviewer_InthisusesINT.Reviewer_CasingusesCAS.Reviewer_UnsureusesUNS.Reviewer_RefLabelusesREF.Reviewer_FigureusesFIG.Reviewer_ChkTeXusesCHK.
Each reviewer owns the numeric suffixes in its prefix. For example,
CAS001 is the casing rule and FIG003 is the missing-figure-label
rule. Native ChkTeX diagnostics use CHK001 through CHK899 with the
Native ChkTeX diagnostics use CHK001 through CHK899 with the
native ChkTeX number preserved. Native numbers at or above 900 are shifted
into a disjoint range. TeXact’s ChkTeX lifecycle rules use CHK901 through
CHK904 so the two sources cannot collide.
Rule documentation is indexed at docs/rules/index.md. Each TeXact rule
has its own Markdown page under docs/rules/ with sections for what it
detects, why the issue matters, and a LaTeX example. When adding a rule, add
its registry entry, use the returned named rule handle when creating
diagnostics, add its dedicated page to the hidden rule toctree, and add tests.
Never reuse a published code.
Adding features¶
All reviewers inherit from the same base class, Reviewer, and
implement a set of methods: process_line, get_comments,
get_summary, get_status, and get_name. get_comments
returns Diagnostic objects linked to registry Rule objects.
Use a named Rule handle from source/reviewers/rules.py and
call its render_message method for dynamic values. Add a test that checks
the registry metadata, the diagnostic location, and the rendered code in CLI
output.
Adding a feature involves either modifying an existing reviewer
or adding a new one.
The easiest way to get started is by studying one of the existing
classes, e.g. Reviewer_Unsure. The main file, texact, must be
updated to include any new reviewer.
Options to the command-line interface and the parsing of the configuration
file can be added as well.