package scanner import ( "path/filepath" "strings" ) // isManifest detects dependency / build manifests by basename. // Used to populate Result.DependencyManifests for repo-intake. func isManifest(name string) bool { switch strings.ToLower(name) { case "go.mod", "go.sum", "package.json", "package-lock.json", "yarn.lock", "pnpm-lock.yaml", "bun.lockb", "cargo.toml", "cargo.lock", "requirements.txt", "pyproject.toml", "poetry.lock", "pipfile", "pipfile.lock", "gemfile", "gemfile.lock", "composer.json", "composer.lock", "pom.xml", "build.gradle", "build.gradle.kts", "makefile", "justfile", "dockerfile", "docker-compose.yml", "docker-compose.yaml", "helm.yaml", "chart.yaml": return true } return false } // isTestPath detects test files / dirs by path. A repo is "has tests" // iff at least one returns true. Used both for repo-intake's // test_manifests list and the missing-tests analyzer's threshold. func isTestPath(rel string) bool { low := strings.ToLower(rel) // Directory-shaped signals parts := strings.Split(filepath.ToSlash(low), "/") for _, p := range parts { if p == "tests" || p == "test" || p == "__tests__" || p == "spec" || p == "specs" { return true } } // File-shape signals base := strings.ToLower(filepath.Base(rel)) if strings.HasSuffix(base, "_test.go") || strings.HasSuffix(base, ".test.ts") || strings.HasSuffix(base, ".test.tsx") || strings.HasSuffix(base, ".test.js") || strings.HasSuffix(base, ".spec.ts") || strings.HasSuffix(base, ".spec.js") { return true } if strings.HasPrefix(base, "test_") && strings.HasSuffix(base, ".py") { return true } return false }