Skip to content

Conversation

Copilot
Copy link
Contributor

@Copilot Copilot AI commented Aug 6, 2025

This PR adds a new optional scope parameter to the getEnvironmentVariables function to allow callers to specify which types of environment variables they need. This addresses the issue where different use cases require different subsets of environment variables.

Changes

New EnvironmentVariableScope Enum

Added a new enum with three values:

  • Process = 1: Core environment variables required for Python process execution (e.g., PATH, PYTHONPATH, PYTHONHOME)
  • Terminal = 2: User-defined environment variables from .env files for terminal injection
  • All = Process | Terminal: Combines both scopes (default behavior for backward compatibility)

API Enhancement

Updated the getEnvironmentVariables function signature:

getEnvironmentVariables(
    uri: Uri,
    overrides?: ({ [key: string]: string | undefined } | Uri)[],
    baseEnvVar?: { [key: string]: string | undefined },
    scope?: EnvironmentVariableScope, // New optional parameter
): Promise<{ [key: string]: string | undefined }>

Implementation Logic

  • Process scope: Returns only the base environment variables (system environment)
  • Terminal scope: Includes base environment + variables from .env files
  • All scope: Same as Terminal scope (maintains current behavior)
  • Default: When no scope is specified, defaults to All for backward compatibility

Usage Updates

Updated terminalEnvVarInjector.ts to use Terminal scope for more targeted environment variable injection, ensuring only .env file variables are injected into terminals.

Use Cases

Terminal Injection

// Get only variables that should be injected into terminals
const envVars = await api.getEnvironmentVariables(
    workspaceUri,
    undefined,
    undefined,
    EnvironmentVariableScope.Terminal
);

Process Creation

// Get only core variables needed for Python subprocess execution
const envVars = await api.getEnvironmentVariables(
    projectUri,
    undefined,
    undefined,
    EnvironmentVariableScope.Process
);

Backward Compatibility

// Existing code continues to work unchanged
const envVars = await api.getEnvironmentVariables(workspaceUri);

Testing

Added comprehensive tests validating:

  • Enum values and bitwise operations
  • Scope-based filtering logic
  • Backward compatibility
  • All existing tests continue to pass (127/127)

Fixes #688.


💬 Share your feedback on Copilot coding agent for the chance to win a $200 gift card! Click here to start the survey.

@Copilot Copilot AI changed the title [WIP] bug with getEnvironmentVariables Add EnvironmentVariableScope parameter to getEnvironmentVariables for targeted variable retrieval Aug 6, 2025
@Copilot Copilot AI requested a review from eleanorjboyd August 6, 2025 02:49
Copilot finished work on behalf of eleanorjboyd August 6, 2025 02:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

bug with getEnvironmentVariables
2 participants