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