Skip to main content

Detect and auto-fix Yoda conditions in Python source files

Project description

yodacheck

AST-based linter that detects and auto-fixes Yoda conditions in Python source files.

A Yoda condition is a comparison where the literal is on the left side:

# Yoda — flagged
if 5 == x: ...
if None == obj: ...
if True == flag: ...

# Normal — not flagged
if x == 5: ...
if obj is None: ...
if flag is True: ...

Features

  • Detects all Yoda patterns (==, !=, <, <=, >, >=, is, is not)
  • Smart fixes: None ==is None, True/False ==is True/False, all else → swap
  • Auto-fix with timestamped .bak backup before writing
  • Chained comparisons (1 < x < 3) flagged but not auto-fixed (ambiguous)
  • in / not in with literal on left intentionally ignored (normal membership syntax)
  • Output formats: pretty (default), plain, json
  • Color auto-detected (TTY), forced via --color / --no-color
  • Default excludes: .venv, __pycache__, .git, build, dist

Installation

pip install yodacheck

After install the yodacheck command is available globally.

Or install from source:

git clone https://github.com/SytxLabs/yodacheck.git
cd yodacheck
pip install .

Usage

# Scan file or directory
yodacheck path/to/file.py
yodacheck src/

# Multiple paths
yodacheck src/ tests/ setup.py

# Show N context lines per issue
yodacheck src/ --context 1

# Auto-fix (creates .bak backup first)
yodacheck src/ --fix

# Exclude paths (glob or dir name, repeatable)
yodacheck . --exclude "migrations/*" --exclude vendor/

# Output format
yodacheck src/ --format plain
yodacheck src/ --format json

# Color
yodacheck src/ --color
yodacheck src/ --no-color

Output

3 issues · 1 file

  src/auth.py
  42:3   None == token          →  token is None        [is None]
  67:3   0 == status_code       →  status_code == 0
  99:3   1 < retry_count < 5    ⚠ chained, no fix

With --context 1:

  42:3   None == token  →  token is None  [is None]
         40 │ 
         41 │ def validate(token):
         42 │ if None == token:
               ^
         43 │     raise ValueError
         44 │ 

Fix behavior

--fix applies all fixable replacements in one pass per file. Chained comparisons are skipped.

yodacheck src/ --fix
# fixed src/auth.py  (auth.py.bak.20260504T150000Z)

JSON output

yodacheck src/ --format json
[
  {
    "path": "src/auth.py",
    "lineno": 42,
    "col": 3,
    "expr": "None == token",
    "tag": "is None",
    "replacement": "token is None",
    "chained": false
  }
]

tag values: "is None", "is not None", "bool", "" (plain swap), "" with chained: true.

Test file

examples/example.py — runnable collection of every detectable pattern:

yodacheck examples/example.py --color
yodacheck examples/example.py --color --context 1

Running tests

python -m unittest discover -s tests -v

Requirements

Python 3.8+. No external dependencies.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

yodacheck-0.1.1.tar.gz (5.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

yodacheck-0.1.1-py3-none-any.whl (3.7 kB view details)

Uploaded Python 3

File details

Details for the file yodacheck-0.1.1.tar.gz.

File metadata

  • Download URL: yodacheck-0.1.1.tar.gz
  • Upload date:
  • Size: 5.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for yodacheck-0.1.1.tar.gz
Algorithm Hash digest
SHA256 2680c69e3cb25d1bd55490c8d28b8478d3533c9f5faca60117a6821422ce75d8
MD5 d65230a0d22977f132b31ab6c197fcb2
BLAKE2b-256 884cbd51bd375a4b9481d527d806ed55754fad7c1772f7f1ca69fbad9b6b3100

See more details on using hashes here.

Provenance

The following attestation bundles were made for yodacheck-0.1.1.tar.gz:

Publisher: release.yml on SytxLabs/YodaCheck

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file yodacheck-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: yodacheck-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 3.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for yodacheck-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 9e3f1219ef6ba0e37425b8183e26864ea6df5cd54c7e181737bc09e08b617b7a
MD5 b3e12fd1ebc3dbd093e926a8042db4e5
BLAKE2b-256 4ba724c869c3b1ec8e6ba458c209ea40396d83c33ce9201394de62fd66c8b8eb

See more details on using hashes here.

Provenance

The following attestation bundles were made for yodacheck-0.1.1-py3-none-any.whl:

Publisher: release.yml on SytxLabs/YodaCheck

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page