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

Function parseEdgeToExit

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

Source from the content-addressed store, hash-verified

196}
197
198function parseEdgeToExit(args: TSNode[], code: string, ctx: EdgeParseContext, functionText: string): ParsedEdgeInfo {
199 let sender = '';
200 let receiver = '';
201 let keys: string[] = [];
202 let keysDetails: { [key: string]: string } | undefined;
203
204 const methodCall = extractMethodCall(functionText);
205 const graphVar = methodCall ? methodCall.caller : '';
206
207 if (graphVar === 'self' || graphVar === 'graph' || !ctx.variableToNodeName[graphVar]) {
208 receiver = 'exit';
209 } else {
210 const subgraphName = ctx.variableToNodeName[graphVar];
211 receiver = `${subgraphName}_exit`;
212 }
213
214 const senderNode = getExpandedKeywordValue(args, code, 'sender', ctx.literalValues);
215 if (senderNode) {
216 sender = resolveNodeReference(getNodeText(senderNode, code), ctx.variableToNodeName);
217 }
218 const keysNode = getExpandedKeywordValue(args, code, 'keys', ctx.literalValues);
219 if (keysNode) {
220 const keysDict = parseDictArgument(keysNode, code);
221 if (keysDict) {
222 keys = Object.keys(keysDict);
223 keysDetails = keysDict;
224 }
225 }
226
227 for (const arg of args) {
228 if (arg.type === 'keyword_argument') {
229 const argName = getNodeText(arg.childForFieldName('name'), code);
230 const argValue = arg.childForFieldName('value');
231 if (argName === 'sender' && argValue && !sender) {
232 sender = resolveNodeReference(getNodeText(argValue, code), ctx.variableToNodeName);
233 } else if (argName === 'keys' && argValue) {
234 const keysDict = parseDictArgument(argValue, code);
235 if (keysDict) {
236 keys = Object.keys(keysDict);
237 keysDetails = keysDict;
238 }
239 }
240 } else if (!sender) {
241 sender = resolveNodeReference(getNodeText(arg, code), ctx.variableToNodeName);
242 } else if (arg.type === 'dictionary') {
243 const keysDict = parseDictArgument(arg, code);
244 if (keysDict) {
245 keys = Object.keys(keysDict);
246 keysDetails = keysDict;
247 }
248 }
249 }
250
251 return { sender, receiver, keys, keysDetails };
252}
253
254function parseEdgeFromController(args: TSNode[], code: string, ctx: EdgeParseContext, functionText: string): ParsedEdgeInfo {
255 let sender = '';

Callers 1

edgeParser.tsFile · 0.85

Calls 6

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

Tested by

no test coverage detected