Use trace logger for ATA file systems (#224892)

Makes enabling logging easier and more consistent
This commit is contained in:
Matt Bierner
2024-08-05 15:59:10 -07:00
committed by GitHub
parent 2be886b38a
commit 4a532e3376
4 changed files with 34 additions and 21 deletions

View File

@@ -101,7 +101,7 @@ export async function activate(context: vscode.ExtensionContext): Promise<Api> {
await startPreloadWorkspaceContentsIfNeeded(context, logger);
}));
context.subscriptions.push(registerAtaSupport());
context.subscriptions.push(registerAtaSupport(logger));
return getExtensionApi(onCompletionAccepted.event, pluginManager);
}

View File

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

View File

@@ -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</* root */ string, {
readonly throttler: Throttler;
@@ -25,10 +26,13 @@ export class AutoInstallerFs extends Disposable implements vscode.FileSystemProv
private readonly _emitter = this._register(new vscode.EventEmitter<vscode.FileChangeEvent[]>());
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<vscode.FileStat> {
// 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<Uint8Array> {
// 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 {

View File

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