diff --git a/src/vs/base/node/ps.ts b/src/vs/base/node/ps.ts index 51667d47435..2c26adc76ee 100644 --- a/src/vs/base/node/ps.ts +++ b/src/vs/base/node/ps.ts @@ -126,9 +126,9 @@ export function listProcesses(rootPid: number): Promise { type Item = ProcessInfo | TopProcess; - const execMain = path.basename(process.execPath); - const script = URI.parse(require.toUrl('vs/base/node/ps-win.ps1')).fsPath; - const commandLine = `${script} -ProcessName '${execMain}' -MaxSamples 3`; + const execMain = path.basename(process.execPath).replace(/ /g, '` '); + const script = URI.parse(require.toUrl('vs/base/node/ps-win.ps1')).fsPath.replace(/ /g, '` '); + const commandLine = `${script} -ProcessName ${execMain} -MaxSamples 3`; const cmd = spawn('powershell.exe', ['-ExecutionPolicy', 'Bypass', '-Command', commandLine]); let stdout = ''; @@ -151,10 +151,14 @@ export function listProcesses(rootPid: number): Promise { for (const item of items) { if (item.type === 'processInfo') { let load = 0; - for (let value of item.cpuLoad) { - load += value; + if (item.cpuLoad) { + for (let value of item.cpuLoad) { + load += value; + } + load = load / item.cpuLoad.length; + } else { + load = -1; } - load = load / item.cpuLoad.length; processItems.set(item.processId, { name: findName(item.commandLine), cmd: item.commandLine, diff --git a/src/vs/code/electron-main/diagnostics.ts b/src/vs/code/electron-main/diagnostics.ts index 67d74f51595..ce7c148638b 100644 --- a/src/vs/code/electron-main/diagnostics.ts +++ b/src/vs/code/electron-main/diagnostics.ts @@ -41,12 +41,17 @@ export function printDiagnostics(info: IMainProcessInfo): Promise { window.folders.forEach(folder => { console.log(`| Folder (${basename(folder)})`); - const stats = collectWorkspaceStats(folder, ['node_modules', '.git']); - console.log(formatWorkspaceStats(stats)); - const launchConfigs = collectLaunchConfigs(folder); - if (launchConfigs.length > 0) { - console.log(formatLaunchConfigs(launchConfigs)); + try { + const stats = collectWorkspaceStats(folder, ['node_modules', '.git']); + console.log(formatWorkspaceStats(stats)); + + const launchConfigs = collectLaunchConfigs(folder); + if (launchConfigs.length > 0) { + console.log(formatLaunchConfigs(launchConfigs)); + } + } catch (error) { + console.log(`| Error: Unable to collect workpsace stats for this folder (${error.toString()})`); } }); }); diff --git a/src/vs/editor/common/model/textModelWithTokens.ts b/src/vs/editor/common/model/textModelWithTokens.ts index 4e1404c0fa5..af197a3ae1c 100644 --- a/src/vs/editor/common/model/textModelWithTokens.ts +++ b/src/vs/editor/common/model/textModelWithTokens.ts @@ -420,7 +420,7 @@ export class TextModelWithTokens extends TextModel implements editorCommon.IToke let position = this.validatePosition(_position); let lineContent = this.getLineContent(position.lineNumber); - if (this._invalidLineStartIndex <= position.lineNumber) { + if (this._invalidLineStartIndex <= position.lineNumber - 1) { // this line is not tokenized return getWordAtText( position.column, diff --git a/src/vs/platform/log/node/spdlogService.ts b/src/vs/platform/log/node/spdlogService.ts index 3ac203cb01a..61d670adc4c 100644 --- a/src/vs/platform/log/node/spdlogService.ts +++ b/src/vs/platform/log/node/spdlogService.ts @@ -17,6 +17,7 @@ export class SpdLogService implements ILogService { _serviceBrand: any; + private level: LogLevel = LogLevel.Error; private logger: RotatingLogger; private disposables: IDisposable[] = []; @@ -46,33 +47,44 @@ export class SpdLogService implements ILogService { } setLevel(logLevel: LogLevel): void { - this.logger.setLevel(logLevel); + this.level = logLevel; } - // TODO, what about ARGS? trace(message: string, ...args: any[]): void { - this.logger.trace(this.format(message, args)); + if (this.level <= LogLevel.Trace) { + this.logger.trace(this.format(message, args)); + } } debug(message: string, ...args: any[]): void { - this.logger.debug(this.format(message, args)); + if (this.level <= LogLevel.Debug) { + this.logger.debug(this.format(message, args)); + } } info(message: string, ...args: any[]): void { - this.logger.info(this.format(message, args)); + if (this.level <= LogLevel.Info) { + this.logger.info(this.format(message, args)); + } } warn(message: string, ...args: any[]): void { - this.logger.warn(this.format(message, args)); + if (this.level <= LogLevel.Warning) { + this.logger.warn(this.format(message, args)); + } } error(arg: string | Error, ...args: any[]): void { - const message = arg instanceof Error ? arg.stack : arg; - this.logger.error(this.format(message, args)); + if (this.level <= LogLevel.Error) { + const message = arg instanceof Error ? arg.stack : arg; + this.logger.error(this.format(message, args)); + } } critical(message: string, ...args: any[]): void { - this.logger.critical(this.format(message, args)); + if (this.level <= LogLevel.Critical) { + this.logger.critical(this.format(message, args)); + } } dispose(): void { diff --git a/src/vs/workbench/node/extensionHostMain.ts b/src/vs/workbench/node/extensionHostMain.ts index e4be4be2805..c6f8750a74c 100644 --- a/src/vs/workbench/node/extensionHostMain.ts +++ b/src/vs/workbench/node/extensionHostMain.ts @@ -95,7 +95,7 @@ export class ExtensionHostMain { registerGlobalLogService(logService); this.disposables.push(logService); - logService.info('main {0}', initData); + logService.info('main', initData); this._extHostConfiguration = new ExtHostConfiguration(threadService.get(MainContext.MainThreadConfiguration), extHostWorkspace, initData.configuration); this._extensionService = new ExtHostExtensionService(initData, threadService, extHostWorkspace, this._extHostConfiguration); diff --git a/src/vs/workbench/parts/debug/electron-browser/debugService.ts b/src/vs/workbench/parts/debug/electron-browser/debugService.ts index d746934799a..8d47356072c 100644 --- a/src/vs/workbench/parts/debug/electron-browser/debugService.ts +++ b/src/vs/workbench/parts/debug/electron-browser/debugService.ts @@ -1238,8 +1238,11 @@ export class DebugService implements debug.IDebugService { } private onFileChanges(fileChangesEvent: FileChangesEvent): void { - this.model.removeBreakpoints(this.model.getBreakpoints().filter(bp => - fileChangesEvent.contains(bp.uri, FileChangeType.DELETED))); + const toRemove = this.model.getBreakpoints().filter(bp => + fileChangesEvent.contains(bp.uri, FileChangeType.DELETED)); + if (toRemove.length) { + this.model.removeBreakpoints(toRemove); + } fileChangesEvent.getUpdated().forEach(event => { if (this.breakpointsToSendOnResourceSaved.has(event.resource.toString())) { diff --git a/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.ts b/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.ts index b149c32b512..b9fb56c5d8b 100644 --- a/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.ts +++ b/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.ts @@ -265,10 +265,11 @@ export class OpenEditorsView extends ViewsViewletPanel { } private onListContextMenu(e: IListContextMenuEvent): void { + const element = e.element; this.contextMenuService.showContextMenu({ getAnchor: () => e.anchor, - getActions: () => this.actionProvider.getSecondaryActions(e.element), - getActionsContext: () => e.element + getActions: () => this.actionProvider.getSecondaryActions(element), + getActionsContext: () => element instanceof OpenEditor ? { group: element.editorGroup, editor: element.editorInput } : { group: element } }); } diff --git a/src/vs/workbench/parts/performance/electron-browser/extHostProfiler.ts b/src/vs/workbench/parts/performance/electron-browser/extHostProfiler.ts index 50c02c26466..9b989435a25 100644 --- a/src/vs/workbench/parts/performance/electron-browser/extHostProfiler.ts +++ b/src/vs/workbench/parts/performance/electron-browser/extHostProfiler.ts @@ -95,4 +95,10 @@ interface Node { -MenuRegistry.appendMenuItem(MenuId.CommandPalette, { command: { id: 'exthost.profile.start', title: localize('profileExtensionHost', "Profile Extension Host for 5 seconds") } }); +MenuRegistry.appendMenuItem(MenuId.CommandPalette, { + command: { + id: 'exthost.profile.start', + title: localize('profileExtensionHost', "Profile Extension Host for 5 seconds"), + category: localize('cat', "Developer") + } +});