MCPcopy Create free account
hub / github.com/Snapchat/Valdi / parseTypeFromSymbolGroup

Function parseTypeFromSymbolGroup

compiler/companion/src/AST.ts:252–304  ·  view source on GitHub ↗
(
  type: ts.NodeWithTypeArguments,
  symbolGroup: SymbolGroup,
  leadingComments: NodeComments | undefined,
  references: AST.TypeReferences,
)

Source from the content-addressed store, hash-verified

250}
251
252function parseTypeFromSymbolGroup(
253 type: ts.NodeWithTypeArguments,
254 symbolGroup: SymbolGroup,
255 leadingComments: NodeComments | undefined,
256 references: AST.TypeReferences,
257): AST.Type {
258 if (symbolGroup.symbol) {
259 const resolvedSymbol = symbolGroup.symbol;
260 if (resolvedSymbol.name === 'Array') {
261 if (!type.typeArguments || type.typeArguments.length !== 1) {
262 throw new Error(
263 `Resolved a generic Array reference with invalid type arguments ${getNodeDebugDescription(type)}`,
264 );
265 }
266
267 const elementTypeNode = type.typeArguments[0];
268 const elementType = parseType(elementTypeNode, references);
269 return { name: 'array', leadingComments, array: elementType };
270 }
271
272 const typeArguments = type.typeArguments?.map((typeArgTypeNode) => {
273 const parsedType = parseType(typeArgTypeNode, references);
274 return { type: parsedType };
275 });
276
277 const typeReferenceIndex = resolveTypeReference(type, resolvedSymbol, references);
278 return {
279 name: 'reference',
280 leadingComments,
281 typeReferenceIndex,
282 typeArguments,
283 isTypeParameter: resolvedSymbol.isTypeParameter,
284 };
285 }
286
287 if (symbolGroup.intersections) {
288 return {
289 name: 'intersection',
290 leadingComments,
291 intersections: symbolGroup.intersections.map((u) => parseTypeFromSymbolGroup(type, u, undefined, references)),
292 };
293 }
294
295 if (symbolGroup.unions) {
296 return {
297 name: 'union',
298 leadingComments,
299 unions: symbolGroup.unions.map((u) => parseTypeFromSymbolGroup(type, u, undefined, references)),
300 };
301 }
302
303 throw new Error('Invalid symbolGroup');
304}
305
306function parseType(type: ts.TypeNode | undefined, references: AST.TypeReferences): AST.Type {
307 if (!type) {

Callers 1

parseTypeFunction · 0.85

Calls 4

getNodeDebugDescriptionFunction · 0.90
parseTypeFunction · 0.85
resolveTypeReferenceFunction · 0.85
mapMethod · 0.45

Tested by

no test coverage detected