Skip to main content
Glama
test-vscode-setup.ts7.29 kB
#!/usr/bin/env tsx /** * VS Code Setup Verification Script * Run this to test that all VS Code configurations are working properly */ import { execSync } from "child_process"; import { readFileSync, existsSync } from "fs"; interface TestResult { name: string; status: "pass" | "fail" | "warning"; message: string; } class VSCodeSetupTester { private results: TestResult[] = []; private addResult(name: string, status: "pass" | "fail" | "warning", message: string): void { this.results.push({ name, status, message }); } async testExtensions(): Promise<void> { console.log("🔍 Testing VS Code Extensions...\n"); const requiredExtensions = [ "ms-vscode.vscode-typescript-next", "dbaeumer.vscode-eslint", "esbenp.prettier-vscode", "vitest.explorer", "eamodio.gitlens", "bradlc.vscode-tailwindcss", "ms-python.python", "ms-vscode.hexeditor", ]; try { const installedExtensions = execSync("code --list-extensions", { encoding: "utf8" }); const installedList = installedExtensions.split("\n"); for (const ext of requiredExtensions) { if (installedList.includes(ext)) { this.addResult(`Extension: ${ext}`, "pass", "Installed and available"); } else { this.addResult(`Extension: ${ext}`, "fail", `Not installed - run: code --install-extension ${ext}`); } } } catch { this.addResult("Extension Check", "fail", "Could not check extensions - VS Code CLI not available"); } } testVSCodeConfiguration(): void { console.log("⚙️ Testing VS Code Configuration...\n"); // Test settings.json const settingsPath = ".vscode/settings.json"; if (existsSync(settingsPath)) { try { const settings = JSON.parse(readFileSync(settingsPath, "utf8")); // Test Vitest configuration if (settings["vitest.enable"]) { this.addResult("Vitest Integration", "pass", "Vitest is enabled in VS Code"); } else { this.addResult("Vitest Integration", "warning", "Vitest not explicitly enabled"); } // Test TypeScript configuration if (settings["typescript.preferences.includePackageJsonAutoImports"]) { this.addResult("TypeScript Auto-imports", "pass", "Auto-imports configured"); } else { this.addResult("TypeScript Auto-imports", "warning", "Auto-imports not configured"); } // Test Prettier configuration if (settings["editor.defaultFormatter"] === "esbenp.prettier-vscode") { this.addResult("Prettier Default Formatter", "pass", "Prettier set as default formatter"); } else { this.addResult("Prettier Default Formatter", "warning", "Prettier not set as default formatter"); } // Test format on save if (settings["editor.formatOnSave"]) { this.addResult("Format on Save", "pass", "Format on save is enabled"); } else { this.addResult("Format on Save", "warning", "Format on save is disabled"); } } catch { this.addResult("VS Code Settings", "fail", "Invalid JSON in settings.json"); } } else { this.addResult("VS Code Settings", "fail", "settings.json not found"); } // Test extensions.json const extensionsPath = ".vscode/extensions.json"; if (existsSync(extensionsPath)) { this.addResult("Extension Recommendations", "pass", "Extension recommendations configured"); } else { this.addResult("Extension Recommendations", "warning", "No extension recommendations found"); } } testProjectIntegration(): void { console.log("🔗 Testing Project Integration...\n"); // Test TypeScript configuration if (existsSync("tsconfig.json")) { this.addResult("TypeScript Config", "pass", "tsconfig.json found"); } else { this.addResult("TypeScript Config", "fail", "tsconfig.json missing"); } // Test Vitest configuration if (existsSync("vitest.config.ts")) { this.addResult("Vitest Config", "pass", "vitest.config.ts found"); } else { this.addResult("Vitest Config", "fail", "vitest.config.ts missing"); } // Test ESLint configuration if (existsSync(".eslintrc.js") || existsSync("eslint.config.js")) { this.addResult("ESLint Config", "pass", "ESLint configuration found"); } else { this.addResult("ESLint Config", "warning", "ESLint configuration not found"); } // Test Prettier configuration if (existsSync(".prettierrc.json")) { this.addResult("Prettier Config", "pass", "Prettier configuration found"); } else { this.addResult("Prettier Config", "warning", "Prettier configuration not found"); } } generateReport(): void { console.log("\n📊 VS Code Setup Test Report\n"); console.log("=".repeat(50)); const passed = this.results.filter((r) => r.status === "pass").length; const failed = this.results.filter((r) => r.status === "fail").length; const warnings = this.results.filter((r) => r.status === "warning").length; console.log(`✅ Passed: ${passed}`); console.log(`❌ Failed: ${failed}`); console.log(`⚠️ Warnings: ${warnings}`); console.log(`📊 Total: ${this.results.length}\n`); // Group results by status const failedTests = this.results.filter((r) => r.status === "fail"); const warningTests = this.results.filter((r) => r.status === "warning"); if (failedTests.length > 0) { console.log("❌ Failed Tests:"); failedTests.forEach((test) => { console.log(` • ${test.name}: ${test.message}`); }); console.log(""); } if (warningTests.length > 0) { console.log("⚠️ Warnings:"); warningTests.forEach((test) => { console.log(` • ${test.name}: ${test.message}`); }); console.log(""); } // Provide recommendations this.generateRecommendations(); } private generateRecommendations(): void { console.log("💡 Recommendations:\n"); const failedExtensions = this.results .filter((r) => r.name.startsWith("Extension:") && r.status === "fail") .map((r) => r.message.split("code --install-extension ")[1]) .filter(Boolean); if (failedExtensions.length > 0) { console.log("📦 Install missing extensions:"); failedExtensions.forEach((ext) => { console.log(` code --install-extension ${ext}`); }); console.log(""); } console.log("🔄 After installing extensions:"); console.log(" 1. Restart VS Code completely"); console.log(" 2. Open a TypeScript file and verify IntelliSense"); console.log(' 3. Run tests using Cmd+Shift+P > "Test: Run All Tests"'); console.log(" 4. Try formatting a file with Cmd+Shift+F"); console.log(""); } async runAllTests(): Promise<void> { console.log("🚀 Starting VS Code Setup Verification...\n"); await this.testExtensions(); this.testVSCodeConfiguration(); this.testProjectIntegration(); this.generateReport(); } } // Run the tests const tester = new VSCodeSetupTester(); tester.runAllTests().catch((error) => { console.error("❌ Test execution failed:", error); process.exit(1); });

Latest Blog Posts

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/docdyhr/mcp-wordpress'

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