summaryrefslogtreecommitdiffhomepage
path: root/packages/lsp/src/diff.ts
diff options
context:
space:
mode:
authorAdam Malczewski <[email protected]>2026-06-27 01:12:40 +0900
committerAdam Malczewski <[email protected]>2026-06-27 01:12:40 +0900
commit98b0638838a8e754927d8c030ce8bded18d63e7d (patch)
tree0d4e21c3d4792fcd77e1040373b260e38efa34ce /packages/lsp/src/diff.ts
parentd92a4af6191d7d20acf861adf605ad0227b6b287 (diff)
parent61e45e60d699ed1ca46f94a8f181c92a940317c6 (diff)
downloaddispatch-98b0638838a8e754927d8c030ce8bded18d63e7d.tar.gz
dispatch-98b0638838a8e754927d8c030ce8bded18d63e7d.zip
Merge branch 'dev' into feature/heartbeat
# Conflicts: # packages/host-bin/package.json # packages/host-bin/src/main.ts # packages/session-orchestrator/src/orchestrator.ts # packages/system-prompt/src/service.test.ts # packages/system-prompt/src/service.ts # packages/system-prompt/src/types.ts # packages/transport-contract/package.json # packages/transport-http/package.json # packages/transport-http/src/app.test.ts # packages/transport-http/src/app.ts # packages/transport-http/src/extension.ts # packages/transport-http/tsconfig.json # tsconfig.json
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 };
}