UNPKG

1.41 kBJavaScriptView Raw
1'use strict';
2const getDocumentationUrl = require('./utils/get-documentation-url');
3const replaceTemplateElement = require('./utils/replace-template-element');
4
5const escapeWithLowercase = /(?<=(?:^|[^\\])(?:\\\\)*\\)(?<data>x[\dA-Fa-f]{2}|u[\dA-Fa-f]{4}|u{[\dA-Fa-f]+})/g;
6const escapePatternWithLowercase = /(?<=(?:^|[^\\])(?:\\\\)*\\)(?<data>x[\dA-Fa-f]{2}|u[\dA-Fa-f]{4}|u{[\dA-Fa-f]+}|c[a-z])/g;
7const message = 'Use uppercase characters for the value of the escape sequence.';
8
9const create = context => {
10 const check = ({node, original, regex = escapeWithLowercase, fix}) => {
11 const fixed = original.replace(regex, data => data.slice(0, 1) + data.slice(1).toUpperCase());
12
13 if (fixed !== original) {
14 context.report({
15 node,
16 message,
17 fix: fixer => fix ? fix(fixer, fixed) : fixer.replaceText(node, fixed)
18 });
19 }
20 };
21
22 return {
23 Literal(node) {
24 if (typeof node.value !== 'string') {
25 return;
26 }
27
28 check({
29 node,
30 original: node.raw
31 });
32 },
33 'Literal[regex]'(node) {
34 check({
35 node,
36 original: node.raw,
37 regex: escapePatternWithLowercase
38 });
39 },
40 TemplateElement(node) {
41 check({
42 node,
43 original: node.value.raw,
44 fix: (fixer, fixed) => replaceTemplateElement(fixer, node, fixed)
45 });
46 }
47 };
48};
49
50module.exports = {
51 create,
52 meta: {
53 type: 'suggestion',
54 docs: {
55 url: getDocumentationUrl(__filename)
56 },
57 fixable: 'code'
58 }
59};