From 527f904a18ec9646a5b5f93bfc885eca168b1ef8 Mon Sep 17 00:00:00 2001 From: Hubert Olender Date: Mon, 18 May 2026 00:26:31 +0200 Subject: [PATCH 1/2] [BUGFIX] Improve debugger message for template-only components --- .../integration-tests/lib/suites/debugger.ts | 25 +++++++++++++++++++ .../runtime/lib/compiled/opcodes/debugger.ts | 17 +++++++++---- 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/packages/@glimmer-workspace/integration-tests/lib/suites/debugger.ts b/packages/@glimmer-workspace/integration-tests/lib/suites/debugger.ts index 466d19a5755..06c9448512e 100644 --- a/packages/@glimmer-workspace/integration-tests/lib/suites/debugger.ts +++ b/packages/@glimmer-workspace/integration-tests/lib/suites/debugger.ts @@ -87,6 +87,31 @@ export class DebuggerSuite extends RenderTest { this.assertStableNodes(); } + @test({ kind: 'templateOnly' }) + 'debugger in template-only component logs template-only message'() { + let originalInfo = console.info; + let messages: string[] = []; + + console.info = (...args: unknown[]) => { + messages.push(args.join(' ')); + }; + + try { + resetDebuggerCallback(); + + this.registerComponent('TemplateOnly', 'DebugTest', '{{debugger}}'); + + this.render('', {}); + + this.assert.deepEqual(messages, [ + "Use `get()` to debug this template. For named arguments, use `get('@argName')`.", + ]); + } finally { + console.info = originalInfo; + resetDebuggerCallback(); + } + } + @test 'can get locals'() { let expectedContext = { diff --git a/packages/@glimmer/runtime/lib/compiled/opcodes/debugger.ts b/packages/@glimmer/runtime/lib/compiled/opcodes/debugger.ts index 7d1c46ce3c6..1857109b56f 100644 --- a/packages/@glimmer/runtime/lib/compiled/opcodes/debugger.ts +++ b/packages/@glimmer/runtime/lib/compiled/opcodes/debugger.ts @@ -14,11 +14,18 @@ export type DebugGet = (path: string) => unknown; export type DebugCallback = (context: unknown, get: DebugGet) => void; function debugCallback(context: unknown, get: DebugGet): void { - // eslint-disable-next-line no-console - console.info('Use `context`, and `get()` to debug this template.'); - - // for example... - context === get('this'); + if (context !== null && context !== undefined) { + // eslint-disable-next-line no-console + console.info('Use `context`, and `get()` to debug this template.'); + + // for example... + context === get('this'); + } else { + // eslint-disable-next-line no-console + console.info( + "Use `get()` to debug this template. For named arguments, use `get('@argName')`." + ); + } // eslint-disable-next-line no-debugger debugger; From fff0373bfb8bb7647d0966a74f01a17b4da2785a Mon Sep 17 00:00:00 2001 From: Hubert Olender Date: Tue, 19 May 2026 20:35:41 +0200 Subject: [PATCH 2/2] [BUGFIX] Include named argument hint in debugger message for class-backed components --- .../integration-tests/lib/suites/debugger.ts | 30 +++++++++++++++++++ .../runtime/lib/compiled/opcodes/debugger.ts | 4 ++- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/packages/@glimmer-workspace/integration-tests/lib/suites/debugger.ts b/packages/@glimmer-workspace/integration-tests/lib/suites/debugger.ts index 06c9448512e..87fb7debc5d 100644 --- a/packages/@glimmer-workspace/integration-tests/lib/suites/debugger.ts +++ b/packages/@glimmer-workspace/integration-tests/lib/suites/debugger.ts @@ -112,6 +112,36 @@ export class DebuggerSuite extends RenderTest { } } + @test + 'debugger in class-backed component logs context message with named argument hint'() { + let originalInfo = console.info; + let messages: string[] = []; + + console.info = (...args: unknown[]) => { + messages.push(args.join(' ')); + }; + + try { + resetDebuggerCallback(); + + this.registerComponent( + 'Glimmer', + 'DebugTest', + '{{debugger}}', + class extends GlimmerishComponent {} + ); + + this.render('', {}); + + this.assert.deepEqual(messages, [ + "Use `context`, and `get()` to debug this template. For named arguments, use `get('@argName')`.", + ]); + } finally { + console.info = originalInfo; + resetDebuggerCallback(); + } + } + @test 'can get locals'() { let expectedContext = { diff --git a/packages/@glimmer/runtime/lib/compiled/opcodes/debugger.ts b/packages/@glimmer/runtime/lib/compiled/opcodes/debugger.ts index 1857109b56f..3a264f4ba6d 100644 --- a/packages/@glimmer/runtime/lib/compiled/opcodes/debugger.ts +++ b/packages/@glimmer/runtime/lib/compiled/opcodes/debugger.ts @@ -16,7 +16,9 @@ export type DebugCallback = (context: unknown, get: DebugGet) => void; function debugCallback(context: unknown, get: DebugGet): void { if (context !== null && context !== undefined) { // eslint-disable-next-line no-console - console.info('Use `context`, and `get()` to debug this template.'); + console.info( + "Use `context`, and `get()` to debug this template. For named arguments, use `get('@argName')`." + ); // for example... context === get('this');