diff --git a/packages/devtools-kit/src/_types/options.ts b/packages/devtools-kit/src/_types/options.ts index 63b5899cde..8f461e1eb0 100644 --- a/packages/devtools-kit/src/_types/options.ts +++ b/packages/devtools-kit/src/_types/options.ts @@ -184,6 +184,7 @@ export interface VSCodeTunnelOptions { export interface NuxtDevToolsOptions { behavior: { telemetry: boolean | null + openInEditor: string | undefined } ui: { componentsGraphShowGlobalComponents: boolean diff --git a/packages/devtools/client/pages/settings.vue b/packages/devtools/client/pages/settings.vue index 0d4ae06f92..0c05b1a80f 100644 --- a/packages/devtools/client/pages/settings.vue +++ b/packages/devtools/client/pages/settings.vue @@ -24,8 +24,23 @@ const { sidebarScrollable, } = useDevToolsOptions('ui') +const { + openInEditor, +} = useDevToolsOptions('behavior') + const client = useClient() +const editorOptions = [ + ['Auto', undefined], + ['VS Code', 'vscode'], + ['VS Code Insider', 'vscode-insider'], + ['Cursor', 'cursor'], + ['Zed', 'zed'], + ['WebStorm', 'webstorm'], + ['Sublime Text', 'sublime'], + ['Atom', 'atom'], +] + const scaleOptions = [ ['Tiny', 12 / 15], ['Small', 14 / 15], @@ -227,6 +242,15 @@ watchEffect(() => { {{ i[0] }} + +
+ +

Open In Editor

+ + +

diff --git a/packages/devtools/src/constant.ts b/packages/devtools/src/constant.ts index 04b2ae8ce9..f510e167cc 100644 --- a/packages/devtools/src/constant.ts +++ b/packages/devtools/src/constant.ts @@ -21,6 +21,7 @@ export const defaultOptions: ModuleOptions = { export const defaultTabOptions: NuxtDevToolsOptions = { behavior: { telemetry: null, + openInEditor: undefined, }, ui: { componentsView: 'list', diff --git a/packages/devtools/src/server-rpc/general.ts b/packages/devtools/src/server-rpc/general.ts index 0e35993787..7c320e2fe7 100644 --- a/packages/devtools/src/server-rpc/general.ts +++ b/packages/devtools/src/server-rpc/general.ts @@ -7,11 +7,12 @@ import { logger } from '@nuxt/kit' import { colors } from 'consola/utils' import destr from 'destr' import { resolve } from 'pathe' - import { snakeCase } from 'scule' + import { resolveBuiltinPresets } from 'unimport' import { getDevAuthToken } from '../dev-auth' import { setupHooksDebug } from '../runtime/shared/hooks' +import { getOptions } from './options' export function setupGeneralRPC({ nuxt, @@ -181,8 +182,11 @@ export function setupGeneralRPC({ if (result) return true } + let editor = getOptions()?.behavior.openInEditor ?? undefined + if (editor === 'auto') + editor = undefined // @ts-expect-error missin types - await import('launch-editor').then(r => (r.default || r)(path + suffix)) + await import('launch-editor').then(r => (r.default || r)(path + suffix, editor)) return true } catch (e) {