MCPcopy Create free account
hub / github.com/colbymchenry/codegraph / buildLocalReceiverTypePatterns

Function buildLocalReceiverTypePatterns

src/resolution/name-matcher.ts:1320–1466  ·  view source on GitHub ↗
(language: Language, r: string)

Source from the content-addressed store, hash-verified

1318}
1319
1320function buildLocalReceiverTypePatterns(language: Language, r: string): RegExp[] {
1321 switch (language) {
1322 case 'typescript':
1323 case 'javascript':
1324 case 'tsx':
1325 case 'jsx':
1326 case 'arkts':
1327 return [
1328 new RegExp(`\\b${r}\\b\\s*=\\s*new\\s+([A-Za-z_$][\\w.$]*)`), // = new Logger()
1329 // No keyword requirement, so this matches BOTH a local annotation
1330 // (`const lg: Logger`) and a typed parameter (`function use(lg: Logger)`
1331 // / `(lg: Logger) =>`) — the parameter case the old `const|let|var`
1332 // prefix excluded (#1125). Mirrors Kotlin/Swift/Scala; the capture stops
1333 // at `<` so a generic-typed param (`repo: Repository<User>`) still yields
1334 // `Repository`. resolveMethodOnType validates the type actually declares
1335 // the method, so the looser match produces no edge on a mis-inference.
1336 new RegExp(`\\b${r}\\b\\s*:\\s*([A-Z][\\w.$]*)`), // lg: Logger (annotation or typed param)
1337 ];
1338 case 'python':
1339 return [
1340 new RegExp(`\\b${r}\\b\\s*=\\s*([A-Z][\\w.]*)\\s*\\(`), // lg = Logger(...)
1341 new RegExp(`\\b${r}\\b\\s*:\\s*([A-Z][\\w.]*)`), // lg: Logger (PEP 526)
1342 ];
1343 case 'java':
1344 return [
1345 new RegExp(`\\b${r}\\b\\s*=\\s*new\\s+([A-Za-z_][\\w.]*)`), // = new Logger()
1346 new RegExp(`\\b([A-Z][\\w.]*)\\s+${r}\\b\\s*[=;,)]`), // Logger lg; / param
1347 ];
1348 case 'kotlin':
1349 return [
1350 new RegExp(`\\b${r}\\b\\s*=\\s*([A-Z][\\w.]*)\\s*\\(`), // val lg = Logger(...)
1351 new RegExp(`\\b${r}\\b\\s*:\\s*([A-Z][\\w.]*)`), // val lg: Logger / param
1352 ];
1353 case 'csharp':
1354 return [
1355 new RegExp(`\\b${r}\\b\\s*=\\s*new\\s+([A-Za-z_][\\w.]*)`), // = new Logger()
1356 new RegExp(`\\b([A-Z][\\w.]*)\\s+${r}\\b\\s*[=;,)]`), // Logger lg; / param
1357 ];
1358 case 'swift':
1359 return [
1360 new RegExp(`\\b${r}\\b\\s*=\\s*([A-Z][\\w.]*)\\s*\\(`), // let lg = Logger(...)
1361 new RegExp(`\\b${r}\\b\\s*:\\s*([A-Z][\\w.]*)`), // let lg: Logger / param
1362 ];
1363 case 'rust':
1364 return [
1365 new RegExp(`\\blet\\s+(?:mut\\s+)?${r}\\b(?:\\s*:[^=]+)?=\\s*&?(?:mut\\s+)?([A-Z][\\w]*)`), // let lg = Logger::new()/Logger{}/Logger
1366 // No `let`, so this covers a `let lg: Logger` binding AND a typed
1367 // parameter (`fn use(lg: &Logger)`, a closure `|lg: Logger|`) — the
1368 // parameter case the old `let`-anchored pattern excluded (#1125).
1369 new RegExp(`\\b${r}\\s*:\\s*&?(?:mut\\s+)?([A-Z][\\w]*)`), // lg: Logger (binding or typed param)
1370 ];
1371 case 'go':
1372 return [
1373 new RegExp(`\\b${r}\\b\\s*:=\\s*&?([A-Za-z_][\\w.]*)\\s*{`), // lg := Logger{} / &Logger{}
1374 new RegExp(`\\bvar\\s+${r}\\s+\\*?([A-Za-z_][\\w.]*)`), // var lg Logger / *Logger
1375 // A typed parameter / method receiver (`func use(lg Logger)`,
1376 // `func (l Logger) M()`) — name-before-type with no `var`/`:=` (#1125).
1377 // PascalCase-guarded (unlike the anchored patterns above) to keep the

Callers 1

Calls

no outgoing calls

Tested by

no test coverage detected