mirror of https://github.com/vuejs/core.git
refactor(shared): improve handling of out-of-range start and end values in generateCodeFrame (#10883)
related: #10854
This commit is contained in:
parent
bdeac377c7
commit
80e402975b
|
@ -1,5 +1,31 @@
|
|||
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
|
||||
|
||||
exports[`compiler: codeframe > invalid start and end 1`] = `
|
||||
"1 | <div>
|
||||
| ^
|
||||
2 | <template key="one"></template>
|
||||
3 | <ul>"
|
||||
`;
|
||||
|
||||
exports[`compiler: codeframe > invalid start and end 2`] = `
|
||||
"1 | <div>
|
||||
| ^^^^^
|
||||
2 | <template key="one"></template>
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
3 | <ul>
|
||||
| ^^^^^^
|
||||
4 | <li v-for="foobar">hi</li>
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
5 | </ul>
|
||||
| ^^^^^^^
|
||||
6 | <template key="two"></template>
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
7 | </div>
|
||||
| ^^^^^^"
|
||||
`;
|
||||
|
||||
exports[`compiler: codeframe > invalid start and end 3`] = `""`;
|
||||
|
||||
exports[`compiler: codeframe > line in middle 1`] = `
|
||||
"2 | <template key="one"></template>
|
||||
3 | <ul>
|
||||
|
|
|
@ -44,6 +44,12 @@ attr
|
|||
expect(generateCodeFrame(source, attrStart, attrEnd)).toMatchSnapshot()
|
||||
})
|
||||
|
||||
test('invalid start and end', () => {
|
||||
expect(generateCodeFrame(source, -Infinity, 0)).toMatchSnapshot()
|
||||
expect(generateCodeFrame(source, 0, Infinity)).toMatchSnapshot()
|
||||
expect(generateCodeFrame(source, Infinity, 0)).toMatchSnapshot()
|
||||
})
|
||||
|
||||
{
|
||||
const source = `
|
||||
<template>
|
||||
|
|
|
@ -5,6 +5,12 @@ export function generateCodeFrame(
|
|||
start = 0,
|
||||
end = source.length,
|
||||
): string {
|
||||
// Ensure start and end are within the source length
|
||||
start = Math.max(0, Math.min(start, source.length))
|
||||
end = Math.max(0, Math.min(end, source.length))
|
||||
|
||||
if (start > end) return ''
|
||||
|
||||
// Split the content into individual lines but capture the newline sequence
|
||||
// that separated each line. This is important because the actual sequence is
|
||||
// needed to properly take into account the full line length for offset
|
||||
|
|
Loading…
Reference in New Issue