UNPKG

codn_ts

Version:

智能代码分析工具 - 支持语义搜索、调用链分析和代码结构可视化,对大模型/AI agent 友好

194 lines 6.17 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.detectDominantLanguages = detectDominantLanguages; exports.resolvePath = resolvePath; exports.pathExists = pathExists; exports.getLanguageFileExtensions = getLanguageFileExtensions; const path = __importStar(require("path")); const fs = __importStar(require("fs")); // 文件扩展名到语言的完整映射 const EXTENSION_TO_LANGUAGE = { ".py": "python", ".js": "javascript", ".ts": "typescript", ".jsx": "javascript", ".tsx": "typescript", ".java": "java", ".kt": "kotlin", ".go": "go", ".rs": "rust", ".c": "c", ".cpp": "cpp", ".h": "c", ".hpp": "cpp", ".cs": "csharp", ".swift": "swift", ".m": "objectivec", ".php": "php", ".rb": "ruby", ".sh": "bash", ".pl": "perl", ".lua": "lua", ".scala": "scala", ".hs": "haskell", ".r": "r", ".dart": "dart", ".el": "elisp", ".erl": "erlang", ".ex": "elixir", ".jl": "julia", ".clj": "clojure", ".f90": "fortran", ".groovy": "groovy", ".scm": "scheme", ".sql": "sql", ".vb": "vbnet", ".xml": "xml", ".yaml": "yaml", ".yml": "yaml", ".json": "json", ".html": "html", ".css": "css", ".scss": "scss", ".less": "less", ".md": "markdown", ".tex": "latex", // 可以继续添加更多扩展名映射 }; /** * 检测目录中主导的编程语言 * @param root 要分析的根目录路径 * @param options 配置选项 * @returns 按使用频率排序的语言数组 */ function detectDominantLanguages(root = ".", options = {}) { const { ignoredDirs = new Set(), topN = 1 } = options; const languageCounter = new Map(); // 递归遍历目录的辅助函数 const walkDirectory = (dirPath) => { try { const entries = fs.readdirSync(dirPath); for (const entry of entries) { const fullPath = path.join(dirPath, entry); try { const stat = fs.statSync(fullPath); if (stat.isDirectory()) { if (!ignoredDirs.has(entry)) { walkDirectory(fullPath); } } else if (stat.isFile()) { const extension = path.extname(entry).toLowerCase(); if (extension in EXTENSION_TO_LANGUAGE) { const language = EXTENSION_TO_LANGUAGE[extension]; languageCounter.set(language, (languageCounter.get(language) || 0) + 1); } } } catch (error) { console.warn(`无法访问路径: ${fullPath}`, error); } } } catch (error) { console.warn(`无法读取目录: ${dirPath}`, error); } }; // 开始遍历 walkDirectory(path.resolve(root)); if (languageCounter.size === 0) { return []; } // 转换为数组并排序 const sortedLanguages = Array.from(languageCounter.entries()).sort((a, b) => b[1] - a[1]); // 处理返回结果 if (topN === 1) { const maxCount = sortedLanguages[0][1]; return sortedLanguages .filter(([_, count]) => count === maxCount) .map(([language]) => language); } return sortedLanguages.slice(0, topN).map(([language]) => language); } /** * 获取规范化后的绝对路径 * @param pathSegments 路径片段 * @returns 规范化后的绝对路径 */ function resolvePath(...pathSegments) { return path.resolve(...pathSegments); } /** * 检查路径是否存在 * @param targetPath 要检查的路径 * @returns 是否存在 */ function pathExists(targetPath) { try { fs.accessSync(targetPath); return true; } catch { return false; } } /** * 获取指定语言对应的文件扩展名 * @param lang 语言名称 * @returns 逗号分隔的扩展名字符串(不带点) */ function getLanguageFileExtensions(lang) { const extensionMap = { c: "c,h", cpp: "cpp,hpp,cc,hxx", python: "py,pyw", typescript: "ts,tsx", javascript: "js,jsx,mjs,cjs", java: "java", go: "go", rust: "rs", ruby: "rb", php: "php", swift: "swift", kotlin: "kt,kts", // 可以继续添加更多语言映射 }; // 转换为小写比较,确保大小写不敏感 const normalizedLang = lang.toLowerCase(); // 返回映射值或默认原样返回(保持与Python版本相同行为) return extensionMap[normalizedLang] || lang; } //# sourceMappingURL=os_utils.js.map