UNPKG

2.07 kBJavaScriptView Raw
1/**
2 * @fileoverview Require or disallow Unicode BOM
3 * @author Andrew Johnston <https://github.com/ehjay>
4 */
5"use strict";
6
7//------------------------------------------------------------------------------
8// Rule Definition
9//------------------------------------------------------------------------------
10
11module.exports = {
12 meta: {
13 docs: {
14 description: "require or disallow Unicode byte order mark (BOM)",
15 category: "Stylistic Issues",
16 recommended: false,
17 url: "https://eslint.org/docs/rules/unicode-bom"
18 },
19
20 fixable: "whitespace",
21
22 schema: [
23 {
24 enum: ["always", "never"]
25 }
26 ]
27 },
28
29 create(context) {
30
31 //--------------------------------------------------------------------------
32 // Public
33 //--------------------------------------------------------------------------
34
35 return {
36
37 Program: function checkUnicodeBOM(node) {
38
39 const sourceCode = context.getSourceCode(),
40 location = { column: 0, line: 1 },
41 requireBOM = context.options[0] || "never";
42
43 if (!sourceCode.hasBOM && (requireBOM === "always")) {
44 context.report({
45 node,
46 loc: location,
47 message: "Expected Unicode BOM (Byte Order Mark).",
48 fix(fixer) {
49 return fixer.insertTextBeforeRange([0, 1], "\uFEFF");
50 }
51 });
52 } else if (sourceCode.hasBOM && (requireBOM === "never")) {
53 context.report({
54 node,
55 loc: location,
56 message: "Unexpected Unicode BOM (Byte Order Mark).",
57 fix(fixer) {
58 return fixer.removeRange([-1, 0]);
59 }
60 });
61 }
62 }
63
64 };
65
66 }
67};