MCPcopy Index your code
hub / github.com/TypeScriptToLua/TypeScriptToLua / createVisitorMap

Function createVisitorMap

src/transformation/index.ts:8–32  ·  view source on GitHub ↗
(customVisitors: Visitors[])

Source from the content-addressed store, hash-verified

6import { usingTransformer } from "./pre-transformers/using-transformer";
7
8export function createVisitorMap(customVisitors: Visitors[]): VisitorMap {
9 const objectVisitorMap: Map<ts.SyntaxKind, Array<ObjectVisitor<ts.Node>>> = new Map();
10 for (const visitors of [standardVisitors, ...customVisitors]) {
11 const priority = visitors === standardVisitors ? -Infinity : 0;
12 for (const [syntaxKindKey, visitor] of Object.entries(visitors)) {
13 if (!visitor) continue;
14
15 const syntaxKind = Number(syntaxKindKey) as ts.SyntaxKind;
16 const nodeVisitors = getOrUpdate(objectVisitorMap, syntaxKind, () => []);
17
18 const objectVisitor: ObjectVisitor<any> =
19 typeof visitor === "function" ? { transform: visitor, priority } : visitor;
20 nodeVisitors.push(objectVisitor);
21 }
22 }
23
24 const result: VisitorMap = new Map();
25 for (const [kind, nodeVisitors] of objectVisitorMap) {
26 result.set(
27 kind,
28 nodeVisitors.sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0)).map(visitor => visitor.transform)
29 );
30 }
31 return result;
32}
33
34export function transformSourceFile(program: ts.Program, sourceFile: ts.SourceFile, visitorMap: VisitorMap) {
35 const context = new TransformationContext(program, sourceFile, visitorMap);

Callers 1

Calls 3

setMethod · 0.95
getOrUpdateFunction · 0.90
entriesMethod · 0.65

Tested by

no test coverage detected