Home

Awesome

Build Status

eslint-plugin-notice

An eslint rule that checks the top of files and --fix them too!

Usage

npm i -D eslint-plugin-notice

Flag config

eslint.config.js

import notice from "eslint-plugin-notice";

export default [
  {
    files: ["**/*.js"],
    plugins: {
      notice,
    },
    rules: {
      "notice/notice": [
        "error",
        { mustMatch: "Copyright \\(c\\) [0-9]{0,4}, Nick Deis" },
      ],
    },
  },
];

eslintrc

Throw an error when a file doesn't have copyright notice

{
  "plugins": ["notice"],
  "rules": {
    "notice/notice": [
      "error",
      { "mustMatch": "Copyright \\(c\\) [0-9]{0,4}, Nick Deis" }
    ]
  }
}

Add a template to --fix it

{
  "notice/notice": [
    "error",
    {
      "mustMatch": "Copyright \\(c\\) [0-9]{0,4}, Nick Deis",
      "template": "/** Copyright (c) <%= YEAR %>, Nick Deis **/"
    }
  ]
}

or use a file

config/copyright.js

/**
 * Copyright (c) <%= YEAR %>, Nick Deis
 */
{
  "notice/notice": [
    "error",
    {
      "mustMatch": "Copyright \\(c\\) [0-9]{0,4}, Nick Deis",
      "templateFile": "config/copyright.js"
    }
  ]
}

or just use your template, eslint-plugin-notice will reverse into a pattern for mustMatch

{
  "notice/notice": [
    "error",
    {
      "templateFile": "config/copyright.js"
    }
  ]
}

Want a more expressive template? Add templateVars and varRegexps config/copyright.js

/**
 * Copyright (c) <%= YEAR %>, <%= NAME %>
 */
{
    "notice/notice":["error",
        {
        templateFile:"config/copyright.js",
        //YEAR will still be added unless you add your own value
        templateVars:{NAME:"Nick Deis"},
        //The regexp for YEAR is /20\d{2}/ and is automatically added
        varRegexps:{NAME:/(Nick|Nicholas) Deis/}
        }
    ]
}

Options

OptionDescriptionDefault/Required/OptionalType
mustMatchA pattern that must be present in the noticeRequired unless template is setRegExp/string
templateA lodash template that will be used to fix files that do not match mustMatch or are less than nonMatchingToleranceOptional unless mustMatch is not setstring
templateFiletemplate will override this setting. A file which contains the templateOptionalstring
charsThe number of characters to check for the mustMatch pattern1000number
templateVarsThe variables to be used with the lodash template, always contains the variable YEAR{YEAR:new Date().getFullYear()}object
onNonMatchingHeaderAction that should be taken when there is a header comment, but it does not match mustMatch or is less than nonMatchingTolerance"prepend"string
nonMatchingToleranceOptional fallback for mustMatch. Compares a non-matching header comment (if it exists) to the resolved template using Metric Longest Common Subsequence. 1 means the strings must be exactly the same, where anything less is varying degrees of dissimiliar. .70 seems like a good choiceOptionalnumber between 0 and 1
varRegexpsIf mustMatch is not set and template is set, a regexp that will be replaced in the template to create a regexp for mustMatch{YEAR:/20\d{2}/}object
messagesAllows you to change the error messages. See messagesOptionalobject

onNonMatchingHeader

messages

The messages option allows you to change the default error messages. There are three messages you can change by passing in an object with the pairs you wish to change. For example, if you want to change the default message for when a header does not match mustMatch:

{
    "notice/notice":["error",
        {
            "mustMatch":"Apache License",
            "templateFile":"config/apache.js",
            "messages":{
                "whenFailedToMatch":"Couldn't find 'Apache License', are you sure you added it?"
            }
        }
    ]
}

The three configurable messages are: