UNPKG

2 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 },
18
19 fixable: "whitespace",
20
21 schema: [
22 {
23 enum: ["always", "never"]
24 }
25 ]
26 },
27
28 create(context) {
29
30 //--------------------------------------------------------------------------
31 // Public
32 //--------------------------------------------------------------------------
33
34 return {
35
36 Program: function checkUnicodeBOM(node) {
37
38 const sourceCode = context.getSourceCode(),
39 location = {column: 0, line: 1},
40 requireBOM = context.options[0] || "never";
41
42 if (!sourceCode.hasBOM && (requireBOM === "always")) {
43 context.report({
44 node,
45 loc: location,
46 message: "Expected Unicode BOM (Byte Order Mark).",
47 fix(fixer) {
48 return fixer.insertTextBefore(node, "\uFEFF");
49 }
50 });
51 } else if (sourceCode.hasBOM && (requireBOM === "never")) {
52 context.report({
53 node,
54 loc: location,
55 message: "Unexpected Unicode BOM (Byte Order Mark).",
56 fix(fixer) {
57 return fixer.removeRange([-1, 0]);
58 }
59 });
60 }
61 }
62
63 };
64
65 }
66};