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

Function parseEdgeCreation

masfactory-visualizer/src/parser/edgeParser.ts:434–473  ·  view source on GitHub ↗
(
    callNode: TSNode,
    code: string,
    ctx: EdgeParseContext,
    functionText: string
)

Source from the content-addressed store, hash-verified

432 * Parse edge creation call (create_edge, edge_from_entry, edge_to_exit, etc.)
433 */
434export function parseEdgeCreation(
435 callNode: TSNode,
436 code: string,
437 ctx: EdgeParseContext,
438 functionText: string
439): void {
440 const argsNode = callNode.childForFieldName('arguments');
441 if (!argsNode) {return;}
442
443 const args = argsNode.namedChildren.filter((n): n is TSNode => !!n && n.type !== 'comment');
444 const lineOffset = ctx.lineOffset || 0;
445 const lineNumber = callNode.startPosition.row + 1 + lineOffset;
446
447 let parsed: ParsedEdgeInfo | null = null;
448 for (const rule of EDGE_PARSE_RULES) {
449 if (functionText.endsWith(rule.suffix)) {
450 parsed = rule.parse(args, code, ctx, functionText);
451 break;
452 }
453 }
454
455 const sender = parsed?.sender || '';
456 const receiver = parsed?.receiver || '';
457 const keys = parsed?.keys || [];
458 const keysDetails = parsed?.keysDetails;
459
460 // Add edge if both sender and receiver are valid
461 if (sender && receiver) {
462 ctx.edges.push({
463 from: sender,
464 to: receiver,
465 keys: keys,
466 keysDetails: keysDetails,
467 lineNumber: lineNumber
468 });
469 console.log(`[Parser] Found edge: ${sender} -> ${receiver}`);
470 } else {
471 console.log(`[Parser] Warning: Incomplete edge at line ${lineNumber}: sender=${sender}, receiver=${receiver}`);
472 }
473}
474
475/**
476 * Resolve node reference (variable name to node name)

Callers 6

parseBuilderAssignmentFunction · 0.90
parseBuilderCallFunction · 0.90
parseExpressionStatementFunction · 0.90
parseAssignmentFunction · 0.90

Calls 3

parseMethod · 0.80
pushMethod · 0.80
logMethod · 0.45

Tested by

no test coverage detected