@optave/codegraph 3.11.2 → 3.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -8
- package/dist/db/migrations.d.ts.map +1 -1
- package/dist/db/migrations.js +7 -0
- package/dist/db/migrations.js.map +1 -1
- package/dist/domain/analysis/module-map.d.ts +2 -0
- package/dist/domain/analysis/module-map.d.ts.map +1 -1
- package/dist/domain/analysis/module-map.js +24 -2
- package/dist/domain/analysis/module-map.js.map +1 -1
- package/dist/domain/graph/builder/call-resolver.d.ts +4 -2
- package/dist/domain/graph/builder/call-resolver.d.ts.map +1 -1
- package/dist/domain/graph/builder/call-resolver.js +170 -8
- package/dist/domain/graph/builder/call-resolver.js.map +1 -1
- package/dist/domain/graph/builder/cha.d.ts +61 -0
- package/dist/domain/graph/builder/cha.d.ts.map +1 -0
- package/dist/domain/graph/builder/cha.js +143 -0
- package/dist/domain/graph/builder/cha.js.map +1 -0
- package/dist/domain/graph/builder/context.d.ts +3 -0
- package/dist/domain/graph/builder/context.d.ts.map +1 -1
- package/dist/domain/graph/builder/context.js +2 -0
- package/dist/domain/graph/builder/context.js.map +1 -1
- package/dist/domain/graph/builder/helpers.d.ts +17 -1
- package/dist/domain/graph/builder/helpers.d.ts.map +1 -1
- package/dist/domain/graph/builder/helpers.js +159 -5
- package/dist/domain/graph/builder/helpers.js.map +1 -1
- package/dist/domain/graph/builder/incremental.d.ts.map +1 -1
- package/dist/domain/graph/builder/incremental.js +73 -1
- package/dist/domain/graph/builder/incremental.js.map +1 -1
- package/dist/domain/graph/builder/stages/build-edges.d.ts +2 -0
- package/dist/domain/graph/builder/stages/build-edges.d.ts.map +1 -1
- package/dist/domain/graph/builder/stages/build-edges.js +926 -26
- package/dist/domain/graph/builder/stages/build-edges.js.map +1 -1
- package/dist/domain/graph/builder/stages/detect-changes.d.ts.map +1 -1
- package/dist/domain/graph/builder/stages/detect-changes.js +2 -1
- package/dist/domain/graph/builder/stages/detect-changes.js.map +1 -1
- package/dist/domain/graph/builder/stages/native-orchestrator.d.ts.map +1 -1
- package/dist/domain/graph/builder/stages/native-orchestrator.js +501 -14
- package/dist/domain/graph/builder/stages/native-orchestrator.js.map +1 -1
- package/dist/domain/graph/builder/stages/resolve-imports.d.ts +1 -0
- package/dist/domain/graph/builder/stages/resolve-imports.d.ts.map +1 -1
- package/dist/domain/graph/builder/stages/resolve-imports.js +9 -0
- package/dist/domain/graph/builder/stages/resolve-imports.js.map +1 -1
- package/dist/domain/graph/journal.js +1 -1
- package/dist/domain/graph/journal.js.map +1 -1
- package/dist/domain/graph/resolver/points-to.d.ts +53 -0
- package/dist/domain/graph/resolver/points-to.d.ts.map +1 -0
- package/dist/domain/graph/resolver/points-to.js +213 -0
- package/dist/domain/graph/resolver/points-to.js.map +1 -0
- package/dist/domain/graph/resolver/ts-resolver.d.ts +9 -0
- package/dist/domain/graph/resolver/ts-resolver.d.ts.map +1 -0
- package/dist/domain/graph/resolver/ts-resolver.js +476 -0
- package/dist/domain/graph/resolver/ts-resolver.js.map +1 -0
- package/dist/domain/parser.d.ts +10 -1
- package/dist/domain/parser.d.ts.map +1 -1
- package/dist/domain/parser.js +39 -7
- package/dist/domain/parser.js.map +1 -1
- package/dist/domain/wasm-worker-entry.js +25 -0
- package/dist/domain/wasm-worker-entry.js.map +1 -1
- package/dist/domain/wasm-worker-pool.d.ts.map +1 -1
- package/dist/domain/wasm-worker-pool.js +32 -0
- package/dist/domain/wasm-worker-pool.js.map +1 -1
- package/dist/domain/wasm-worker-protocol.d.ts +14 -1
- package/dist/domain/wasm-worker-protocol.d.ts.map +1 -1
- package/dist/extractors/c.js +3 -3
- package/dist/extractors/c.js.map +1 -1
- package/dist/extractors/clojure.js +1 -1
- package/dist/extractors/clojure.js.map +1 -1
- package/dist/extractors/cpp.js +3 -3
- package/dist/extractors/cpp.js.map +1 -1
- package/dist/extractors/csharp.d.ts.map +1 -1
- package/dist/extractors/csharp.js +37 -8
- package/dist/extractors/csharp.js.map +1 -1
- package/dist/extractors/cuda.js +3 -3
- package/dist/extractors/cuda.js.map +1 -1
- package/dist/extractors/elixir.js +6 -6
- package/dist/extractors/elixir.js.map +1 -1
- package/dist/extractors/fsharp.js +1 -1
- package/dist/extractors/fsharp.js.map +1 -1
- package/dist/extractors/go.js +5 -5
- package/dist/extractors/go.js.map +1 -1
- package/dist/extractors/haskell.js +1 -1
- package/dist/extractors/haskell.js.map +1 -1
- package/dist/extractors/java.js +2 -2
- package/dist/extractors/java.js.map +1 -1
- package/dist/extractors/javascript.d.ts +2 -0
- package/dist/extractors/javascript.d.ts.map +1 -1
- package/dist/extractors/javascript.js +1674 -64
- package/dist/extractors/javascript.js.map +1 -1
- package/dist/extractors/kotlin.js +5 -5
- package/dist/extractors/kotlin.js.map +1 -1
- package/dist/extractors/lua.js +1 -1
- package/dist/extractors/lua.js.map +1 -1
- package/dist/extractors/objc.js +3 -3
- package/dist/extractors/objc.js.map +1 -1
- package/dist/extractors/ocaml.js +1 -1
- package/dist/extractors/ocaml.js.map +1 -1
- package/dist/extractors/php.js +2 -2
- package/dist/extractors/php.js.map +1 -1
- package/dist/extractors/python.js +7 -7
- package/dist/extractors/python.js.map +1 -1
- package/dist/extractors/ruby.js +2 -2
- package/dist/extractors/ruby.js.map +1 -1
- package/dist/extractors/scala.js +1 -1
- package/dist/extractors/scala.js.map +1 -1
- package/dist/extractors/solidity.js +1 -1
- package/dist/extractors/solidity.js.map +1 -1
- package/dist/extractors/swift.js +4 -4
- package/dist/extractors/swift.js.map +1 -1
- package/dist/extractors/zig.js +4 -4
- package/dist/extractors/zig.js.map +1 -1
- package/dist/infrastructure/config.d.ts +10 -0
- package/dist/infrastructure/config.d.ts.map +1 -1
- package/dist/infrastructure/config.js +15 -0
- package/dist/infrastructure/config.js.map +1 -1
- package/dist/infrastructure/native.d.ts +11 -0
- package/dist/infrastructure/native.d.ts.map +1 -1
- package/dist/infrastructure/native.js +78 -5
- package/dist/infrastructure/native.js.map +1 -1
- package/dist/presentation/queries-cli/overview.d.ts.map +1 -1
- package/dist/presentation/queries-cli/overview.js +5 -0
- package/dist/presentation/queries-cli/overview.js.map +1 -1
- package/dist/types.d.ts +184 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +7 -7
- package/src/db/migrations.ts +7 -0
- package/src/domain/analysis/module-map.ts +29 -1
- package/src/domain/graph/builder/call-resolver.ts +177 -7
- package/src/domain/graph/builder/cha.ts +175 -0
- package/src/domain/graph/builder/context.ts +3 -0
- package/src/domain/graph/builder/helpers.ts +175 -5
- package/src/domain/graph/builder/incremental.ts +79 -1
- package/src/domain/graph/builder/stages/build-edges.ts +1128 -24
- package/src/domain/graph/builder/stages/detect-changes.ts +3 -1
- package/src/domain/graph/builder/stages/native-orchestrator.ts +583 -20
- package/src/domain/graph/builder/stages/resolve-imports.ts +14 -0
- package/src/domain/graph/journal.ts +1 -1
- package/src/domain/graph/resolver/points-to.ts +254 -0
- package/src/domain/graph/resolver/ts-resolver.ts +536 -0
- package/src/domain/parser.ts +43 -5
- package/src/domain/wasm-worker-entry.ts +25 -0
- package/src/domain/wasm-worker-pool.ts +21 -0
- package/src/domain/wasm-worker-protocol.ts +14 -0
- package/src/extractors/c.ts +3 -3
- package/src/extractors/clojure.ts +1 -1
- package/src/extractors/cpp.ts +3 -3
- package/src/extractors/csharp.ts +33 -9
- package/src/extractors/cuda.ts +3 -3
- package/src/extractors/elixir.ts +6 -6
- package/src/extractors/fsharp.ts +1 -1
- package/src/extractors/go.ts +5 -5
- package/src/extractors/haskell.ts +1 -1
- package/src/extractors/java.ts +2 -2
- package/src/extractors/javascript.ts +1802 -66
- package/src/extractors/kotlin.ts +5 -5
- package/src/extractors/lua.ts +1 -1
- package/src/extractors/objc.ts +3 -3
- package/src/extractors/ocaml.ts +1 -1
- package/src/extractors/php.ts +2 -2
- package/src/extractors/python.ts +7 -7
- package/src/extractors/ruby.ts +2 -2
- package/src/extractors/scala.ts +1 -1
- package/src/extractors/solidity.ts +1 -1
- package/src/extractors/swift.ts +4 -4
- package/src/extractors/zig.ts +4 -4
- package/src/infrastructure/config.ts +15 -0
- package/src/infrastructure/native.ts +87 -5
- package/src/presentation/queries-cli/overview.ts +15 -1
- package/src/types.ts +194 -0
|
@@ -502,6 +502,34 @@ function buildCallEdges(
|
|
|
502
502
|
]),
|
|
503
503
|
)
|
|
504
504
|
: new Map();
|
|
505
|
+
|
|
506
|
+
// Phase 8.3f: seed typeMap[callee::restName] = { type: argName } from
|
|
507
|
+
// objectRestParamBindings × paramBindings, mirroring buildObjectRestParamPostPass.
|
|
508
|
+
// Scoped keys prevent same-name rest-param collisions when two functions in
|
|
509
|
+
// the same file both use `...rest` (#1358). The unscoped key is also seeded
|
|
510
|
+
// when only one callee uses a given rest name, preserving resolution when
|
|
511
|
+
// callerName is null (findCaller couldn't identify the enclosing function).
|
|
512
|
+
if (symbols.objectRestParamBindings?.length && symbols.paramBindings?.length) {
|
|
513
|
+
const restNameCallees = new Map<string, Set<string>>();
|
|
514
|
+
for (const orpb of symbols.objectRestParamBindings) {
|
|
515
|
+
if (!restNameCallees.has(orpb.restName)) restNameCallees.set(orpb.restName, new Set());
|
|
516
|
+
restNameCallees.get(orpb.restName)!.add(orpb.callee);
|
|
517
|
+
}
|
|
518
|
+
for (const orpb of symbols.objectRestParamBindings) {
|
|
519
|
+
for (const pb of symbols.paramBindings) {
|
|
520
|
+
if (pb.callee === orpb.callee && pb.argIndex === orpb.argIndex) {
|
|
521
|
+
const scopedKey = `${orpb.callee}::${orpb.restName}`;
|
|
522
|
+
if (!typeMap.has(scopedKey)) {
|
|
523
|
+
typeMap.set(scopedKey, { type: pb.argName, confidence: 0.65 });
|
|
524
|
+
if (restNameCallees.get(orpb.restName)!.size === 1 && !typeMap.has(orpb.restName)) {
|
|
525
|
+
typeMap.set(orpb.restName, { type: pb.argName, confidence: 0.65 });
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
|
|
505
533
|
const seenCallEdges = new Set<string>();
|
|
506
534
|
const lookup = makeIncrementalLookup(db, stmts);
|
|
507
535
|
let edgesAdded = 0;
|
|
@@ -510,13 +538,63 @@ function buildCallEdges(
|
|
|
510
538
|
if (call.receiver && BUILTIN_RECEIVERS.has(call.receiver)) continue;
|
|
511
539
|
|
|
512
540
|
const caller = findCaller(lookup, call, symbols.definitions, relPath, fileNodeRow);
|
|
513
|
-
const { targets, importedFrom } = resolveCallTargets(
|
|
541
|
+
const { targets: initialTargets, importedFrom } = resolveCallTargets(
|
|
514
542
|
lookup,
|
|
515
543
|
call,
|
|
516
544
|
relPath,
|
|
517
545
|
importedNames,
|
|
518
546
|
typeMap,
|
|
547
|
+
caller.callerName,
|
|
519
548
|
);
|
|
549
|
+
let targets = initialTargets;
|
|
550
|
+
|
|
551
|
+
if (targets.length === 0 && call.receiver === 'this' && caller.callerName != null) {
|
|
552
|
+
const dotIdx = caller.callerName.indexOf('.');
|
|
553
|
+
if (dotIdx > 0) {
|
|
554
|
+
const className = caller.callerName.slice(0, dotIdx);
|
|
555
|
+
const qualifiedName = `${className}.${call.name}`;
|
|
556
|
+
const qualified = lookup
|
|
557
|
+
.byNameAndFile(qualifiedName, relPath)
|
|
558
|
+
.filter((n) => n.kind === 'method');
|
|
559
|
+
if (qualified.length > 0) {
|
|
560
|
+
targets = qualified;
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
if (
|
|
566
|
+
targets.length === 0 &&
|
|
567
|
+
call.receiver === 'this' &&
|
|
568
|
+
caller.callerName != null &&
|
|
569
|
+
symbols.definePropertyReceivers
|
|
570
|
+
) {
|
|
571
|
+
const receiverVarName = symbols.definePropertyReceivers.get(caller.callerName);
|
|
572
|
+
if (receiverVarName) {
|
|
573
|
+
const typeEntry = typeMap.get(receiverVarName);
|
|
574
|
+
const typeName = typeEntry
|
|
575
|
+
? typeof typeEntry === 'string'
|
|
576
|
+
? typeEntry
|
|
577
|
+
: (typeEntry as { type?: string }).type
|
|
578
|
+
: null;
|
|
579
|
+
if (typeName) {
|
|
580
|
+
const qualifiedName = `${typeName}.${call.name}`;
|
|
581
|
+
const qualified = lookup.byNameAndFile(qualifiedName, relPath);
|
|
582
|
+
if (qualified.length > 0) {
|
|
583
|
+
targets = [...qualified];
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
if (targets.length === 0) {
|
|
587
|
+
// Narrow to function/method kinds only to avoid matching unrelated
|
|
588
|
+
// variables or classes that share a name in the same file.
|
|
589
|
+
const sameFile = lookup
|
|
590
|
+
.byNameAndFile(call.name, relPath)
|
|
591
|
+
.filter((n) => n.kind === 'function' || n.kind === 'method');
|
|
592
|
+
if (sameFile.length > 0) {
|
|
593
|
+
targets = [...sameFile];
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
}
|
|
520
598
|
|
|
521
599
|
for (const t of targets) {
|
|
522
600
|
const edgeKey = `${caller.id}|${t.id}`;
|