Coder Social home page Coder Social logo

alex's Introduction

alex

📝 alex — Catch insensitive, inconsiderate writing.

Build Status Coverage Status

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 ».

Why

  • To get better at considerate writing;
  • Catches many possible offenses;
  • Suggests helpful alternatives;
  • Reads plain-text and markdown as input;
  • Stylish.

Install

npm (with Node.js):

$ npm install alex --global

Table of Contents

Command Line

Example of how alex looks on screen

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:

<stdin>
   1:5-1:14  warning  `boogeyman` may be insensitive, use `boogey` instead                       boogeyman-boogeywoman
  1:42-1:48  warning  `master` / `slaves` may be insensitive, use `primary` / `replica` instead  master-slave
  2:52-2:54  warning  `he` may be insensitive, use `they`, `it` instead                          he-she
  2:61-2:68  warning  `cripple` may be insensitive, use `person with a limp` instead             cripple

⚠ 4 warnings

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, and docs.

API

npm:

$ npm install alex --save

alex is also as an AMD, CommonJS, and globals module, uncompressed and compressed.

alex(value[, allow])

alex.markdown(value[, allow])

Example

alex('We’ve confirmed his identity.').messages;
/*
 * [ { [1:17-1:20: `his` may be insensitive, use `their`, `theirs`, `them` instead]
 *   message: '`his` may be insensitive, use `their`, `theirs`, `them` instead',
 *   name: '1:17-1:20',
 *   file: '',
 *   reason: '`his` may be insensitive, use `their`, `theirs`, `them` instead',
 *   line: 1,
 *   column: 17,
 *   location: { start: [Object], end: [Object] },
 *   fatal: false,
 *   ruleId: 'her-him',
 *   source: 'retext-equality' } ]
 */

Parameters

  • value (VFile or string) — Markdown or plain-text;

  • allow (Array.<string>, optional) — List of allowed rules.

Returns

VFile. You’ll probably be interested in its messages property, as demonstrated in the example above, as it holds the possible violations.

alex.text(value)

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]
 *   message: '`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,
 *   location: Position { start: [Object], end: [Object] },
 *   fatal: false,
 *   ruleId: 'boogeyman-boogeywoman',
 *   source: 'retext-equality' } ]
 */

Integrations

Support

alex checks for many patterns of English language, and warns for:

  • Gendered work-titles, for example warning about garbageman and suggesting garbage collector instead;

  • Gendered proverbs, such as warning about like a man and suggesting bravely instead, or ladylike and suggesting courteous;

  • Blunt phrases, such as warning about cripple and suggesting person with a limp instead;

  • Intolerant phrasing, such as warning about using master and slave together, and suggesting primary and replica instead;

  • Profanities, the least of which being butt.

alex ignores words meant literally, so “he”, He — ..., and the like are not warned about

Ignoring files

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.

.alexignore

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/

example.md

Ignoring messages

.alexrc

package.json

alex can silence message through .alexrc files:

{
  "allow": ["boogeyman-boogeywoman"]
}

...or package.json files:

{
  ...
  "alex": {
    "allow": ["butt"]
  },
  ...
}

All allow fields in all package.json and .alexrc files are detected and used when processing.

Control

Sometimes, alex makes mistakes:

A window will pop up.

Yields:

readme.md
  1:15-1:18  warning  `pop` may be insensitive, use `parent` instead  dad-mom

⚠ 1 warning

alex can silence message through HTML comments in markdown:

<!--alex ignore dad-mom-->

A window will **not** pop up.

Yields:

readme.md: no issues found

ignore turns off messages for the thing after the comment (in this case, the paragraph). It’s also possible to turn off messages after a comment by using disable, and, turn those messages back on using enable:

<!--alex disable dad-mom-->

A window will **not** pop up.

A window will **not** pop up.

<!--alex enable dad-mom-->

A window will pop up.

Yields:

readme.md
  9:15-9:18  warning  `pop` may be insensitive, use `parent` instead  dad-mom

⚠ 1 warning

Multiple messages can be controlled in one go:

<!--alex disable he-her his-hers dad-mom-->

...and all messages can be controlled by omitting all rule identifiers:

<!--alex ignore-->

Workflow

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"
  }
}

FAQ

Why is this named alex?

It’s a nice androgynous/unisex name, it was free on npm, I like it! 😄

Alex didn’t check ‘X’!

See CONTRIBUTING.md on how to get ‘X’ checked by alex.

Contributing

See CONTRIBUTING.md.

License

MIT © Titus Wormer

alex's People

Contributors

alexgleason avatar anseljh avatar jdalton avatar shinnn avatar sindresorhus avatar wooorm avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.