MCPcopy Create free account
hub / github.com/cst/cst / buildElementTreeItem

Function buildElementTreeItem

src/elementTree.js:50–148  ·  view source on GitHub ↗

* @param {Object} ast * @param {{tokens: Array, token: Object, pos: Number}} state * @returns {Element}

(ast: Object, state: ElementTreeItemState)

Source from the content-addressed store, hash-verified

48 * @returns {Element}
49 */
50function buildElementTreeItem(ast: Object, state: ElementTreeItemState): ?Element {
51 let elementType = ast.type;
52 let childProps = visitorKeys[elementType];
53
54 // Skip first `Identifier` for ({ test = 1 } = {})
55 // since it is already used in `AssignmentPattern`
56 // Need to fix this one day (See https://github.com/babel/babylon/issues/49)
57 if (
58 ast.type === 'ObjectProperty' &&
59 ast.value.type === 'AssignmentPattern'
60 ) {
61 delete ast.key;
62 }
63
64 if (!childProps) {
65 let error = new SyntaxError(`Cannot iterate using ${elementType}`);
66 error.loc = ast.loc.start;
67 throw error;
68 }
69
70 let childElements = [];
71 for (let i = 0; i < childProps.length; i++) {
72 let childAst = ast[childProps[i]];
73
74 if (!childAst) {
75 continue;
76 }
77
78 if (Array.isArray(childAst)) {
79 for (let j = 0; j < childAst.length; j++) {
80 if (childAst[j] === null) {
81 continue;
82 }
83
84 childElements[childElements.length] = childAst[j];
85 }
86 } else {
87 childElements[childElements.length] = childAst;
88 }
89 }
90
91 childElements.sort((ast1, ast2) => {
92 return ast1.start < ast2.start ? -1 : (ast1.start > ast2.start ? 1 : 0);
93 });
94
95 let NodeClass = elementIndex[elementType];
96
97 if (!NodeClass) {
98 throw new Error(`Cannot create ${elementType} instance`);
99 }
100
101 let children = [];
102 let childElementIndex = 0;
103 let childElement = childElements[0];
104 let end = ast.end;
105
106 do {
107 if (childElement && state.token.start === childElement.start) {

Callers 1

buildElementTreeFunction · 0.85

Calls 1

createFromTokenMethod · 0.80

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…