Extract NodeLogDirectoryProvider to electron specific file

This commit is contained in:
Matt Bierner 2020-07-20 01:12:40 -07:00
parent 00bd63c32c
commit 3b9db3df27
7 changed files with 57 additions and 42 deletions

View file

@ -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<vscode.CompletionItem>();
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);

View file

@ -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<TypeScriptServiceClientHost> {
return lazy(() => {

View file

@ -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,

View file

@ -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();

View file

@ -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();

View file

@ -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;
}
}
}

View file

@ -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;
}
}
}
};