mirror of
https://github.com/pacnpal/Roo-Code.git
synced 2025-12-20 04:11:10 -05:00
use fastest-levenshtein
This commit is contained in:
@@ -1,37 +1,9 @@
|
|||||||
import { DiffStrategy, DiffResult } from "../types"
|
import { DiffStrategy, DiffResult } from "../types"
|
||||||
import { addLineNumbers, everyLineHasLineNumbers, stripLineNumbers } from "../../../integrations/misc/extract-text"
|
import { addLineNumbers, everyLineHasLineNumbers, stripLineNumbers } from "../../../integrations/misc/extract-text"
|
||||||
|
import { distance } from "fastest-levenshtein"
|
||||||
|
|
||||||
const BUFFER_LINES = 20 // Number of extra context lines to show before and after matches
|
const BUFFER_LINES = 20 // Number of extra context lines to show before and after matches
|
||||||
|
|
||||||
function levenshteinDistance(a: string, b: string): number {
|
|
||||||
const matrix: number[][] = []
|
|
||||||
|
|
||||||
// Initialize matrix
|
|
||||||
for (let i = 0; i <= a.length; i++) {
|
|
||||||
matrix[i] = [i]
|
|
||||||
}
|
|
||||||
for (let j = 0; j <= b.length; j++) {
|
|
||||||
matrix[0][j] = j
|
|
||||||
}
|
|
||||||
|
|
||||||
// Fill matrix
|
|
||||||
for (let i = 1; i <= a.length; i++) {
|
|
||||||
for (let j = 1; j <= b.length; j++) {
|
|
||||||
if (a[i - 1] === b[j - 1]) {
|
|
||||||
matrix[i][j] = matrix[i - 1][j - 1]
|
|
||||||
} else {
|
|
||||||
matrix[i][j] = Math.min(
|
|
||||||
matrix[i - 1][j - 1] + 1, // substitution
|
|
||||||
matrix[i][j - 1] + 1, // insertion
|
|
||||||
matrix[i - 1][j] + 1, // deletion
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return matrix[a.length][b.length]
|
|
||||||
}
|
|
||||||
|
|
||||||
function getSimilarity(original: string, search: string): number {
|
function getSimilarity(original: string, search: string): number {
|
||||||
if (search === "") {
|
if (search === "") {
|
||||||
return 1
|
return 1
|
||||||
@@ -47,12 +19,12 @@ function getSimilarity(original: string, search: string): number {
|
|||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
// Calculate Levenshtein distance
|
// Calculate Levenshtein distance using fastest-levenshtein's distance function
|
||||||
const distance = levenshteinDistance(normalizedOriginal, normalizedSearch)
|
const dist = distance(normalizedOriginal, normalizedSearch)
|
||||||
|
|
||||||
// Calculate similarity ratio (0 to 1, where 1 is exact match)
|
// Calculate similarity ratio (0 to 1, where 1 is an exact match)
|
||||||
const maxLength = Math.max(normalizedOriginal.length, normalizedSearch.length)
|
const maxLength = Math.max(normalizedOriginal.length, normalizedSearch.length)
|
||||||
return 1 - distance / maxLength
|
return 1 - dist / maxLength
|
||||||
}
|
}
|
||||||
|
|
||||||
export class SearchReplaceDiffStrategy implements DiffStrategy {
|
export class SearchReplaceDiffStrategy implements DiffStrategy {
|
||||||
|
|||||||
Reference in New Issue
Block a user