提交 93cbbc5c 编写于 作者: J Johannes Rieken

es6 - less custom Iterator use

上级 8ea295e6
......@@ -5,7 +5,7 @@
import { URI } from 'vs/base/common/uri';
import { CharCode } from 'vs/base/common/charCode';
import { Iterator, IteratorResult, FIN } from './iterator';
import { FIN } from './iterator';
/**
* @deprecated ES6: use `[...SetOrMap.values()]`
......
......@@ -6,7 +6,6 @@
import { ResourceMap, TernarySearchTree, PathIterator, StringIterator, LinkedMap, Touch, LRUCache, mapToSerializable, serializableToMap } from 'vs/base/common/map';
import * as assert from 'assert';
import { URI } from 'vs/base/common/uri';
import { IteratorResult } from 'vs/base/common/iterator';
suite('Map', () => {
......
......@@ -5,7 +5,6 @@
import { mergeSort } from 'vs/base/common/arrays';
import { stringDiff } from 'vs/base/common/diff/diff';
import { FIN, Iterator, IteratorResult } from 'vs/base/common/iterator';
import { IDisposable } from 'vs/base/common/lifecycle';
import { globals } from 'vs/base/common/platform';
import { URI } from 'vs/base/common/uri';
......@@ -65,7 +64,7 @@ export interface ICommonModel extends ILinkComputerTarget, IMirrorModel {
getLineCount(): number;
getLineContent(lineNumber: number): string;
getLineWords(lineNumber: number, wordDefinition: RegExp): IWordAtPosition[];
createWordIterator(wordDefinition: RegExp): Iterator<string>;
words(wordDefinition: RegExp): Iterable<string>;
getWordUntilPosition(position: IPosition, wordDefinition: RegExp): IWordAtPosition;
getValueInRange(range: IRange): string;
getWordAtPosition(position: IPosition, wordDefinition: RegExp): Range | null;
......@@ -153,36 +152,37 @@ class MirrorModel extends BaseMirrorModel implements ICommonModel {
};
}
public createWordIterator(wordDefinition: RegExp): Iterator<string> {
let obj: { done: false; value: string; };
public words(wordDefinition: RegExp): Iterable<string> {
const lines = this._lines;
const wordenize = this._wordenize.bind(this);
let lineNumber = 0;
let lineText: string;
let lineText = '';
let wordRangesIdx = 0;
let wordRanges: IWordRange[] = [];
let next = (): IteratorResult<string> => {
if (wordRangesIdx < wordRanges.length) {
const value = lineText.substring(wordRanges[wordRangesIdx].start, wordRanges[wordRangesIdx].end);
wordRangesIdx += 1;
if (!obj) {
obj = { done: false, value: value };
} else {
obj.value = value;
}
return obj;
} else if (lineNumber >= this._lines.length) {
return FIN;
} else {
lineText = this._lines[lineNumber];
wordRanges = this._wordenize(lineText, wordDefinition);
wordRangesIdx = 0;
lineNumber += 1;
return next();
return {
*[Symbol.iterator]() {
while (true) {
if (wordRangesIdx < wordRanges.length) {
const value = lineText.substring(wordRanges[wordRangesIdx].start, wordRanges[wordRangesIdx].end);
wordRangesIdx += 1;
yield value;
} else {
if (lineNumber < lines.length) {
lineText = lines[lineNumber];
wordRanges = wordenize(lineText, wordDefinition);
wordRangesIdx = 0;
lineNumber += 1;
} else {
break;
}
}
}
}
};
return { next };
}
public getLineWords(lineNumber: number, wordDefinition: RegExp): IWordAtPosition[] {
......@@ -545,12 +545,7 @@ export class EditorSimpleWorker implements IRequestHandler, IDisposable {
seen.add(model.getValueInRange(wordAt));
}
for (
let iter = model.createWordIterator(wordDefRegExp), e = iter.next();
!e.done && seen.size <= EditorSimpleWorker._suggestionsLimit;
e = iter.next()
) {
const word = e.value;
for (let word of model.words(wordDefRegExp)) {
if (seen.has(word)) {
continue;
}
......@@ -559,6 +554,9 @@ export class EditorSimpleWorker implements IRequestHandler, IDisposable {
continue;
}
words.push(word);
if (seen.size > EditorSimpleWorker._suggestionsLimit) {
break;
}
}
return words;
}
......
......@@ -184,11 +184,7 @@ suite('EditorSimpleWorker', () => {
'and now we are done'
]);
let words: string[] = [];
for (let iter = model.createWordIterator(/[a-z]+/img), e = iter.next(); !e.done; e = iter.next()) {
words.push(e.value);
}
let words: string[] = [...model.words(/[a-z]+/img)];
assert.deepEqual(words, ['one', 'line', 'two', 'line', 'past', 'empty', 'single', 'and', 'now', 'we', 'are', 'done']);
});
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册