unicode-bom.js 2.0 KB

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