src/vs/workbench/contrib/comments/browser/commentsEditorContribution.ts/CommentingRangeDecorator/_doUpdate
class CommentingRangeDecorator:	private _doUpdate(editor: ICodeEditor, commentInfos: ICommentInfo[], hoverLine: number = -1) {
		let model = editor.getModel();
		if (!model) {
			return;
		}

		let commentingRangeDecorations: CommentingRangeDecoration[] = [];
		for (const info of commentInfos) {
			info.commentingRanges.ranges.forEach(range => {
				if ((range.startLineNumber <= hoverLine) && (range.endLineNumber >= hoverLine)) {
					const beforeRange = new Range(range.startLineNumber, 1, hoverLine, 1);
					const hoverRange = new Range(hoverLine, 1, hoverLine, 1);
					const afterRange = new Range(hoverLine, 1, range.endLineNumber, 1);
					commentingRangeDecorations.push(new CommentingRangeDecoration(editor, info.owner, info.extensionId, info.label, beforeRange, this.decorationOptions, info.commentingRanges, true));
					commentingRangeDecorations.push(new CommentingRangeDecoration(editor, info.owner, info.extensionId, info.label, hoverRange, this.hoverDecorationOptions, info.commentingRanges, true));
					commentingRangeDecorations.push(new CommentingRangeDecoration(editor, info.owner, info.extensionId, info.label, afterRange, this.decorationOptions, info.commentingRanges, true));
				} else {
					commentingRangeDecorations.push(new CommentingRangeDecoration(editor, info.owner, info.extensionId, info.label, range, this.decorationOptions, info.commentingRanges));
				}
			});
		}

		this.decorationIds = editor.deltaDecorations(this.decorationIds, commentingRangeDecorations);
		commentingRangeDecorations.forEach((decoration, index) => decoration.id = this.decorationIds[index]);

		const rangesDifference = this.commentingRangeDecorations.length - commentingRangeDecorations.length;
		this.commentingRangeDecorations = commentingRangeDecorations;
		if (rangesDifference) {
			this._onDidChangeDecorationsCount.fire(this.commentingRangeDecorations.length);
		}
	}