diff options
Diffstat (limited to 'packages/lsp/src/diff.ts')
| -rw-r--r-- | packages/lsp/src/diff.ts | 96 |
1 files changed, 48 insertions, 48 deletions
diff --git a/packages/lsp/src/diff.ts b/packages/lsp/src/diff.ts index ab40b36..1bf6048 100644 --- a/packages/lsp/src/diff.ts +++ b/packages/lsp/src/diff.ts @@ -7,16 +7,16 @@ */ export interface Position { - readonly line: number; // 0-based - readonly character: number; // 0-based + readonly line: number; // 0-based + readonly character: number; // 0-based } export interface TextDocumentContentChangeEvent { - readonly range: { - readonly start: Position; - readonly end: Position; - }; - readonly text: string; + readonly range: { + readonly start: Position; + readonly end: Position; + }; + readonly text: string; } /** @@ -29,40 +29,40 @@ export interface TextDocumentContentChangeEvent { * the portion of `newText` between the prefix and suffix. */ export function computeChangeRange( - oldText: string, - newText: string, + oldText: string, + newText: string, ): TextDocumentContentChangeEvent { - const minLen = Math.min(oldText.length, newText.length); + const minLen = Math.min(oldText.length, newText.length); - // Longest common prefix - let prefixLen = 0; - while (prefixLen < minLen && oldText[prefixLen] === newText[prefixLen]) { - prefixLen++; - } + // Longest common prefix + let prefixLen = 0; + while (prefixLen < minLen && oldText[prefixLen] === newText[prefixLen]) { + prefixLen++; + } - // Longest common suffix (must not overlap with prefix) - const oldRemaining = oldText.length - prefixLen; - const newRemaining = newText.length - prefixLen; - const maxSuffix = Math.min(oldRemaining, newRemaining); - let suffixLen = 0; - while ( - suffixLen < maxSuffix && - oldText[oldText.length - 1 - suffixLen] === newText[newText.length - 1 - suffixLen] - ) { - suffixLen++; - } + // Longest common suffix (must not overlap with prefix) + const oldRemaining = oldText.length - prefixLen; + const newRemaining = newText.length - prefixLen; + const maxSuffix = Math.min(oldRemaining, newRemaining); + let suffixLen = 0; + while ( + suffixLen < maxSuffix && + oldText[oldText.length - 1 - suffixLen] === newText[newText.length - 1 - suffixLen] + ) { + suffixLen++; + } - const startOffset = prefixLen; - const endOffset = oldText.length - suffixLen; - const replacementText = newText.slice(prefixLen, newText.length - suffixLen); + const startOffset = prefixLen; + const endOffset = oldText.length - suffixLen; + const replacementText = newText.slice(prefixLen, newText.length - suffixLen); - return { - range: { - start: offsetToPosition(oldText, startOffset), - end: offsetToPosition(oldText, endOffset), - }, - text: replacementText, - }; + return { + range: { + start: offsetToPosition(oldText, startOffset), + end: offsetToPosition(oldText, endOffset), + }, + text: replacementText, + }; } /** @@ -70,16 +70,16 @@ export function computeChangeRange( * (0-based line and character). Scans for newlines up to the offset. */ export function offsetToPosition(text: string, offset: number): Position { - let line = 0; - let character = 0; - const limit = Math.min(offset, text.length); - for (let i = 0; i < limit; i++) { - if (text[i] === "\n") { - line++; - character = 0; - } else { - character++; - } - } - return { line, character }; + let line = 0; + let character = 0; + const limit = Math.min(offset, text.length); + for (let i = 0; i < limit; i++) { + if (text[i] === "\n") { + line++; + character = 0; + } else { + character++; + } + } + return { line, character }; } |
