UNPKG

@aaswe/codebase-ai

Version:

AI-Assisted Software Engineering (AASWE) - Rich codebase context for IDE LLMs

184 lines 7.17 kB
"use strict"; /** * AST Analyzer Factory * Main entry point for AST analysis functionality */ 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 __exportStar = (this && this.__exportStar) || function(m, exports) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.CppAnalyzer = exports.RustAnalyzer = exports.GoAnalyzer = exports.JavaAnalyzer = exports.PythonAnalyzer = exports.TypeScriptAnalyzer = exports.BaseAnalyzer = exports.ASTAnalyzerFactory = void 0; const TypeScriptAnalyzer_1 = require("./TypeScriptAnalyzer"); const PythonAnalyzer_1 = require("./PythonAnalyzer"); const JavaAnalyzer_1 = require("./JavaAnalyzer"); const GoAnalyzer_1 = require("./GoAnalyzer"); const RustAnalyzer_1 = require("./RustAnalyzer"); const CppAnalyzer_1 = require("./CppAnalyzer"); const logger_1 = __importDefault(require("../../../utils/logger")); class ASTAnalyzerFactory { static analyzers = new Map(); /** * Get analyzer for specific language */ static getAnalyzer(language) { if (!this.analyzers.has(language)) { this.analyzers.set(language, this.createAnalyzer(language)); } return this.analyzers.get(language); } /** * Create analyzer instance for language */ static createAnalyzer(language) { switch (language) { case 'typescript': case 'javascript': return new TypeScriptAnalyzer_1.TypeScriptAnalyzer(); case 'python': return new PythonAnalyzer_1.PythonAnalyzer(); case 'java': return new JavaAnalyzer_1.JavaAnalyzer(); case 'go': return new GoAnalyzer_1.GoAnalyzer(); case 'rust': return new RustAnalyzer_1.RustAnalyzer(); case 'cpp': return new CppAnalyzer_1.CppAnalyzer(); default: throw new Error(`Unsupported language: ${language}`); } } /** * Detect language from file extension */ static detectLanguage(filePath) { const extension = filePath.split('.').pop()?.toLowerCase(); switch (extension) { case 'ts': case 'tsx': return 'typescript'; case 'js': case 'jsx': case 'mjs': return 'javascript'; case 'py': return 'python'; case 'java': return 'java'; case 'go': return 'go'; case 'rs': return 'rust'; case 'cpp': case 'cc': case 'cxx': case 'c++': case 'hpp': case 'h': return 'cpp'; default: throw new Error(`Cannot detect language for file: ${filePath}`); } } /** * Analyze single file with automatic language detection */ static async analyzeFile(filePath, options) { try { const language = this.detectLanguage(filePath); const analyzer = this.getAnalyzer(language); logger_1.default.debug(`Analyzing ${filePath} as ${language}`); return await analyzer.analyzeFile(filePath, options); } catch (error) { logger_1.default.error(`Failed to analyze file ${filePath}:`, error); throw error; } } /** * Analyze multiple files with automatic language detection */ static async analyzeFiles(filePaths, options) { const results = []; // Analyze each file individually to ensure correct language detection for (const filePath of filePaths) { try { const result = await this.analyzeFile(filePath, options); results.push(result); } catch (error) { logger_1.default.warn(`Skipping file ${filePath}: ${error}`); } } return results; } /** * Get supported languages */ static getSupportedLanguages() { return ['typescript', 'javascript', 'python', 'java', 'go', 'rust', 'cpp']; } /** * Check if language is supported */ static isLanguageSupported(language) { return this.getSupportedLanguages().includes(language); } /** * Get file extensions for language */ static getLanguageExtensions(language) { switch (language) { case 'typescript': return ['ts', 'tsx']; case 'javascript': return ['js', 'jsx', 'mjs']; case 'python': return ['py']; case 'java': return ['java']; case 'go': return ['go']; case 'rust': return ['rs']; case 'cpp': return ['cpp', 'cc', 'cxx', 'c++', 'hpp', 'h']; default: return []; } } } exports.ASTAnalyzerFactory = ASTAnalyzerFactory; // Export types and classes __exportStar(require("./types"), exports); var BaseAnalyzer_1 = require("./BaseAnalyzer"); Object.defineProperty(exports, "BaseAnalyzer", { enumerable: true, get: function () { return BaseAnalyzer_1.BaseAnalyzer; } }); var TypeScriptAnalyzer_2 = require("./TypeScriptAnalyzer"); Object.defineProperty(exports, "TypeScriptAnalyzer", { enumerable: true, get: function () { return TypeScriptAnalyzer_2.TypeScriptAnalyzer; } }); var PythonAnalyzer_2 = require("./PythonAnalyzer"); Object.defineProperty(exports, "PythonAnalyzer", { enumerable: true, get: function () { return PythonAnalyzer_2.PythonAnalyzer; } }); var JavaAnalyzer_2 = require("./JavaAnalyzer"); Object.defineProperty(exports, "JavaAnalyzer", { enumerable: true, get: function () { return JavaAnalyzer_2.JavaAnalyzer; } }); var GoAnalyzer_2 = require("./GoAnalyzer"); Object.defineProperty(exports, "GoAnalyzer", { enumerable: true, get: function () { return GoAnalyzer_2.GoAnalyzer; } }); var RustAnalyzer_2 = require("./RustAnalyzer"); Object.defineProperty(exports, "RustAnalyzer", { enumerable: true, get: function () { return RustAnalyzer_2.RustAnalyzer; } }); var CppAnalyzer_2 = require("./CppAnalyzer"); Object.defineProperty(exports, "CppAnalyzer", { enumerable: true, get: function () { return CppAnalyzer_2.CppAnalyzer; } }); // Default export exports.default = ASTAnalyzerFactory; //# sourceMappingURL=index.js.map