// 🎸 Foundational Template Generators for Cipher Handlers // Location: .vscode-extensions/cipher-autonomous-dev/src/shared/templateGenerators.ts // Purpose: Component, route, and handler templates for 37-handler ecosystem // Music Focus: Rock, Metal, Blues, Country Rock, Modern Christian Contemporary // Self-Generation: Supports Cipher's self-evolving template system import { AnalysisResult } from "./types"; // ===== ENHANCED COMPONENT SNIPPETS ===== export function generateComponentSnippet(type: string, name: string): string { const templates = { guitar: `// 🎸 ${name} - Generated by Cipher Autonomous import React, { useState, useCallback, useEffect } from 'react'; interface ${name}Props { genre?: 'rock' | 'metal' | 'blues' | 'country' | 'worship'; tuning?: 'standard' | 'dropD' | 'openG' | 'dadgad'; } const ${name}: React.FC<${name}Props> = ({ genre = 'rock', tuning = 'standard' }) => { const [isActive, setIsActive] = useState(false); const [currentChord, setCurrentChord] = useState(''); const [audioContext, setAudioContext] = useState(null); useEffect(() => { // Initialize Web Audio API for real-time analysis if (typeof window !== 'undefined' && window.AudioContext) { setAudioContext(new AudioContext()); } }, []); const handleToggle = useCallback(() => { setIsActive(prev => !prev); }, []); const getGenreChords = useCallback(() => { const chordSets = { rock: ['C5', 'F5', 'G5', 'Am'], metal: ['Em', 'C5', 'D5', 'B5'], blues: ['E7', 'A7', 'B7', 'E7'], country: ['G', 'C', 'D', 'Em'], worship: ['Cadd9', 'G/B', 'Am7', 'F2'] }; return chordSets[genre] || chordSets.rock; }, [genre]); return (

🎸 ${name}

Genre: {genre} | Tuning: {tuning}
{getGenreChords().map(chord => ( ))}
{currentChord && (

Current: {currentChord}

)}
); }; export default React.memo(${name});`, voice: `// 🎀 ${name} - Generated by Cipher Autonomous import React, { useState, useCallback, useEffect } from 'react'; interface ${name}Props { style?: 'rock' | 'country' | 'worship' | 'blues'; range?: 'soprano' | 'alto' | 'tenor' | 'bass'; } const ${name}: React.FC<${name}Props> = ({ style = 'worship', range = 'alto' }) => { const [isRecording, setIsRecording] = useState(false); const [pitch, setPitch] = useState(0); const [breathControl, setBreathControl] = useState(0); const handleRecord = useCallback(() => { setIsRecording(prev => !prev); }, []); const getStyleExercises = useCallback(() => { const exercises = { rock: ['Power breathing', 'Grit control', 'High energy'], country: ['Vocal twang', 'Natural vibrato', 'Storytelling'], worship: ['Smooth transitions', 'Sustained notes', 'Gentle vibrato'], blues: ['Emotional expression', 'Vocal bends', 'Raw delivery'] }; return exercises[style] || exercises.worship; }, [style]); return (

🎀 ${name}

Style: {style} | Range: {range}
{getStyleExercises().map(exercise => (

{exercise}

))}

Pitch

{pitch}Hz

Breath Control

{breathControl}%

); }; export default React.memo(${name});`, quick: `// ⚑ ${name} - Generated by Cipher Autonomous import React from 'react'; const ${name}: React.FC = () => { return (

⚑ ${name}

Quick component ready for music development!

); }; export default React.memo(${name});`, // New music-specific templates chordTrainer: `// 🎼 ${name} - Chord Trainer Component import React, { useState, useCallback } from 'react'; const ${name}: React.FC = () => { const [genre, setGenre] = useState<'rock' | 'worship' | 'blues' | 'country'>('rock'); const [currentProgression, setCurrentProgression] = useState([]); const progressions = { rock: ['C5-F5-G5-C5', 'Am-F-C-G', 'Em-C-G-D'], worship: ['Cadd9-G/B-Am7-F2', 'C-Am-F-G', 'G-D-Em-C'], blues: ['E7-E7-E7-E7', 'A7-A7-E7-E7', 'B7-A7-E7-B7'], country: ['G-C-D-G', 'C-F-G-C', 'Am-F-C-G'] }; return (

