mirror of
https://github.com/Microsoft/vscode
synced 2024-10-01 08:50:48 +00:00
perf - avoid IdleValue
for a feature that is not enabled by default (#159469)
This commit is contained in:
parent
c7378f71d1
commit
86d5fc5eba
|
@ -8,22 +8,31 @@ import { Codicon } from 'vs/base/common/codicons';
|
|||
import { language } from 'vs/base/common/platform';
|
||||
import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';
|
||||
import { registerIcon } from 'vs/platform/theme/common/iconRegistry';
|
||||
import { IdleValue } from 'vs/base/common/async';
|
||||
|
||||
export const LOCAL_HISTORY_DATE_FORMATTER: IdleValue<{ format: (timestamp: number) => string }> = new IdleValue(() => {
|
||||
const options: Intl.DateTimeFormatOptions = { year: 'numeric', month: 'long', day: 'numeric', hour: 'numeric', minute: 'numeric' };
|
||||
interface ILocalHistoryDateFormatter {
|
||||
format: (timestamp: number) => string;
|
||||
}
|
||||
|
||||
let formatter: Intl.DateTimeFormat;
|
||||
try {
|
||||
formatter = new Intl.DateTimeFormat(language, options);
|
||||
} catch (error) {
|
||||
formatter = new Intl.DateTimeFormat(undefined, options); // error can happen when language is invalid (https://github.com/microsoft/vscode/issues/147086)
|
||||
let localHistoryDateFormatter: ILocalHistoryDateFormatter | undefined = undefined;
|
||||
|
||||
export function getLocalHistoryDateFormatter(): ILocalHistoryDateFormatter {
|
||||
if (!localHistoryDateFormatter) {
|
||||
const options: Intl.DateTimeFormatOptions = { year: 'numeric', month: 'long', day: 'numeric', hour: 'numeric', minute: 'numeric' };
|
||||
|
||||
let formatter: Intl.DateTimeFormat;
|
||||
try {
|
||||
formatter = new Intl.DateTimeFormat(language, options);
|
||||
} catch (error) {
|
||||
formatter = new Intl.DateTimeFormat(undefined, options); // error can happen when language is invalid (https://github.com/microsoft/vscode/issues/147086)
|
||||
}
|
||||
|
||||
localHistoryDateFormatter = {
|
||||
format: date => formatter.format(date)
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
format: date => formatter.format(date)
|
||||
};
|
||||
});
|
||||
return localHistoryDateFormatter;
|
||||
}
|
||||
|
||||
export const LOCAL_HISTORY_MENU_CONTEXT_VALUE = 'localHistory:item';
|
||||
export const LOCAL_HISTORY_MENU_CONTEXT_KEY = ContextKeyExpr.equals('timelineItem', LOCAL_HISTORY_MENU_CONTEXT_VALUE);
|
||||
|
|
|
@ -30,7 +30,7 @@ import { IModelService } from 'vs/editor/common/services/model';
|
|||
import { ILanguageService } from 'vs/editor/common/languages/language';
|
||||
import { ILabelService } from 'vs/platform/label/common/label';
|
||||
import { firstOrDefault } from 'vs/base/common/arrays';
|
||||
import { LOCAL_HISTORY_DATE_FORMATTER, LOCAL_HISTORY_ICON_RESTORE, LOCAL_HISTORY_MENU_CONTEXT_KEY } from 'vs/workbench/contrib/localHistory/browser/localHistory';
|
||||
import { getLocalHistoryDateFormatter, LOCAL_HISTORY_ICON_RESTORE, LOCAL_HISTORY_MENU_CONTEXT_KEY } from 'vs/workbench/contrib/localHistory/browser/localHistory';
|
||||
import { IPathService } from 'vs/workbench/services/path/common/pathService';
|
||||
|
||||
const LOCAL_HISTORY_CATEGORY = { value: localize('localHistory.category', "Local History"), original: 'Local History' };
|
||||
|
@ -646,7 +646,7 @@ export async function findLocalHistoryEntry(workingCopyHistoryService: IWorkingC
|
|||
|
||||
const SEP = /\//g;
|
||||
function toLocalHistoryEntryDateLabel(timestamp: number): string {
|
||||
return `${LOCAL_HISTORY_DATE_FORMATTER.value.format(timestamp).replace(SEP, '-')}`; // preserving `/` will break editor labels, so replace it with a non-path symbol
|
||||
return `${getLocalHistoryDateFormatter().format(timestamp).replace(SEP, '-')}`; // preserving `/` will break editor labels, so replace it with a non-path symbol
|
||||
}
|
||||
|
||||
//#endregion
|
||||
|
|
|
@ -20,7 +20,7 @@ import { SaveSourceRegistry } from 'vs/workbench/common/editor';
|
|||
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
||||
import { COMPARE_WITH_FILE_LABEL, toDiffEditorArguments } from 'vs/workbench/contrib/localHistory/browser/localHistoryCommands';
|
||||
import { MarkdownString } from 'vs/base/common/htmlContent';
|
||||
import { LOCAL_HISTORY_DATE_FORMATTER, LOCAL_HISTORY_ICON_ENTRY, LOCAL_HISTORY_MENU_CONTEXT_VALUE } from 'vs/workbench/contrib/localHistory/browser/localHistory';
|
||||
import { getLocalHistoryDateFormatter, LOCAL_HISTORY_ICON_ENTRY, LOCAL_HISTORY_MENU_CONTEXT_VALUE } from 'vs/workbench/contrib/localHistory/browser/localHistory';
|
||||
import { Schemas } from 'vs/base/common/network';
|
||||
import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace';
|
||||
import { getVirtualWorkspaceAuthority } from 'vs/platform/workspace/common/virtualWorkspace';
|
||||
|
@ -151,7 +151,7 @@ export class LocalHistoryTimeline extends Disposable implements IWorkbenchContri
|
|||
return {
|
||||
handle: entry.id,
|
||||
label: SaveSourceRegistry.getSourceLabel(entry.source),
|
||||
tooltip: new MarkdownString(`$(history) ${LOCAL_HISTORY_DATE_FORMATTER.value.format(entry.timestamp)}\n\n${SaveSourceRegistry.getSourceLabel(entry.source)}`, { supportThemeIcons: true }),
|
||||
tooltip: new MarkdownString(`$(history) ${getLocalHistoryDateFormatter().format(entry.timestamp)}\n\n${SaveSourceRegistry.getSourceLabel(entry.source)}`, { supportThemeIcons: true }),
|
||||
source: LocalHistoryTimeline.ID,
|
||||
timestamp: entry.timestamp,
|
||||
themeIcon: LOCAL_HISTORY_ICON_ENTRY,
|
||||
|
|
Loading…
Reference in a new issue