From 3b9db3df276c892fdd6f00df7b55f811a053ee25 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Mon, 20 Jul 2020 01:12:40 -0700 Subject: [PATCH] Extract NodeLogDirectoryProvider to electron specific file --- .../src/extension.ts | 4 +- .../src/lazyClientHost.ts | 4 +- .../src/tsServer/spawner.ts | 4 +- .../src/typeScriptServiceClientHost.ts | 4 +- .../src/typescriptServiceClient.ts | 4 +- .../utils/logDirectoryProvider.electron.ts | 41 +++++++++++++++++++ .../src/utils/logDirectoryProvider.ts | 38 +++-------------- 7 files changed, 57 insertions(+), 42 deletions(-) create mode 100644 extensions/typescript-language-features/src/utils/logDirectoryProvider.electron.ts diff --git a/extensions/typescript-language-features/src/extension.ts b/extensions/typescript-language-features/src/extension.ts index ff80b4df01b..f3e8127bbcc 100644 --- a/extensions/typescript-language-features/src/extension.ts +++ b/extensions/typescript-language-features/src/extension.ts @@ -5,6 +5,7 @@ import * as rimraf from 'rimraf'; import * as vscode from 'vscode'; +import { NodeLogDirectoryProvider } from './utils/logDirectoryProvider.electron'; import { Api, getExtensionApi } from './api'; import { registerCommands } from './commands/index'; import { LanguageConfigurationManager } from './features/languageConfiguration'; @@ -12,7 +13,6 @@ import * as task from './features/task'; import { createLazyClientHost, lazilyActivateClient } from './lazyClientHost'; import { CommandManager } from './utils/commandManager'; import * as electron from './utils/electron'; -import LogDirectoryProvider from './utils/logDirectoryProvider'; import { PluginManager } from './utils/plugins'; export function activate( @@ -27,7 +27,7 @@ export function activate( const onCompletionAccepted = new vscode.EventEmitter(); context.subscriptions.push(onCompletionAccepted); - const logDirectoryProvider = new LogDirectoryProvider(context); + const logDirectoryProvider = new NodeLogDirectoryProvider(context); const lazyClientHost = createLazyClientHost(context, pluginManager, commandManager, logDirectoryProvider, item => { onCompletionAccepted.fire(item); diff --git a/extensions/typescript-language-features/src/lazyClientHost.ts b/extensions/typescript-language-features/src/lazyClientHost.ts index ef82784dce8..ea2937caf2d 100644 --- a/extensions/typescript-language-features/src/lazyClientHost.ts +++ b/extensions/typescript-language-features/src/lazyClientHost.ts @@ -11,7 +11,7 @@ import * as fileSchemes from './utils/fileSchemes'; import { standardLanguageDescriptions } from './utils/languageDescription'; import * as ProjectStatus from './utils/largeProjectStatus'; import { lazy, Lazy } from './utils/lazy'; -import LogDirectoryProvider from './utils/logDirectoryProvider'; +import { ILogDirectoryProvider } from './utils/logDirectoryProvider'; import ManagedFileContextManager from './utils/managedFileContext'; import { PluginManager } from './utils/plugins'; @@ -19,7 +19,7 @@ export function createLazyClientHost( context: vscode.ExtensionContext, pluginManager: PluginManager, commandManager: CommandManager, - logDirectoryProvider: LogDirectoryProvider, + logDirectoryProvider: ILogDirectoryProvider, onCompletionAccepted: (item: vscode.CompletionItem) => void, ): Lazy { return lazy(() => { diff --git a/extensions/typescript-language-features/src/tsServer/spawner.ts b/extensions/typescript-language-features/src/tsServer/spawner.ts index 5bc505d0bf6..4817ac6f447 100644 --- a/extensions/typescript-language-features/src/tsServer/spawner.ts +++ b/extensions/typescript-language-features/src/tsServer/spawner.ts @@ -9,7 +9,7 @@ import { ClientCapabilities, ClientCapability } from '../typescriptService'; import API from '../utils/api'; import { SeparateSyntaxServerConfiguration, TsServerLogLevel, TypeScriptServiceConfiguration } from '../utils/configuration'; import * as electron from '../utils/electron'; -import LogDirectoryProvider from '../utils/logDirectoryProvider'; +import { ILogDirectoryProvider } from '../utils/logDirectoryProvider'; import Logger from '../utils/logger'; import { TypeScriptPluginPathsProvider } from '../utils/pluginPathsProvider'; import { PluginManager } from '../utils/plugins'; @@ -43,7 +43,7 @@ const enum CompositeServerType { export class TypeScriptServerSpawner { public constructor( private readonly _versionProvider: TypeScriptVersionProvider, - private readonly _logDirectoryProvider: LogDirectoryProvider, + private readonly _logDirectoryProvider: ILogDirectoryProvider, private readonly _pluginPathsProvider: TypeScriptPluginPathsProvider, private readonly _logger: Logger, private readonly _telemetryReporter: TelemetryReporter, diff --git a/extensions/typescript-language-features/src/typeScriptServiceClientHost.ts b/extensions/typescript-language-features/src/typeScriptServiceClientHost.ts index ff06c82b96c..1f2b1704dcd 100644 --- a/extensions/typescript-language-features/src/typeScriptServiceClientHost.ts +++ b/extensions/typescript-language-features/src/typeScriptServiceClientHost.ts @@ -9,6 +9,7 @@ * ------------------------------------------------------------------------------------------ */ import * as vscode from 'vscode'; +import { ILogDirectoryProvider } from './utils/logDirectoryProvider'; import { DiagnosticKind } from './features/diagnostics'; import FileConfigurationManager from './features/fileConfigurationManager'; import LanguageProvider from './languageProvider'; @@ -20,7 +21,6 @@ import { CommandManager } from './utils/commandManager'; import { Disposable } from './utils/dispose'; import * as errorCodes from './utils/errorCodes'; import { DiagnosticLanguage, LanguageDescription } from './utils/languageDescription'; -import LogDirectoryProvider from './utils/logDirectoryProvider'; import { PluginManager } from './utils/plugins'; import * as typeConverters from './utils/typeConverters'; import TypingsStatus, { AtaProgressReporter } from './utils/typingsStatus'; @@ -60,7 +60,7 @@ export default class TypeScriptServiceClientHost extends Disposable { workspaceState: vscode.Memento, pluginManager: PluginManager, private readonly commandManager: CommandManager, - logDirectoryProvider: LogDirectoryProvider, + logDirectoryProvider: ILogDirectoryProvider, onCompletionAccepted: (item: vscode.CompletionItem) => void, ) { super(); diff --git a/extensions/typescript-language-features/src/typescriptServiceClient.ts b/extensions/typescript-language-features/src/typescriptServiceClient.ts index 3e6c0a7bcf4..98d7fe8b97b 100644 --- a/extensions/typescript-language-features/src/typescriptServiceClient.ts +++ b/extensions/typescript-language-features/src/typescriptServiceClient.ts @@ -20,7 +20,7 @@ import API from './utils/api'; import { TsServerLogLevel, TypeScriptServiceConfiguration } from './utils/configuration'; import { Disposable } from './utils/dispose'; import * as fileSchemes from './utils/fileSchemes'; -import LogDirectoryProvider from './utils/logDirectoryProvider'; +import { ILogDirectoryProvider } from './utils/logDirectoryProvider'; import Logger from './utils/logger'; import { TypeScriptPluginPathsProvider } from './utils/pluginPathsProvider'; import { PluginManager } from './utils/plugins'; @@ -124,7 +124,7 @@ export default class TypeScriptServiceClient extends Disposable implements IType constructor( private readonly workspaceState: vscode.Memento, public readonly pluginManager: PluginManager, - private readonly logDirectoryProvider: LogDirectoryProvider, + private readonly logDirectoryProvider: ILogDirectoryProvider, allModeIds: readonly string[] ) { super(); diff --git a/extensions/typescript-language-features/src/utils/logDirectoryProvider.electron.ts b/extensions/typescript-language-features/src/utils/logDirectoryProvider.electron.ts new file mode 100644 index 00000000000..a4c9c3de2bd --- /dev/null +++ b/extensions/typescript-language-features/src/utils/logDirectoryProvider.electron.ts @@ -0,0 +1,41 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as fs from 'fs'; +import * as path from 'path'; +import * as vscode from 'vscode'; +import { ILogDirectoryProvider } from './logDirectoryProvider'; +import { memoize } from './memoize'; + +export class NodeLogDirectoryProvider implements ILogDirectoryProvider { + public constructor( + private readonly context: vscode.ExtensionContext + ) { } + + public getNewLogDirectory(): string | undefined { + const root = this.logDirectory(); + if (root) { + try { + return fs.mkdtempSync(path.join(root, `tsserver-log-`)); + } catch (e) { + return undefined; + } + } + return undefined; + } + + @memoize + private logDirectory(): string | undefined { + try { + const path = this.context.logPath; + if (!fs.existsSync(path)) { + fs.mkdirSync(path); + } + return this.context.logPath; + } catch { + return undefined; + } + } +} diff --git a/extensions/typescript-language-features/src/utils/logDirectoryProvider.ts b/extensions/typescript-language-features/src/utils/logDirectoryProvider.ts index af6886e7043..75ef2316309 100644 --- a/extensions/typescript-language-features/src/utils/logDirectoryProvider.ts +++ b/extensions/typescript-language-features/src/utils/logDirectoryProvider.ts @@ -3,38 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as fs from 'fs'; -import * as path from 'path'; -import * as vscode from 'vscode'; -import { memoize } from './memoize'; +export interface ILogDirectoryProvider { + getNewLogDirectory(): string | undefined; +} -export default class LogDirectoryProvider { - public constructor( - private readonly context: vscode.ExtensionContext - ) { } - - public getNewLogDirectory(): string | undefined { - const root = this.logDirectory(); - if (root) { - try { - return fs.mkdtempSync(path.join(root, `tsserver-log-`)); - } catch (e) { - return undefined; - } - } +export const noopLogDirectoryProvider = new class implements ILogDirectoryProvider { + public getNewLogDirectory(): undefined { return undefined; } - - @memoize - private logDirectory(): string | undefined { - try { - const path = this.context.logPath; - if (!fs.existsSync(path)) { - fs.mkdirSync(path); - } - return this.context.logPath; - } catch { - return undefined; - } - } -} +};