Skip to content

Shopify/ruby-environments

Repository files navigation

Ruby environments

This extension provides Ruby environment management for VS Code, providing ways for detecting the Ruby interpreter in the user's machine with integrations to version managers. It is intended to be used as a dependency of other extensions that need to activate the Ruby environment in order to launch Ruby executables, such as the Ruby LSP and Ruby debug.

Features

  • Automatic Ruby detection: Discovers the Ruby interpreter installed on your machine
  • Version manager integrations: Supports popular version managers including:
  • Environment activation: Composes the correct environment variables (PATH, GEM_HOME, GEM_PATH, etc.) to match your shell configuration
  • JIT detection: Identifies available JIT compilers (YJIT, ZJIT) for the activated Ruby version
  • Shell support: Works with various shells including bash, zsh, fish, and PowerShell
  • Extension API: Provides a programmatic API for other extensions to access the activated Ruby environment

Extension Settings

TODO

API

This extension exposes an API that other extensions can use to access the activated Ruby environment.

TypeScript Types

Type definitions are available as a separate npm package:

npm install --save-dev @shopify/ruby-environments-types

Getting the API

import type { RubyEnvironmentsApi } from "@shopify/ruby-environments-types";

const rubyEnvExtension = vscode.extensions.getExtension<RubyEnvironmentsApi>("Shopify.ruby-environments");

if (rubyEnvExtension) {
  if (!rubyEnvExtension.isActive) {
    await rubyEnvExtension.activate();
  }

  const api: RubyEnvironmentsApi = rubyEnvExtension.exports;
  // Use the API...
}

Activating the Ruby Environment

Request the extension to activate Ruby for a specific workspace:

await api.activate(vscode.workspace.workspaceFolders?.[0]);

Getting the Current Ruby Definition

Retrieve the currently activated Ruby environment:

import type { RubyDefinition } from "@shopify/ruby-environments-types";

const ruby: RubyDefinition | null = api.getRuby();

if (ruby === null) {
  console.log("Ruby environment not yet activated");
} else if (ruby.error) {
  console.log("Ruby activation failed");
} else {
  console.log(`Ruby version: ${ruby.rubyVersion}`);
  console.log(`Available JITs: ${ruby.availableJITs.join(", ")}`);
  console.log(`GEM_PATH: ${ruby.gemPath.join(":")}`);
}

Subscribing to Ruby Environment Changes

Listen for changes to the Ruby environment (e.g., when the user switches Ruby versions):

import type { RubyChangeEvent } from "@shopify/ruby-environments-types";

const disposable = api.onDidRubyChange((event: RubyChangeEvent) => {
  console.log(`Ruby changed in workspace: ${event.workspace?.name}`);

  if (!event.ruby.error) {
    console.log(`New Ruby version: ${event.ruby.rubyVersion}`);
  }
});

// Add to your extension's subscriptions for automatic cleanup
context.subscriptions.push(disposable);

Extension Dependency

To ensure your extension loads after Ruby Environments, add it as a dependency in your package.json:

{
  "extensionDependencies": ["Shopify.ruby-environments"]
}

About

No description, website, or topics provided.

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •