Browse Source

extract out methods instead of storing them in a superclass

Mark IJbema 5 months ago
parent
commit
eb0a4bb84e

+ 2 - 1
src/services/ghost/strategies/AutoTriggerStrategy.ts

@@ -2,6 +2,7 @@ import { GhostSuggestionContext } from "../types"
 import { UseCaseType } from "../types/PromptStrategy"
 import { BasePromptStrategy } from "./BasePromptStrategy"
 import { CURSOR_MARKER } from "../ghostConstants"
+import { formatDocumentWithCursor } from "./StrategyHelpers"
 
 /**
  * Fallback strategy for automatic completions
@@ -60,7 +61,7 @@ Provide non-intrusive completions after a typing pause. Be conservative and help
 		// Add the full document with cursor marker
 		if (context.document) {
 			prompt += "## Full Code\n"
-			prompt += this.formatDocumentWithCursor(context.document, context.range)
+			prompt += formatDocumentWithCursor(context.document, context.range)
 			prompt += "\n\n"
 		}
 

+ 0 - 48
src/services/ghost/strategies/BasePromptStrategy.ts

@@ -1,8 +1,6 @@
 import type { TextDocument, Range, Diagnostic } from "vscode"
 import { GhostSuggestionContext } from "../types"
 import { PromptStrategy, UseCaseType } from "../types/PromptStrategy"
-import { CURSOR_MARKER } from "../ghostConstants"
-import { DiagnosticSeverityNames } from "./diagnostics"
 
 /**
  * Abstract base class for all prompt strategies
@@ -78,50 +76,4 @@ EXAMPLE:
 	 * Generates the user prompt with context
 	 */
 	abstract getUserPrompt(context: GhostSuggestionContext): string
-
-	/**
-	 * Adds the cursor marker to the document text at the specified position
-	 */
-	protected addCursorMarker(document: TextDocument, range?: Range): string {
-		if (!range) return document.getText()
-
-		const fullText = document.getText()
-		const cursorOffset = document.offsetAt(range.start)
-		const beforeCursor = fullText.substring(0, cursorOffset)
-		const afterCursor = fullText.substring(cursorOffset)
-
-		return `${beforeCursor}${CURSOR_MARKER}${afterCursor}`
-	}
-
-	/**
-	 * Formats diagnostics for inclusion in prompts
-	 */
-	protected formatDiagnostics(diagnostics: Diagnostic[]): string {
-		if (!diagnostics || diagnostics.length === 0) return ""
-
-		let result = "## Active Issues\n"
-
-		// Sort by severity (errors first)
-		const sorted = [...diagnostics].sort((a, b) => a.severity - b.severity)
-
-		sorted.forEach((d) => {
-			const severity = DiagnosticSeverityNames[d.severity] || "Unknown"
-			const line = d.range.start.line + 1
-			result += `- **${severity}** at line ${line}: ${d.message}\n`
-		})
-
-		return result
-	}
-
-	/**
-	 * Formats the document with cursor marker for the prompt
-	 */
-	protected formatDocumentWithCursor(document: TextDocument, range?: Range, languageId?: string): string {
-		const lang = languageId || document.languageId
-		const codeWithCursor = this.addCursorMarker(document, range)
-
-		return `\`\`\`${lang}
-${codeWithCursor}
-\`\`\``
-	}
 }

+ 2 - 1
src/services/ghost/strategies/CommentDrivenStrategy.ts

@@ -2,6 +2,7 @@ import { GhostSuggestionContext } from "../types"
 import { BasePromptStrategy } from "./BasePromptStrategy"
 import { UseCaseType } from "../types/PromptStrategy"
 import { CURSOR_MARKER } from "../ghostConstants"
