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

Function buildLocalReceiverTypePatterns

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

Source from the content-addressed store, hash-verified

1190}
1191
1192function buildLocalReceiverTypePatterns(language: Language, r: string): RegExp[] {
1193 switch (language) {
1194 case 'typescript':
1195 case 'javascript':
1196 case 'tsx':
1197 case 'jsx':
1198 case 'arkts':
1199 return [
1200 new RegExp(`\\b${r}\\b\\s*=\\s*new\\s+([A-Za-z_$][\\w.$]*)`), // = new Logger()
1201 // No keyword requirement, so this matches BOTH a local annotation
1202 // (`const lg: Logger`) and a typed parameter (`function use(lg: Logger)`
1203 // / `(lg: Logger) =>`) — the parameter case the old `const|let|var`
1204 // prefix excluded (#1125). Mirrors Kotlin/Swift/Scala; the capture stops
1205 // at `<` so a generic-typed param (`repo: Repository<User>`) still yields
1206 // `Repository`. resolveMethodOnType validates the type actually declares
1207 // the method, so the looser match produces no edge on a mis-inference.
1208 new RegExp(`\\b${r}\\b\\s*:\\s*([A-Z][\\w.$]*)`), // lg: Logger (annotation or typed param)
1209 ];
1210 case 'python':
1211 return [
1212 new RegExp(`\\b${r}\\b\\s*=\\s*([A-Z][\\w.]*)\\s*\\(`), // lg = Logger(...)
1213 new RegExp(`\\b${r}\\b\\s*:\\s*([A-Z][\\w.]*)`), // lg: Logger (PEP 526)
1214 ];
1215 case 'java':
1216 return [
1217 new RegExp(`\\b${r}\\b\\s*=\\s*new\\s+([A-Za-z_][\\w.]*)`), // = new Logger()
1218 new RegExp(`\\b([A-Z][\\w.]*)\\s+${r}\\b\\s*[=;,)]`), // Logger lg; / param
1219 ];
1220 case 'kotlin':
1221 return [
1222 new RegExp(`\\b${r}\\b\\s*=\\s*([A-Z][\\w.]*)\\s*\\(`), // val lg = Logger(...)
1223 new RegExp(`\\b${r}\\b\\s*:\\s*([A-Z][\\w.]*)`), // val lg: Logger / param
1224 ];
1225 case 'csharp':
1226 return [
1227 new RegExp(`\\b${r}\\b\\s*=\\s*new\\s+([A-Za-z_][\\w.]*)`), // = new Logger()
1228 new RegExp(`\\b([A-Z][\\w.]*)\\s+${r}\\b\\s*[=;,)]`), // Logger lg; / param
1229 ];
1230 case 'swift':
1231 return [
1232 new RegExp(`\\b${r}\\b\\s*=\\s*([A-Z][\\w.]*)\\s*\\(`), // let lg = Logger(...)
1233 new RegExp(`\\b${r}\\b\\s*:\\s*([A-Z][\\w.]*)`), // let lg: Logger / param
1234 ];
1235 case 'rust':
1236 return [
1237 new RegExp(`\\blet\\s+(?:mut\\s+)?${r}\\b(?:\\s*:[^=]+)?=\\s*&?(?:mut\\s+)?([A-Z][\\w]*)`), // let lg = Logger::new()/Logger{}/Logger
1238 // No `let`, so this covers a `let lg: Logger` binding AND a typed
1239 // parameter (`fn use(lg: &Logger)`, a closure `|lg: Logger|`) — the
1240 // parameter case the old `let`-anchored pattern excluded (#1125).
1241 new RegExp(`\\b${r}\\s*:\\s*&?(?:mut\\s+)?([A-Z][\\w]*)`), // lg: Logger (binding or typed param)
1242 ];
1243 case 'go':
1244 return [
1245 new RegExp(`\\b${r}\\b\\s*:=\\s*&?([A-Za-z_][\\w.]*)\\s*{`), // lg := Logger{} / &Logger{}
1246 new RegExp(`\\bvar\\s+${r}\\s+\\*?([A-Za-z_][\\w.]*)`), // var lg Logger / *Logger
1247 // A typed parameter / method receiver (`func use(lg Logger)`,
1248 // `func (l Logger) M()`) — name-before-type with no `var`/`:=` (#1125).
1249 // PascalCase-guarded (unlike the anchored patterns above) to keep the

Callers 1

Calls

no outgoing calls

Tested by

no test coverage detected