| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 | 
							- /**
 
-  * @author Toru Nagashima <https://github.com/mysticatea>
 
-  * See LICENSE file in root directory for full license.
 
-  */
 
- "use strict"
 
- const { definePatternSearchGenerator } = require("../utils")
 
- const codePointEscapeSearchGenerator = definePatternSearchGenerator(
 
-     /\\u\{[0-9a-fA-F]+\}/gu
 
- )
 
- /**
 
-  * Number to Hex
 
-  * @param {number} num number
 
-  * @returns {string} hex string
 
-  */
 
- function toHex(num) {
 
-     return `0000${num.toString(16).toUpperCase()}`.substr(-4)
 
- }
 
- module.exports = {
 
-     meta: {
 
-         docs: {
 
-             description: "disallow Unicode code point escape sequences.",
 
-             category: "ES2015",
 
-             recommended: false,
 
-             url:
 
-                 "http://mysticatea.github.io/eslint-plugin-es/rules/no-unicode-codepoint-escapes.html",
 
-         },
 
-         fixable: "code",
 
-         schema: [],
 
-         messages: {
 
-             forbidden:
 
-                 "ES2015 Unicode code point escape sequences are forbidden.",
 
-         },
 
-     },
 
-     create(context) {
 
-         const sourceCode = context.getSourceCode()
 
-         /**
 
-          * find code point escape, and report
 
-          * @param  {string} text text
 
-          * @param  {Node} node node
 
-          * @returns {void}
 
-          */
 
-         function findAndReport(text, node) {
 
-             for (const match of codePointEscapeSearchGenerator(text)) {
 
-                 const start = match.index
 
-                 const end = start + match[0].length
 
-                 const range = [start + node.start, end + node.start]
 
-                 context.report({
 
-                     node,
 
-                     loc: {
 
-                         start: sourceCode.getLocFromIndex(range[0]),
 
-                         end: sourceCode.getLocFromIndex(range[1]),
 
-                     },
 
-                     messageId: "forbidden",
 
-                     fix(fixer) {
 
-                         const codePointStr = text.slice(start + 3, end - 1)
 
-                         // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCodePoint
 
-                         let codePoint = Number(`0x${codePointStr}`)
 
-                         let replacement = null
 
-                         if (codePoint <= 0xffff) {
 
-                             // BMP code point
 
-                             replacement = toHex(codePoint)
 
-                         } else {
 
-                             // Astral code point; split in surrogate halves
 
-                             // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
 
-                             codePoint -= 0x10000
 
-                             const highSurrogate = (codePoint >> 10) + 0xd800
 
-                             const lowSurrogate = (codePoint % 0x400) + 0xdc00
 
-                             replacement = `${toHex(highSurrogate)}\\u${toHex(
 
-                                 lowSurrogate
 
-                             )}`
 
-                         }
 
-                         return fixer.replaceTextRange(
 
-                             [range[0] + 2, range[1]],
 
-                             replacement
 
-                         )
 
-                     },
 
-                 })
 
-             }
 
-         }
 
-         return {
 
-             Identifier(node) {
 
-                 findAndReport(sourceCode.getText(node), node)
 
-             },
 
-             Literal(node) {
 
-                 if (typeof node.value === "string") {
 
-                     findAndReport(node.raw, node)
 
-                 }
 
-             },
 
-             TemplateElement(elementNode) {
 
-                 findAndReport(elementNode.value.raw, elementNode)
 
-             },
 
-         }
 
-     },
 
- }
 
 
  |