Skip to content

crabnebula-dev/eslint-protection

Repository files navigation

@crabnebula/eslint-protected

A small lint rule to protect parts of the code from unconscious change. It uses a comment containing the //@protection keyword*, an optional number of lines or * for the whole file, and a hash that is calculated from the code meant to be protected.

Code that differs from the saved hash will be reported.

* it is also okay to use //@protected or //@protect; fixes will turn this into //@protection again

Installation and Configuration

Depending on your preferred package manager, run

npm add --save-dev @crabnebula/eslint-protected
// or
yarn add -D @crabnebula/eslint-protected
// or
pnpm add -D @crabnebula/eslint-protected

Then in your eslint config, add

import { defineConfig } from "eslint/config";
import protection from "@crabnebula/eslint-protection";

export default defineConfig({    
    plugins: { protection },
    rules: {
        "protection/protect": "error"
    }
});

Ideally, you set up eslint as a guarding mechanism for commits using e.g. husky; first, install the required dependencies:

npm add --save-dev husky lint-staged @crabnebula/husky-protection
# or
yarn add -D husky lint-staged @crabnebula/husky-protection
# or
pnpm add -D husky lint-staged @crabnebula/husky-protection

Next, initialize Husky:

npx husky-init && npm install
# or
npx husky-init && yarn
# or
pnpx husky-init && pnpm i

Lastly, add a pre-commit hook:

npx husky add .husky/pre-commit "npx lint-staged"
npx husky add .husky/pre-commit "node_modules/@crabnebula/husky-protection/index.js"
# or
pnpx husky add .husky/pre-commit "npx lint-staged"
pnpx husky add .husky/pre-commit "node_modules/@crabnebula/husky-protection/index.js"

# in either case, make it executable:
chmod +x .husky/pre-commit .husky/_/husky.sh

This will add the linter and another protection commit hook that will block commits that remove more protection comments than they add.

Usage

To get the hash, just add //@protected without a hash and look at the error message.

Protecting a file

//@protected * [hash]

Protecting a single line

//@protected [hash]

Protecting multiple lines

//@protected 2 [hash]

Where 2 is the number of lines that should be protected below the comment.

VS Code extension

There is a VS Code extension vscode-eslint-protected that will add the comments for you automatically.

About

eslint rule to protect parts of the code from unconscious change

Resources

License

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors