| /** | |
| * @fileoverview Require or disallow Unicode BOM | |
| * @author Andrew Johnston <https://github.com/ehjay> | |
| */ | |
| "use strict"; | |
| //------------------------------------------------------------------------------ | |
| // Rule Definition | |
| //------------------------------------------------------------------------------ | |
| module.exports = { | |
| meta: { | |
| type: "layout", | |
| docs: { | |
| description: "require or disallow Unicode byte order mark (BOM)", | |
| category: "Stylistic Issues", | |
| recommended: false, | |
| url: "https://eslint.org/docs/rules/unicode-bom" | |
| }, | |
| fixable: "whitespace", | |
| schema: [ | |
| { | |
| enum: ["always", "never"] | |
| } | |
| ], | |
| messages: { | |
| expected: "Expected Unicode BOM (Byte Order Mark).", | |
| unexpected: "Unexpected Unicode BOM (Byte Order Mark)." | |
| } | |
| }, | |
| create(context) { | |
| //-------------------------------------------------------------------------- | |
| // Public | |
| //-------------------------------------------------------------------------- | |
| return { | |
| Program: function checkUnicodeBOM(node) { | |
| const sourceCode = context.getSourceCode(), | |
| location = { column: 0, line: 1 }, | |
| requireBOM = context.options[0] || "never"; | |
| if (!sourceCode.hasBOM && (requireBOM === "always")) { | |
| context.report({ | |
| node, | |
| loc: location, | |
| messageId: "expected", | |
| fix(fixer) { | |
| return fixer.insertTextBeforeRange([0, 1], "\uFEFF"); | |
| } | |
| }); | |
| } else if (sourceCode.hasBOM && (requireBOM === "never")) { | |
| context.report({ | |
| node, | |
| loc: location, | |
| messageId: "unexpected", | |
| fix(fixer) { | |
| return fixer.removeRange([-1, 0]); | |
| } | |
| }); | |
| } | |
| } | |
| }; | |
| } | |
| }; |