diff --git a/src/client/common/process/internal/scripts/index.ts b/src/client/common/process/internal/scripts/index.ts index d3f28097a5dc..33eaa4686e8f 100644 --- a/src/client/common/process/internal/scripts/index.ts +++ b/src/client/common/process/internal/scripts/index.ts @@ -43,18 +43,16 @@ export type InterpreterInfoJson = { export const OUTPUT_MARKER_SCRIPT = path.join(_SCRIPTS_DIR, 'get_output_via_markers.py'); -export function interpreterInfo(): [string[], (out: string) => InterpreterInfoJson | undefined] { +export function interpreterInfo(): [string[], (out: string) => InterpreterInfoJson] { const script = path.join(SCRIPTS_DIR, 'interpreterInfo.py'); const args = [script]; - function parse(out: string): InterpreterInfoJson | undefined { - let json: InterpreterInfoJson | undefined; + function parse(out: string): InterpreterInfoJson { try { - json = JSON.parse(out); + return JSON.parse(out); } catch (ex) { throw Error(`python ${args} returned bad JSON (${out}) (${ex})`); } - return json; } return [args, parse]; diff --git a/src/client/proposedApi.ts b/src/client/proposedApi.ts index 4a5a28a46e00..dc865e36279d 100644 --- a/src/client/proposedApi.ts +++ b/src/client/proposedApi.ts @@ -124,7 +124,7 @@ export function buildProposedApi( const disposables = serviceContainer.get(IDisposableRegistry); const extensions = serviceContainer.get(IExtensions); const envVarsProvider = serviceContainer.get(IEnvironmentVariablesProvider); - function sendApiTelemetry(apiName: string) { + function sendApiTelemetry(apiName: string, args?: unknown) { extensions .determineExtensionFromCallStack() .then((info) => { @@ -132,7 +132,7 @@ export function buildProposedApi( apiName, extensionId: info.extensionId, }); - traceVerbose(`Extension ${info.extensionId} accessed ${apiName}`); + traceVerbose(`Extension ${info.extensionId} accessed ${apiName} with args: ${JSON.stringify(args)}`); }) .ignoreErrors(); } @@ -247,7 +247,7 @@ export function buildProposedApi( } path = fullyQualifiedPath; } - sendApiTelemetry('resolveEnvironment'); + sendApiTelemetry('resolveEnvironment', env); return resolveEnvironment(path, discoveryApi); }, get known(): Environment[] { diff --git a/src/client/pythonEnvironments/base/info/interpreter.ts b/src/client/pythonEnvironments/base/info/interpreter.ts index 94c686370174..f696bd40d173 100644 --- a/src/client/pythonEnvironments/base/info/interpreter.ts +++ b/src/client/pythonEnvironments/base/info/interpreter.ts @@ -89,13 +89,16 @@ export async function getInterpreterInfo( const result = await shellExecute(quoted, { timeout: timeout ?? 15000 }); if (result.stderr) { traceError( - `Stderr when executing script with ${argv} stderr: ${result.stderr}, still attempting to parse output`, + `Stderr when executing script with >> ${quoted} << stderr: ${result.stderr}, still attempting to parse output`, ); } - const json = parse(result.stdout); - if (!json) { + let json: InterpreterInfoJson; + try { + json = parse(result.stdout); + } catch (ex) { + traceError(`Failed to parse interpreter information for >> ${quoted} << with ${ex}`); return undefined; } - traceInfo(`Found interpreter for ${argv}`); + traceInfo(`Found interpreter for >> ${quoted} <<: ${JSON.stringify(json)}`); return extractInterpreterInfo(python.pythonExecutable, json); } diff --git a/src/client/pythonEnvironments/base/locators/composite/envsCollectionCache.ts b/src/client/pythonEnvironments/base/locators/composite/envsCollectionCache.ts index b40f63fe9d27..76c451785003 100644 --- a/src/client/pythonEnvironments/base/locators/composite/envsCollectionCache.ts +++ b/src/client/pythonEnvironments/base/locators/composite/envsCollectionCache.ts @@ -211,7 +211,7 @@ export class PythonEnvInfoCache extends PythonEnvsWatcher