@@ -12,7 +12,7 @@ const carriageReturn = 13;
12
12
class TextDocument {
13
13
final Uri _uri;
14
14
final String _languageId;
15
- final int _version;
15
+ int _version;
16
16
String _content;
17
17
List <int >? _lineOffsets;
18
18
@@ -123,21 +123,23 @@ class TextDocument {
123
123
124
124
/// Updates this text document by modifying its content.
125
125
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;
131
133
132
134
var startOffset = offsetAt (range.start);
133
135
var endOffset = offsetAt (range.end);
134
136
135
- // update content
137
+ // Update content.
136
138
_content = _content.substring (0 , startOffset) +
137
139
text +
138
140
_content.substring (endOffset, _content.length);
139
141
140
- // update offsets without recomputing for the whole document
142
+ // Update offsets without recomputing for the whole document.
141
143
var startLine = max (range.start.line, 0 );
142
144
var endLine = max (range.end.line, 0 );
143
145
var lineOffsets = _lineOffsets! ;
@@ -162,21 +164,14 @@ class TextDocument {
162
164
lineOffsets[i] = lineOffsets[i] + diff;
163
165
}
164
166
}
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;
167
170
_lineOffsets = null ;
168
171
}
169
172
}
170
173
}
171
174
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
-
180
175
List <int > _getLineOffsets () {
181
176
_lineOffsets ?? = _computeLineOffsets (_content, isAtLineStart: true );
182
177
return _lineOffsets! ;
0 commit comments