Update js tester tool · rust-lang/rust@e2db0a5 (original) (raw)
`@@ -12,73 +12,148 @@ const fs = require('fs');
`
12
12
``
13
13
`const TEST_FOLDER = 'src/test/rustdoc-js/';
`
14
14
``
``
15
`+
function getNextStep(content, pos, stop) {
`
``
16
`+
while (pos < content.length && content[pos] !== stop &&
`
``
17
`+
(content[pos] === ' ' || content[pos] === '\t' || content[pos] === '\n')) {
`
``
18
`+
pos += 1;
`
``
19
`+
}
`
``
20
`+
if (pos >= content.length) {
`
``
21
`+
return null;
`
``
22
`+
}
`
``
23
`+
if (content[pos] !== stop) {
`
``
24
`+
return pos * -1;
`
``
25
`+
}
`
``
26
`+
return pos;
`
``
27
`+
}
`
``
28
+
15
29
`// Stupid function extractor based on indent.
`
16
30
`function extractFunction(content, functionName) {
`
17
``
`-
var x = content.split('\n');
`
18
``
`-
var in_func = false;
`
19
31
`var indent = 0;
`
20
``
`-
var lines = [];
`
21
``
-
22
``
`-
for (var i = 0; i < x.length; ++i) {
`
23
``
`-
if (in_func === false) {
`
24
``
`-
var splitter = "function " + functionName + "(";
`
25
``
`-
if (x[i].trim().startsWith(splitter)) {
`
26
``
`-
in_func = true;
`
27
``
`-
indent = x[i].split(splitter)[0].length;
`
28
``
`-
lines.push(x[i]);
`
29
``
`-
}
`
30
``
`-
} else {
`
31
``
`-
lines.push(x[i]);
`
32
``
`-
if (x[i].trim() === "}" && x[i].split("}")[0].length === indent) {
`
33
``
`-
return lines.join("\n");
`
``
32
`+
var splitter = "function " + functionName + "(";
`
``
33
+
``
34
`+
while (true) {
`
``
35
`+
var start = content.indexOf(splitter);
`
``
36
`+
if (start === -1) {
`
``
37
`+
break;
`
``
38
`+
}
`
``
39
`+
var pos = start;
`
``
40
`+
while (pos < content.length && content[pos] !== ')') {
`
``
41
`+
pos += 1;
`
``
42
`+
}
`
``
43
`+
if (pos >= content.length) {
`
``
44
`+
break;
`
``
45
`+
}
`
``
46
`+
pos = getNextStep(content, pos + 1, '{');
`
``
47
`+
if (pos === null) {
`
``
48
`+
break;
`
``
49
`+
} else if (pos < 0) {
`
``
50
`+
content = content.slice(-pos);
`
``
51
`+
continue;
`
``
52
`+
}
`
``
53
`+
while (pos < content.length) {
`
``
54
`+
if (content[pos] === '"' || content[pos] === "'") {
`
``
55
`+
var stop = content[pos];
`
``
56
`+
var is_escaped = false;
`
``
57
`+
do {
`
``
58
`+
if (content[pos] === '\') {
`
``
59
`+
pos += 2;
`
``
60
`+
} else {
`
``
61
`+
pos += 1;
`
``
62
`+
}
`
``
63
`+
} while (pos < content.length &&
`
``
64
`+
(content[pos] !== stop || content[pos - 1] === '\'));
`
``
65
`+
} else if (content[pos] === '{') {
`
``
66
`+
indent += 1;
`
``
67
`+
} else if (content[pos] === '}') {
`
``
68
`+
indent -= 1;
`
``
69
`+
if (indent === 0) {
`
``
70
`+
return content.slice(start, pos + 1);
`
``
71
`+
}
`
34
72
`}
`
``
73
`+
pos += 1;
`
35
74
`}
`
``
75
`+
content = content.slice(start + 1);
`
36
76
`}
`
37
77
`return null;
`
38
78
`}
`
39
79
``
40
80
`// Stupid function extractor for array.
`
41
81
`function extractArrayVariable(content, arrayName) {
`
42
``
`-
var x = content.split('\n');
`
43
``
`-
var found_var = false;
`
44
``
`-
var lines = [];
`
45
``
-
46
``
`-
for (var i = 0; i < x.length; ++i) {
`
47
``
`-
if (found_var === false) {
`
48
``
`-
var splitter = "var " + arrayName + " = [";
`
49
``
`-
if (x[i].trim().startsWith(splitter)) {
`
50
``
`-
found_var = true;
`
51
``
`-
i -= 1;
`
52
``
`-
}
`
53
``
`-
} else {
`
54
``
`-
lines.push(x[i]);
`
55
``
`-
if (x[i].endsWith('];')) {
`
56
``
`-
return lines.join("\n");
`
``
82
`+
var splitter = "var " + arrayName;
`
``
83
`+
while (true) {
`
``
84
`+
var start = content.indexOf(splitter);
`
``
85
`+
if (start === -1) {
`
``
86
`+
break;
`
``
87
`+
}
`
``
88
`+
var pos = getNextStep(content, start, '=');
`
``
89
`+
if (pos === null) {
`
``
90
`+
break;
`
``
91
`+
} else if (pos < 0) {
`
``
92
`+
content = content.slice(-pos);
`
``
93
`+
continue;
`
``
94
`+
}
`
``
95
`+
pos = getNextStep(content, pos, '[');
`
``
96
`+
if (pos === null) {
`
``
97
`+
break;
`
``
98
`+
} else if (pos < 0) {
`
``
99
`+
content = content.slice(-pos);
`
``
100
`+
continue;
`
``
101
`+
}
`
``
102
`+
while (pos < content.length) {
`
``
103
`+
if (content[pos] === '"' || content[pos] === "'") {
`
``
104
`+
var stop = content[pos];
`
``
105
`+
do {
`
``
106
`+
if (content[pos] === '\') {
`
``
107
`+
pos += 2;
`
``
108
`+
} else {
`
``
109
`+
pos += 1;
`
``
110
`+
}
`
``
111
`+
} while (pos < content.length &&
`
``
112
`+
(content[pos] !== stop || content[pos - 1] === '\'));
`
``
113
`+
} else if (content[pos] === ']' &&
`
``
114
`+
pos + 1 < content.length &&
`
``
115
`+
content[pos + 1] === ';') {
`
``
116
`+
return content.slice(start, pos + 2);
`
57
117
`}
`
``
118
`+
pos += 1;
`
58
119
`}
`
``
120
`+
content = content.slice(start + 1);
`
59
121
`}
`
60
122
`return null;
`
61
123
`}
`
62
124
``
63
125
`// Stupid function extractor for variable.
`
64
126
`function extractVariable(content, varName) {
`
65
``
`-
var x = content.split('\n');
`
66
``
`-
var found_var = false;
`
67
``
`-
var lines = [];
`
68
``
-
69
``
`-
for (var i = 0; i < x.length; ++i) {
`
70
``
`-
if (found_var === false) {
`
71
``
`-
var splitter = "var " + varName + " = ";
`
72
``
`-
if (x[i].trim().startsWith(splitter)) {
`
73
``
`-
found_var = true;
`
74
``
`-
i -= 1;
`
75
``
`-
}
`
76
``
`-
} else {
`
77
``
`-
lines.push(x[i]);
`
78
``
`-
if (x[i].endsWith(';')) {
`
79
``
`-
return lines.join("\n");
`
``
127
`+
var splitter = "var " + varName;
`
``
128
`+
while (true) {
`
``
129
`+
var start = content.indexOf(splitter);
`
``
130
`+
if (start === -1) {
`
``
131
`+
break;
`
``
132
`+
}
`
``
133
`+
var pos = getNextStep(content, start, '=');
`
``
134
`+
if (pos === null) {
`
``
135
`+
break;
`
``
136
`+
} else if (pos < 0) {
`
``
137
`+
content = content.slice(-pos);
`
``
138
`+
continue;
`
``
139
`+
}
`
``
140
`+
while (pos < content.length) {
`
``
141
`+
if (content[pos] === '"' || content[pos] === "'") {
`
``
142
`+
var stop = content[pos];
`
``
143
`+
do {
`
``
144
`+
if (content[pos] === '\') {
`
``
145
`+
pos += 2;
`
``
146
`+
} else {
`
``
147
`+
pos += 1;
`
``
148
`+
}
`
``
149
`+
} while (pos < content.length &&
`
``
150
`+
(content[pos] !== stop || content[pos - 1] === '\'));
`
``
151
`+
} else if (content[pos] === ';') {
`
``
152
`+
return content.slice(start, pos + 1);
`
80
153
`}
`
``
154
`+
pos += 1;
`
81
155
`}
`
``
156
`+
content = content.slice(start + 1);
`
82
157
`}
`
83
158
`return null;
`
84
159
`}
`
`@@ -101,7 +176,7 @@ function loadThings(thingsToLoad, kindOfLoad, funcToCall, fileContent) {
`
101
176
`for (var i = 0; i < thingsToLoad.length; ++i) {
`
102
177
`var tmp = funcToCall(fileContent, thingsToLoad[i]);
`
103
178
`if (tmp === null) {
`
104
``
`-
console.error('enable to find ' + kindOfLoad + ' "' + thingsToLoad[i] + '"');
`
``
179
`+
console.error('unable to find ' + kindOfLoad + ' "' + thingsToLoad[i] + '"');
`
105
180
`process.exit(1);
`
106
181
`}
`
107
182
`content += tmp;
`