summaryrefslogtreecommitdiffhomepage
path: root/packages/lsp/src/diff.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/lsp/src/diff.ts')
-rw-r--r--packages/lsp/src/diff.ts96
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 };
}