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
@@ -4,13 +4,29 @@ import type { LanguageExtractor } from '../tree-sitter-types';
|
||||
|
||||
export const csharpExtractor: LanguageExtractor = {
|
||||
functionTypes: [],
|
||||
classTypes: ['class_declaration'],
|
||||
// Records are first-class type declarations in modern C# (DTOs, value objects,
|
||||
// MediatR/CQRS messages). `record` / `record class` parse as record_declaration
|
||||
// (reference type → class); `record struct` as record_struct_declaration (value
|
||||
// type → struct). Without these, references to a record never resolve (#237).
|
||||
classTypes: ['class_declaration', 'record_declaration'],
|
||||
methodTypes: ['method_declaration', 'constructor_declaration'],
|
||||
interfaceTypes: ['interface_declaration'],
|
||||
structTypes: ['struct_declaration'],
|
||||
structTypes: ['struct_declaration', 'record_struct_declaration'],
|
||||
enumTypes: ['enum_declaration'],
|
||||
enumMemberTypes: ['enum_member_declaration'],
|
||||
typeAliasTypes: [],
|
||||
// Namespaces qualify type names so same-named types in different namespaces are
|
||||
// distinguishable (e.g. `ApplicationCore.Entities.CatalogBrand` vs
|
||||
// `BlazorShared.Models.CatalogBrand`). Both block (`namespace Foo { … }`, which
|
||||
// nests its types) and file-scoped (`namespace Foo;`) forms — extractFilePackage
|
||||
// pushes the namespace onto the scope so nested/top-level types pick it up.
|
||||
packageTypes: ['namespace_declaration', 'file_scoped_namespace_declaration'],
|
||||
extractPackage: (node: SyntaxNode, source: string) => {
|
||||
const name =
|
||||
node.childForFieldName('name') ??
|
||||
node.namedChildren.find((c: SyntaxNode) => c.type === 'qualified_name' || c.type === 'identifier');
|
||||
return name ? getNodeText(name, source) : null;
|
||||
},
|
||||
importTypes: ['using_directive'],
|
||||
callTypes: ['invocation_expression'],
|
||||
variableTypes: ['local_declaration_statement'],
|
||||
|
||||
Reference in New Issue
Block a user