diff --git a/packages/compiler-core/__tests__/utils.spec.ts b/packages/compiler-core/__tests__/utils.spec.ts index 3c5412796e3..45fa46fea7a 100644 --- a/packages/compiler-core/__tests__/utils.spec.ts +++ b/packages/compiler-core/__tests__/utils.spec.ts @@ -56,14 +56,6 @@ describe('getInnerRange', () => { expect(loc2.end.offset).toBe(4) }) - test('at end', () => { - const loc2 = getInnerRange(loc1, 4) - expect(loc2.start.column).toBe(1) - expect(loc2.start.line).toBe(2) - expect(loc2.start.offset).toBe(4) - expect(loc2.end).toEqual(loc1.end) - }) - test('in between', () => { const loc2 = getInnerRange(loc1, 4, 3) expect(loc2.start.column).toBe(1) diff --git a/packages/compiler-core/src/parse.ts b/packages/compiler-core/src/parse.ts index b824314d010..078066e3d56 100644 --- a/packages/compiler-core/src/parse.ts +++ b/packages/compiler-core/src/parse.ts @@ -825,9 +825,9 @@ function parseAttribute( context, ErrorCodes.X_MISSING_DYNAMIC_DIRECTIVE_ARGUMENT_END ) - content = content.substr(1) + content = content.slice(1) } else { - content = content.substr(1, content.length - 2) + content = content.slice(1, content.length - 1) } } else if (isSlot) { // #1241 special case for v-slot: vuetify relies extensively on slot @@ -855,7 +855,7 @@ function parseAttribute( valueLoc.source = valueLoc.source.slice(1, -1) } - const modifiers = match[3] ? match[3].substr(1).split('.') : [] + const modifiers = match[3] ? match[3].slice(1).split('.') : [] if (isPropShorthand) modifiers.push('prop') // 2.x compat v-bind:foo.sync -> v-model:foo @@ -1167,7 +1167,7 @@ function isEnd( function startsWithEndTagOpen(source: string, tag: string): boolean { return ( startsWith(source, ']/.test(source[2 + tag.length] || '>') ) } diff --git a/packages/compiler-core/src/utils.ts b/packages/compiler-core/src/utils.ts index ab5dd80ba8e..416cf79e9f9 100644 --- a/packages/compiler-core/src/utils.ts +++ b/packages/compiler-core/src/utils.ts @@ -182,10 +182,10 @@ export const isMemberExpression = __BROWSER__ export function getInnerRange( loc: SourceLocation, offset: number, - length?: number + length: number ): SourceLocation { __TEST__ && assert(offset <= loc.source.length) - const source = loc.source.substr(offset, length) + const source = loc.source.slice(offset, offset + length) const newLoc: SourceLocation = { source, start: advancePositionWithClone(loc.start, loc.source, offset), diff --git a/packages/compiler-dom/src/decodeHtml.ts b/packages/compiler-dom/src/decodeHtml.ts index b28592d95ce..68b0277a434 100644 --- a/packages/compiler-dom/src/decodeHtml.ts +++ b/packages/compiler-dom/src/decodeHtml.ts @@ -42,7 +42,7 @@ export const decodeHtml: ParserOptions['decodeEntities'] = ( ) } for (let length = maxCRNameLength; !value && length > 0; --length) { - name = rawText.substr(1, length) + name = rawText.slice(1, 1 + length) value = (namedCharacterReferences as Record)[name] } if (value) { diff --git a/packages/global.d.ts b/packages/global.d.ts index a15d04b2cea..65693b1f60d 100644 --- a/packages/global.d.ts +++ b/packages/global.d.ts @@ -45,3 +45,10 @@ declare module '@vue/repl' { const ReplStore: any export { Repl, ReplStore } } + +declare interface String { + /** + * @deprecated Please use String.prototype.slice instead of String.prototype.substring in the repository. + */ + substring(start: number, end?: number): string; +} diff --git a/packages/sfc-playground/src/Header.vue b/packages/sfc-playground/src/Header.vue index c0cc7a8b962..44b1d46f230 100644 --- a/packages/sfc-playground/src/Header.vue +++ b/packages/sfc-playground/src/Header.vue @@ -60,7 +60,7 @@ async function fetchVersions(): Promise { ) const releases: any[] = await res.json() const versions = releases.map(r => - /^v/.test(r.tag_name) ? r.tag_name.substr(1) : r.tag_name + /^v/.test(r.tag_name) ? r.tag_name.slice(1) : r.tag_name ) // if the latest version is a pre-release, list all current pre-releases // otherwise filter out pre-releases diff --git a/packages/shared/src/escapeHtml.ts b/packages/shared/src/escapeHtml.ts index 4a6435e6a51..bacd182ad97 100644 --- a/packages/shared/src/escapeHtml.ts +++ b/packages/shared/src/escapeHtml.ts @@ -34,14 +34,14 @@ export function escapeHtml(string: unknown) { } if (lastIndex !== index) { - html += str.substring(lastIndex, index) + html += str.slice(lastIndex, index) } lastIndex = index + 1 html += escaped } - return lastIndex !== index ? html + str.substring(lastIndex, index) : html + return lastIndex !== index ? html + str.slice(lastIndex, index) : html } // https://www.w3.org/TR/html52/syntax.html#comments