UNPKG

1.11 kBJavaScriptView Raw
1'use strict';
2
3const report = require('../../utils/report');
4const ruleMessages = require('../../utils/ruleMessages');
5const validateOptions = require('../../utils/validateOptions');
6
7const ruleName = 'unicode-bom';
8
9const messages = ruleMessages(ruleName, {
10 expected: 'Expected Unicode BOM',
11 rejected: 'Unexpected Unicode BOM',
12});
13
14function rule(expectation) {
15 return (root, result) => {
16 const validOptions = validateOptions(result, ruleName, {
17 actual: expectation,
18 possible: ['always', 'never'],
19 });
20
21 if (
22 !validOptions ||
23 root.source.inline ||
24 root.source.lang === 'object-literal' ||
25 // Ignore HTML documents
26 root.document !== undefined
27 ) {
28 return;
29 }
30
31 const { hasBOM } = root.source.input;
32
33 if (expectation === 'always' && !hasBOM) {
34 report({
35 result,
36 ruleName,
37 message: messages.expected,
38 root,
39 line: 1,
40 });
41 }
42
43 if (expectation === 'never' && hasBOM) {
44 report({
45 result,
46 ruleName,
47 message: messages.rejected,
48 root,
49 line: 1,
50 });
51 }
52 };
53}
54
55rule.ruleName = ruleName;
56rule.messages = messages;
57module.exports = rule;