Skip to content
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion proselint/checks/social_awareness/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,6 @@
from proselint.registry import build_modules_register

__register__ = build_modules_register(
(".lgbtq", ".nword", ".sexism"), "proselint.checks.social_awareness"
(".lgbtq", ".nword", ".sexism", ".speciesism"),
"proselint.checks.social_awareness",
)
75 changes: 75 additions & 0 deletions proselint/checks/social_awareness/speciesism.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
"""
Speciesism.

---
layout: post
source: Dunayer, J. (2001). Animal Equality: Language and Liberation.
source_url: https://doi.org/10.1017/S0962728600024489
title: speciesism
date: 2026-04-08 12:00:00
categories: writing
---

Points out speciesist idioms and animal comparisons used as insults,
and suggests clearer alternatives.

"""

from proselint.registry.checks import Check, types

CHECK_PATH = "social_awareness.speciesism"

check_preferred_forms = Check(
check_type=types.PreferredFormsSimple(
items={
"kill two birds with one stone": "solve two problems at once",
"beat a dead horse": "belabor the point",
"wild goose chase": "futile search",
"let the cat out of the bag": "reveal the secret",
"guinea pig": "test subject",
"the elephant in the room": "the obvious issue",
"dog-eat-dog": "cutthroat",
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are these all specific examples from the source itself? I can think of potentially better ways to say many of these, so if so, I'll need to investigate the source further.

"rat race": "daily grind",
"work like a dog": "work relentlessly",
"more than one way to skin a cat": "more than one way to solve this",
"open a can of worms": "create a new set of problems",
"hold your horses": "slow down",
"dark horse": "unexpected contender",
"straight from the horse's mouth": "from the original source",
"flog a dead horse": "belabor the point",
"take the bull by the horns": "tackle the problem directly",
"bull in a china shop": "clumsy or disruptive person",
"sacred cow": "untouchable assumption",
"cash cow": "reliable revenue source",
"herding cats": "managing an unruly group",
"let sleeping dogs lie": "avoid stirring up past trouble",
"barking up the wrong tree": "pursuing a mistaken course",
"cat got your tongue": "unable to speak",
"raining cats and dogs": "raining heavily",
"bird's-eye view": "aerial view",
"cold turkey": "abruptly",
}
),
path=CHECK_PATH,
message="Speciesist idiom. Consider '{}' instead of '{}'.",
)

check_derogatory = Check(
check_type=types.PreferredFormsSimple(
items={
"eat like a pig": "eat ravenously",
"stubborn as a mule": "extremely stubborn",
"blind as a bat": "completely blind",
"quiet as a mouse": "extremely quiet",
"drunk as a skunk": "extremely drunk",
"fat as a pig": "overweight",
"sweating like a pig": "sweating heavily",
"slow as a snail": "extremely slow",
"memory like a goldfish": "short memory",
}
),
path=CHECK_PATH,
message="Animal comparison used as an insult. Consider '{}' instead of '{}'.",
)

__register__ = (check_preferred_forms, check_derogatory)
17 changes: 17 additions & 0 deletions tests/examples.py
Original file line number Diff line number Diff line change
Expand Up @@ -612,6 +612,23 @@
"Hello Mr. birdperson. still looking good.",
),
),
(
"social_awareness.speciesism",
(
"We need to kill two birds with one stone here.",
"Stop beating a dead horse.",
"He used a guinea pig for his experiment.",
"There's an elephant in the room.",
"She eats like a pig.",
"He's as stubborn as a mule.",
),
(
"Smoke phrase with nothing flagged.",
"We need to solve two problems at once.",
"Stop belaboring the point.",
"He used a test subject for his experiment.",
),
),
(
"spelling.consistency",
(
Expand Down