gitnexus 1.6.2-rc.2 → 1.6.2-rc.21
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/dist/_shared/lbug/schema-constants.d.ts +1 -1
- package/dist/_shared/lbug/schema-constants.d.ts.map +1 -1
- package/dist/_shared/lbug/schema-constants.js +1 -0
- package/dist/_shared/lbug/schema-constants.js.map +1 -1
- package/dist/cli/analyze.js +3 -0
- package/dist/core/embeddings/ast-utils.d.ts +22 -0
- package/dist/core/embeddings/ast-utils.js +105 -0
- package/dist/core/embeddings/character-chunk.d.ts +12 -0
- package/dist/core/embeddings/character-chunk.js +43 -0
- package/dist/core/embeddings/chunker.d.ts +14 -0
- package/dist/core/embeddings/chunker.js +234 -0
- package/dist/core/embeddings/embedder.js +5 -0
- package/dist/core/embeddings/embedding-pipeline.d.ts +29 -24
- package/dist/core/embeddings/embedding-pipeline.js +244 -125
- package/dist/core/embeddings/line-index.d.ts +7 -0
- package/dist/core/embeddings/line-index.js +42 -0
- package/dist/core/embeddings/server-mapping.d.ts +15 -0
- package/dist/core/embeddings/server-mapping.js +33 -0
- package/dist/core/embeddings/structural-extractor.d.ts +15 -0
- package/dist/core/embeddings/structural-extractor.js +58 -0
- package/dist/core/embeddings/text-generator.d.ts +20 -13
- package/dist/core/embeddings/text-generator.js +151 -119
- package/dist/core/embeddings/types.d.ts +81 -3
- package/dist/core/embeddings/types.js +105 -3
- package/dist/core/group/extractors/http-patterns/node.js +130 -0
- package/dist/core/group/extractors/manifest-extractor.js +20 -5
- package/dist/core/group/sync.js +49 -1
- package/dist/core/ingestion/call-extractors/configs/c-cpp.d.ts +3 -0
- package/dist/core/ingestion/call-extractors/configs/c-cpp.js +8 -0
- package/dist/core/ingestion/call-extractors/configs/csharp.d.ts +2 -0
- package/dist/core/ingestion/call-extractors/configs/csharp.js +6 -0
- package/dist/core/ingestion/call-extractors/configs/dart.d.ts +2 -0
- package/dist/core/ingestion/call-extractors/configs/dart.js +5 -0
- package/dist/core/ingestion/call-extractors/configs/go.d.ts +2 -0
- package/dist/core/ingestion/call-extractors/configs/go.js +5 -0
- package/dist/core/ingestion/call-extractors/configs/jvm.d.ts +3 -0
- package/dist/core/ingestion/call-extractors/configs/jvm.js +51 -0
- package/dist/core/ingestion/call-extractors/configs/php.d.ts +2 -0
- package/dist/core/ingestion/call-extractors/configs/php.js +5 -0
- package/dist/core/ingestion/call-extractors/configs/python.d.ts +2 -0
- package/dist/core/ingestion/call-extractors/configs/python.js +5 -0
- package/dist/core/ingestion/call-extractors/configs/ruby.d.ts +2 -0
- package/dist/core/ingestion/call-extractors/configs/ruby.js +5 -0
- package/dist/core/ingestion/call-extractors/configs/rust.d.ts +2 -0
- package/dist/core/ingestion/call-extractors/configs/rust.js +5 -0
- package/dist/core/ingestion/call-extractors/configs/swift.d.ts +2 -0
- package/dist/core/ingestion/call-extractors/configs/swift.js +5 -0
- package/dist/core/ingestion/call-extractors/configs/typescript-javascript.d.ts +3 -0
- package/dist/core/ingestion/call-extractors/configs/typescript-javascript.js +8 -0
- package/dist/core/ingestion/call-extractors/generic.d.ts +5 -0
- package/dist/core/ingestion/call-extractors/generic.js +59 -0
- package/dist/core/ingestion/call-processor.d.ts +1 -3
- package/dist/core/ingestion/call-processor.js +49 -47
- package/dist/core/ingestion/call-types.d.ts +60 -0
- package/dist/core/ingestion/call-types.js +2 -0
- package/dist/core/ingestion/class-extractors/configs/c-cpp.d.ts +3 -0
- package/dist/core/ingestion/class-extractors/configs/c-cpp.js +11 -0
- package/dist/core/ingestion/class-extractors/configs/csharp.d.ts +2 -0
- package/dist/core/ingestion/class-extractors/configs/csharp.js +21 -0
- package/dist/core/ingestion/class-extractors/configs/dart.d.ts +2 -0
- package/dist/core/ingestion/class-extractors/configs/dart.js +7 -0
- package/dist/core/ingestion/class-extractors/configs/go.d.ts +2 -0
- package/dist/core/ingestion/class-extractors/configs/go.js +20 -0
- package/dist/core/ingestion/class-extractors/configs/jvm.d.ts +3 -0
- package/dist/core/ingestion/class-extractors/configs/jvm.js +35 -0
- package/dist/core/ingestion/class-extractors/configs/php.d.ts +2 -0
- package/dist/core/ingestion/class-extractors/configs/php.js +7 -0
- package/dist/core/ingestion/class-extractors/configs/python.d.ts +2 -0
- package/dist/core/ingestion/class-extractors/configs/python.js +7 -0
- package/dist/core/ingestion/class-extractors/configs/ruby.d.ts +2 -0
- package/dist/core/ingestion/class-extractors/configs/ruby.js +7 -0
- package/dist/core/ingestion/class-extractors/configs/rust.d.ts +2 -0
- package/dist/core/ingestion/class-extractors/configs/rust.js +7 -0
- package/dist/core/ingestion/class-extractors/configs/swift.d.ts +2 -0
- package/dist/core/ingestion/class-extractors/configs/swift.js +18 -0
- package/dist/core/ingestion/class-extractors/configs/typescript-javascript.d.ts +4 -0
- package/dist/core/ingestion/class-extractors/configs/typescript-javascript.js +28 -0
- package/dist/core/ingestion/field-types.d.ts +1 -1
- package/dist/core/ingestion/import-resolvers/configs/c-cpp.d.ts +7 -0
- package/dist/core/ingestion/import-resolvers/configs/c-cpp.js +14 -0
- package/dist/core/ingestion/import-resolvers/configs/csharp.d.ts +8 -0
- package/dist/core/ingestion/import-resolvers/configs/csharp.js +27 -0
- package/dist/core/ingestion/import-resolvers/configs/dart.d.ts +17 -0
- package/dist/core/ingestion/import-resolvers/{dart.js → configs/dart.js} +26 -16
- package/dist/core/ingestion/import-resolvers/configs/go.d.ts +8 -0
- package/dist/core/ingestion/import-resolvers/configs/go.js +26 -0
- package/dist/core/ingestion/import-resolvers/configs/jvm.d.ts +13 -0
- package/dist/core/ingestion/import-resolvers/configs/jvm.js +68 -0
- package/dist/core/ingestion/import-resolvers/configs/php.d.ts +8 -0
- package/dist/core/ingestion/import-resolvers/configs/php.js +15 -0
- package/dist/core/ingestion/import-resolvers/configs/python.d.ts +12 -0
- package/dist/core/ingestion/import-resolvers/configs/python.js +41 -0
- package/dist/core/ingestion/import-resolvers/configs/ruby.d.ts +8 -0
- package/dist/core/ingestion/import-resolvers/configs/ruby.js +16 -0
- package/dist/core/ingestion/import-resolvers/configs/rust.d.ts +8 -0
- package/dist/core/ingestion/import-resolvers/configs/rust.js +54 -0
- package/dist/core/ingestion/import-resolvers/configs/swift.d.ts +8 -0
- package/dist/core/ingestion/import-resolvers/{swift.js → configs/swift.js} +10 -5
- package/dist/core/ingestion/import-resolvers/configs/typescript-javascript.d.ts +9 -0
- package/dist/core/ingestion/import-resolvers/configs/typescript-javascript.js +23 -0
- package/dist/core/ingestion/import-resolvers/csharp.d.ts +4 -5
- package/dist/core/ingestion/import-resolvers/csharp.js +4 -20
- package/dist/core/ingestion/import-resolvers/go.d.ts +4 -5
- package/dist/core/ingestion/import-resolvers/go.js +4 -19
- package/dist/core/ingestion/import-resolvers/jvm.d.ts +5 -10
- package/dist/core/ingestion/import-resolvers/jvm.js +5 -58
- package/dist/core/ingestion/import-resolvers/php.d.ts +4 -5
- package/dist/core/ingestion/import-resolvers/php.js +4 -7
- package/dist/core/ingestion/import-resolvers/python.d.ts +3 -6
- package/dist/core/ingestion/import-resolvers/python.js +3 -18
- package/dist/core/ingestion/import-resolvers/resolver-factory.d.ts +24 -0
- package/dist/core/ingestion/import-resolvers/resolver-factory.js +33 -0
- package/dist/core/ingestion/import-resolvers/ruby.d.ts +4 -5
- package/dist/core/ingestion/import-resolvers/ruby.js +4 -7
- package/dist/core/ingestion/import-resolvers/rust.d.ts +4 -5
- package/dist/core/ingestion/import-resolvers/rust.js +4 -47
- package/dist/core/ingestion/import-resolvers/standard.d.ts +3 -9
- package/dist/core/ingestion/import-resolvers/standard.js +7 -8
- package/dist/core/ingestion/import-resolvers/types.d.ts +24 -0
- package/dist/core/ingestion/language-provider.d.ts +12 -0
- package/dist/core/ingestion/languages/c-cpp.js +15 -12
- package/dist/core/ingestion/languages/csharp.js +11 -21
- package/dist/core/ingestion/languages/dart.js +11 -7
- package/dist/core/ingestion/languages/go.js +11 -20
- package/dist/core/ingestion/languages/java.js +11 -18
- package/dist/core/ingestion/languages/kotlin.js +11 -13
- package/dist/core/ingestion/languages/php.js +11 -7
- package/dist/core/ingestion/languages/python.js +11 -7
- package/dist/core/ingestion/languages/ruby.js +11 -7
- package/dist/core/ingestion/languages/rust.js +11 -7
- package/dist/core/ingestion/languages/swift.js +11 -18
- package/dist/core/ingestion/languages/typescript.js +15 -23
- package/dist/core/ingestion/languages/vue.js +11 -17
- package/dist/core/ingestion/model/index.d.ts +2 -2
- package/dist/core/ingestion/model/index.js +1 -1
- package/dist/core/ingestion/model/resolve.d.ts +3 -0
- package/dist/core/ingestion/model/resolve.js +6 -2
- package/dist/core/ingestion/parsing-processor.d.ts +1 -2
- package/dist/core/ingestion/tree-sitter-queries.d.ts +11 -11
- package/dist/core/ingestion/tree-sitter-queries.js +81 -0
- package/dist/core/ingestion/type-env.d.ts +1 -1
- package/dist/core/ingestion/utils/ast-helpers.d.ts +1 -1
- package/dist/core/ingestion/utils/ast-helpers.js +3 -0
- package/dist/core/ingestion/variable-extractors/configs/c-cpp.d.ts +3 -0
- package/dist/core/ingestion/variable-extractors/configs/c-cpp.js +81 -0
- package/dist/core/ingestion/variable-extractors/configs/csharp.d.ts +9 -0
- package/dist/core/ingestion/variable-extractors/configs/csharp.js +63 -0
- package/dist/core/ingestion/variable-extractors/configs/dart.d.ts +2 -0
- package/dist/core/ingestion/variable-extractors/configs/dart.js +94 -0
- package/dist/core/ingestion/variable-extractors/configs/go.d.ts +2 -0
- package/dist/core/ingestion/variable-extractors/configs/go.js +83 -0
- package/dist/core/ingestion/variable-extractors/configs/jvm.d.ts +18 -0
- package/dist/core/ingestion/variable-extractors/configs/jvm.js +115 -0
- package/dist/core/ingestion/variable-extractors/configs/php.d.ts +14 -0
- package/dist/core/ingestion/variable-extractors/configs/php.js +58 -0
- package/dist/core/ingestion/variable-extractors/configs/python.d.ts +2 -0
- package/dist/core/ingestion/variable-extractors/configs/python.js +101 -0
- package/dist/core/ingestion/variable-extractors/configs/ruby.d.ts +11 -0
- package/dist/core/ingestion/variable-extractors/configs/ruby.js +52 -0
- package/dist/core/ingestion/variable-extractors/configs/rust.d.ts +2 -0
- package/dist/core/ingestion/variable-extractors/configs/rust.js +76 -0
- package/dist/core/ingestion/variable-extractors/configs/swift.d.ts +2 -0
- package/dist/core/ingestion/variable-extractors/configs/swift.js +88 -0
- package/dist/core/ingestion/variable-extractors/configs/typescript-javascript.d.ts +3 -0
- package/dist/core/ingestion/variable-extractors/configs/typescript-javascript.js +83 -0
- package/dist/core/ingestion/variable-extractors/generic.d.ts +5 -0
- package/dist/core/ingestion/variable-extractors/generic.js +80 -0
- package/dist/core/ingestion/variable-types.d.ts +82 -0
- package/dist/core/ingestion/variable-types.js +2 -0
- package/dist/core/ingestion/workers/parse-worker.js +196 -166
- package/dist/core/ingestion/workers/worker-pool.js +3 -0
- package/dist/core/lbug/csv-generator.js +1 -0
- package/dist/core/lbug/lbug-adapter.d.ts +13 -4
- package/dist/core/lbug/lbug-adapter.js +166 -81
- package/dist/core/lbug/schema.d.ts +9 -1
- package/dist/core/lbug/schema.js +19 -2
- package/dist/core/run-analyze.js +17 -4
- package/dist/core/tree-sitter/parser-loader.d.ts +3 -0
- package/dist/core/tree-sitter/parser-loader.js +17 -8
- package/dist/mcp/core/embedder.js +5 -0
- package/dist/mcp/local/local-backend.js +29 -19
- package/dist/server/api.js +10 -21
- package/package.json +5 -3
- package/scripts/build-tree-sitter-proto.cjs +82 -0
- package/vendor/node_modules/node-addon-api/node_addon_api.Makefile +6 -0
- package/vendor/node_modules/node-addon-api/node_addon_api.target.mk +104 -0
- package/vendor/node_modules/node-addon-api/node_addon_api_except.target.mk +108 -0
- package/vendor/node_modules/node-addon-api/node_addon_api_except_all.target.mk +104 -0
- package/vendor/node_modules/node-addon-api/node_addon_api_maybe.target.mk +104 -0
- package/vendor/tree-sitter-proto/package.json +1 -7
- package/dist/core/ingestion/call-sites/extract-language-call-site.d.ts +0 -10
- package/dist/core/ingestion/call-sites/extract-language-call-site.js +0 -22
- package/dist/core/ingestion/call-sites/java.d.ts +0 -9
- package/dist/core/ingestion/call-sites/java.js +0 -30
- package/dist/core/ingestion/import-resolvers/dart.d.ts +0 -7
- package/dist/core/ingestion/import-resolvers/swift.d.ts +0 -7
- package/dist/core/ingestion/import-resolvers/vue.d.ts +0 -8
- package/dist/core/ingestion/import-resolvers/vue.js +0 -9
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CLASS_TYPES, CALL_TARGET_TYPES } from './model/
|
|
1
|
+
import { CLASS_TYPES, CALL_TARGET_TYPES, lookupMethodByOwnerWithMRO } from './model/index.js';
|
|
2
2
|
import Parser from 'tree-sitter';
|
|
3
3
|
import { TIER_CONFIDENCE } from './model/resolution-context.js';
|
|
4
4
|
import { isLanguageAvailable, loadParser, loadLanguage } from '../tree-sitter/parser-loader.js';
|
|
@@ -15,8 +15,6 @@ import { getTreeSitterBufferSize } from './constants.js';
|
|
|
15
15
|
import { normalizeFetchURL, routeMatches } from './route-extractors/nextjs.js';
|
|
16
16
|
import { extractTemplateComponents } from './vue-sfc-extractor.js';
|
|
17
17
|
import { extractReturnTypeName, stripNullable } from './type-extractors/shared.js';
|
|
18
|
-
import { extractParsedCallSite } from './call-sites/extract-language-call-site.js';
|
|
19
|
-
import { lookupMethodByOwnerWithMRO } from './model/resolve.js';
|
|
20
18
|
/**
|
|
21
19
|
* Type labels treated as class-like **method-dispatch receivers** by the call
|
|
22
20
|
* resolver — the set walked by the MRO / heritage path for member and static
|
|
@@ -733,52 +731,56 @@ importedRawReturnTypesMap, heritageMap, bindingAccumulator) => {
|
|
|
733
731
|
if (!captureMap['call'])
|
|
734
732
|
return;
|
|
735
733
|
const callNode = captureMap['call'];
|
|
736
|
-
const
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
(
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
callForm: languageSeed.callForm,
|
|
755
|
-
...(receiverTypeName !== undefined ? { receiverTypeName } : {}),
|
|
756
|
-
...(receiverName !== undefined ? { receiverName } : {}),
|
|
757
|
-
}, file.path, ctx, undefined, widenCache, undefined, heritageMap);
|
|
758
|
-
if (!resolved)
|
|
759
|
-
return;
|
|
760
|
-
graph.addRelationship({
|
|
761
|
-
id: generateId('CALLS', `${sourceId}:${languageSeed.calledName}->${resolved.nodeId}`),
|
|
762
|
-
sourceId,
|
|
763
|
-
targetId: resolved.nodeId,
|
|
764
|
-
type: 'CALLS',
|
|
765
|
-
confidence: resolved.confidence,
|
|
766
|
-
reason: resolved.reason,
|
|
767
|
-
});
|
|
768
|
-
if (heritageMap && languageSeed.callForm === 'member' && receiverTypeName) {
|
|
769
|
-
const implTargets = findInterfaceDispatchTargets(languageSeed.calledName, receiverTypeName, file.path, ctx, heritageMap, resolved.nodeId);
|
|
770
|
-
for (const impl of implTargets) {
|
|
771
|
-
graph.addRelationship({
|
|
772
|
-
id: generateId('CALLS', `${sourceId}:${languageSeed.calledName}->${impl.nodeId}`),
|
|
773
|
-
sourceId,
|
|
774
|
-
targetId: impl.nodeId,
|
|
775
|
-
type: 'CALLS',
|
|
776
|
-
confidence: impl.confidence,
|
|
777
|
-
reason: impl.reason,
|
|
778
|
-
});
|
|
734
|
+
const callExtractor = provider.callExtractor;
|
|
735
|
+
// ── Language-specific call site (e.g. Java :: method references) ──
|
|
736
|
+
if (callExtractor) {
|
|
737
|
+
const langCallSite = callExtractor.extract(callNode, undefined);
|
|
738
|
+
if (langCallSite) {
|
|
739
|
+
if (provider.isBuiltInName(langCallSite.calledName))
|
|
740
|
+
return;
|
|
741
|
+
const sourceId = findEnclosingFunction(callNode, file.path, ctx, provider) ||
|
|
742
|
+
generateId('File', file.path);
|
|
743
|
+
const receiverName = langCallSite.callForm === 'member' ? langCallSite.receiverName : undefined;
|
|
744
|
+
let receiverTypeName = receiverName && typeEnv ? typeEnv.lookup(receiverName, callNode) : undefined;
|
|
745
|
+
if (langCallSite.typeAsReceiverHeuristic &&
|
|
746
|
+
receiverName !== undefined &&
|
|
747
|
+
receiverTypeName === undefined &&
|
|
748
|
+
langCallSite.callForm === 'member') {
|
|
749
|
+
const c0 = receiverName.charCodeAt(0);
|
|
750
|
+
if (c0 >= 65 && c0 <= 90)
|
|
751
|
+
receiverTypeName = receiverName;
|
|
779
752
|
}
|
|
753
|
+
const resolved = resolveCallTarget({
|
|
754
|
+
calledName: langCallSite.calledName,
|
|
755
|
+
callForm: langCallSite.callForm,
|
|
756
|
+
...(receiverTypeName !== undefined ? { receiverTypeName } : {}),
|
|
757
|
+
...(receiverName !== undefined ? { receiverName } : {}),
|
|
758
|
+
}, file.path, ctx, undefined, widenCache, undefined, heritageMap);
|
|
759
|
+
if (!resolved)
|
|
760
|
+
return;
|
|
761
|
+
graph.addRelationship({
|
|
762
|
+
id: generateId('CALLS', `${sourceId}:${langCallSite.calledName}->${resolved.nodeId}`),
|
|
763
|
+
sourceId,
|
|
764
|
+
targetId: resolved.nodeId,
|
|
765
|
+
type: 'CALLS',
|
|
766
|
+
confidence: resolved.confidence,
|
|
767
|
+
reason: resolved.reason,
|
|
768
|
+
});
|
|
769
|
+
if (heritageMap && langCallSite.callForm === 'member' && receiverTypeName) {
|
|
770
|
+
const implTargets = findInterfaceDispatchTargets(langCallSite.calledName, receiverTypeName, file.path, ctx, heritageMap, resolved.nodeId);
|
|
771
|
+
for (const impl of implTargets) {
|
|
772
|
+
graph.addRelationship({
|
|
773
|
+
id: generateId('CALLS', `${sourceId}:${langCallSite.calledName}->${impl.nodeId}`),
|
|
774
|
+
sourceId,
|
|
775
|
+
targetId: impl.nodeId,
|
|
776
|
+
type: 'CALLS',
|
|
777
|
+
confidence: impl.confidence,
|
|
778
|
+
reason: impl.reason,
|
|
779
|
+
});
|
|
780
|
+
}
|
|
781
|
+
}
|
|
782
|
+
return;
|
|
780
783
|
}
|
|
781
|
-
return;
|
|
782
784
|
}
|
|
783
785
|
const nameNode = captureMap['call.name'];
|
|
784
786
|
if (!nameNode)
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types for the language-agnostic call extraction pipeline.
|
|
3
|
+
*
|
|
4
|
+
* Mirrors method-types.ts / field-types.ts: defines the domain interfaces
|
|
5
|
+
* consumed by createCallExtractor() and the per-language configs.
|
|
6
|
+
*/
|
|
7
|
+
import type { SupportedLanguages } from '../../_shared/index.js';
|
|
8
|
+
import type { SyntaxNode } from './utils/ast-helpers.js';
|
|
9
|
+
import type { MixedChainStep } from './utils/call-analysis.js';
|
|
10
|
+
/**
|
|
11
|
+
* Per-node call extraction result. The parse worker enriches this with
|
|
12
|
+
* file-level context (filePath, sourceId, TypeEnv lookups, arg types) to
|
|
13
|
+
* produce the final `ExtractedCall` that enters the resolution pipeline.
|
|
14
|
+
*/
|
|
15
|
+
export interface ExtractedCallSite {
|
|
16
|
+
calledName: string;
|
|
17
|
+
callForm?: 'free' | 'member' | 'constructor';
|
|
18
|
+
receiverName?: string;
|
|
19
|
+
argCount?: number;
|
|
20
|
+
/** Unified mixed chain for complex receivers (field + call chains). */
|
|
21
|
+
receiverMixedChain?: MixedChainStep[];
|
|
22
|
+
/** When true, the type-as-receiver heuristic applies: if receiverName
|
|
23
|
+
* starts with an uppercase letter and has no TypeEnv binding, treat it
|
|
24
|
+
* as a type name (e.g. Java `User::getName`). */
|
|
25
|
+
typeAsReceiverHeuristic?: boolean;
|
|
26
|
+
}
|
|
27
|
+
export interface CallExtractor {
|
|
28
|
+
readonly language: SupportedLanguages;
|
|
29
|
+
/**
|
|
30
|
+
* Extract a call site from captured AST nodes.
|
|
31
|
+
*
|
|
32
|
+
* @param callNode The @call capture (call_expression, method_invocation, …)
|
|
33
|
+
* @param callNameNode The @call.name capture (identifier inside the call).
|
|
34
|
+
* May be undefined when the call shape has no name capture
|
|
35
|
+
* (e.g. Java method_reference via `::`).
|
|
36
|
+
* @returns Extracted call site, or null when no call can be derived.
|
|
37
|
+
*/
|
|
38
|
+
extract(callNode: SyntaxNode, callNameNode: SyntaxNode | undefined): ExtractedCallSite | null;
|
|
39
|
+
}
|
|
40
|
+
export interface CallExtractionConfig {
|
|
41
|
+
language: SupportedLanguages;
|
|
42
|
+
/**
|
|
43
|
+
* Language-specific call site extraction. Called **before** the generic
|
|
44
|
+
* path. If it returns non-null, the generic `inferCallForm` /
|
|
45
|
+
* `extractReceiverName` path is skipped entirely.
|
|
46
|
+
*
|
|
47
|
+
* Use this for call shapes that don't follow the standard `@call` /
|
|
48
|
+
* `@call.name` pattern (e.g. Java `method_reference` via `::`).
|
|
49
|
+
*/
|
|
50
|
+
extractLanguageCallSite?: (callNode: SyntaxNode) => ExtractedCallSite | null;
|
|
51
|
+
/**
|
|
52
|
+
* Whether the type-as-receiver heuristic applies for this language.
|
|
53
|
+
* When true and the receiver name starts with an uppercase letter,
|
|
54
|
+
* the receiver is treated as a type name when no TypeEnv binding exists.
|
|
55
|
+
*
|
|
56
|
+
* Applies to JVM and C# languages where `Type.method()` and `Type::method`
|
|
57
|
+
* are common patterns.
|
|
58
|
+
*/
|
|
59
|
+
typeAsReceiverHeuristic?: boolean;
|
|
60
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// gitnexus/src/core/ingestion/class-extractors/configs/c-cpp.ts
|
|
2
|
+
import { SupportedLanguages } from '../../../../_shared/index.js';
|
|
3
|
+
export const cClassConfig = {
|
|
4
|
+
language: SupportedLanguages.C,
|
|
5
|
+
typeDeclarationNodes: ['struct_specifier', 'enum_specifier'],
|
|
6
|
+
};
|
|
7
|
+
export const cppClassConfig = {
|
|
8
|
+
language: SupportedLanguages.CPlusPlus,
|
|
9
|
+
typeDeclarationNodes: ['class_specifier', 'struct_specifier', 'enum_specifier'],
|
|
10
|
+
ancestorScopeNodeTypes: ['namespace_definition', 'class_specifier', 'struct_specifier'],
|
|
11
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// gitnexus/src/core/ingestion/class-extractors/configs/csharp.ts
|
|
2
|
+
import { SupportedLanguages } from '../../../../_shared/index.js';
|
|
3
|
+
export const csharpClassConfig = {
|
|
4
|
+
language: SupportedLanguages.CSharp,
|
|
5
|
+
typeDeclarationNodes: [
|
|
6
|
+
'class_declaration',
|
|
7
|
+
'interface_declaration',
|
|
8
|
+
'struct_declaration',
|
|
9
|
+
'enum_declaration',
|
|
10
|
+
'record_declaration',
|
|
11
|
+
],
|
|
12
|
+
fileScopeNodeTypes: ['file_scoped_namespace_declaration'],
|
|
13
|
+
ancestorScopeNodeTypes: [
|
|
14
|
+
'namespace_declaration',
|
|
15
|
+
'class_declaration',
|
|
16
|
+
'interface_declaration',
|
|
17
|
+
'struct_declaration',
|
|
18
|
+
'enum_declaration',
|
|
19
|
+
'record_declaration',
|
|
20
|
+
],
|
|
21
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// gitnexus/src/core/ingestion/class-extractors/configs/dart.ts
|
|
2
|
+
import { SupportedLanguages } from '../../../../_shared/index.js';
|
|
3
|
+
export const dartClassConfig = {
|
|
4
|
+
language: SupportedLanguages.Dart,
|
|
5
|
+
typeDeclarationNodes: ['class_definition', 'extension_declaration', 'enum_declaration'],
|
|
6
|
+
ancestorScopeNodeTypes: ['class_definition', 'extension_declaration', 'enum_declaration'],
|
|
7
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// gitnexus/src/core/ingestion/class-extractors/configs/go.ts
|
|
2
|
+
import { SupportedLanguages } from '../../../../_shared/index.js';
|
|
3
|
+
export const goClassConfig = {
|
|
4
|
+
language: SupportedLanguages.Go,
|
|
5
|
+
typeDeclarationNodes: ['type_declaration'],
|
|
6
|
+
fileScopeNodeTypes: ['package_clause'],
|
|
7
|
+
extractName(node) {
|
|
8
|
+
const typeSpec = node.namedChildren.find((child) => child.type === 'type_spec');
|
|
9
|
+
return typeSpec?.childForFieldName('name')?.text;
|
|
10
|
+
},
|
|
11
|
+
extractType(node) {
|
|
12
|
+
const typeSpec = node.namedChildren.find((child) => child.type === 'type_spec');
|
|
13
|
+
const typeNode = typeSpec?.childForFieldName('type');
|
|
14
|
+
if (typeNode?.type === 'struct_type')
|
|
15
|
+
return 'Struct';
|
|
16
|
+
if (typeNode?.type === 'interface_type')
|
|
17
|
+
return 'Interface';
|
|
18
|
+
return undefined;
|
|
19
|
+
},
|
|
20
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// gitnexus/src/core/ingestion/class-extractors/configs/jvm.ts
|
|
2
|
+
import { SupportedLanguages } from '../../../../_shared/index.js';
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
// Java
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
export const javaClassConfig = {
|
|
7
|
+
language: SupportedLanguages.Java,
|
|
8
|
+
typeDeclarationNodes: [
|
|
9
|
+
'class_declaration',
|
|
10
|
+
'interface_declaration',
|
|
11
|
+
'enum_declaration',
|
|
12
|
+
'record_declaration',
|
|
13
|
+
],
|
|
14
|
+
fileScopeNodeTypes: ['package_declaration'],
|
|
15
|
+
ancestorScopeNodeTypes: [
|
|
16
|
+
'class_declaration',
|
|
17
|
+
'interface_declaration',
|
|
18
|
+
'enum_declaration',
|
|
19
|
+
'record_declaration',
|
|
20
|
+
],
|
|
21
|
+
};
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
// Kotlin
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
export const kotlinClassConfig = {
|
|
26
|
+
language: SupportedLanguages.Kotlin,
|
|
27
|
+
typeDeclarationNodes: ['class_declaration', 'object_declaration', 'companion_object'],
|
|
28
|
+
fileScopeNodeTypes: ['package_header'],
|
|
29
|
+
ancestorScopeNodeTypes: ['class_declaration', 'object_declaration', 'companion_object'],
|
|
30
|
+
extractType(node) {
|
|
31
|
+
if (node.type !== 'class_declaration')
|
|
32
|
+
return undefined;
|
|
33
|
+
return node.children.some((child) => child?.text === 'interface') ? 'Interface' : 'Class';
|
|
34
|
+
},
|
|
35
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// gitnexus/src/core/ingestion/class-extractors/configs/php.ts
|
|
2
|
+
import { SupportedLanguages } from '../../../../_shared/index.js';
|
|
3
|
+
export const phpClassConfig = {
|
|
4
|
+
language: SupportedLanguages.PHP,
|
|
5
|
+
typeDeclarationNodes: ['class_declaration', 'interface_declaration', 'enum_declaration'],
|
|
6
|
+
ancestorScopeNodeTypes: ['namespace_definition'],
|
|
7
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// gitnexus/src/core/ingestion/class-extractors/configs/python.ts
|
|
2
|
+
import { SupportedLanguages } from '../../../../_shared/index.js';
|
|
3
|
+
export const pythonClassConfig = {
|
|
4
|
+
language: SupportedLanguages.Python,
|
|
5
|
+
typeDeclarationNodes: ['class_definition'],
|
|
6
|
+
ancestorScopeNodeTypes: ['class_definition'],
|
|
7
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// gitnexus/src/core/ingestion/class-extractors/configs/ruby.ts
|
|
2
|
+
import { SupportedLanguages } from '../../../../_shared/index.js';
|
|
3
|
+
export const rubyClassConfig = {
|
|
4
|
+
language: SupportedLanguages.Ruby,
|
|
5
|
+
typeDeclarationNodes: ['class'],
|
|
6
|
+
ancestorScopeNodeTypes: ['module', 'class'],
|
|
7
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// gitnexus/src/core/ingestion/class-extractors/configs/rust.ts
|
|
2
|
+
import { SupportedLanguages } from '../../../../_shared/index.js';
|
|
3
|
+
export const rustClassConfig = {
|
|
4
|
+
language: SupportedLanguages.Rust,
|
|
5
|
+
typeDeclarationNodes: ['struct_item', 'enum_item'],
|
|
6
|
+
ancestorScopeNodeTypes: ['mod_item', 'struct_item', 'enum_item'],
|
|
7
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// gitnexus/src/core/ingestion/class-extractors/configs/swift.ts
|
|
2
|
+
import { SupportedLanguages } from '../../../../_shared/index.js';
|
|
3
|
+
export const swiftClassConfig = {
|
|
4
|
+
language: SupportedLanguages.Swift,
|
|
5
|
+
typeDeclarationNodes: ['class_declaration', 'protocol_declaration'],
|
|
6
|
+
ancestorScopeNodeTypes: ['class_declaration', 'protocol_declaration'],
|
|
7
|
+
extractType(node) {
|
|
8
|
+
if (node.type === 'protocol_declaration')
|
|
9
|
+
return 'Interface';
|
|
10
|
+
if (node.type !== 'class_declaration')
|
|
11
|
+
return undefined;
|
|
12
|
+
if (node.children.some((child) => child?.text === 'struct'))
|
|
13
|
+
return 'Struct';
|
|
14
|
+
if (node.children.some((child) => child?.text === 'enum'))
|
|
15
|
+
return 'Enum';
|
|
16
|
+
return 'Class';
|
|
17
|
+
},
|
|
18
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// gitnexus/src/core/ingestion/class-extractors/configs/typescript-javascript.ts
|
|
2
|
+
import { SupportedLanguages } from '../../../../_shared/index.js';
|
|
3
|
+
const shared = {
|
|
4
|
+
typeDeclarationNodes: [
|
|
5
|
+
'class_declaration',
|
|
6
|
+
'abstract_class_declaration',
|
|
7
|
+
'interface_declaration',
|
|
8
|
+
'enum_declaration',
|
|
9
|
+
],
|
|
10
|
+
ancestorScopeNodeTypes: [
|
|
11
|
+
'class_declaration',
|
|
12
|
+
'abstract_class_declaration',
|
|
13
|
+
'interface_declaration',
|
|
14
|
+
'enum_declaration',
|
|
15
|
+
],
|
|
16
|
+
};
|
|
17
|
+
export const typescriptClassConfig = {
|
|
18
|
+
...shared,
|
|
19
|
+
language: SupportedLanguages.TypeScript,
|
|
20
|
+
};
|
|
21
|
+
export const javascriptClassConfig = {
|
|
22
|
+
...shared,
|
|
23
|
+
language: SupportedLanguages.JavaScript,
|
|
24
|
+
};
|
|
25
|
+
export const vueClassConfig = {
|
|
26
|
+
...shared,
|
|
27
|
+
language: SupportedLanguages.Vue,
|
|
28
|
+
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { TypeEnvironment } from './type-env.js';
|
|
2
|
-
import type { SymbolTableReader } from './model/
|
|
2
|
+
import type { SymbolTableReader } from './model/index.js';
|
|
3
3
|
import { SupportedLanguages } from '../../_shared/index.js';
|
|
4
4
|
/**
|
|
5
5
|
* Visibility levels used across all supported languages.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* C / C++ import resolution configs.
|
|
3
|
+
* Both use standard resolution for #include directives.
|
|
4
|
+
*/
|
|
5
|
+
import type { ImportResolutionConfig } from '../types.js';
|
|
6
|
+
export declare const cImportConfig: ImportResolutionConfig;
|
|
7
|
+
export declare const cppImportConfig: ImportResolutionConfig;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* C / C++ import resolution configs.
|
|
3
|
+
* Both use standard resolution for #include directives.
|
|
4
|
+
*/
|
|
5
|
+
import { SupportedLanguages } from '../../../../_shared/index.js';
|
|
6
|
+
import { createStandardStrategy } from '../standard.js';
|
|
7
|
+
export const cImportConfig = {
|
|
8
|
+
language: SupportedLanguages.C,
|
|
9
|
+
strategies: [createStandardStrategy(SupportedLanguages.C)],
|
|
10
|
+
};
|
|
11
|
+
export const cppImportConfig = {
|
|
12
|
+
language: SupportedLanguages.CPlusPlus,
|
|
13
|
+
strategies: [createStandardStrategy(SupportedLanguages.CPlusPlus)],
|
|
14
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* C# import resolution config.
|
|
3
|
+
* Namespace-based strategy via .csproj configs, then standard fallback.
|
|
4
|
+
*/
|
|
5
|
+
import type { ImportResolutionConfig, ImportResolverStrategy } from '../types.js';
|
|
6
|
+
/** C# namespace-based resolution strategy via .csproj configs. */
|
|
7
|
+
export declare const csharpNamespaceStrategy: ImportResolverStrategy;
|
|
8
|
+
export declare const csharpImportConfig: ImportResolutionConfig;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* C# import resolution config.
|
|
3
|
+
* Namespace-based strategy via .csproj configs, then standard fallback.
|
|
4
|
+
*/
|
|
5
|
+
import { SupportedLanguages } from '../../../../_shared/index.js';
|
|
6
|
+
import { createStandardStrategy } from '../standard.js';
|
|
7
|
+
import { resolveCSharpImportInternal, resolveCSharpNamespaceDir } from '../csharp.js';
|
|
8
|
+
/** C# namespace-based resolution strategy via .csproj configs. */
|
|
9
|
+
export const csharpNamespaceStrategy = (rawImportPath, _filePath, ctx) => {
|
|
10
|
+
const csharpConfigs = ctx.configs.csharpConfigs;
|
|
11
|
+
if (csharpConfigs.length > 0) {
|
|
12
|
+
const resolvedFiles = resolveCSharpImportInternal(rawImportPath, csharpConfigs, ctx.normalizedFileList, ctx.allFileList, ctx.index);
|
|
13
|
+
if (resolvedFiles.length > 1) {
|
|
14
|
+
const dirSuffix = resolveCSharpNamespaceDir(rawImportPath, csharpConfigs);
|
|
15
|
+
if (dirSuffix) {
|
|
16
|
+
return { kind: 'package', files: resolvedFiles, dirSuffix };
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
if (resolvedFiles.length > 0)
|
|
20
|
+
return { kind: 'files', files: resolvedFiles };
|
|
21
|
+
}
|
|
22
|
+
return null;
|
|
23
|
+
};
|
|
24
|
+
export const csharpImportConfig = {
|
|
25
|
+
language: SupportedLanguages.CSharp,
|
|
26
|
+
strategies: [csharpNamespaceStrategy, createStandardStrategy(SupportedLanguages.CSharp)],
|
|
27
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dart import resolution config.
|
|
3
|
+
* SDK/package strategy first, then relative import strategy (with ./ prepending).
|
|
4
|
+
*/
|
|
5
|
+
import type { ImportResolutionConfig, ImportResolverStrategy } from '../types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Dart SDK and package: import strategy.
|
|
8
|
+
* Absorbs dart: SDK imports and external packages (returns empty result to stop chain).
|
|
9
|
+
* Returns null for relative imports to let the next strategy handle them.
|
|
10
|
+
*/
|
|
11
|
+
export declare const dartPackageStrategy: ImportResolverStrategy;
|
|
12
|
+
/**
|
|
13
|
+
* Dart relative import strategy — prepends "./" for bare relative paths,
|
|
14
|
+
* then delegates to standard resolution.
|
|
15
|
+
*/
|
|
16
|
+
export declare const dartRelativeStrategy: ImportResolverStrategy;
|
|
17
|
+
export declare const dartImportConfig: ImportResolutionConfig;
|
|
@@ -1,21 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Dart import resolution.
|
|
3
|
-
*
|
|
4
|
-
* SDK imports (dart:*) and external packages are skipped.
|
|
2
|
+
* Dart import resolution config.
|
|
3
|
+
* SDK/package strategy first, then relative import strategy (with ./ prepending).
|
|
5
4
|
*/
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
|
|
5
|
+
import { SupportedLanguages } from '../../../../_shared/index.js';
|
|
6
|
+
import { resolveStandard } from '../standard.js';
|
|
7
|
+
/**
|
|
8
|
+
* Dart SDK and package: import strategy.
|
|
9
|
+
* Absorbs dart: SDK imports and external packages (returns empty result to stop chain).
|
|
10
|
+
* Returns null for relative imports to let the next strategy handle them.
|
|
11
|
+
*/
|
|
12
|
+
export const dartPackageStrategy = (rawImportPath, _filePath, ctx) => {
|
|
9
13
|
// Strip surrounding quotes from configurable_uri capture
|
|
10
14
|
const stripped = rawImportPath.replace(/^['"]|['"]$/g, '');
|
|
11
15
|
// Skip dart: SDK imports (dart:async, dart:io, etc.)
|
|
12
16
|
if (stripped.startsWith('dart:'))
|
|
13
|
-
return
|
|
17
|
+
return { kind: 'files', files: [] };
|
|
14
18
|
// Local package: imports → resolve to lib/<path>
|
|
15
19
|
if (stripped.startsWith('package:')) {
|
|
16
20
|
const slashIdx = stripped.indexOf('/');
|
|
17
21
|
if (slashIdx === -1)
|
|
18
|
-
return
|
|
22
|
+
return { kind: 'files', files: [] };
|
|
19
23
|
const relPath = stripped.slice(slashIdx + 1);
|
|
20
24
|
const candidates = [`lib/${relPath}`, relPath];
|
|
21
25
|
const files = [];
|
|
@@ -31,14 +35,20 @@ export function resolveDartImport(rawImportPath, filePath, ctx) {
|
|
|
31
35
|
}
|
|
32
36
|
if (files.length > 0)
|
|
33
37
|
return { kind: 'files', files };
|
|
34
|
-
return
|
|
38
|
+
return { kind: 'files', files: [] }; // external package
|
|
35
39
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
return null;
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Dart relative import strategy — prepends "./" for bare relative paths,
|
|
44
|
+
* then delegates to standard resolution.
|
|
45
|
+
*/
|
|
46
|
+
export const dartRelativeStrategy = (rawImportPath, filePath, ctx) => {
|
|
47
|
+
const stripped = rawImportPath.replace(/^['"]|['"]$/g, '');
|
|
42
48
|
const relPath = stripped.startsWith('.') ? stripped : './' + stripped;
|
|
43
49
|
return resolveStandard(relPath, filePath, ctx, SupportedLanguages.Dart);
|
|
44
|
-
}
|
|
50
|
+
};
|
|
51
|
+
export const dartImportConfig = {
|
|
52
|
+
language: SupportedLanguages.Dart,
|
|
53
|
+
strategies: [dartPackageStrategy, dartRelativeStrategy],
|
|
54
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Go import resolution config.
|
|
3
|
+
* Go-specific package strategy (go.mod), then standard fallback.
|
|
4
|
+
*/
|
|
5
|
+
import type { ImportResolutionConfig, ImportResolverStrategy } from '../types.js';
|
|
6
|
+
/** Go-specific package resolution strategy — resolves go.mod-based package imports. */
|
|
7
|
+
export declare const goPackageStrategy: ImportResolverStrategy;
|
|
8
|
+
export declare const goImportConfig: ImportResolutionConfig;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Go import resolution config.
|
|
3
|
+
* Go-specific package strategy (go.mod), then standard fallback.
|
|
4
|
+
*/
|
|
5
|
+
import { SupportedLanguages } from '../../../../_shared/index.js';
|
|
6
|
+
import { createStandardStrategy } from '../standard.js';
|
|
7
|
+
import { resolveGoPackageDir, resolveGoPackage } from '../go.js';
|
|
8
|
+
/** Go-specific package resolution strategy — resolves go.mod-based package imports. */
|
|
9
|
+
export const goPackageStrategy = (rawImportPath, _filePath, ctx) => {
|
|
10
|
+
const goModule = ctx.configs.goModule;
|
|
11
|
+
if (goModule && rawImportPath.startsWith(goModule.modulePath)) {
|
|
12
|
+
const pkgSuffix = resolveGoPackageDir(rawImportPath, goModule);
|
|
13
|
+
if (pkgSuffix) {
|
|
14
|
+
const pkgFiles = resolveGoPackage(rawImportPath, goModule, ctx.normalizedFileList, ctx.allFileList);
|
|
15
|
+
if (pkgFiles.length > 0) {
|
|
16
|
+
return { kind: 'package', files: pkgFiles, dirSuffix: pkgSuffix };
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
// Fall through if no files found (package might be external)
|
|
20
|
+
}
|
|
21
|
+
return null;
|
|
22
|
+
};
|
|
23
|
+
export const goImportConfig = {
|
|
24
|
+
language: SupportedLanguages.Go,
|
|
25
|
+
strategies: [goPackageStrategy, createStandardStrategy(SupportedLanguages.Go)],
|
|
26
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Java / Kotlin import resolution configs.
|
|
3
|
+
* JVM-specific wildcard/member strategy, then standard fallback.
|
|
4
|
+
*/
|
|
5
|
+
import type { ImportResolutionConfig, ImportResolverStrategy } from '../types.js';
|
|
6
|
+
/** Java JVM resolution strategy — wildcard and member import resolution. */
|
|
7
|
+
export declare const javaJvmStrategy: ImportResolverStrategy;
|
|
8
|
+
/**
|
|
9
|
+
* Kotlin JVM resolution strategy — wildcard/member with Java-interop + top-level function imports.
|
|
10
|
+
*/
|
|
11
|
+
export declare const kotlinJvmStrategy: ImportResolverStrategy;
|
|
12
|
+
export declare const javaImportConfig: ImportResolutionConfig;
|
|
13
|
+
export declare const kotlinImportConfig: ImportResolutionConfig;
|