Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 47 additions & 3 deletions apps/vscode/src/host/positron.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,58 @@ import { Position, Range } from 'vscode';
import { Uri } from 'vscode';
import { tryAcquirePositronApi } from '@posit-dev/positron';

/**
* The canonical Positron setting for enabling Quarto inline output.
*/
export const kInlineOutputEnabledSetting = "quarto.inlineOutput.enabled";

/**
* The deprecated alias for {@link kInlineOutputEnabledSetting}. Positron keeps
* this key working during the deprecation window; reads prefer the new key and
* fall back to this one.
*/
export const kInlineOutputEnabledSettingDeprecated =
"positron.quarto.inlineOutput.enabled";

/**
* Check if inline output is enabled in Positron settings.
* This helper is shared with main.ts for code lens visibility.
*
* Prefers the canonical `quarto.inlineOutput.enabled` key and falls back to the
* deprecated `positron.quarto.inlineOutput.enabled` alias when the new key has
* not been explicitly set. Uses `inspect` so an explicit `false` on either key
* is honored over the default.
*/
export function isInlineOutputEnabled(): boolean {
return vscode.workspace
.getConfiguration("positron.quarto.inlineOutput")
.get<boolean>("enabled", false);
const config = vscode.workspace.getConfiguration();

const inspection = config.inspect<boolean>(kInlineOutputEnabledSetting);
if (isConfigurationSet(inspection)) {
return config.get<boolean>(kInlineOutputEnabledSetting, false);
}

const deprecatedInspection = config.inspect<boolean>(
kInlineOutputEnabledSettingDeprecated
);
if (isConfigurationSet(deprecatedInspection)) {
return config.get<boolean>(kInlineOutputEnabledSettingDeprecated, false);
}

return false;
}

/**
* Whether a configuration value has been explicitly set at any level (as
* opposed to falling back to its registered default).
*/
function isConfigurationSet<T>(
inspection: { globalValue?: T; workspaceValue?: T; workspaceFolderValue?: T; } | undefined
): boolean {
return (
inspection?.globalValue !== undefined ||
inspection?.workspaceValue !== undefined ||
inspection?.workspaceFolderValue !== undefined
);
}

export function positronExtensionHost(outputChannel?: vscode.LogOutputChannel): ExtensionHost {
Expand Down
7 changes: 5 additions & 2 deletions apps/vscode/src/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ import { activateEditor } from "./providers/editor/editor";
import { activateCopyFiles } from "./providers/copyfiles";
import { activateZotero } from "./providers/zotero/zotero";
import { extensionHost } from "./host";
import { isInlineOutputEnabled } from "./host/positron";
import { isInlineOutputEnabled, kInlineOutputEnabledSetting, kInlineOutputEnabledSettingDeprecated } from "./host/positron";
import { initQuartoContext, getSourceDescription } from "quarto-core";
import { configuredQuartoPath } from "./core/quarto";
import { activateDenoConfig } from "./providers/deno-config";
Expand Down Expand Up @@ -206,7 +206,10 @@ export async function activate(context: vscode.ExtensionContext): Promise<Quarto
// Listen for setting changes
context.subscriptions.push(
vscode.workspace.onDidChangeConfiguration((e) => {
if (e.affectsConfiguration("positron.quarto.inlineOutput.enabled")) {
if (
e.affectsConfiguration(kInlineOutputEnabledSetting) ||
e.affectsConfiguration(kInlineOutputEnabledSettingDeprecated)
) {
updateCodeLens();
}
})
Expand Down
Loading