feat(impact): cross-language blast-radius coverage (22 languages + 14 frameworks) (#708)
Completes the cross-file dependency graph behind impact / affected / explore across all 22 supported languages and 14 web frameworks, validated on real-world repos (measured fair-coverage table added to the README). Per-language resolution + framework resolvers/synthesizers (Lua/Luau require, Shopify OS 2.0 Liquid sections, Delphi forms, Rust cross-module + Rocket macros, Swift Fluent, SvelteKit/Nuxt loader/component conventions, RN/Expo bridges). 0 cross-family false edges, full suite green (1187 passed). See #708. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
bfa84d32b8
commit
07af3db6c7
@@ -78,6 +78,18 @@ export const phpExtractor: LanguageExtractor = {
|
||||
|
||||
return false;
|
||||
},
|
||||
// PHP `namespace Foo\Bar;` is file-level (like a Java/Kotlin package). Capturing
|
||||
// it scopes every class under an `Foo\Bar::` qualified name, which is what makes
|
||||
// `use` imports and same-named types (Laravel has 7+ `Factory` interfaces across
|
||||
// namespaces) resolvable to the RIGHT definition instead of an arbitrary match.
|
||||
packageTypes: ['namespace_definition'],
|
||||
extractPackage: (node, source) => {
|
||||
const nsName = node.namedChildren.find((c: SyntaxNode) => c.type === 'namespace_name');
|
||||
// Skip braced `namespace Foo { … }` (has a body) — file-level only.
|
||||
const hasBody = node.namedChildren.some((c: SyntaxNode) => c.type === 'compound_statement' || c.type === 'declaration_list');
|
||||
if (!nsName || hasBody) return null;
|
||||
return getNodeText(nsName, source);
|
||||
},
|
||||
extractImport: (node, source) => {
|
||||
const importText = source.substring(node.startIndex, node.endIndex).trim();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user