Metadata-Version: 2.5
Name: manuscriptlint
Version: 0.1.0
Summary: A preflight linter for academic manuscripts.
Project-URL: Homepage, https://github.com/coocoomaomao/ManuscriptLint
Project-URL: Repository, https://github.com/coocoomaomao/ManuscriptLint
Project-URL: Issues, https://github.com/coocoomaomao/ManuscriptLint/issues
Project-URL: Changelog, https://github.com/coocoomaomao/ManuscriptLint/blob/main/CHANGELOG.md
Author: coocoomaomao
License: MIT License
        
        Copyright (c) 2026 coocoomaomao
        
        Permission is hereby granted, free of charge, to any person obtaining a copy
        of this software and associated documentation files (the "Software"), to deal
        in the Software without restriction, including without limitation the rights
        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
        copies of the Software, and to permit persons to whom the Software is
        furnished to do so, subject to the following conditions:
        
        The above copyright notice and this permission notice shall be included in all
        copies or substantial portions of the Software.
        
        THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
        SOFTWARE.
License-File: LICENSE
Keywords: academic,latex,linter,manuscript,publication,research
Classifier: Development Status :: 3 - Alpha
Classifier: Environment :: Console
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Text Processing :: Markup :: LaTeX
Requires-Python: >=3.10
Requires-Dist: rich>=13.7
Requires-Dist: typer>=0.12
Provides-Extra: dev
Requires-Dist: pytest>=8.2; extra == 'dev'
Provides-Extra: release
Requires-Dist: build>=1.2; extra == 'release'
Requires-Dist: twine>=5.1; extra == 'release'
Description-Content-Type: text/markdown

# ManuscriptLint 🐈‍⬛📝

> **ESLint for academic manuscripts.**

**ManuscriptLint** is an open-source preflight linter for academic manuscripts. It checks a LaTeX project before submission and catches structural problems that are easy to miss during writing.

Part of **喵造实验室 / MeowBuild Lab** and the Academic Lint family:

- **FigureLint** — figure QA
- **RefLint** — reference QA
- **ManuscriptLint** — manuscript preflight

## Current checks

- duplicate LaTeX labels
- unresolved `\\ref{}` / `\\eqref{}` references
- citations missing from BibTeX libraries
- missing `\\input{}` / `\\include{}` source files
- missing `\\includegraphics{}` files
- figure / table environments without captions
- TODO / FIXME markers left in reachable manuscript text
- **entry-point-aware LaTeX include graph**
- include-cycle detection
- unused figure files in conventional figure directories (informational)
- unused BibTeX entries (informational, respects `\\nocite{*}`)
- optional FigureLint and RefLint integration
- JSON output for editor / CI integrations
- native GitHub Actions annotations
- reusable GitHub composite action
- CI-friendly exit codes and strict mode

When a project directory contains a clear `\\documentclass{}` entry point, ManuscriptLint follows its `\\input{}`, `\\include{}`, and `\\subfile{}` graph. Unrelated draft `.tex` files are not treated as active manuscript content.

## Install

Requires Python 3.10+.

The first public release is prepared for PyPI. After v0.1.0 is published:

~~~bash
pip install manuscriptlint
~~~

### From source

~~~bash
git clone https://github.com/coocoomaomao/ManuscriptLint.git
cd ManuscriptLint
python -m venv .venv
pip install -e .
~~~

For development:

~~~bash
pip install -e ".[dev]"
pytest
~~~

## Usage

Check one manuscript:

~~~bash
manuscriptlint check paper.tex
~~~

Check a whole LaTeX project:

~~~bash
manuscriptlint check paper/
~~~

Treat warnings as CI failures:

~~~bash
manuscriptlint check paper/ --strict
~~~

Machine-readable JSON:

~~~bash
manuscriptlint check paper/ --format json
~~~

Emit native GitHub workflow annotations:

~~~bash
manuscriptlint check paper/ --github-annotations
~~~

Run the wider Academic Lint toolchain when FigureLint / RefLint are installed:

~~~bash
manuscriptlint check paper/ --figurelint --reflint
~~~

### GitHub Actions

Before the first tag is published, use `@main`:

~~~yaml
- uses: coocoomaomao/ManuscriptLint@main
  with:
    path: paper/
    strict: "true"
~~~

After v0.1.0, pin the Action to `@v0.1.0`.

See [GitHub Action usage](docs/GITHUB_ACTION.md).

## Philosophy

ManuscriptLint focuses on **deterministic preflight checks**. It should identify verifiable structural problems without pretending to judge scientific quality, novelty, or whether a paper will be accepted.

Unused figures and unused references are currently informational because research repositories often keep intentional extras.

## Release

The first public release is **v0.1.0**.

- [v0.1.0 release notes](docs/releases/v0.1.0.md)
- [Publishing guide](docs/PUBLISHING.md)

## Planned next

- graphicspath / macro handling improvements
- supplementary-material checks
- source-backed publisher presets
- DOCX manuscript support

## License

MIT
