codn_ts
Version:
智能代码分析工具 - 支持语义搜索、调用链分析和代码结构可视化,对大模型/AI agent 友好
194 lines • 6.17 kB
JavaScript
;
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