fix(core): preserve unicode in grep previews (#42356)
This commit is contained in:
@@ -264,7 +264,10 @@ const layer = Layer.effect(
|
|||||||
}),
|
}),
|
||||||
line: match.line_number,
|
line: match.line_number,
|
||||||
offset: match.absolute_offset,
|
offset: match.absolute_offset,
|
||||||
text: match.lines.text.length > 2_000 ? match.lines.text.slice(0, 2_000) + "..." : match.lines.text,
|
text:
|
||||||
|
match.lines.text.length > 2_000
|
||||||
|
? match.lines.text.slice(0, 2_000).replace(/[\uD800-\uDBFF]$/, "") + "..."
|
||||||
|
: match.lines.text,
|
||||||
submatches: match.submatches.map((submatch) => ({
|
submatches: match.submatches.map((submatch) => ({
|
||||||
text: submatch.match.text,
|
text: submatch.match.text,
|
||||||
start: submatch.start,
|
start: submatch.start,
|
||||||
|
|||||||
@@ -62,4 +62,24 @@ describe("Ripgrep", () => {
|
|||||||
(tmp) => Effect.promise(() => tmp[Symbol.asyncDispose]()),
|
(tmp) => Effect.promise(() => tmp[Symbol.asyncDispose]()),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
it.live("does not split surrogate pairs in oversized line previews", () =>
|
||||||
|
Effect.acquireUseRelease(
|
||||||
|
Effect.promise(() => tmpdir()),
|
||||||
|
(tmp) =>
|
||||||
|
Effect.gen(function* () {
|
||||||
|
yield* Effect.promise(() =>
|
||||||
|
fs.writeFile(path.join(tmp.path, "unicode.txt"), `needle${"x".repeat(1_993)}😀\n`),
|
||||||
|
)
|
||||||
|
|
||||||
|
const matches = yield* (yield* Ripgrep.Service).grep({
|
||||||
|
cwd: tmp.path,
|
||||||
|
pattern: "needle",
|
||||||
|
limit: 10,
|
||||||
|
})
|
||||||
|
|
||||||
|
expect(matches[0]?.text).toBe(`needle${"x".repeat(1_993)}...`)
|
||||||
|
}),
|
||||||
|
(tmp) => Effect.promise(() => tmp[Symbol.asyncDispose]()),
|
||||||
|
),
|
||||||
|
)
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user