UNPKG

961 BJavaScriptView Raw
1'use strict';
2const getDocumentationUrl = require('./utils/get-documentation-url');
3const replaceTemplateElement = require('./utils/replace-template-element');
4
5function checkEscape(context, node, value) {
6 const fixedValue = value.replace(/(?<=(?:^|[^\\])(?:\\\\)*\\)x/g, 'u00');
7
8 if (value !== fixedValue) {
9 context.report({
10 node,
11 message: 'Use Unicode escapes instead of hexadecimal escapes.',
12 fix: fixer =>
13 node.type === 'TemplateElement' ?
14 replaceTemplateElement(fixer, node, fixedValue) :
15 fixer.replaceText(node, fixedValue)
16 });
17 }
18}
19
20const create = context => {
21 return {
22 Literal: node => {
23 if (node.regex || typeof node.value === 'string') {
24 checkEscape(context, node, node.raw);
25 }
26 },
27 TemplateElement: node => {
28 checkEscape(context, node, node.value.raw);
29 }
30 };
31};
32
33module.exports = {
34 create,
35 meta: {
36 type: 'suggestion',
37 docs: {
38 url: getDocumentationUrl(__filename)
39 },
40 fixable: 'code'
41 }
42};