Skip to main content

Lint for blocklisted words.

Project description

blocklint

GitHub Actions (Tests) GitHub Actions (pre-commit) GitHub license

blocklint is a command line utility for finding non-inclusive wording. This project is inspired by Alex.js.

About

If you've used a modern IDE, you know the importance of immediate feedback for compilation errors or even stylistic slip ups. Knowing all variables should be declared or that lines must be less than 80 characters long is good, but adhering to those rules takes a back seat when in the flow of writing code. A linter brings these issues back into your consciousness by highlighting the problematic lines of code. Over time, the enforced style becomes more intuitive but the linter is always there to nudge you if you slip.

We are in the midst of changing attitudes towards words and phrases that are not inclusive. Not only are developers acknowledging the offensive history of terms like "master/slave" and "blacklist/whitelist", but we are taking active steps to remove their usage and replace them with more appropriate language. This tool is not a commentary on inclusion, but rather a utility to detect whatever words you'd like to remove from code.

Alex.js is one option for highlighting offensive language, but it is geared towards text documents such as markdown, misses common constructs in source code and is also overly broad and prone to false positives. Blocklint is built with source code in mind and is more limited in scope.

Requirements and Installation

Blocklint is written in python and uses minimal, standard libraries. It has been tested for python >= 2.7 To install:

pip install git+https://github.com/PrincetonUniversity/blocklint

into an appropriate environment.

Usage

Without any arguments, blocklint will search all files in the current directory for uses of master, slave, blacklist and whitelist:

$ pwd
/path/to/blocklint/blocklint
$ blocklint
/path/to/blocklint/blocklint/main.py:40:60: use of "blacklist"
/path/to/blocklint/blocklint/main.py:40:37: use of "master"
/path/to/blocklint/blocklint/main.py:40:44: use of "slave"
/path/to/blocklint/blocklint/main.py:40:50: use of "whitelist"
/path/to/blocklint/blocklint/main.py:55:53: use of "blacklist"
/path/to/blocklint/blocklint/main.py:55:30: use of "master"
/path/to/blocklint/blocklint/main.py:55:37: use of "slave"
/path/to/blocklint/blocklint/main.py:55:43: use of "whitelist"

Optionally, multiple files and directories can be specified to search. The detected words can be customized through several options; setting any will clear the defaults. Multiple words are specified as comma separated values:

  • blocklist: Will match any occurrence of the word, ignoring case and special characters.
  • wordlist: Will match the word, ignoring case and special characters but respecting word boundaries.
  • exactlist: Will match the word as entered respecting word boundaries.

Only the first match of a word in a line will be returned, but multiple words can match on a single line. Here are some examples:

$ blocklint --blocklist test,asdf <(echo thisTEST will match as will a_S-d:F)
/dev/fd/63:1:29: use of "asdf"
/dev/fd/63:1:5: use of "test"

$ blocklint --wordlist test,asdf <(echo thisTEST will not match but T=E-ST, will)
/dev/fd/63:1:29: use of "test"

$ blocklint --exactlist Test <(echo thisTest, tEST, T-est fail but Test! matches)
/dev/fd/63:1:32: use of "Test"

The -e,--end-pos flag will provide the end position of the match in addition to the start position.

The --stdin flag will take values from stdin instead of a file or directory.

Integrations

The integration directory contains information on using blocklint for:

Don't see the tool you use? Submit a pull request or issue!

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

blocklint-0.1.0.tar.gz (11.1 kB view details)

Uploaded Source

Built Distribution

blocklint-0.1.0-py2.py3-none-any.whl (4.1 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file blocklint-0.1.0.tar.gz.

File metadata

  • Download URL: blocklint-0.1.0.tar.gz
  • Upload date:
  • Size: 11.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/0.0.0 pkginfo/1.6.1 requests/2.24.0 setuptools/50.3.0.post20201006 requests-toolbelt/0.9.1 tqdm/4.50.0 CPython/3.7.6

File hashes

Hashes for blocklint-0.1.0.tar.gz
Algorithm Hash digest
SHA256 b1ee7d6b9f4f1322dd4b96601a051e914014cb58ab81c66abbe676751951ad2e
MD5 0173d5d2b0677d0fc09d07e3cc6f7568
BLAKE2b-256 7cc2d4d63c9685ab882551e653992a518c23ead17388f4f8bb7c65513de208de

See more details on using hashes here.

File details

Details for the file blocklint-0.1.0-py2.py3-none-any.whl.

File metadata

  • Download URL: blocklint-0.1.0-py2.py3-none-any.whl
  • Upload date:
  • Size: 4.1 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/0.0.0 pkginfo/1.6.1 requests/2.24.0 setuptools/50.3.0.post20201006 requests-toolbelt/0.9.1 tqdm/4.50.0 CPython/3.7.6

File hashes

Hashes for blocklint-0.1.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 46088a91a42c3361b66bbb1b9d82f8f9c024a44060303a8b9314024119538e0d
MD5 b37642fef57232494a4ad9450bd91e4f
BLAKE2b-256 abd0280efb4461a028e210ecc7970ad4a3157f5822d96894a6ca5fcaa5023050

See more details on using hashes here.

Supported by

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