vibe-coder-mcp
Version:
Production-ready MCP server with complete agent integration, multi-transport support, and comprehensive development automation tools for AI-assisted workflows.
75 lines (74 loc) • 2.84 kB
JavaScript
import { getLanguageHandler } from './languageHandlers/registry.js';
import logger from '../../logger.js';
export function getNodeText(node, sourceCode) {
if (!node)
return '';
return sourceCode.substring(node.startIndex, node.endIndex);
}
export function generateHeuristicComment(name, type, signature, parentClass) {
const A_AN = ['a', 'e', 'i', 'o', 'u'].includes(name.charAt(0).toLowerCase()) ? 'An' : 'A';
const nameParts = name.replace(/([A-Z])/g, ' $1').toLowerCase().split(/[\s_]+/).filter(Boolean);
const readableName = nameParts.join(' ');
switch (type) {
case 'function':
return `Performs an action related to ${readableName}.`;
case 'method':
return `Method ${readableName} of class ${parentClass || 'N/A'}.`;
case 'class':
return `${A_AN} ${readableName} class definition.`;
case 'property':
return `Property ${readableName} of class ${parentClass || 'N/A'}.`;
case 'import':
return `Imports module or items from '${readableName}'.`;
case 'file':
return `File containing code related to ${readableName}.`;
default:
return `Symbol ${readableName}.`;
}
}
export function extractFunctions(parentNode, sourceCode, languageId, isMethodExtraction = false, className) {
try {
const handler = getLanguageHandler(languageId);
const options = {
isMethodExtraction,
className,
enableContextAnalysis: true,
enableRoleDetection: true,
enableHeuristicNaming: true
};
return handler.extractFunctions(parentNode, sourceCode, options);
}
catch (error) {
logger.error({ err: error, languageId }, `Error extracting functions for language ${languageId}`);
return [];
}
}
export function extractClasses(rootNode, sourceCode, languageId) {
try {
const handler = getLanguageHandler(languageId);
const options = {
extractNestedClasses: false,
extractMethods: true,
extractProperties: true
};
return handler.extractClasses(rootNode, sourceCode, options);
}
catch (error) {
logger.error({ err: error, languageId }, `Error extracting classes for language ${languageId}`);
return [];
}
}
export function extractImports(rootNode, sourceCode, languageId) {
try {
const handler = getLanguageHandler(languageId);
const options = {
resolveImportPaths: true,
extractComments: true
};
return handler.extractImports(rootNode, sourceCode, options);
}
catch (error) {
logger.error({ err: error, languageId }, `Error extracting imports for language ${languageId}`);
return [];
}
}