UNPKG

4.63 kBJavaScriptView Raw
1/**
2 * @fileoverview An object that creates fix commands for rules.
3 * @author Nicholas C. Zakas
4 */
5"use strict";
6
7//------------------------------------------------------------------------------
8// Requirements
9//------------------------------------------------------------------------------
10
11// none!
12
13//------------------------------------------------------------------------------
14// Helpers
15//------------------------------------------------------------------------------
16
17/**
18 * Creates a fix command that inserts text at the specified index in the source text.
19 * @param {int} index The 0-based index at which to insert the new text.
20 * @param {string} text The text to insert.
21 * @returns {Object} The fix command.
22 * @private
23 */
24function insertTextAt(index, text) {
25 return {
26 range: [index, index],
27 text
28 };
29}
30
31//------------------------------------------------------------------------------
32// Public Interface
33//------------------------------------------------------------------------------
34
35/**
36 * Creates code fixing commands for rules.
37 */
38
39const ruleFixer = Object.freeze({
40
41 /**
42 * Creates a fix command that inserts text after the given node or token.
43 * The fix is not applied until applyFixes() is called.
44 * @param {ASTNode|Token} nodeOrToken The node or token to insert after.
45 * @param {string} text The text to insert.
46 * @returns {Object} The fix command.
47 */
48 insertTextAfter(nodeOrToken, text) {
49 return this.insertTextAfterRange(nodeOrToken.range, text);
50 },
51
52 /**
53 * Creates a fix command that inserts text after the specified range in the source text.
54 * The fix is not applied until applyFixes() is called.
55 * @param {int[]} range The range to replace, first item is start of range, second
56 * is end of range.
57 * @param {string} text The text to insert.
58 * @returns {Object} The fix command.
59 */
60 insertTextAfterRange(range, text) {
61 return insertTextAt(range[1], text);
62 },
63
64 /**
65 * Creates a fix command that inserts text before the given node or token.
66 * The fix is not applied until applyFixes() is called.
67 * @param {ASTNode|Token} nodeOrToken The node or token to insert before.
68 * @param {string} text The text to insert.
69 * @returns {Object} The fix command.
70 */
71 insertTextBefore(nodeOrToken, text) {
72 return this.insertTextBeforeRange(nodeOrToken.range, text);
73 },
74
75 /**
76 * Creates a fix command that inserts text before the specified range in the source text.
77 * The fix is not applied until applyFixes() is called.
78 * @param {int[]} range The range to replace, first item is start of range, second
79 * is end of range.
80 * @param {string} text The text to insert.
81 * @returns {Object} The fix command.
82 */
83 insertTextBeforeRange(range, text) {
84 return insertTextAt(range[0], text);
85 },
86
87 /**
88 * Creates a fix command that replaces text at the node or token.
89 * The fix is not applied until applyFixes() is called.
90 * @param {ASTNode|Token} nodeOrToken The node or token to remove.
91 * @param {string} text The text to insert.
92 * @returns {Object} The fix command.
93 */
94 replaceText(nodeOrToken, text) {
95 return this.replaceTextRange(nodeOrToken.range, text);
96 },
97
98 /**
99 * Creates a fix command that replaces text at the specified range in the source text.
100 * The fix is not applied until applyFixes() is called.
101 * @param {int[]} range The range to replace, first item is start of range, second
102 * is end of range.
103 * @param {string} text The text to insert.
104 * @returns {Object} The fix command.
105 */
106 replaceTextRange(range, text) {
107 return {
108 range,
109 text
110 };
111 },
112
113 /**
114 * Creates a fix command that removes the node or token from the source.
115 * The fix is not applied until applyFixes() is called.
116 * @param {ASTNode|Token} nodeOrToken The node or token to remove.
117 * @returns {Object} The fix command.
118 */
119 remove(nodeOrToken) {
120 return this.removeRange(nodeOrToken.range);
121 },
122
123 /**
124 * Creates a fix command that removes the specified range of text from the source.
125 * The fix is not applied until applyFixes() is called.
126 * @param {int[]} range The range to remove, first item is start of range, second
127 * is end of range.
128 * @returns {Object} The fix command.
129 */
130 removeRange(range) {
131 return {
132 range,
133 text: ""
134 };
135 }
136
137});
138
139
140module.exports = ruleFixer;