in src/powerquery-parser/parser/nodeIdMap/nodeIdMapIterator.ts [355:434]
export function iterSection(
nodeIdMapCollection: NodeIdMap.Collection,
section: TXorNode,
): ReadonlyArray<SectionKeyValuePair> {
XorNodeUtils.assertIsNodeKind(section, Ast.NodeKind.Section);
if (XorNodeUtils.isAstXorChecked<Ast.Section>(section, Ast.NodeKind.Section)) {
return section.node.sectionMembers.elements.map((sectionMember: Ast.SectionMember) => {
const namePairedExpression: Ast.IdentifierPairedExpression = sectionMember.namePairedExpression;
const keyLiteral: string = namePairedExpression.key.literal;
return {
source: XorNodeUtils.boxAst(namePairedExpression),
key: namePairedExpression.key,
keyLiteral,
normalizedKeyLiteral: TextUtils.normalizeIdentifier(keyLiteral),
maybeValue: XorNodeUtils.boxAst(namePairedExpression.value),
pairKind: PairKind.SectionMember,
};
});
}
const maybeSectionMemberArrayWrapper: XorNode<Ast.TArrayWrapper> | undefined =
NodeIdMapUtils.maybeNthChildChecked<Ast.TArrayWrapper>(
nodeIdMapCollection,
section.node.id,
4,
Ast.NodeKind.ArrayWrapper,
);
if (maybeSectionMemberArrayWrapper === undefined) {
return [];
}
const sectionMemberArrayWrapper: TXorNode = maybeSectionMemberArrayWrapper;
const partial: SectionKeyValuePair[] = [];
for (const sectionMember of assertIterChildrenXor(nodeIdMapCollection, sectionMemberArrayWrapper.node.id)) {
const maybeKeyValuePair: XorNode<Ast.IdentifierPairedExpression> | undefined =
NodeIdMapUtils.maybeNthChildChecked<Ast.IdentifierPairedExpression>(
nodeIdMapCollection,
sectionMember.node.id,
2,
Ast.NodeKind.IdentifierPairedExpression,
);
if (maybeKeyValuePair === undefined) {
continue;
}
const keyValuePair: TXorNode = maybeKeyValuePair;
const keyValuePairNodeId: number = keyValuePair.node.id;
const maybeKey: Ast.Identifier | undefined = NodeIdMapUtils.maybeUnboxNthChildIfAstChecked(
nodeIdMapCollection,
keyValuePairNodeId,
0,
Ast.NodeKind.Identifier,
);
if (maybeKey === undefined) {
continue;
}
const key: Ast.Identifier = maybeKey;
const keyLiteral: string = key.literal;
partial.push({
source: keyValuePair,
key,
keyLiteral,
normalizedKeyLiteral: TextUtils.normalizeIdentifier(keyLiteral),
maybeValue: NodeIdMapUtils.maybeNthChild(nodeIdMapCollection, keyValuePairNodeId, 2),
pairKind: PairKind.SectionMember,
});
}
return partial;
}