gitnexus 1.6.6-rc.54 → 1.6.6-rc.56
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/scope-resolution/types.d.ts +5 -2
- package/dist/_shared/scope-resolution/types.d.ts.map +1 -1
- package/dist/core/ingestion/languages/cpp/inline-namespaces.d.ts +2 -2
- package/dist/core/ingestion/languages/cpp/inline-namespaces.js +8 -14
- package/dist/core/ingestion/languages/cpp/scope-resolver.js +1 -1
- package/dist/core/ingestion/languages/php/namespace-siblings.js +4 -1
- package/dist/core/ingestion/scope-extractor.d.ts +6 -4
- package/dist/core/ingestion/scope-extractor.js +35 -13
- package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +1 -1
- package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +1 -1
- package/package.json +1 -1
|
@@ -239,8 +239,11 @@ export interface ScopeLookup {
|
|
|
239
239
|
}
|
|
240
240
|
/** Call-site description passed to `arityCompatibility`. */
|
|
241
241
|
export interface Callsite {
|
|
242
|
-
/** Number of arguments at the call site. */
|
|
243
|
-
readonly arity
|
|
242
|
+
/** Number of arguments at the call site, if available. */
|
|
243
|
+
readonly arity?: number;
|
|
244
|
+
/** Inferred argument types at the call site, one per argument.
|
|
245
|
+
* An empty string entry means the type was not inferred. */
|
|
246
|
+
readonly argumentTypes?: readonly string[];
|
|
244
247
|
}
|
|
245
248
|
/**
|
|
246
249
|
* A cross-file import edge attached to a module/namespace scope.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/scope-resolution/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/scope-resolution/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
* `std::vector` qualified calls resolve to the inline-namespace
|
|
27
27
|
* declaration transparently.
|
|
28
28
|
*/
|
|
29
|
-
import type { ParsedFile, ScopeId, SymbolDefinition } from '../../../../_shared/index.js';
|
|
29
|
+
import type { Callsite, ParsedFile, ScopeId, SymbolDefinition } from '../../../../_shared/index.js';
|
|
30
30
|
import type { ScopeResolutionIndexes } from '../../model/scope-resolution-indexes.js';
|
|
31
31
|
interface RangeKey {
|
|
32
32
|
readonly startLine: number;
|
|
@@ -63,5 +63,5 @@ export declare function isCppInlineNamespaceScope(scopeId: ScopeId): boolean;
|
|
|
63
63
|
* leaves the call ambiguous; returns `'ambiguous'` so the caller
|
|
64
64
|
* suppresses edge emission rather than picking arbitrarily (#1564).
|
|
65
65
|
*/
|
|
66
|
-
export declare function resolveCppQualifiedNamespaceMember(receiverName: string, memberName: string, parsedFiles: readonly ParsedFile[], _scopes: ScopeResolutionIndexes): SymbolDefinition | 'ambiguous' | undefined;
|
|
66
|
+
export declare function resolveCppQualifiedNamespaceMember(receiverName: string, memberName: string, parsedFiles: readonly ParsedFile[], _scopes: ScopeResolutionIndexes, callsite?: Callsite): SymbolDefinition | 'ambiguous' | undefined;
|
|
67
67
|
export {};
|
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
* declaration transparently.
|
|
28
28
|
*/
|
|
29
29
|
import { isOverloadAmbiguousAfterNormalization, narrowOverloadCandidates, } from '../../scope-resolution/passes/overload-narrowing.js';
|
|
30
|
+
import { cppConversionRank } from './conversion-rank.js';
|
|
30
31
|
const inlineNamespaceRangesByFile = new Map();
|
|
31
32
|
const inlineNamespaceScopeIds = new Set();
|
|
32
33
|
function rangeKey(r) {
|
|
@@ -84,7 +85,7 @@ export function isCppInlineNamespaceScope(scopeId) {
|
|
|
84
85
|
* leaves the call ambiguous; returns `'ambiguous'` so the caller
|
|
85
86
|
* suppresses edge emission rather than picking arbitrarily (#1564).
|
|
86
87
|
*/
|
|
87
|
-
export function resolveCppQualifiedNamespaceMember(receiverName, memberName, parsedFiles, _scopes) {
|
|
88
|
+
export function resolveCppQualifiedNamespaceMember(receiverName, memberName, parsedFiles, _scopes, callsite) {
|
|
88
89
|
const allHits = [];
|
|
89
90
|
const seenNodeId = new Set();
|
|
90
91
|
for (const parsed of parsedFiles) {
|
|
@@ -115,19 +116,12 @@ export function resolveCppQualifiedNamespaceMember(receiverName, memberName, par
|
|
|
115
116
|
return undefined;
|
|
116
117
|
if (allHits.length === 1)
|
|
117
118
|
return allHits[0];
|
|
118
|
-
// Multi-candidate:
|
|
119
|
-
//
|
|
120
|
-
//
|
|
121
|
-
//
|
|
122
|
-
//
|
|
123
|
-
|
|
124
|
-
// but for any multi-hit case where candidates have genuinely distinct
|
|
125
|
-
// signatures (e.g. `foo(int)` vs `foo(double)` in different inline
|
|
126
|
-
// children), we conservatively suppress rather than pick arbitrarily.
|
|
127
|
-
// A future enhancement could thread call-site argument info through
|
|
128
|
-
// the `resolveQualifiedReceiverMember` contract to enable real
|
|
129
|
-
// narrowing here.
|
|
130
|
-
const narrowed = narrowOverloadCandidates(allHits, undefined, undefined);
|
|
119
|
+
// Multi-candidate: thread call-site arity/argument-types through the
|
|
120
|
+
// `resolveQualifiedReceiverMember` contract so `narrowOverloadCandidates`
|
|
121
|
+
// can disambiguate via exact-type match and, when available, conversion-rank
|
|
122
|
+
// scoring (`cppConversionRank`). Same-signature ambiguity is still detected
|
|
123
|
+
// by `isOverloadAmbiguousAfterNormalization` below.
|
|
124
|
+
const narrowed = narrowOverloadCandidates(allHits, callsite?.arity, callsite?.argumentTypes, callsite !== undefined ? { conversionRankFn: cppConversionRank } : undefined);
|
|
131
125
|
if (narrowed.length === 1)
|
|
132
126
|
return narrowed[0];
|
|
133
127
|
if (narrowed.length === 0)
|
|
@@ -248,5 +248,5 @@ export const cppScopeResolver = {
|
|
|
248
248
|
// descends transitively through inline-namespace children when
|
|
249
249
|
// searching for the called member. Returns undefined for non-namespace
|
|
250
250
|
// receivers so receiver-bound-calls Case 2 still gets a chance.
|
|
251
|
-
resolveQualifiedReceiverMember: (receiverName, memberName, _callerScope, scopes, parsedFiles) => resolveCppQualifiedNamespaceMember(receiverName, memberName, parsedFiles, scopes),
|
|
251
|
+
resolveQualifiedReceiverMember: (receiverName, memberName, _callerScope, scopes, parsedFiles, callsite) => resolveCppQualifiedNamespaceMember(receiverName, memberName, parsedFiles, scopes, callsite),
|
|
252
252
|
};
|
|
@@ -293,6 +293,9 @@ export function populatePhpNamespaceSiblings(parsedFiles, indexes, inputs) {
|
|
|
293
293
|
//
|
|
294
294
|
// Additionally, mirror from files that are imported via `use` (different
|
|
295
295
|
// namespace) so return types from dependencies are chain-followable too.
|
|
296
|
+
const parsedByPath = new Map();
|
|
297
|
+
for (const p of parsedFiles)
|
|
298
|
+
parsedByPath.set(p.filePath, p);
|
|
296
299
|
for (const parsed of parsedFiles) {
|
|
297
300
|
const moduleScope = parsed.scopes.find((s) => s.kind === 'Module');
|
|
298
301
|
if (moduleScope === undefined)
|
|
@@ -328,7 +331,7 @@ export function populatePhpNamespaceSiblings(parsedFiles, indexes, inputs) {
|
|
|
328
331
|
}
|
|
329
332
|
// Mirror return-type bindings from accessible files.
|
|
330
333
|
for (const srcFilePath of accessibleFiles) {
|
|
331
|
-
const srcParsed =
|
|
334
|
+
const srcParsed = parsedByPath.get(srcFilePath);
|
|
332
335
|
if (srcParsed === undefined)
|
|
333
336
|
continue;
|
|
334
337
|
const srcModuleScope = srcParsed.scopes.find((s) => s.kind === 'Module');
|
|
@@ -78,9 +78,11 @@ export type ScopeExtractorHooks = Pick<LanguageProvider, 'resolveScopeKind' | 'b
|
|
|
78
78
|
* Drive the five extraction passes and return a `ParsedFile`.
|
|
79
79
|
*
|
|
80
80
|
* Throws `ScopeTreeInvariantError` (from #912) when the provider emits
|
|
81
|
-
* captures that violate structural scope invariants.
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
*
|
|
81
|
+
* captures that violate structural scope invariants (e.g., overlapping
|
|
82
|
+
* sibling scopes). When no `@scope.module` capture is present, a
|
|
83
|
+
* synthetic Module scope is created spanning all captures, and orphan
|
|
84
|
+
* non-Module scopes are re-parented under it. This enables indexing of
|
|
85
|
+
* files where tree-sitter produces an ERROR root (e.g., complex .phtml
|
|
86
|
+
* templates with mixed PHP/HTML/JS).
|
|
85
87
|
*/
|
|
86
88
|
export declare function extract(matches: readonly CaptureMatch[], filePath: string, provider: ScopeExtractorHooks): ParsedFile;
|
|
@@ -65,17 +65,28 @@ import { extractTemplateArguments } from './utils/template-arguments.js';
|
|
|
65
65
|
* Drive the five extraction passes and return a `ParsedFile`.
|
|
66
66
|
*
|
|
67
67
|
* Throws `ScopeTreeInvariantError` (from #912) when the provider emits
|
|
68
|
-
* captures that violate structural scope invariants.
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
68
|
+
* captures that violate structural scope invariants (e.g., overlapping
|
|
69
|
+
* sibling scopes). When no `@scope.module` capture is present, a
|
|
70
|
+
* synthetic Module scope is created spanning all captures, and orphan
|
|
71
|
+
* non-Module scopes are re-parented under it. This enables indexing of
|
|
72
|
+
* files where tree-sitter produces an ERROR root (e.g., complex .phtml
|
|
73
|
+
* templates with mixed PHP/HTML/JS).
|
|
72
74
|
*/
|
|
73
75
|
export function extract(matches, filePath, provider) {
|
|
74
76
|
// Partition matches by topic up front — one linear pass over the input.
|
|
75
77
|
const partitioned = partitionByTopic(matches);
|
|
76
78
|
// ── Pass 1: build the scope tree ─────────────────────────────────────
|
|
77
79
|
const scopeDrafts = pass1BuildScopes(partitioned.scope, filePath, provider);
|
|
78
|
-
const moduleScope = ensureModuleScope(scopeDrafts,
|
|
80
|
+
const moduleScope = ensureModuleScope(scopeDrafts, filePath, matches);
|
|
81
|
+
// Re-parent orphan drafts (parent === null, non-Module) under the
|
|
82
|
+
// Module scope. Replaces drafts with new ones carrying the correct
|
|
83
|
+
// parent — runs before content passes so bindings/ownedDefs are empty.
|
|
84
|
+
for (let i = 0; i < scopeDrafts.length; i++) {
|
|
85
|
+
const d = scopeDrafts[i];
|
|
86
|
+
if (d.parent === null && d.kind !== 'Module') {
|
|
87
|
+
scopeDrafts[i] = makeDraft(d.id, moduleScope.id, d.kind, d.range, d.filePath);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
79
90
|
const scopes = scopeDrafts.map(draftToScope);
|
|
80
91
|
// buildScopeTree validates invariants (throws on violation) and exposes
|
|
81
92
|
// the lookup contract consumed by Passes 2-5.
|
|
@@ -171,18 +182,29 @@ function topicOf(match) {
|
|
|
171
182
|
}
|
|
172
183
|
return 'unknown';
|
|
173
184
|
}
|
|
174
|
-
function ensureModuleScope(scopeDrafts,
|
|
185
|
+
function ensureModuleScope(scopeDrafts, filePath, allMatches) {
|
|
175
186
|
const moduleScope = scopeDrafts.find((s) => s.kind === 'Module');
|
|
176
187
|
if (moduleScope !== undefined)
|
|
177
188
|
return moduleScope;
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
189
|
+
// Synthesize a Module scope spanning all captures in the file.
|
|
190
|
+
// Computed from ALL captures (scope, declaration, reference, etc.)
|
|
191
|
+
// so the range covers top-level references that appear after the
|
|
192
|
+
// last inner scope — not just inner Function/Class scopes.
|
|
193
|
+
let endLine = 0;
|
|
194
|
+
let endCol = 0;
|
|
195
|
+
for (const match of allMatches) {
|
|
196
|
+
for (const capture of Object.values(match)) {
|
|
197
|
+
if (capture.range.endLine > endLine ||
|
|
198
|
+
(capture.range.endLine === endLine && capture.range.endCol > endCol)) {
|
|
199
|
+
endLine = capture.range.endLine;
|
|
200
|
+
endCol = capture.range.endCol;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
183
203
|
}
|
|
184
|
-
|
|
185
|
-
|
|
204
|
+
const range = { startLine: 0, startCol: 0, endLine, endCol };
|
|
205
|
+
const synthetic = makeDraft(makeScopeId({ filePath, range, kind: 'Module' }), null, 'Module', range, filePath);
|
|
206
|
+
scopeDrafts.push(synthetic);
|
|
207
|
+
return synthetic;
|
|
186
208
|
}
|
|
187
209
|
function draftToScope(draft) {
|
|
188
210
|
const frozenBindings = new Map();
|
|
@@ -617,7 +617,7 @@ export interface ScopeResolver {
|
|
|
617
617
|
* children declare the same name (suppresses edge emission), or
|
|
618
618
|
* `undefined` to fall through to the remaining cases.
|
|
619
619
|
*/
|
|
620
|
-
readonly resolveQualifiedReceiverMember?: (receiverName: string, memberName: string, callerScope: ScopeId, scopes: ScopeResolutionIndexes, parsedFiles: readonly ParsedFile[]) => SymbolDefinition | 'ambiguous' | undefined;
|
|
620
|
+
readonly resolveQualifiedReceiverMember?: (receiverName: string, memberName: string, callerScope: ScopeId, scopes: ScopeResolutionIndexes, parsedFiles: readonly ParsedFile[], callsite?: Callsite) => SymbolDefinition | 'ambiguous' | undefined;
|
|
621
621
|
/**
|
|
622
622
|
* Enable the receiver-bound Case 0.5 fallback for explicit `this`
|
|
623
623
|
* receivers (`this->m()` / `this.m()`) that resolves against the
|
|
@@ -368,7 +368,7 @@ export function emitReceiverBoundCalls(graph, scopes, parsedFiles, nodeLookup, h
|
|
|
368
368
|
// Runs before Case 2 so namespace receivers don't accidentally match a
|
|
369
369
|
// class with the same simple name.
|
|
370
370
|
if (provider.resolveQualifiedReceiverMember !== undefined) {
|
|
371
|
-
const memberDef = provider.resolveQualifiedReceiverMember(receiverName, memberName, site.inScope, scopes, parsedFiles);
|
|
371
|
+
const memberDef = provider.resolveQualifiedReceiverMember(receiverName, memberName, site.inScope, scopes, parsedFiles, site);
|
|
372
372
|
if (memberDef === 'ambiguous') {
|
|
373
373
|
// Same-name ambiguity across inline-namespace children (#1564):
|
|
374
374
|
// suppress edge emission, mark site handled.
|
package/package.json
CHANGED