diff --git a/extensions/typescript-language-features/src/extension.ts b/extensions/typescript-language-features/src/extension.ts index ff80b4df01bc86ec9c194bb41b82636d9eebc99e..f3e8127bbcca8432462c58accfbee7fa0cbc4add 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 ef82784dce855ad1d8d394c8985f184a0236871a..ea2937caf2ddad5705b9c0fe7161eac6c11c5886 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 5bc505d0bf6b109d4f061acd61af90c203b3bdfc..4817ac6f447109da456adb903ea9b6f43cf84d7c 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 ff06c82b96c5ac890c1f7da0db5d727251f4662c..1f2b1704dcd22d8d4a1c7efd342c408de798355d 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 3e6c0a7bcf42f89a6f36affdb4fccba47a0fd5bf..98d7fe8b97bba174afcedc11841f7197bfd5b31c 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 0000000000000000000000000000000000000000..a4c9c3de2bdf16dd916f9758a5057152a1e844e4 --- /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 af6886e7043006a3b51fc57a3256b68425ac1a78..75ef2316309fb057fa8a7b23cbacaed9cfd2c3b9 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 default class LogDirectoryProvider { - public constructor( - private readonly context: vscode.ExtensionContext - ) { } +export interface ILogDirectoryProvider { + getNewLogDirectory(): string | undefined; +} - 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; - } - } -} +};