import os def guess_language_from_path(path: str) -> str: _, ext = os.path.splitext(path or "") ext = ext.lower() ext_to_lang = { # Web ".js": "javascript", ".mjs": "javascript", ".cjs": "javascript", ".ts": "typescript", ".tsx": "typescript", ".jsx": "javascript", ".html": "html", ".htm": "html", ".css": "css", ".scss": "scss", ".sass": "sass", ".less": "less", # Backend / General ".py": "python", ".java": "java", ".kt": "kotlin", ".kts": "kotlin", ".go": "go", ".rb": "ruby", ".php": "php", ".cs": "csharp", ".rs": "rust", ".c": "c", ".h": "c", # 프로젝트에 따라 c/cpp 헤더지만 일단 c로 ".cpp": "cpp", ".cc": "cpp", ".cxx": "cpp", ".hpp": "cpp", ".hh": "cpp", ".swift": "swift", # Shell / Infra ".sh": "bash", ".bash": "bash", ".zsh": "zsh", ".ps1": "powershell", ".dockerfile": "dockerfile", # 보통 안 걸림. 아래 별도 처리도 참고. ".yml": "yaml", ".yaml": "yaml", ".json": "json", ".toml": "toml", ".ini": "ini", # Data / Docs ".md": "markdown", ".txt": "text", ".sql": "sql", ".xml": "xml", ".csv": "csv", } # 확장자 없는 케이스들 (대표적으로 Dockerfile 등) base = os.path.basename(path or "").lower() if base == "dockerfile": return "dockerfile" if base in {"makefile"}: return "makefile" return ext_to_lang.get(ext, "text")