| /** |
| * @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]); |
| } |
| }); |
| } |
| } |
| |
| }; |
| |
| } |
| }; |