提交 6a991873 编写于 作者: A Alexandru Dima 提交者: GitHub

Merge pull request #29387 from dadlerj/dna/hover

Don't re-render hovers if nothing has changed; Add telemetry on hovers
......@@ -14,7 +14,7 @@ import { ICodeEditor } from 'vs/editor/browser/editorBrowser';
import { getHover } from '../common/hover';
import { HoverOperation, IHoverComputer } from './hoverOperation';
import { ContentHoverWidget } from './hoverWidgets';
import { IMarkdownString, MarkdownString, isEmptyMarkdownString } from 'vs/base/common/htmlContent';
import { IMarkdownString, MarkdownString, isEmptyMarkdownString, markedStringsEquals } from 'vs/base/common/htmlContent';
import { MarkdownRenderer } from 'vs/editor/contrib/markdown/browser/markdownRenderer';
import { ModelDecorationOptions } from 'vs/editor/common/model/textModelWithDecorations';
import { ColorPickerModel } from 'vs/editor/contrib/colorPicker/browser/colorPickerModel';
......@@ -243,6 +243,9 @@ export class ModesContentHoverWidget extends ContentHoverWidget {
}
}
if (filteredMessages.length > 0) {
if (hoverContentsEquals(filteredMessages, this._messages)) {
return;
}
this._renderMessages(range, filteredMessages);
} else {
this.hide();
......@@ -406,3 +409,23 @@ export class ModesContentHoverWidget extends ContentHoverWidget {
className: 'hoverHighlight'
});
}
function hoverContentsEquals(first: HoverPart[], second: HoverPart[]): boolean {
if ((!first && second) || (first && !second) || first.length !== second.length) {
return false;
}
for (let i = 0; i < first.length; i++) {
const firstElement = first[i];
const secondElement = second[i];
if (firstElement instanceof ColorHover) {
return false;
}
if (secondElement instanceof ColorHover) {
return false;
}
if (!markedStringsEquals(firstElement.contents, secondElement.contents)) {
return false;
}
}
return true;
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册