@aaswe/codebase-ai
Version:
AI-Assisted Software Engineering (AASWE) - Rich codebase context for IDE LLMs
184 lines • 7.17 kB
JavaScript
;
/**
* 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