vscode-languageserver-textdocument
Advanced tools
Comparing version 1.0.0-next.4 to 1.0.0-next.5
@@ -0,0 +0,0 @@ { |
@@ -0,0 +0,0 @@ /** |
@@ -54,10 +54,25 @@ /* -------------------------------------------------------------------------------------------- | ||
// update the offsets | ||
var oldOffsets = this._lineOffsets; | ||
var newLineOffsets = oldOffsets.slice(0, Math.max(range.start.line, 0) + 1); | ||
computeLineOffsets(change.text, false, startOffset, newLineOffsets); | ||
var startLine = Math.max(range.start.line, 0); | ||
var endLine = Math.max(range.end.line, 0); | ||
var lineOffsets = this._lineOffsets; | ||
var addedLineOffsets = computeLineOffsets(change.text, false, startOffset); | ||
if (endLine - startLine === addedLineOffsets.length) { | ||
for (var i = 0, len = addedLineOffsets.length; i < len; i++) { | ||
lineOffsets[i + startLine + 1] = addedLineOffsets[i]; | ||
} | ||
} | ||
else { | ||
if (addedLineOffsets.length < 10000) { | ||
lineOffsets.splice.apply(lineOffsets, [startLine + 1, endLine - startLine].concat(addedLineOffsets)); | ||
} | ||
else { // avoid too many arguments for splice | ||
this._lineOffsets = lineOffsets = lineOffsets.slice(0, startLine + 1).concat(addedLineOffsets, lineOffsets.slice(endLine + 1)); | ||
} | ||
} | ||
var diff = change.text.length - (endOffset - startOffset); | ||
for (var i = Math.max(range.end.line, 0) + 1; i < oldOffsets.length; i++) { | ||
newLineOffsets.push(oldOffsets[i] + diff); | ||
if (diff !== 0) { | ||
for (var i = startLine + 1 + addedLineOffsets.length, len = lineOffsets.length; i < len; i++) { | ||
lineOffsets[i] = lineOffsets[i] + diff; | ||
} | ||
} | ||
this._lineOffsets = newLineOffsets; | ||
} | ||
@@ -223,18 +238,14 @@ else if (FullTextDocument.isFull(change)) { | ||
} | ||
function computeLineOffsets(text, isAtLineStart, textOffset, result) { | ||
function computeLineOffsets(text, isAtLineStart, textOffset) { | ||
if (textOffset === void 0) { textOffset = 0; } | ||
if (result === void 0) { result = []; } | ||
var result = isAtLineStart ? [textOffset] : []; | ||
for (var i = 0; i < text.length; i++) { | ||
if (isAtLineStart) { | ||
result.push(i + textOffset); | ||
var ch = text.charCodeAt(i); | ||
if (ch === 13 /* CarriageReturn */ || ch === 10 /* LineFeed */) { | ||
if (ch === 13 /* CarriageReturn */ && i + 1 < text.length && text.charCodeAt(i + 1) === 10 /* LineFeed */) { | ||
i++; | ||
} | ||
result.push(textOffset + i + 1); | ||
} | ||
var ch = text.charAt(i); | ||
isAtLineStart = ch === '\r' || ch === '\n'; | ||
if (ch === '\r' && i + 1 < text.length && text.charAt(i + 1) === '\n') { | ||
i++; | ||
} | ||
} | ||
if (isAtLineStart) { | ||
result.push(text.length + textOffset); | ||
} | ||
return result; | ||
@@ -241,0 +252,0 @@ } |
@@ -0,0 +0,0 @@ /** |
@@ -64,10 +64,25 @@ (function (factory) { | ||
// update the offsets | ||
var oldOffsets = this._lineOffsets; | ||
var newLineOffsets = oldOffsets.slice(0, Math.max(range.start.line, 0) + 1); | ||
computeLineOffsets(change.text, false, startOffset, newLineOffsets); | ||
var startLine = Math.max(range.start.line, 0); | ||
var endLine = Math.max(range.end.line, 0); | ||
var lineOffsets = this._lineOffsets; | ||
var addedLineOffsets = computeLineOffsets(change.text, false, startOffset); | ||
if (endLine - startLine === addedLineOffsets.length) { | ||
for (var i = 0, len = addedLineOffsets.length; i < len; i++) { | ||
lineOffsets[i + startLine + 1] = addedLineOffsets[i]; | ||
} | ||
} | ||
else { | ||
if (addedLineOffsets.length < 10000) { | ||
lineOffsets.splice.apply(lineOffsets, [startLine + 1, endLine - startLine].concat(addedLineOffsets)); | ||
} | ||
else { // avoid too many arguments for splice | ||
this._lineOffsets = lineOffsets = lineOffsets.slice(0, startLine + 1).concat(addedLineOffsets, lineOffsets.slice(endLine + 1)); | ||
} | ||
} | ||
var diff = change.text.length - (endOffset - startOffset); | ||
for (var i = Math.max(range.end.line, 0) + 1; i < oldOffsets.length; i++) { | ||
newLineOffsets.push(oldOffsets[i] + diff); | ||
if (diff !== 0) { | ||
for (var i = startLine + 1 + addedLineOffsets.length, len = lineOffsets.length; i < len; i++) { | ||
lineOffsets[i] = lineOffsets[i] + diff; | ||
} | ||
} | ||
this._lineOffsets = newLineOffsets; | ||
} | ||
@@ -233,18 +248,14 @@ else if (FullTextDocument.isFull(change)) { | ||
} | ||
function computeLineOffsets(text, isAtLineStart, textOffset, result) { | ||
function computeLineOffsets(text, isAtLineStart, textOffset) { | ||
if (textOffset === void 0) { textOffset = 0; } | ||
if (result === void 0) { result = []; } | ||
var result = isAtLineStart ? [textOffset] : []; | ||
for (var i = 0; i < text.length; i++) { | ||
if (isAtLineStart) { | ||
result.push(i + textOffset); | ||
var ch = text.charCodeAt(i); | ||
if (ch === 13 /* CarriageReturn */ || ch === 10 /* LineFeed */) { | ||
if (ch === 13 /* CarriageReturn */ && i + 1 < text.length && text.charCodeAt(i + 1) === 10 /* LineFeed */) { | ||
i++; | ||
} | ||
result.push(textOffset + i + 1); | ||
} | ||
var ch = text.charAt(i); | ||
isAtLineStart = ch === '\r' || ch === '\n'; | ||
if (ch === '\r' && i + 1 < text.length && text.charAt(i + 1) === '\n') { | ||
i++; | ||
} | ||
} | ||
if (isAtLineStart) { | ||
result.push(text.length + textOffset); | ||
} | ||
return result; | ||
@@ -251,0 +262,0 @@ } |
@@ -0,0 +0,0 @@ Copyright (c) Microsoft Corporation |
{ | ||
"name": "vscode-languageserver-textdocument", | ||
"description": "A simple text document implementation for Node LSP servers", | ||
"version": "1.0.0-next.4", | ||
"version": "1.0.0-next.5", | ||
"author": "Microsoft Corporation", | ||
@@ -6,0 +6,0 @@ "license": "MIT", |
@@ -0,0 +0,0 @@ # Text Document implementation for a LSP Node server |
@@ -0,0 +0,0 @@ { |
Sorry, the diff of this file is not supported yet
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
921
0
49972