+import { formatDocumentWithCursor } from "./StrategyHelpers"
 
 /**
  * Strategy for generating code based on comments
@@ -88,7 +89,7 @@ export class CommentDrivenStrategy extends BasePromptStrategy {
 		// Add the full document with cursor marker
 		if (context.document) {
 			prompt += "## Full Code\n"
-			prompt += this.formatDocumentWithCursor(context.document, context.range)
+			prompt += formatDocumentWithCursor(context.document, context.range)
 			prompt += "\n\n"
 		}
 

+ 2 - 1
src/services/ghost/strategies/InlineCompletionStrategy.ts

@@ -2,6 +2,7 @@ import { GhostSuggestionContext } from "../types"
 import { BasePromptStrategy } from "./BasePromptStrategy"
 import { UseCaseType } from "../types/PromptStrategy"
 import { CURSOR_MARKER } from "../ghostConstants"
+import { formatDocumentWithCursor } from "./StrategyHelpers"
 
 /**
  * Strategy for inline code completions (mid-line completions)
@@ -91,7 +92,7 @@ export class InlineCompletionStrategy extends BasePromptStrategy {
 		// Add the full document with cursor marker
 		if (context.document) {
 			prompt += "## Full Code\n"
-			prompt += this.formatDocumentWithCursor(context.document, context.range)
+			prompt += formatDocumentWithCursor(context.document, context.range)
 			prompt += "\n\n"
 		}
 

+ 2 - 1
src/services/ghost/strategies/NewLineCompletionStrategy.ts

@@ -3,6 +3,7 @@ import { GhostSuggestionContext } from "../types"
 import { UseCaseType } from "../types/PromptStrategy"
 import { BasePromptStrategy } from "./BasePromptStrategy"
 import { CURSOR_MARKER } from "../ghostConstants"
+import { formatDocumentWithCursor } from "./StrategyHelpers"
 
 /**
  * Strategy for proactive code completion on new/empty lines
@@ -86,7 +87,7 @@ Important:
 		// Add the full document with cursor marker
 		if (context.document) {
 			prompt += "## Full Code\n"
-			prompt += this.formatDocumentWithCursor(context.document, context.range)
+			prompt += formatDocumentWithCursor(context.document, context.range)
 			prompt += "\n\n"
 		}
 

+ 3 - 2
src/services/ghost/strategies/SelectionRefactorStrategy.ts

@@ -2,6 +2,7 @@ import { GhostSuggestionContext } from "../types"
 import { BasePromptStrategy } from "./BasePromptStrategy"
 import { UseCaseType } from "../types/PromptStrategy"
 import { CURSOR_MARKER } from "../ghostConstants"
+import { formatDiagnostics, formatDocumentWithCursor } from "./StrategyHelpers"
 
 /**
  * Strategy for refactoring selected code
@@ -66,14 +67,14 @@ Remember: The goal is to improve the code quality while keeping the exact same b
 		prompt += `- Refactoring Suggestions: ${refactoringSuggestions.slice(0, 3).join(", ")}\n\n`
 
 		if (context.diagnostics && context.diagnostics.length > 0) {
-			prompt += this.formatDiagnostics(context.diagnostics)
+			prompt += formatDiagnostics(context.diagnostics)
 			prompt += "\n"
 		}
 
 		// Add the full document with cursor marker
 		if (context.document) {
 			prompt += "## Full Code\n"
-			prompt += this.formatDocumentWithCursor(context.document, context.range)
+			prompt += formatDocumentWithCursor(context.document, context.range)
 			prompt += "\n\n"
 		}
 

+ 39 - 0
src/services/ghost/strategies/StrategyHelpers.ts

@@ -0,0 +1,39 @@
+import type { TextDocument, Range, Diagnostic } from "vscode"
+import { CURSOR_MARKER } from "../ghostConstants"
+import { DiagnosticSeverityNames } from "./diagnostics"
+
+export function addCursorMarker(document: TextDocument, range?: Range): string {
+	if (!range) return document.getText()
+
+	const fullText = document.getText()
+	const cursorOffset = document.offsetAt(range.start)
+	const beforeCursor = fullText.substring(0, cursorOffset)
+	const afterCursor = fullText.substring(cursorOffset)
+
+	return `${beforeCursor}${CURSOR_MARKER}${afterCursor}`
+}
+
+export function formatDiagnostics(diagnostics: Diagnostic[]): string {
+	if (!diagnostics || diagnostics.length === 0) return ""
+
+	let result = "## Active Issues\n"
+
+	const sorted = [...diagnostics].sort((a, b) => a.severity - b.severity)
+
+	sorted.forEach((d) => {
+		const severity = DiagnosticSeverityNames[d.severity] || "Unknown"
+		const line = d.range.start.line + 1
+		result += `- **${severity}** at line ${line}: ${d.message}\n`
+	})
+
+	return result
+}
+
+export function formatDocumentWithCursor(document: TextDocument, range?: Range, languageId?: string): string {
+	const lang = languageId || document.languageId
+	const codeWithCursor = addCursorMarker(document, range)
+
+	return `\`\`\`${lang}
+${codeWithCursor}
+\`\`\``
+}

+ 3 - 2
src/services/ghost/strategies/UserRequestStrategy.ts

@@ -3,6 +3,7 @@ import { GhostSuggestionContext } from "../types"
 import { UseCaseType } from "../types/PromptStrategy"
 import { BasePromptStrategy } from "./BasePromptStrategy"
 import { CURSOR_MARKER } from "../ghostConstants"
+import { formatDiagnostics, formatDocumentWithCursor } from "./StrategyHelpers"
 
 /**
  * Strategy for handling explicit user requests
@@ -83,14 +84,14 @@ Common Request Patterns:
 
 		// Include diagnostics if present (user might be asking to fix them)
 		if (context.diagnostics && context.diagnostics.length > 0) {
-			prompt += this.formatDiagnostics(context.diagnostics)
+			prompt += formatDiagnostics(context.diagnostics)
 			prompt += "\n"
 		}
 
 		// Add the full document with cursor marker
 		if (context.document) {
 			prompt += "## Full Code\n"
-			prompt += this.formatDocumentWithCursor(context.document, context.range)
+			prompt += formatDocumentWithCursor(context.document, context.range)
 			prompt += "\n\n"
 		}