🎼 ${name}

{Object.keys(progressions).map(g => ( ))}
{progressions[genre].map((prog, idx) => (

{prog}

))}
); }; export default React.memo(${name});`, }; return templates[type as keyof typeof templates] || templates.quick; } // ===== ENHANCED PAGE CONTENT GENERATION ===== export function generatePageContent( componentName: string, moduleName: string ): string { return `// 🎡 ${componentName} Page - Generated by Cipher Autonomous import React from 'react'; import ${componentName}Component from '../../src/components/${moduleName}/${componentName}'; export default function ${componentName}Page() { return (
<${componentName}Component />
); } // Route: localhost:3000/${moduleName} // Generated: ${new Date().toISOString()} // Music App: Supports Rock, Metal, Blues, Country, Worship`; } // ===== ENHANCED MODULE COMPONENT GENERATION ===== export function generateModuleComponent( componentName: string, moduleName: string ): string { const moduleDescriptions: { [key: string]: string } = { practice: "Advanced Practice Tools & Session Management", tuner: "Professional Guitar & Instrument Tuning", metronome: "Smart Metronome & Timing Tools", jam: "Collaborative Music Creation & Jamming", vocal: "Vocal Training & Pitch Analysis", tabs: "Interactive Tab Player & Learning", "guitar-scales": "Guitar Scale Practice for Rock/Metal/Blues", "chord-trainer": "Chord Progression Training", "worship-songs": "Contemporary Worship Song Library", "country-tabs": "Country & Country Rock Tablature", }; const description = moduleDescriptions[moduleName] || "Custom Music Module"; return `// 🎡 ${componentName} Component - Generated by Cipher Autonomous import React, { useState, useEffect, useCallback } from 'react'; interface ${componentName}Props { genre?: 'rock' | 'metal' | 'blues' | 'country' | 'worship'; difficulty?: 'beginner' | 'intermediate' | 'advanced'; } const ${componentName}: React.FC<${componentName}Props> = ({ genre = 'rock', difficulty = 'beginner' }) => { const [isActive, setIsActive] = useState(false); const [isLoaded, setIsLoaded] = useState(false); const [session, setSession] = useState({ startTime: null as Date | null, duration: 0, progress: 0 }); useEffect(() => { setIsLoaded(true); }, []); const handleToggle = useCallback(() => { setIsActive(prev => { if (!prev) { setSession(s => ({ ...s, startTime: new Date() })); } return !prev; }); }, []); const getGenreFeatures = useCallback(() => { const features = { rock: ['Power chords', 'Palm muting', 'Distortion control'], metal: ['Drop tuning', 'Speed picking', 'Heavy riffs'], blues: ['Bend techniques', '12-bar progression', 'Pentatonic scales'], country: ['Chicken picking', 'Open chords', 'Capo usage'], worship: ['Fingerpicking', 'Suspended chords', 'Ambient effects'] }; return features[genre] || features.rock; }, [genre]); if (!isLoaded) { return (
Loading ${componentName}...
); } return (

🎡 ${componentName}

${description}

Genre: {genre} Level: {difficulty}

🎯 Core Features

    {getGenreFeatures().map(feature => (
  • β€’ {feature}
  • ))}

βš™οΈ Settings

Customize your ${moduleName} experience for {genre} music

πŸ“Š Session Analytics

Duration: {session.duration}min

Progress: {session.progress}%

πŸ€– Generated by Cipher Autonomous β€’ Ready for {genre} music development
); }; export default React.memo(${componentName});`; } // ===== ENHANCED HANDLER TEMPLATE GENERATION ===== export function generateHandlerTemplate( handlerType: string, name: string ): string { const templates = { // Music-specific handlers music: generateMusicHandlerTemplate(name), lyrics: generateLyricsHandlerTemplate(name), "guitar-analyzer": generateGuitarAnalyzerTemplate(name), "vocal-trainer": generateVocalTrainerTemplate(name), // @ts-expect-error future template will exist "chord-progresser": generateChordProgresserTemplate(name), // @ts-expect-error future template will exist "scale-practice": generateScalePracticeTemplate(name), // @ts-expect-error future template will exist "genre-trainer": generateGenreTrainerTemplate(name), // Project management handlers "route-manager": generateRouteManagerTemplate(name), // @ts-expect-error future template will exist "component-generator": generateComponentGeneratorTemplate(name), // @ts-expect-error future template will exist "deployment-handler": generateDeploymentTemplate(name), // Configuration handlers (dual-purpose) advanced: generateAdvancedHandlerTemplate(name), // @ts-expect-error future template will exist "config-manager": generateConfigManagerTemplate(name), // @ts-expect-error future template will exist "brain-coordinator": generateBrainCoordinatorTemplate(name), // Analytics handlers // @ts-expect-error future template will exist "performance-analyzer": generatePerformanceAnalyzerTemplate(name), // @ts-expect-error future template will exist "code-quality": generateCodeQualityTemplate(name), // Original handlers guitar: generateGuitarHandlerTemplate(name), vocal: generateVocalHandlerTemplate(name), generic: generateGenericHandlerTemplate(name), }; // ⚠️ NOTE: Missing templates will be generated by Cipher soon return templates[handlerType as keyof typeof templates] || templates.generic; } // 🎯 ADD THE NEW FUNCTION HERE ⬇️ interface ComponentProp { name: string; type: string; } interface ComponentConfig { componentName: string; componentType?: "functional" | "class"; props?: ComponentProp[]; } export function generateReactComponentTemplate( config: ComponentConfig ): string { const { componentName, componentType = "functional", props = [] } = config; return `import React${componentType === "functional" ? ", { useState, useEffect }" : ", { Component }"} from 'react'; interface ${componentName}Props { ${props.map((prop: ComponentProp) => `${prop.name}: ${prop.type};`).join("\n ")} } ${ componentType === "functional" ? `const ${componentName}: React.FC<${componentName}Props> = ({ ${props.map((p: ComponentProp) => p.name).join(", ")} }) => { const [isLoading, setIsLoading] = useState(false); useEffect(() => { // Component initialization }, []); return (

${componentName}

{/* Component content */}
); };` : `class ${componentName} extends Component<${componentName}Props> { render() { return (

${componentName}

{/* Component content */}
); } }` } export default ${componentName};`; } // ===== MISSING EXPORT FUNCTIONS ===== export function generateAdvancedHandlerTemplate(name: string): string { return `import * as vscode from 'vscode'; import { BrainConnector } from '../brain/BrainConnector'; import { displayAnalysisResults } from '../shared/displayUtils'; export async function ${name}(): Promise { try { console.log('πŸš€ ${name} - Advanced analysis with brain integration...'); const brain = BrainConnector.getInstance(); const workspace = vscode.workspace.workspaceFolders?.[0]?.uri; if (!workspace) { vscode.window.showErrorMessage('No workspace found'); return; } const analysis = await brain.analyzeProjectWithBrain(workspace); const suggestions = await brain.getPersonalizedSuggestions(); await displayAnalysisResults(analysis); if (suggestions.length > 0) { const choice = await vscode.window.showQuickPick(suggestions, { placeHolder: '🧠 Select a brain-powered suggestion' }); if (choice) { vscode.window.showInformationMessage(\`🎯 \${choice}\`); } } } catch (error) { console.error('❌ ${name} failed:', error); vscode.window.showErrorMessage(\`Advanced handler failed: \${error}\`); } }`; } export function generateLyricsHandlerTemplate(name: string): string { return `import * as vscode from 'vscode'; import { BrainConnector } from '../brain/BrainConnector'; export async function ${name}(): Promise { try { console.log('🎀 ${name} - Lyrics generation and analysis...'); const brain = BrainConnector.getInstance(); const theme = await vscode.window.showInputBox({ prompt: '🎡 Enter song theme or mood', placeHolder: 'e.g., hope, love, journey, worship...' }); if (!theme) return; const genre = await vscode.window.showQuickPick([ '🎸 Rock', '🎸 Metal', '🎡 Blues', '🀠 Country', 'πŸ™ Worship' ], { placeHolder: 'Select music genre' }); if (!genre) return; vscode.window.showInformationMessage( \`🎀 Generating \${genre} lyrics for theme: "\${theme}"\\n\\n🧠 Brain-powered creativity coming soon!\` ); // Share with brain for learning await brain.shareIntelligence('lyrics-generation', { theme, genre: genre.toLowerCase().replace(/[^\w\s]/g, '').trim(), timestamp: Date.now() }); } catch (error) { console.error('❌ ${name} failed:', error); vscode.window.showErrorMessage(\`Lyrics handler failed: \${error}\`); } }`; } export function generateMusicHandlerTemplate(name: string): string { return `import * as vscode from 'vscode'; import { BrainConnector } from '../brain/BrainConnector'; export async function ${name}(): Promise { try { console.log('🎡 ${name} - Music development tools...'); const brain = BrainConnector.getInstance(); const musicAction = await vscode.window.showQuickPick([ '🎸 Guitar Analysis', '🎀 Vocal Training', '🎼 Chord Progression', 'πŸ“Š Practice Analytics', '🎧 Audio Processing' ], { placeHolder: 'Select music development action' }); if (!musicAction) return; const actionKey = musicAction.toLowerCase().replace(/[^\w\s]/g, '').trim(); switch (actionKey) { case 'guitar analysis': await vscode.commands.executeCommand('cipher.analyzeGuitarComponents'); break; case 'vocal training': await vscode.commands.executeCommand('cipher.analyzeVocalComponents'); break; case 'chord progression': vscode.window.showInformationMessage('🎼 Chord progression tools coming soon!'); break; case 'practice analytics': vscode.window.showInformationMessage('πŸ“Š Practice analytics coming soon!'); break; case 'audio processing': vscode.window.showInformationMessage('🎧 Audio processing tools coming soon!'); break; default: vscode.window.showInformationMessage(\`🎡 \${musicAction} selected\`); } // Share with brain for learning await brain.shareIntelligence('music-tool-usage', { action: actionKey, timestamp: Date.now() }); } catch (error) { console.error('❌ ${name} failed:', error); vscode.window.showErrorMessage(\`Music handler failed: \${error}\`); } }`; } // ===== SPECIFIC HANDLER TEMPLATES ===== function generateGuitarAnalyzerTemplate(name: string): string { return `import * as vscode from 'vscode'; import { BrainConnector } from '../brain/BrainConnector'; export async function ${name}(): Promise { try { console.log('🎸 ${name} analyzing guitar performance...'); const brainConnector = BrainConnector.getInstance(); // Genre selection const genre = await vscode.window.showQuickPick( ['🎸 Rock', '🎸 Metal', '🎡 Blues', '🀠 Country Rock', 'πŸ™ Contemporary Worship'], { placeHolder: 'Select music genre for analysis' } ); if (!genre) return; const genreKey = genre.toLowerCase().replace(/[^\w\s]/g, '').trim(); // Audio analysis with genre context const audioData = new ArrayBuffer(0); // Mock data const analysis = await brainConnector.analyzeGuitar(audioData); // Genre-specific analysis enhancement const enhancedAnalysis = { ...analysis, genre: genreKey, styleSpecific: getGenreSpecificFeedback(analysis, genreKey) }; // Display results with genre-specific metrics const message = \`🎸 \${genre} Guitar Analysis: 🎡 Key: \${analysis.key || 'C Major'} 🎯 Tempo: \${analysis.tempo || 120} BPM πŸ“Š Chord Clarity: \${Math.round((analysis.chords_clarity?.clarity || 0.8) * 100)}% 🎼 Technique: \${Math.round((analysis.technique?.fingerPosition || 0.8) * 100)}% 🎸 Chords: \${analysis.chords?.join(', ') || 'C, Am, F, G'} 🎢 \${genreKey} Style Tips: \${enhancedAnalysis.styleSpecific?.join('\\n') || 'β€’ Focus on genre-specific techniques'} \`; vscode.window.showInformationMessage(message, { modal: true }); // Share with Brain for learning await brainConnector.shareCodeAnalysis({ type: 'guitar-genre-analysis', handler: '${name}', genre: genreKey, analysis: enhancedAnalysis, timestamp: Date.now() }); } catch (error) { console.error('❌ ${name} failed:', error); vscode.window.showErrorMessage(\`Guitar analysis failed: \${error}\`); } } function getGenreSpecificFeedback(analysis: any, genre: string): string[] { const feedback = { rock: [ 'β€’ Focus on power chord clarity', 'β€’ Practice palm muting techniques', 'β€’ Work on consistent pick attack' ], metal: [ 'β€’ Ensure clean downpicking', 'β€’ Practice tremolo picking', 'β€’ Focus on tight rhythm' ], blues: [ 'β€’ Work on string bending accuracy', 'β€’ Practice vibrato control', 'β€’ Focus on emotional expression' ], 'country rock': [ 'β€’ Practice hybrid picking', 'β€’ Work on open chord clarity', 'β€’ Focus on chicken picking technique' ], 'contemporary worship': [ 'β€’ Practice fingerpicking patterns', 'β€’ Work on sustained chord voicings', 'β€’ Focus on smooth transitions' ] }; return feedback[genre as keyof typeof feedback] || feedback.rock; }`; } function generateVocalTrainerTemplate(name: string): string { return `import * as vscode from 'vscode'; import { BrainConnector } from '../brain/BrainConnector'; export async function ${name}(): Promise { try { console.log('🎀 ${name} vocal training session...'); const brainConnector = BrainConnector.getInstance(); // Style selection const style = await vscode.window.showQuickPick( ['🎀 Rock Vocals', '🎀 Country Vocals', '🎀 Blues Vocals', '🎀 Worship Vocals'], { placeHolder: 'Select vocal style for training' } ); if (!style) return; const styleKey = style.toLowerCase().replace(/[^\w\s]/g, '').trim(); // Vocal analysis with style context const audioData = new ArrayBuffer(0); // Mock data const analysis = await brainConnector.analyzeVocal(audioData); // Style-specific training recommendations const trainingPlan = getVocalTrainingPlan(analysis, styleKey); const message = \`🎀 \${style} Training Results: 🎡 Range: \${analysis.range?.low || 220}Hz - \${analysis.range?.high || 880}Hz 🎯 Tone Quality: \${analysis.tone || 'warm'} πŸ’¨ Breath Control: \${analysis.breath || 'good'} πŸ“Š Pitch Stability: \${Math.round((analysis.pitch_stability?.stability || 0.88) * 100)}% 🎢 \${styleKey} Training Plan: \${trainingPlan.join('\\n')} \`; const action = await vscode.window.showInformationMessage( message, { modal: true }, 'Start Exercise', 'Save Plan', 'OK' ); if (action === 'Start Exercise') { vscode.commands.executeCommand('cipher.startVocalExercise', styleKey); } else if (action === 'Save Plan') { // Save training plan to file const workspaceFolder = vscode.workspace.workspaceFolders?.[0]; if (workspaceFolder) { const planPath = vscode.Uri.joinPath(workspaceFolder.uri, '.cipher', 'training-plans', \`vocal-\${styleKey}-plan.md\`); const planContent = \`# \${style} Training Plan\\n\\n\${trainingPlan.map(item => \`- \${item}\`).join('\\n')}\`; await vscode.workspace.fs.writeFile(planPath, Buffer.from(planContent)); vscode.window.showInformationMessage('Training plan saved!'); } } await brainConnector.shareCodeAnalysis({ type: 'vocal-style-training', handler: '${name}', style: styleKey, analysis, trainingPlan, timestamp: Date.now() }); } catch (error) { console.error('❌ ${name} failed:', error); vscode.window.showErrorMessage(\`Vocal training failed: \${error}\`); } } function getVocalTrainingPlan(analysis: any, style: string): string[] { const plans = { 'rock vocals': [ 'β€’ Power breathing exercises (5 min daily)', 'β€’ Vocal fry control practice', 'β€’ High energy sustained notes', 'β€’ Distortion control without strain' ], 'country vocals': [ 'β€’ Natural vibrato development', 'β€’ Vocal twang exercises', 'β€’ Storytelling expression work', 'β€’ Open vowel clarity practice' ], 'blues vocals': [ 'β€’ Emotional expression techniques', 'β€’ Vocal bend exercises', 'β€’ Raw delivery practice', 'β€’ Call and response patterns' ], 'worship vocals': [ 'β€’ Smooth transition exercises', 'β€’ Sustained note practice', 'β€’ Gentle vibrato control', 'β€’ Breath support for long phrases' ] }; return plans[style as keyof typeof plans] || plans['worship vocals']; }`; } function generateRouteManagerTemplate(name: string): string { return `import * as vscode from 'vscode'; import { analyzeRouteStructure } from '../shared/utils'; import { displayRouteAnalysis } from '../shared/displayUtils'; import { generateRouteMapHTML } from '../shared/templateGenerators'; export async function ${name}(): Promise { try { console.log('πŸ—ΊοΈ ${name} managing music app routes...'); const workspaceFolder = vscode.workspace.workspaceFolders?.[0]; if (!workspaceFolder) { vscode.window.showErrorMessage('No workspace folder found.'); return; } // Analyze current route structure const analysis = await analyzeRouteStructure(workspaceFolder.uri); // Display interactive route analysis await displayRouteAnalysis(analysis); // Generate visual route map (dual-purpose: analysis + HTML) const routeMapHTML = generateRouteMapHTML(analysis); // Create/update route map file const mapPath = vscode.Uri.joinPath(workspaceFolder.uri, '.cipher', 'route-map.html'); await vscode.workspace.fs.writeFile(mapPath, Buffer.from(routeMapHTML)); vscode.window.showInformationMessage( \`πŸ—ΊοΈ Music app route map updated: \${analysis.routes.length} routes analyzed\`, 'Open Map', 'Auto-Fix Missing', 'OK' ).then(action => { if (action === 'Open Map') { vscode.env.openExternal(mapPath); } else if (action === 'Auto-Fix Missing') { vscode.commands.executeCommand('cipher.autoFixMissingRoutes'); } }); } catch (error) { console.error('❌ ${name} failed:', error); vscode.window.showErrorMessage(\`Route management failed: \${error}\`); } }`; } function generateGenericHandlerTemplate(name: string): string { return `import * as vscode from 'vscode'; export async function ${name}(): Promise { try { console.log('πŸš€ ${name} executing...'); // TODO: Implement ${name} functionality vscode.window.showInformationMessage('βœ… ${name} completed successfully!'); } catch (error) { console.error('❌ ${name} failed:', error); vscode.window.showErrorMessage(\`${name} failed: \${error}\`); } }`; } // Original handler templates (maintained for compatibility) function generateGuitarHandlerTemplate(name: string): string { return generateGuitarAnalyzerTemplate(name); } function generateVocalHandlerTemplate(name: string): string { return generateVocalTrainerTemplate(name); } // ===== ENHANCED ROUTE MAP GENERATION - FIXED ===== export function generateRouteMapHTML(analysis: AnalysisResult): string { // βœ… FIXED: Use safe access with optional chaining and fallbacks const workingRoutes = analysis.routes?.filter((r) => r.exists) ?? []; const missingRoutes = analysis.routes?.filter((r) => !r.exists) ?? []; const totalRoutes = analysis.routes?.length ?? 0; return ` 🎡 Cipher Music App Route Map

🎡 Cipher Music App Route Analysis Map

Generated: ${new Date().toLocaleString()}

🎸 Music App Features

Supporting: Rock β€’ Metal β€’ Blues β€’ Country Rock β€’ Contemporary Worship

Available Modules: Guitar Practice β€’ Vocal Training β€’ Chord Progression β€’ Scale Practice β€’ Worship Songs β€’ Country Tabs
${workingRoutes.length}
Working Routes
${missingRoutes.length}
Missing Routes
${totalRoutes}
Total Routes
🎡
Music-Focused

βœ… Working Routes

${workingRoutes .map( (route) => `
${route.path}
βœ… WORKING
${route.url || `localhost:3000${route.path}`}

Component: ${route.component}

Status: ${route.status}

${ route.isMusicRoute || route.path.includes("guitar") || route.path.includes("vocal") || route.path.includes("chord") || route.path.includes("worship") ? '
🎡 Music Feature
' : "" }
` ) .join("")}

❌ Missing Routes

${missingRoutes .map( (route) => `
${route.path}
❌ MISSING
${route.url || `localhost:3000${route.path}`}

Component: ${route.component}

Status: ${route.status}

${ route.isMusicRoute || route.path.includes("guitar") || route.path.includes("vocal") || route.path.includes("chord") || route.path.includes("worship") ? '
🎡 Music Feature
' : "" }
` ) .join("")}
${ totalRoutes === 0 ? `

🎡 No Routes Found

Start building your music app with Cipher's auto-generation!

` : "" }
`; } export function generateProgressReportTemplate() { return "// Progress report template placeholder"; } export function generateTeamReportHTML(): string { // No parameters return `

Team Report

`; } export function generateTestContent( fileName: string, testType: string ): string { // Only 2 params return `// Test for ${fileName} - ${testType}`; }