cargo-json-docs 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENCE +21 -0
- package/dist/errors.d.ts +23 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +26 -0
- package/dist/errors.js.map +1 -0
- package/dist/item.d.ts +100 -0
- package/dist/item.d.ts.map +1 -0
- package/dist/item.js +589 -0
- package/dist/item.js.map +1 -0
- package/dist/json.d.ts +81 -0
- package/dist/json.d.ts.map +1 -0
- package/dist/json.js +226 -0
- package/dist/json.js.map +1 -0
- package/dist/lib.d.ts +21 -0
- package/dist/lib.d.ts.map +1 -0
- package/dist/lib.js +36 -0
- package/dist/lib.js.map +1 -0
- package/package.json +26 -0
- package/readme.md +95 -0
- package/src/errors.ts +31 -0
- package/src/item.ts +658 -0
- package/src/json.ts +274 -0
- package/src/lib.ts +30 -0
- package/src/types.d.ts +84 -0
- package/test/item.test.d.ts +2 -0
- package/test/item.test.d.ts.map +1 -0
- package/test/item.test.js +107 -0
- package/test/item.test.js.map +1 -0
- package/test/item.test.ts +128 -0
- package/test/json.test.d.ts +2 -0
- package/test/json.test.d.ts.map +1 -0
- package/test/json.test.js +24 -0
- package/test/json.test.js.map +1 -0
- package/test/json.test.ts +29 -0
- package/test/test_crate/Cargo.lock +74 -0
- package/test/test_crate/Cargo.toml +7 -0
- package/test/test_crate/src/lib.rs +50 -0
- package/test/test_crate/src/module_a.rs +16 -0
- package/test/test_crate/src/module_b/inner_b.rs +10 -0
- package/test/test_crate/src/module_b.rs +1 -0
- package/tsconfig.json +23 -0
package/dist/item.js
ADDED
|
@@ -0,0 +1,589 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CrateDocs = void 0;
|
|
4
|
+
const errors_1 = require("./errors");
|
|
5
|
+
/**
|
|
6
|
+
* A node in the cargo item tree.
|
|
7
|
+
* Used for resolving item paths.
|
|
8
|
+
*/
|
|
9
|
+
class CargoItemNode {
|
|
10
|
+
/** Creates a new CargoItemNode. */
|
|
11
|
+
constructor(id, name, kind, parentKind, path, docs_md = null) {
|
|
12
|
+
/** Whether the children of this node have been populated. */
|
|
13
|
+
this.childrenPopulated = false;
|
|
14
|
+
/** If true, start the path over from the given crate */
|
|
15
|
+
this.shouldJumpToCrate = null;
|
|
16
|
+
/** Whether to suppress presence in urls */
|
|
17
|
+
this.silent = false;
|
|
18
|
+
this.id = id;
|
|
19
|
+
this.name = name;
|
|
20
|
+
this.kind = kind;
|
|
21
|
+
this.parentKind = parentKind;
|
|
22
|
+
this.children = new Map();
|
|
23
|
+
this.docs_md = docs_md;
|
|
24
|
+
this.path = path;
|
|
25
|
+
}
|
|
26
|
+
/** Adds a child node. */
|
|
27
|
+
addChild(child) {
|
|
28
|
+
if (child.name === undefined || child.name === null || child.name.length === 0) {
|
|
29
|
+
throw new Error(`Cannot add child with empty name to node ${this.name}`);
|
|
30
|
+
}
|
|
31
|
+
this.children.set(child.name, child);
|
|
32
|
+
this.childrenPopulated = true;
|
|
33
|
+
}
|
|
34
|
+
/** Gets a child node by name. */
|
|
35
|
+
childNamed(name) {
|
|
36
|
+
let child = this.children.get(name);
|
|
37
|
+
if (child)
|
|
38
|
+
return child;
|
|
39
|
+
// Check for a path ending in the name
|
|
40
|
+
for (let [childName, childNode] of this.children) {
|
|
41
|
+
if (childName.endsWith('::' + name)) {
|
|
42
|
+
return childNode;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Parses the cargo JSON documentation format into a clean graph structure.
|
|
50
|
+
*/
|
|
51
|
+
class CargoJsonParser {
|
|
52
|
+
/**
|
|
53
|
+
* Creates a new CrateDocs instance.
|
|
54
|
+
* @param name The name of the crate.
|
|
55
|
+
* @param docs_root The root URL for the crate's documentation.
|
|
56
|
+
* @param source The JSON source. You can get this from DocumentationSource.getJson().
|
|
57
|
+
* @returns A new CrateDocs instance.
|
|
58
|
+
*/
|
|
59
|
+
constructor(name, docs_root, source) {
|
|
60
|
+
this.index = new Map();
|
|
61
|
+
this.crates = new Map();
|
|
62
|
+
this.paths = new Map();
|
|
63
|
+
this.next_id = 0;
|
|
64
|
+
this.lookup_tree = new CargoItemNode(-1, 'root', 'module', 'module', '');
|
|
65
|
+
if (!docs_root.endsWith('/')) {
|
|
66
|
+
docs_root += '/';
|
|
67
|
+
}
|
|
68
|
+
//
|
|
69
|
+
// Get the crate root entry, to find the top-level items
|
|
70
|
+
let rootEntry = source.index[source.root.toString()].inner['module'];
|
|
71
|
+
let rootEntries = new Set();
|
|
72
|
+
for (let itemId of rootEntry.items) {
|
|
73
|
+
let item = source.index[itemId.toString()];
|
|
74
|
+
if (item.name)
|
|
75
|
+
rootEntries.add(item.name);
|
|
76
|
+
}
|
|
77
|
+
//
|
|
78
|
+
// First the current crate will be added to the crate registry and as a root node
|
|
79
|
+
this.lookup_tree.addChild(new CargoItemNode(source.root, name, 'crate', 'module', name));
|
|
80
|
+
this.crates.set(name, {
|
|
81
|
+
id: source.root.toString(),
|
|
82
|
+
name: name,
|
|
83
|
+
html_root_url: docs_root,
|
|
84
|
+
could_be_root_module: rootEntries.has(name),
|
|
85
|
+
});
|
|
86
|
+
if (source.root > this.next_id)
|
|
87
|
+
this.next_id = source.root + 1;
|
|
88
|
+
//
|
|
89
|
+
// Do the same with the external crates
|
|
90
|
+
for (let id in source.external_crates) {
|
|
91
|
+
let item = source.external_crates[id];
|
|
92
|
+
item.id = id;
|
|
93
|
+
let crateId = parseInt(id);
|
|
94
|
+
if (crateId > this.next_id)
|
|
95
|
+
this.next_id = crateId + 1;
|
|
96
|
+
if (!item.html_root_url.endsWith('/')) {
|
|
97
|
+
item.html_root_url += '/';
|
|
98
|
+
}
|
|
99
|
+
this.lookup_tree.addChild(new CargoItemNode(crateId, item.name, 'crate', 'module', item.name));
|
|
100
|
+
this.crates.set(item.name, item);
|
|
101
|
+
}
|
|
102
|
+
//
|
|
103
|
+
// Next we build the index
|
|
104
|
+
for (let id in source.index) {
|
|
105
|
+
let item = source.index[id];
|
|
106
|
+
let indexId = parseInt(id);
|
|
107
|
+
if (indexId > this.next_id)
|
|
108
|
+
this.next_id = indexId + 1;
|
|
109
|
+
// The first key in `inner` is the kind
|
|
110
|
+
let kindKey = Object.keys(item.inner)[0];
|
|
111
|
+
item.kind = kindKey;
|
|
112
|
+
if (item.kind == 'module') {
|
|
113
|
+
item.is_crate = item.inner['module'].is_crate;
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
item.is_crate = false;
|
|
117
|
+
}
|
|
118
|
+
this.index.set(id, item);
|
|
119
|
+
}
|
|
120
|
+
//
|
|
121
|
+
// Next we build the paths
|
|
122
|
+
this.paths = new Map();
|
|
123
|
+
for (let id in source.paths) {
|
|
124
|
+
let item = source.paths[id];
|
|
125
|
+
let pathId = parseInt(id);
|
|
126
|
+
if (pathId > this.next_id)
|
|
127
|
+
this.next_id = pathId + 1;
|
|
128
|
+
this.paths.set(id, item);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/** Gets the URL component for a given CargoItemNode. */
|
|
132
|
+
urlComponentEncode(node) {
|
|
133
|
+
if (node.silent)
|
|
134
|
+
return '';
|
|
135
|
+
switch (node.kind) {
|
|
136
|
+
case 'crate': {
|
|
137
|
+
return this.crates.get(node.name).html_root_url + node.name + '/';
|
|
138
|
+
}
|
|
139
|
+
case 'module': {
|
|
140
|
+
return `${node.name}/`;
|
|
141
|
+
}
|
|
142
|
+
case 'function': {
|
|
143
|
+
if (node.parentKind === 'module' || node.parentKind === 'crate') {
|
|
144
|
+
return `fn.${node.name}.html`;
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
return `#method.${node.name}`;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
case 'functiontype': {
|
|
151
|
+
if (node.parentKind === 'module' || node.parentKind === 'crate') {
|
|
152
|
+
return `fn.${node.name}.html`;
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
return `#tymethod.${node.name}`;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
case 'variant': {
|
|
159
|
+
return `#variant.${node.name}`;
|
|
160
|
+
}
|
|
161
|
+
case 'struct_field': {
|
|
162
|
+
return `#structfield.${node.name}`;
|
|
163
|
+
}
|
|
164
|
+
case 'assoc_type': {
|
|
165
|
+
return `#associatedtype.${node.name}`;
|
|
166
|
+
}
|
|
167
|
+
case 'assoc_const': {
|
|
168
|
+
return `#associatedconstant.${node.name}`;
|
|
169
|
+
}
|
|
170
|
+
case 'type_alias': {
|
|
171
|
+
return `type.${node.name}.html`;
|
|
172
|
+
}
|
|
173
|
+
case 'constant':
|
|
174
|
+
case 'macro':
|
|
175
|
+
case 'struct':
|
|
176
|
+
case 'enum':
|
|
177
|
+
case 'trait':
|
|
178
|
+
case 'impl': {
|
|
179
|
+
return `${node.kind}.${node.name}.html`;
|
|
180
|
+
}
|
|
181
|
+
default:
|
|
182
|
+
throw new errors_1.CargoFormatError(`Unhandled item kind for URL encoding: ${node.kind} (name = ${node.name})`);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Searches for a path entry by its path components
|
|
187
|
+
* If nothing is found, invents a module
|
|
188
|
+
*/
|
|
189
|
+
pathEntryByPath(path) {
|
|
190
|
+
path = path.slice(); // Clone
|
|
191
|
+
for (let [id, entry] of this.paths) {
|
|
192
|
+
let entryPath = entry.path;
|
|
193
|
+
if (entryPath.length != path.length)
|
|
194
|
+
continue;
|
|
195
|
+
let matches = true;
|
|
196
|
+
for (let i = 0; i < path.length; i++) {
|
|
197
|
+
if (entryPath[i] !== path[i]) {
|
|
198
|
+
matches = false;
|
|
199
|
+
break;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
if (matches) {
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
// Not found - invent a module
|
|
207
|
+
let id = this.next_id++;
|
|
208
|
+
let crate = this.crates.get(path[0]);
|
|
209
|
+
this.paths.set(id.toString(), {
|
|
210
|
+
crate_id: parseInt(this.crates.get(path[0]).id),
|
|
211
|
+
path: path,
|
|
212
|
+
kind: 'module',
|
|
213
|
+
silent: true,
|
|
214
|
+
});
|
|
215
|
+
// If the parent is a module in the index, add this to its items
|
|
216
|
+
if (path.length > 1) {
|
|
217
|
+
let node = this.walkTree(path.slice(0, path.length - 1));
|
|
218
|
+
let parentNode = node[node.length - 1];
|
|
219
|
+
let parentEntry = this.index.get(parentNode.id.toString());
|
|
220
|
+
if (parentEntry && parentEntry.kind == 'module') {
|
|
221
|
+
let moduleInner = parentEntry.inner['module'];
|
|
222
|
+
moduleInner.items.push(id);
|
|
223
|
+
this.populateChildren(parentNode);
|
|
224
|
+
let child = new CargoItemNode(id, path[path.length - 1], 'module', 'module', path.join('::'));
|
|
225
|
+
child.silent = true;
|
|
226
|
+
parentNode.addChild(child);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
let entry = this.pathEntry(id);
|
|
230
|
+
entry.name = path[path.length - 1];
|
|
231
|
+
if (path.length > 1)
|
|
232
|
+
entry.is_crate = false;
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
pathEntry(id) {
|
|
236
|
+
id = id.toString();
|
|
237
|
+
let containerPath = this.paths.get(id);
|
|
238
|
+
if (!containerPath) {
|
|
239
|
+
for (let crate of this.crates.values()) {
|
|
240
|
+
if (crate.id === id)
|
|
241
|
+
containerPath = {
|
|
242
|
+
crate_id: parseInt(crate.id),
|
|
243
|
+
path: [crate.name],
|
|
244
|
+
kind: 'crate',
|
|
245
|
+
silent: false,
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
if (!containerPath)
|
|
250
|
+
return null;
|
|
251
|
+
let children = [];
|
|
252
|
+
for (let pathId of this.paths.keys()) {
|
|
253
|
+
let item = this.paths.get(pathId.toString());
|
|
254
|
+
if (!item || item.path.length != containerPath.path.length + 1)
|
|
255
|
+
continue;
|
|
256
|
+
let matches = true;
|
|
257
|
+
for (let i = 0; i < containerPath.path.length; i++) {
|
|
258
|
+
if (item.path[i] !== containerPath.path[i]) {
|
|
259
|
+
matches = false;
|
|
260
|
+
break;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
if (matches) {
|
|
264
|
+
children.push(parseInt(pathId));
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
let inner = {};
|
|
268
|
+
switch (containerPath.kind) {
|
|
269
|
+
case 'crate':
|
|
270
|
+
case 'module':
|
|
271
|
+
{
|
|
272
|
+
inner['items'] = children;
|
|
273
|
+
}
|
|
274
|
+
break;
|
|
275
|
+
case 'struct':
|
|
276
|
+
{
|
|
277
|
+
inner['tuple'] = children;
|
|
278
|
+
}
|
|
279
|
+
break;
|
|
280
|
+
case 'enum':
|
|
281
|
+
{
|
|
282
|
+
inner['variants'] = children;
|
|
283
|
+
}
|
|
284
|
+
break;
|
|
285
|
+
case 'trait':
|
|
286
|
+
{
|
|
287
|
+
inner['items'] = children;
|
|
288
|
+
}
|
|
289
|
+
break;
|
|
290
|
+
}
|
|
291
|
+
inner = { [containerPath.kind]: inner };
|
|
292
|
+
let name = containerPath.path.join('::');
|
|
293
|
+
let entry = {
|
|
294
|
+
id: parseInt(id),
|
|
295
|
+
crate_id: containerPath.crate_id,
|
|
296
|
+
is_crate: false,
|
|
297
|
+
name: name,
|
|
298
|
+
kind: containerPath.kind,
|
|
299
|
+
docs: null,
|
|
300
|
+
silent: containerPath.silent,
|
|
301
|
+
inner: inner,
|
|
302
|
+
};
|
|
303
|
+
return entry;
|
|
304
|
+
}
|
|
305
|
+
indexEntryContents(id, is_extern_crate = false) {
|
|
306
|
+
id = id.toString();
|
|
307
|
+
let parentEntry = null;
|
|
308
|
+
if (!is_extern_crate)
|
|
309
|
+
parentEntry = this.index.get(id);
|
|
310
|
+
if (!parentEntry) {
|
|
311
|
+
let pathEntry = this.pathEntry(id);
|
|
312
|
+
if (pathEntry)
|
|
313
|
+
parentEntry = pathEntry;
|
|
314
|
+
else
|
|
315
|
+
return null;
|
|
316
|
+
}
|
|
317
|
+
switch (parentEntry.kind) {
|
|
318
|
+
case 'crate':
|
|
319
|
+
case 'module': {
|
|
320
|
+
let moduleInner = parentEntry.inner[parentEntry.kind];
|
|
321
|
+
let entries = [];
|
|
322
|
+
for (let itemId of moduleInner.items) {
|
|
323
|
+
let entry = this.index.get(itemId.toString());
|
|
324
|
+
if (!entry) {
|
|
325
|
+
// try path entry
|
|
326
|
+
let pathEntry = this.pathEntry(itemId);
|
|
327
|
+
if (pathEntry) {
|
|
328
|
+
// This is always a fake module we invented - strip the path
|
|
329
|
+
let name = pathEntry.name.split('::').pop();
|
|
330
|
+
pathEntry.name = name;
|
|
331
|
+
-entries.push(pathEntry);
|
|
332
|
+
}
|
|
333
|
+
continue;
|
|
334
|
+
}
|
|
335
|
+
if (entry.kind == 'use') {
|
|
336
|
+
let useInner = entry.inner['use'];
|
|
337
|
+
let pathEntry = this.pathEntry(useInner.id);
|
|
338
|
+
if (pathEntry) {
|
|
339
|
+
entries.push(pathEntry);
|
|
340
|
+
}
|
|
341
|
+
else if (useInner.is_glob) {
|
|
342
|
+
let usedModule = this.index.get(useInner.id.toString())?.inner['module'];
|
|
343
|
+
for (let usedItemId of usedModule.items) {
|
|
344
|
+
let usedEntry = this.index.get(usedItemId.toString());
|
|
345
|
+
if (usedEntry)
|
|
346
|
+
entries.push(usedEntry);
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
else {
|
|
350
|
+
let useEntry = this.index.get(useInner.id.toString());
|
|
351
|
+
if (useEntry)
|
|
352
|
+
entries.push(useEntry);
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
else {
|
|
356
|
+
entries.push(entry);
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
return entries;
|
|
360
|
+
}
|
|
361
|
+
case 'struct': {
|
|
362
|
+
let structInner = parentEntry.inner['struct'];
|
|
363
|
+
let ownImpls = [];
|
|
364
|
+
for (let itemId of structInner.impls) {
|
|
365
|
+
let entry = this.index.get(itemId.toString());
|
|
366
|
+
let implInner = entry?.inner['impl'];
|
|
367
|
+
if (implInner.trait !== null)
|
|
368
|
+
continue;
|
|
369
|
+
for (let itemId of implInner.items) {
|
|
370
|
+
let item = this.index.get(itemId.toString());
|
|
371
|
+
if (item)
|
|
372
|
+
ownImpls.push(item);
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
let fields = [];
|
|
376
|
+
if (structInner.kind['plain']) {
|
|
377
|
+
for (let fieldId of structInner.kind['plain']['fields']) {
|
|
378
|
+
let field = this.index.get(fieldId.toString());
|
|
379
|
+
if (field)
|
|
380
|
+
fields.push(field);
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
else if (structInner.kind['tuple']) {
|
|
384
|
+
for (let fieldId of structInner.kind['tuple']) {
|
|
385
|
+
let field = this.index.get(fieldId.toString());
|
|
386
|
+
if (field)
|
|
387
|
+
fields.push(field);
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
return ownImpls.concat(fields);
|
|
391
|
+
}
|
|
392
|
+
case 'enum': {
|
|
393
|
+
let enumInner = parentEntry.inner['enum'];
|
|
394
|
+
let variants = enumInner.variants.map(id => this.index.get(id.toString())).filter((item) => item !== undefined);
|
|
395
|
+
let ownImpls = [];
|
|
396
|
+
for (let itemId of enumInner.impls) {
|
|
397
|
+
let entry = this.index.get(itemId.toString());
|
|
398
|
+
let implInner = entry?.inner['impl'];
|
|
399
|
+
if (implInner.trait !== null)
|
|
400
|
+
continue;
|
|
401
|
+
for (let itemId of implInner.items) {
|
|
402
|
+
let item = this.index.get(itemId.toString());
|
|
403
|
+
if (item)
|
|
404
|
+
ownImpls.push(item);
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
return variants.concat(ownImpls);
|
|
408
|
+
}
|
|
409
|
+
case 'trait': {
|
|
410
|
+
let traitInner = parentEntry.inner['trait'];
|
|
411
|
+
let items = [];
|
|
412
|
+
for (let itemId of traitInner.items) {
|
|
413
|
+
let item = this.index.get(itemId.toString());
|
|
414
|
+
if (!item)
|
|
415
|
+
continue;
|
|
416
|
+
if (item.kind == 'function') {
|
|
417
|
+
let funcInner = item.inner['function'];
|
|
418
|
+
if (!funcInner.has_body) {
|
|
419
|
+
item.kind = 'functiontype';
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
items.push(item);
|
|
423
|
+
}
|
|
424
|
+
return items;
|
|
425
|
+
}
|
|
426
|
+
default:
|
|
427
|
+
throw new errors_1.CargoFormatError(`Unhandled parent kind: ${parentEntry.kind} (name = ${parentEntry.name}, id = ${parentEntry.id})`);
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
/**
|
|
431
|
+
* First we make sure the start is a crate name
|
|
432
|
+
* If not, append the current crate name
|
|
433
|
+
* If 'crate' replaced with current crate name
|
|
434
|
+
* If it's a crate that cannot be a root module only try that crate
|
|
435
|
+
* Else try current crate first, then other one
|
|
436
|
+
* @param path Path to fix
|
|
437
|
+
* @returns All viable candidate paths.
|
|
438
|
+
*/
|
|
439
|
+
fixPathCrate(path) {
|
|
440
|
+
let crateName = path[0];
|
|
441
|
+
if (crateName == 'crate')
|
|
442
|
+
crateName = this.ownCrateName();
|
|
443
|
+
let crateDetails = this.crates.get(crateName);
|
|
444
|
+
let paths = [];
|
|
445
|
+
if (crateDetails) {
|
|
446
|
+
if (crateDetails.could_be_root_module) {
|
|
447
|
+
// Try current crate first
|
|
448
|
+
let newPath = [this.ownCrateName()].concat(path);
|
|
449
|
+
let result = this.walkTree(newPath);
|
|
450
|
+
if (result)
|
|
451
|
+
paths.push(newPath);
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
else {
|
|
455
|
+
crateName = this.ownCrateName();
|
|
456
|
+
path = [crateName].concat(path);
|
|
457
|
+
}
|
|
458
|
+
paths.push(path);
|
|
459
|
+
return paths;
|
|
460
|
+
}
|
|
461
|
+
/** Populates the children of a given CargoItemNode. */
|
|
462
|
+
populateChildren(node, is_extern_crate = false) {
|
|
463
|
+
if (!node.childrenPopulated) {
|
|
464
|
+
// Load the children for this node
|
|
465
|
+
let children = this.indexEntryContents(node.id, is_extern_crate) || [];
|
|
466
|
+
for (let childEntry of children) {
|
|
467
|
+
let path = node.path + '::' + childEntry.name;
|
|
468
|
+
let childNode = new CargoItemNode(childEntry.id, childEntry.name, childEntry.kind, node.kind, path, childEntry.docs);
|
|
469
|
+
if (childEntry.is_crate)
|
|
470
|
+
childNode.shouldJumpToCrate = childEntry.name;
|
|
471
|
+
node.addChild(childNode);
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
/**
|
|
476
|
+
* When going through paths, we may come across modules that are not directly represented in the index.
|
|
477
|
+
* This walks up the path to populate missing modules as needed.
|
|
478
|
+
*/
|
|
479
|
+
populateMissingPathModules(path) {
|
|
480
|
+
let currentNode = this.lookup_tree;
|
|
481
|
+
path = path.slice(); // Clone
|
|
482
|
+
if (path.length === 0)
|
|
483
|
+
throw new Error("Cannot walk empty path");
|
|
484
|
+
let remainingPath = path.reverse();
|
|
485
|
+
let crateName = remainingPath.pop();
|
|
486
|
+
currentNode = currentNode.childNamed(crateName);
|
|
487
|
+
let shortestPath = [crateName];
|
|
488
|
+
while (remainingPath.length > 0) {
|
|
489
|
+
let nextName = remainingPath.pop();
|
|
490
|
+
shortestPath.push(nextName);
|
|
491
|
+
this.pathEntryByPath(shortestPath);
|
|
492
|
+
this.populateChildren(currentNode, shortestPath.length == 2);
|
|
493
|
+
currentNode = currentNode.childNamed(nextName);
|
|
494
|
+
if (!currentNode)
|
|
495
|
+
throw new errors_1.ResolutionError(shortestPath.slice(0, -1).join('::'), nextName);
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
/**
|
|
499
|
+
* Walks the item tree to find a node by path.
|
|
500
|
+
* @param path The path to walk.
|
|
501
|
+
* @returns The path to the found CargoItemNode.
|
|
502
|
+
* @throws ResolutionError if the path cannot be resolved.
|
|
503
|
+
*/
|
|
504
|
+
walkTree(path) {
|
|
505
|
+
let currentNode = this.lookup_tree;
|
|
506
|
+
path = path.slice(); // Clone
|
|
507
|
+
if (path.length === 0)
|
|
508
|
+
throw new Error("Cannot walk empty path");
|
|
509
|
+
//
|
|
510
|
+
// Fix the crate prefix
|
|
511
|
+
let paths = this.fixPathCrate(path);
|
|
512
|
+
if (paths.length > 1) {
|
|
513
|
+
for (let p of paths.slice(1)) {
|
|
514
|
+
try {
|
|
515
|
+
return this.walkTree(p);
|
|
516
|
+
}
|
|
517
|
+
catch (e) { }
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
path = paths[0];
|
|
521
|
+
let remainingPath = path.reverse();
|
|
522
|
+
currentNode = currentNode.childNamed(remainingPath.pop());
|
|
523
|
+
let shortestPath = [currentNode];
|
|
524
|
+
while (remainingPath.length > 0) {
|
|
525
|
+
this.populateChildren(currentNode);
|
|
526
|
+
let nextName = remainingPath.pop();
|
|
527
|
+
let nextNode = currentNode.childNamed(nextName);
|
|
528
|
+
if (!nextNode)
|
|
529
|
+
throw new errors_1.ResolutionError(currentNode.name, nextName);
|
|
530
|
+
if (nextNode.shouldJumpToCrate) {
|
|
531
|
+
let newPath = nextNode.shouldJumpToCrate.split('::').concat(remainingPath.reverse());
|
|
532
|
+
this.populateMissingPathModules(newPath);
|
|
533
|
+
``;
|
|
534
|
+
return this.walkTree(newPath);
|
|
535
|
+
}
|
|
536
|
+
currentNode = nextNode;
|
|
537
|
+
let returnedNode = JSON.parse(JSON.stringify(currentNode));
|
|
538
|
+
returnedNode.name = returnedNode.name.split('::').pop();
|
|
539
|
+
shortestPath.push(returnedNode);
|
|
540
|
+
}
|
|
541
|
+
return shortestPath;
|
|
542
|
+
}
|
|
543
|
+
/** Gets the current crate name. */
|
|
544
|
+
ownCrateName() {
|
|
545
|
+
// It's the first crate in the registry
|
|
546
|
+
return Array.from(this.crates.keys())[0];
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
class CrateDocs {
|
|
550
|
+
/**
|
|
551
|
+
* Creates a new CrateDocs instance.
|
|
552
|
+
* @param name The name of the crate.
|
|
553
|
+
* @param docs_root The root URL for the crate's documentation.
|
|
554
|
+
* @param source The JSON source. You can get this from DocumentationSource.getJson().
|
|
555
|
+
* @returns A new CrateDocs instance.
|
|
556
|
+
*/
|
|
557
|
+
constructor(name, docs_root, source) {
|
|
558
|
+
this.parser = new CargoJsonParser(name, docs_root, source);
|
|
559
|
+
}
|
|
560
|
+
/**
|
|
561
|
+
* Gets a documented item by its path.
|
|
562
|
+
* @param path The item path, e.g., "crate::module::Item" or "Item".
|
|
563
|
+
* @returns The documented item.
|
|
564
|
+
* @throws ResolutionError if the item cannot be found.
|
|
565
|
+
*/
|
|
566
|
+
get(path) {
|
|
567
|
+
let pathParts = path.split('::');
|
|
568
|
+
let nodes = this.parser.walkTree(pathParts);
|
|
569
|
+
let targetNode = nodes[nodes.length - 1];
|
|
570
|
+
let urlParts = [];
|
|
571
|
+
for (let node of nodes) {
|
|
572
|
+
let part = this.parser.urlComponentEncode(node);
|
|
573
|
+
urlParts.push(part);
|
|
574
|
+
}
|
|
575
|
+
let url = urlParts.join('');
|
|
576
|
+
if (url.endsWith('/')) {
|
|
577
|
+
url += 'index.html';
|
|
578
|
+
}
|
|
579
|
+
return {
|
|
580
|
+
name: targetNode.name,
|
|
581
|
+
path: targetNode.path,
|
|
582
|
+
kind: targetNode.kind,
|
|
583
|
+
url: url,
|
|
584
|
+
docs: targetNode.docs_md,
|
|
585
|
+
};
|
|
586
|
+
}
|
|
587
|
+
}
|
|
588
|
+
exports.CrateDocs = CrateDocs;
|
|
589
|
+
//# sourceMappingURL=item.js.map
|
package/dist/item.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"item.js","sourceRoot":"","sources":["../src/item.ts"],"names":[],"mappings":"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"}
|