mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-24 10:38:59 +01:00
Use trace logger for ATA file systems (#224892)
Makes enabling logging easier and more consistent
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}));
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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));
|
||||
|
||||
Reference in New Issue
Block a user