(language: Language, r: string)
| 1318 | } |
| 1319 | |
| 1320 | function 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 |
no outgoing calls
no test coverage detected