📝 alex — Catch insensitive, inconsiderate writing.
Whether your own or someone else’s writing, alex helps you find gender favouring, polarising, race related, religion inconsiderate, or other unequal phrasing.
For example, when We’ve confirmed his identity
is given to alex,
it will warn you and suggest using their
instead of his
.
Suggestions, feature requests, and issues are more than welcome!
Give alex a spin on the Online demo ».
- To get better at considerate writing;
- Catches many possible offenses;
- Suggests helpful alternatives;
- Reads plain-text and markdown as input;
- Stylish.
$ npm install alex --global
Let’s say example.md
looks as follows:
The boogeyman wrote all changes to the **master server**. Thus, the slaves
were read-only copies of master. But not to worry, he was a cripple.
Then, run alex on example.md
:
$ alex example.md
Yields:
example.md
1:5-1:14 warning `boogeyman` may be insensitive, use `boogey` instead
1:42-1:48 warning `master` / `slaves` may be insensitive, use `primary` / `replica` instead
2:52-2:54 warning `he` may be insensitive, use `they`, `it` instead
2:59-2:66 warning `cripple` may be insensitive, use `person with a limp` instead
See $ alex --help
for more information.
When no input files are given to alex, it searches for markdown and text files in the current directory,
doc
, anddocs
.
npm:
$ npm install alex --save
alex is also available for bower and duo, and as an AMD, CommonJS, and globals module, uncompressed and compressed.
Example
alex('We’ve confirmed his identity.').messages;
/*
* [ { [1:17-1:20: `his` may be insensitive, use `their`, `theirs` instead]
* name: '1:17-1:20',
* file: '',
* reason: '`his` may be insensitive, use `their`, `theirs` instead',
* line: 1,
* column: 17,
* fatal: false } ]
*/
Parameters
value
(VFile
orstring
) — Markdown or plain-text.
Returns
VFile
. You’ll probably be interested
in its messages
property, as
demonstrated in the example above, as it holds the possible violations.
Works just like alex()
, but does not parse as markdown
(thus things like code are not ignored)
Example
alex('The `boogeyman`.').messages; // []
alex.text('The `boogeyman`.').messages;
/*
* [ { [1:6-1:15: `boogeyman` may be insensitive, use `boogey` instead]
* name: '1:6-1:15',
* file: '',
* reason: '`boogeyman` may be insensitive, use `boogey` instead',
* line: 1,
* column: 6,
* fatal: false } ]
*/
- Atom — wooorm/atom-linter-alex
- Sublime — sindresorhus/SublimeLinter-contrib-alex
- Gulp — dustinspecker/gulp-alex
- Slack — keoghpe/alex-slack
alex checks for many patterns of English language, and warns for:
-
Gendered work-titles, for example warning about
garbageman
and suggestinggarbage collector
instead; -
Gendered proverbs, such as warning about
like a man
and suggestingbravely
instead, orladylike
and suggestingcourteous
; -
Blunt phrases, such as warning about
cripple
and suggestingperson with a limp
instead; -
Intolerant phrasing, such as warning about using
master
andslave
together, and suggestingprimary
andreplica
instead.
alex ignores words meant literally, so “he”
, He — ...
, and the like
are not warned about
alex CLI searches for files with a markdown or text extension when given
directories (e.g., $ alex .
will find readme.md
and foo/bar/baz.txt
).
To prevent files from being found by alex, add an
.alexignore
file.
The alex CLI will sometimes search for files. To prevent
files from being found, add a file named .alexignore
in one of the
directories above the current working directory. The format of these files is
similar to .eslintignore
(which is in turn similar to .gitignore
files).
For example, when working in ~/alpha/bravo/charlie
, the ignore file can be
in charlie
, but also in ~
.
The ignore file for this project itself looks as follows:
# Both `node_modules` and `bower_components` are
# ignored by default:
# node_modules/
# bower_components/
components/
example.md
The recommended workflow is to add alex locally and to run it with your tests.
A package.json
file with npm scripts,
and additionally using AVA for unit tests, could look
as follows:
{
"scripts": {
"test-api": "ava",
"test-doc": "alex",
"test": "npm run test-api && npm run test-doc"
},
"devDependencies": {
"alex": "^1.0.0",
"ava": "^0.1.0"
}
}
It’s a nice androgynous/unisex name, it was free on npm, I like it! 😄
See CONTRIBUTING.md on how to get ‘X’ checked by alex.
See CONTRIBUTING.md.