TableLint 🐈⬛📊
ESLint for academic tables.
TableLint is an open-source linter for academic tables. It helps researchers catch deterministic data-quality and formatting problems before submission.
Part of 喵造实验室 / MeowBuild Lab and the Academic Lint family:
- FigureLint — figure QA
- RefLint — reference QA
- TableLint — table QA
- ManuscriptLint — manuscript preflight
Current checks
CSV / XLSX
- empty column headers
- duplicate column headers
- entirely empty columns
- leftover placeholders such as
TODO,TBD,???, andFIXME - exact duplicate data rows (informational)
- explicit percentage values outside 0–100%
- numeric p-values outside 0–1 in clearly named p-value columns
- mixed decimal precision when one precision clearly dominates (informational)
- header-declared Mean ± SD / SEM formatting
- header-declared Mean (SD / SEM) formatting
- negative SD / SEM spread values
- confidence-interval syntax and bound ordering
- paired CI lower / upper column ordering
- opt-in significance-star ↔ exact p-value consistency checks
Summary-statistic checks only activate when the column header explicitly declares a combined representation such as Mean ± SD or Mean (SEM). Confidence-interval checks only activate for headers that explicitly contain CI or confidence interval.
LaTeX
tableenvironments without captions- missing table labels (informational)
- missing
tabularinside a table - inconsistent simple row widths
- standalone
tabularenvironments - summary-statistic / CI cell checks when headers explicitly declare them
TableLint deliberately avoids claiming that a duplicated row or mixed decimal precision is scientifically wrong. Those cases are surfaced as information because they may be intentional.
Install
Requires Python 3.10+.
The first public release is prepared for PyPI. After v0.1.0 is published:
pip install tablelint
From source
git clone https://github.com/coocoomaomao/TableLint.git
cd TableLint
python -m venv .venv
pip install -e .
For development:
pip install -e ".[dev]"
pytest
Usage
tablelint check results.csv
tablelint check results.xlsx
tablelint check tables.tex
tablelint check tables/
Fail CI when warnings exist:
tablelint check tables/ --strict
Machine-readable output:
tablelint check tables/ --format json
Enable a project-specific significance-star convention explicitly:
tablelint check results.csv --star-thresholds 0.05,0.01,0.001
The thresholds map to *, **, and *** using strict p < threshold comparisons. Comparator p-values such as <0.05 are skipped by this rule when they do not determine a unique star count.
Emit native GitHub Actions annotations:
tablelint check tables/ --github-annotations
GitHub Actions
Before the first tagged release, use @main:
- uses: coocoomaomao/TableLint@main
with:
path: tables/
strict: "true"
After v0.1.0, pin the Action to @v0.1.0.
See GitHub Action usage.
Exit codes
0: no structural errors; warnings are allowed unless--strictis used1: warnings found in strict mode2: unreadable / structural file errors
Philosophy
TableLint separates:
- deterministic problems — malformed/unreadable files, impossible ranges, reversed CI bounds, negative SD/SEM,
- likely formatting issues — empty headers, placeholders, declared summary-statistic/CI syntax mismatches, LaTeX structure,
- context-dependent signals — duplicates and precision consistency.
The third category stays informational by default. TableLint does not judge whether a reported mean, SD, SEM, CI width, or p-value is scientifically plausible.
Release
The first public release is v0.1.0.
Planned next
- optional unit consistency
- configurable missing-value policy
- ManuscriptLint integration
License
MIT
Release files for tablelint 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| tablelint-0.1.0.tar.gz | 19.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| tablelint-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 37.0 kB
Release files / tablelint-0.1.0.tar.gz
| Download URL | tablelint-0.1.0.tar.gz |
|---|---|
| Size | 19.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a842f2fab07f00d19df70588a0179d5d1faa8fd602c0dc8bed73abb98e888de6
|
|
BLAKE2b-256 checksum How to use checksums |
1efae50991a235b9179fe180926e3dec2aa6aa75047517121f6583277a11afd0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.
Transparency logRelease files / tablelint-0.1.0-py3-none-any.whl
| Download URL | tablelint-0.1.0-py3-none-any.whl |
|---|---|
| Size | 17.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8e33357e0b9a6e429fb5eec06080d882275646499a76b239c4dd9ab8e7e6a48c
|
|
BLAKE2b-256 checksum How to use checksums |
b723f8fa3e9d760276fd9fadf4c57bb4feb2a2bdcf74d7462ba85eeb83301e7c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.
Transparency log