Skip to main content
Glama

In Memoria

test-comprehensive-language-support.js6.44 kB
#!/usr/bin/env node import { SemanticAnalyzer } from '../rust-core/index.js'; import { AstParser } from '../rust-core/index.js'; async function testComprehensiveLanguageSupport() { console.log('🔍 Testing comprehensive language support...\n'); const analyzer = new SemanticAnalyzer(); const astParser = new AstParser(); // Test cases for all 12 supported languages const testCases = [ // Original languages { name: 'TypeScript', file: 'test.ts', content: 'export class UserService { getName(): string { return "test"; } }', expectedConcepts: ['UserService', 'getName'] }, { name: 'JavaScript', file: 'test.js', content: 'function hello() { return "world"; }', expectedConcepts: ['hello'] }, { name: 'Python', file: 'test.py', content: 'class User:\n def __init__(self):\n self.name = "test"', expectedConcepts: ['User', '__init__'] }, { name: 'Rust', file: 'test.rs', content: 'pub struct User { name: String }', expectedConcepts: ['User'] }, // Newly added languages { name: 'Go', file: 'test.go', content: 'package main\nfunc main() {\n println("Hello World")\n}', expectedConcepts: ['main'] }, { name: 'Java', file: 'test.java', content: 'public class HelloWorld {\n public static void main(String[] args) {\n System.out.println("Hello");\n }\n}', expectedConcepts: ['HelloWorld', 'main'] }, { name: 'C', file: 'test.c', content: '#include <stdio.h>\nint main() {\n printf("Hello World");\n return 0;\n}', expectedConcepts: ['main'] }, { name: 'C++', file: 'test.cpp', content: '#include <iostream>\nclass HelloWorld {\npublic:\n void sayHello() {\n std::cout << "Hello";\n }\n};', expectedConcepts: ['HelloWorld', 'sayHello'] }, { name: 'C#', file: 'test.cs', content: 'using System;\npublic class Program {\n public static void Main() {\n Console.WriteLine("Hello World");\n }\n}', expectedConcepts: ['Program', 'Main'] }, { name: 'Svelte', file: 'test.svelte', content: '<script>\n let name = "world";\n function greet() {\n alert(`Hello ${name}!`);\n }\n</script>\n<button on:click={greet}>Greet</button>', expectedConcepts: ['greet'] }, { name: 'Vue', file: 'test.vue', content: '<template>\n <div>{{ message }}</div>\n</template>\n<script>\nexport default {\n data() {\n return { message: "Hello" }\n }\n}\n</script>', expectedConcepts: ['data'] }, { name: 'SQL', file: 'test.sql', content: 'CREATE TABLE users (\n id INTEGER PRIMARY KEY,\n name VARCHAR(255)\n);\nSELECT * FROM users;', expectedConcepts: ['users'] // May vary based on SQL parser capabilities } ]; let passed = 0; let failed = 0; const results = []; console.log('📋 Testing AST Parser initialization...'); try { console.log('✅ AST Parser initialized successfully'); } catch (error) { console.log('❌ AST Parser initialization failed:', error.message); return; } console.log('\n📋 Testing individual language parsing...\n'); for (const testCase of testCases) { console.log(`🔍 Testing ${testCase.name} (${testCase.file}):`); console.log(` Content: ${testCase.content.substring(0, 60)}${testCase.content.length > 60 ? '...' : ''}`); const result = { language: testCase.name, file: testCase.file, success: false, concepts: [], error: null }; try { // Test semantic analyzer const concepts = await analyzer.analyzeFileContent(testCase.file, testCase.content); result.concepts = concepts; result.success = true; console.log(` ✅ Semantic Analysis: Found ${concepts.length} concepts`); concepts.forEach(concept => { console.log(` - ${concept.name} (${concept.concept_type}) confidence: ${concept.confidence}`); }); // Test AST parser directly try { const language = testCase.file.split('.').pop() === 'ts' ? 'typescript' : testCase.file.split('.').pop() === 'js' ? 'javascript' : testCase.file.split('.').pop() === 'py' ? 'python' : testCase.file.split('.').pop() === 'rs' ? 'rust' : testCase.file.split('.').pop() === 'go' ? 'go' : testCase.file.split('.').pop() === 'java' ? 'java' : testCase.file.split('.').pop() === 'c' ? 'c' : testCase.file.split('.').pop() === 'cpp' ? 'cpp' : testCase.file.split('.').pop() === 'cs' ? 'csharp' : testCase.file.split('.').pop() === 'svelte' ? 'svelte' : testCase.file.split('.').pop() === 'vue' ? 'vue' : testCase.file.split('.').pop() === 'sql' ? 'sql' : 'unknown'; const astResult = await astParser.parseCode(testCase.content, language); console.log(` ✅ AST Parser: Successfully parsed (${astResult.symbols.length} symbols)`); } catch (astError) { console.log(` ⚠️ AST Parser: ${astError.message}`); } passed++; } catch (error) { result.error = error.message; console.log(` ❌ Failed: ${error.message}`); failed++; } results.push(result); console.log(''); } // Summary console.log('📊 Test Summary:'); console.log(` ✅ Passed: ${passed}/${testCases.length}`); console.log(` ❌ Failed: ${failed}/${testCases.length}`); console.log(` 📈 Success Rate: ${Math.round((passed / testCases.length) * 100)}%`); if (failed > 0) { console.log('\n❌ Failed Languages:'); results.filter(r => !r.success).forEach(result => { console.log(` - ${result.language}: ${result.error}`); }); } console.log('\n🎯 Language Coverage Status:'); results.forEach(result => { const status = result.success ? '✅' : '❌'; const conceptCount = result.concepts.length; console.log(` ${status} ${result.language}: ${conceptCount} concepts found`); }); } testComprehensiveLanguageSupport().catch(console.error);

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/pi22by7/In-Memoria'

If you have feedback or need assistance with the MCP directory API, please join our Discord server