diff --git a/extensions/typescript-language-features/src/extension.browser.ts b/extensions/typescript-language-features/src/extension.browser.ts index 3e987161325..9ad0867efc9 100644 --- a/extensions/typescript-language-features/src/extension.browser.ts +++ b/extensions/typescript-language-features/src/extension.browser.ts @@ -101,7 +101,7 @@ export async function activate(context: vscode.ExtensionContext): Promise { await startPreloadWorkspaceContentsIfNeeded(context, logger); })); - context.subscriptions.push(registerAtaSupport()); + context.subscriptions.push(registerAtaSupport(logger)); return getExtensionApi(onCompletionAccepted.event, pluginManager); } diff --git a/extensions/typescript-language-features/src/filesystems/ata.ts b/extensions/typescript-language-features/src/filesystems/ata.ts index 953ca07cd8e..b5e43244e1b 100644 --- a/extensions/typescript-language-features/src/filesystems/ata.ts +++ b/extensions/typescript-language-features/src/filesystems/ata.ts @@ -8,8 +8,9 @@ import { conditionalRegistration, requireGlobalConfiguration } from '../language import { supportsReadableByteStreams } from '../utils/platform'; import { AutoInstallerFs } from './autoInstallerFs'; import { MemFs } from './memFs'; +import { Logger } from '../logging/logger'; -export function registerAtaSupport(): vscode.Disposable { +export function registerAtaSupport(logger: Logger): vscode.Disposable { if (!supportsReadableByteStreams()) { return vscode.Disposable.from(); } @@ -19,13 +20,13 @@ export function registerAtaSupport(): vscode.Disposable { ], () => { return vscode.Disposable.from( // Ata - vscode.workspace.registerFileSystemProvider('vscode-global-typings', new MemFs(), { + vscode.workspace.registerFileSystemProvider('vscode-global-typings', new MemFs('global-typings', logger), { isCaseSensitive: true, isReadonly: false, }), // Read accesses to node_modules - vscode.workspace.registerFileSystemProvider('vscode-node-modules', new AutoInstallerFs(), { + vscode.workspace.registerFileSystemProvider('vscode-node-modules', new AutoInstallerFs(logger), { isCaseSensitive: true, isReadonly: false })); diff --git a/extensions/typescript-language-features/src/filesystems/autoInstallerFs.ts b/extensions/typescript-language-features/src/filesystems/autoInstallerFs.ts index 29d53e52ec0..c26476a983d 100644 --- a/extensions/typescript-language-features/src/filesystems/autoInstallerFs.ts +++ b/extensions/typescript-language-features/src/filesystems/autoInstallerFs.ts @@ -10,13 +10,14 @@ import { URI } from 'vscode-uri'; import { Throttler } from '../utils/async'; import { Disposable } from '../utils/dispose'; import { MemFs } from './memFs'; +import { Logger } from '../logging/logger'; const TEXT_DECODER = new TextDecoder('utf-8'); const TEXT_ENCODER = new TextEncoder(); export class AutoInstallerFs extends Disposable implements vscode.FileSystemProvider { - private readonly memfs = new MemFs(); + private readonly memfs: MemFs; private readonly packageManager: PackageManager; private readonly _projectCache = new Map()); readonly onDidChangeFile = this._emitter.event; - constructor() { + constructor( + private readonly logger: Logger + ) { super(); - const memfs = this.memfs; + const memfs = new MemFs('auto-installer', logger); + this.memfs = memfs; memfs.onDidChangeFile((e) => { this._emitter.fire(e.map(ev => ({ type: ev.type, @@ -75,12 +79,13 @@ export class AutoInstallerFs extends Disposable implements vscode.FileSystemProv watch(resource: vscode.Uri): vscode.Disposable { const mapped = URI.file(new MappedUri(resource).path); - console.log('watching', mapped); + this.logger.trace(`AutoInstallerFs.watch. Original: ${resource.toString()}, Mapped: ${mapped.toString()}`); return this.memfs.watch(mapped); } async stat(uri: vscode.Uri): Promise { - // console.log('stat', uri.toString()); + this.logger.trace(`AutoInstallerFs.stat: ${uri}`); + const mapped = new MappedUri(uri); // TODO: case sensitivity configuration @@ -102,7 +107,8 @@ export class AutoInstallerFs extends Disposable implements vscode.FileSystemProv } async readDirectory(uri: vscode.Uri): Promise<[string, vscode.FileType][]> { - // console.log('readDirectory', uri.toString()); + this.logger.trace(`AutoInstallerFs.readDirectory: ${uri}`); + const mapped = new MappedUri(uri); await this.ensurePackageContents(mapped); @@ -110,7 +116,8 @@ export class AutoInstallerFs extends Disposable implements vscode.FileSystemProv } async readFile(uri: vscode.Uri): Promise { - // console.log('readFile', uri.toString()); + this.logger.trace(`AutoInstallerFs.readFile: ${uri}`); + const mapped = new MappedUri(uri); await this.ensurePackageContents(mapped); @@ -148,7 +155,8 @@ export class AutoInstallerFs extends Disposable implements vscode.FileSystemProv if (!root) { return; } - console.log('ensurePackageContents', incomingUri.path, root); + + this.logger.trace(`AutoInstallerFs.ensurePackageContents. Path: ${incomingUri.path}, Root: ${root}`); let projectEntry = this._projectCache.get(root); if (!projectEntry) { @@ -195,9 +203,6 @@ export class AutoInstallerFs extends Disposable implements vscode.FileSystemProv const pkgPath = path.match(/(^.*)\/node_modules/); return pkgPath?.[1]; } - - // --- manage file events - } class MappedUri { diff --git a/extensions/typescript-language-features/src/filesystems/memFs.ts b/extensions/typescript-language-features/src/filesystems/memFs.ts index eeeb60e957d..05c4e7c3db7 100644 --- a/extensions/typescript-language-features/src/filesystems/memFs.ts +++ b/extensions/typescript-language-features/src/filesystems/memFs.ts @@ -3,8 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as vscode from 'vscode'; import { basename, dirname } from 'path'; +import * as vscode from 'vscode'; +import { Logger } from '../logging/logger'; export class MemFs implements vscode.FileSystemProvider { @@ -14,8 +15,13 @@ export class MemFs implements vscode.FileSystemProvider { 0, ); + constructor( + private readonly id: string, + private readonly logger: Logger, + ) { } + stat(uri: vscode.Uri): vscode.FileStat { - // console.log('stat', uri.toString()); + this.logger.trace(`MemFs.stat ${this.id}. uri: ${uri}`); const entry = this.getEntry(uri); if (!entry) { throw vscode.FileSystemError.FileNotFound(); @@ -25,7 +31,7 @@ export class MemFs implements vscode.FileSystemProvider { } readDirectory(uri: vscode.Uri): [string, vscode.FileType][] { - // console.log('readDirectory', uri.toString()); + this.logger.trace(`MemFs.readDirectory ${this.id}. uri: ${uri}`); const entry = this.getEntry(uri); if (!entry) { @@ -39,7 +45,7 @@ export class MemFs implements vscode.FileSystemProvider { } readFile(uri: vscode.Uri): Uint8Array { - // console.log('readFile', uri.toString()); + this.logger.trace(`MemFs.readFile ${this.id}. uri: ${uri}`); const entry = this.getEntry(uri); if (!entry) { @@ -54,7 +60,7 @@ export class MemFs implements vscode.FileSystemProvider { } writeFile(uri: vscode.Uri, content: Uint8Array, { create, overwrite }: { create: boolean; overwrite: boolean }): void { - // console.log('writeFile', uri.toString()); + this.logger.trace(`MemFs.writeFile ${this.id}. uri: ${uri}`); const dir = this.getParent(uri); @@ -98,7 +104,8 @@ export class MemFs implements vscode.FileSystemProvider { } createDirectory(uri: vscode.Uri): void { - // console.log('createDirectory', uri.toString()); + this.logger.trace(`MemFs.createDirectory ${this.id}. uri: ${uri}`); + const dir = this.getParent(uri); const now = Date.now() / 1000; dir.contents.set(basename(uri.path), new FsDirectoryEntry(new Map(), now, now));