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

Function parseEdgeFromEntry

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

Source from the content-addressed store, hash-verified

140}
141
142function parseEdgeFromEntry(args: TSNode[], code: string, ctx: EdgeParseContext, functionText: string): ParsedEdgeInfo {
143 let sender = '';
144 let receiver = '';
145 let keys: string[] = [];
146 let keysDetails: { [key: string]: string } | undefined;
147
148 const methodCall = extractMethodCall(functionText);
149 const graphVar = methodCall ? methodCall.caller : '';
150
151 if (graphVar === 'self' || graphVar === 'graph' || !ctx.variableToNodeName[graphVar]) {
152 sender = 'entry';
153 } else {
154 const subgraphName = ctx.variableToNodeName[graphVar];
155 sender = `${subgraphName}_entry`;
156 }
157
158 const receiverNode = getExpandedKeywordValue(args, code, 'receiver', ctx.literalValues);
159 if (receiverNode) {
160 receiver = resolveNodeReference(getNodeText(receiverNode, code), ctx.variableToNodeName);
161 }
162 const keysNode = getExpandedKeywordValue(args, code, 'keys', ctx.literalValues);
163 if (keysNode) {
164 const keysDict = parseDictArgument(keysNode, code);
165 if (keysDict) {
166 keys = Object.keys(keysDict);
167 keysDetails = keysDict;
168 }
169 }
170
171 for (const arg of args) {
172 if (arg.type === 'keyword_argument') {
173 const argName = getNodeText(arg.childForFieldName('name'), code);
174 const argValue = arg.childForFieldName('value');
175 if (argName === 'receiver' && argValue && !receiver) {
176 receiver = resolveNodeReference(getNodeText(argValue, code), ctx.variableToNodeName);
177 } else if (argName === 'keys' && argValue) {
178 const keysDict = parseDictArgument(argValue, code);
179 if (keysDict) {
180 keys = Object.keys(keysDict);
181 keysDetails = keysDict;
182 }
183 }
184 } else if (!receiver) {
185 receiver = resolveNodeReference(getNodeText(arg, code), ctx.variableToNodeName);
186 } else if (arg.type === 'dictionary') {
187 const keysDict = parseDictArgument(arg, code);
188 if (keysDict) {
189 keys = Object.keys(keysDict);
190 keysDetails = keysDict;
191 }
192 }
193 }
194
195 return { sender, receiver, keys, keysDetails };
196}
197
198function parseEdgeToExit(args: TSNode[], code: string, ctx: EdgeParseContext, functionText: string): ParsedEdgeInfo {
199 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