MCPcopy Create free account
hub / github.com/BUPT-GAMMA/MASFactory / parseCreateEdge

Function parseCreateEdge

masfactory-visualizer/src/parser/edgeParser.ts:83–140  ·  view source on GitHub ↗
(args: TSNode[], code: string, ctx: EdgeParseContext)

Source from the content-addressed store, hash-verified

81};
82
83function parseCreateEdge(args: TSNode[], code: string, ctx: EdgeParseContext): ParsedEdgeInfo {
84 let sender = '';
85 let receiver = '';
86 let keys: string[] = [];
87 let keysDetails: { [key: string]: string } | undefined;
88
89 // create_edge(sender, receiver, keys={...})
90 let positionalIndex = 0;
91 const senderNode = getExpandedKeywordValue(args, code, 'sender', ctx.literalValues);
92 if (senderNode) {
93 sender = resolveNodeReference(getNodeText(senderNode, code), ctx.variableToNodeName);
94 }
95 const receiverNode = getExpandedKeywordValue(args, code, 'receiver', ctx.literalValues);
96 if (receiverNode) {
97 receiver = resolveNodeReference(getNodeText(receiverNode, code), ctx.variableToNodeName);
98 }
99 const keysNode = getExpandedKeywordValue(args, code, 'keys', ctx.literalValues);
100 if (keysNode) {
101 const keysDict = parseDictArgument(keysNode, code);
102 if (keysDict) {
103 keys = Object.keys(keysDict);
104 keysDetails = keysDict;
105 }
106 }
107
108 for (const arg of args) {
109 if (arg.type === 'keyword_argument') {
110 const argName = getNodeText(arg.childForFieldName('name'), code);
111 const argValue = arg.childForFieldName('value');
112 if (argName === 'sender' && argValue && !sender) {
113 sender = resolveNodeReference(getNodeText(argValue, code), ctx.variableToNodeName);
114 } else if (argName === 'receiver' && argValue && !receiver) {
115 receiver = resolveNodeReference(getNodeText(argValue, code), ctx.variableToNodeName);
116 } else if (argName === 'keys' && argValue) {
117 const keysDict = parseDictArgument(argValue, code);
118 if (keysDict) {
119 keys = Object.keys(keysDict);
120 keysDetails = keysDict;
121 }
122 }
123 } else {
124 if (positionalIndex === 0 && !sender) {
125 sender = resolveNodeReference(getNodeText(arg, code), ctx.variableToNodeName);
126 } else if (positionalIndex === 1 && !receiver) {
127 receiver = resolveNodeReference(getNodeText(arg, code), ctx.variableToNodeName);
128 } else if (positionalIndex === 2 && arg.type === 'dictionary') {
129 const keysDict = parseDictArgument(arg, code);
130 if (keysDict) {
131 keys = Object.keys(keysDict);
132 keysDetails = keysDict;
133 }
134 }
135 positionalIndex++;
136 }
137 }
138
139 return { sender, receiver, keys, keysDetails };
140}

Callers 1

edgeParser.tsFile · 0.85

Calls 5

getNodeTextFunction · 0.90
parseDictArgumentFunction · 0.90
getExpandedKeywordValueFunction · 0.85
resolveNodeReferenceFunction · 0.85
keysMethod · 0.80

Tested by

no test coverage detected