Skip to content

Commit 136481b

Browse files
committed
Fix sync
1 parent 677d05a commit 136481b

File tree

1 file changed

+13
-18
lines changed

1 file changed

+13
-18
lines changed

pkgs/sass_language_services/lib/src/lsp/text_document.dart

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ const carriageReturn = 13;
1212
class TextDocument {
1313
final Uri _uri;
1414
final String _languageId;
15-
final int _version;
15+
int _version;
1616
String _content;
1717
List<int>? _lineOffsets;
1818

@@ -123,21 +123,23 @@ class TextDocument {
123123

124124
/// Updates this text document by modifying its content.
125125
void update(List<TextDocumentContentChangeEvent> changes, int version) {
126-
for (var change in changes) {
127-
if (TextDocument._isIncremental(change)) {
128-
var range = _getWellformedRange(
129-
(change as TextDocumentContentChangeEvent1).range);
130-
var text = (change as TextDocumentContentChangeEvent1).text;
126+
_version = version;
127+
for (var c in changes) {
128+
var change = c.map((v) => v, (v) => v);
129+
if (change is TextDocumentContentChangeEvent1) {
130+
// Incremental sync.
131+
var range = _getWellformedRange(change.range);
132+
var text = change.text;
131133

132134
var startOffset = offsetAt(range.start);
133135
var endOffset = offsetAt(range.end);
134136

135-
// update content
137+
// Update content.
136138
_content = _content.substring(0, startOffset) +
137139
text +
138140
_content.substring(endOffset, _content.length);
139141

140-
// update offsets without recomputing for the whole document
142+
// Update offsets without recomputing for the whole document.
141143
var startLine = max(range.start.line, 0);
142144
var endLine = max(range.end.line, 0);
143145
var lineOffsets = _lineOffsets!;
@@ -162,21 +164,14 @@ class TextDocument {
162164
lineOffsets[i] = lineOffsets[i] + diff;
163165
}
164166
}
165-
} else if (TextDocument._isFull(change)) {
166-
_content = (change as TextDocumentContentChangeEvent2).text;
167+
} else if (change is TextDocumentContentChangeEvent2) {
168+
// Full sync.
169+
_content = change.text;
167170
_lineOffsets = null;
168171
}
169172
}
170173
}
171174

172-
static bool _isIncremental(TextDocumentContentChangeEvent event) {
173-
return event is TextDocumentContentChangeEvent1;
174-
}
175-
176-
static bool _isFull(TextDocumentContentChangeEvent event) {
177-
return event is TextDocumentContentChangeEvent2;
178-
}
179-
180175
List<int> _getLineOffsets() {
181176
_lineOffsets ??= _computeLineOffsets(_content, isAtLineStart: true);
182177
return _lineOffsets!;

0 commit comments

Comments
 (0)