From 293341ccb122037c53d9f4356ff4aa1e97bfced9 Mon Sep 17 00:00:00 2001 From: Jules Boulet Date: Fri, 6 Feb 2026 15:13:19 +0100 Subject: [PATCH 1/8] feat(instrumentation): add recording of Tab Morph --- DebuggingSpy/DSMorphTabRecord.class.st | 25 +++++++++++++++++++++++++ DebuggingSpy/DSSpyInstrumenter.class.st | 15 +++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 DebuggingSpy/DSMorphTabRecord.class.st diff --git a/DebuggingSpy/DSMorphTabRecord.class.st b/DebuggingSpy/DSMorphTabRecord.class.st new file mode 100644 index 0000000..27043bb --- /dev/null +++ b/DebuggingSpy/DSMorphTabRecord.class.st @@ -0,0 +1,25 @@ +" +I am recording the MorphTab in which the user is. +" +Class { + #name : 'DSMorphTabRecord', + #superclass : 'DSAbstractEventRecord', + #instVars : [ + 'tabName' + ], + #category : 'DebuggingSpy-Records', + #package : 'DebuggingSpy', + #tag : 'Records' +} + +{ #category : 'accessing' } +DSMorphTabRecord >> eventName [ + + ^ 'Changing in tab' +] + +{ #category : 'actions api' } +DSMorphTabRecord >> record: aTabMorphSelector [ + + tabName := (aTabMorphSelector submorphs select: #isSelected) first +] diff --git a/DebuggingSpy/DSSpyInstrumenter.class.st b/DebuggingSpy/DSSpyInstrumenter.class.st index 14407d3..ef2d579 100644 --- a/DebuggingSpy/DSSpyInstrumenter.class.st +++ b/DebuggingSpy/DSSpyInstrumenter.class.st @@ -181,11 +181,19 @@ DSSpyInstrumenter >> instrumentSystem [ self logCodeInteractions. self logBrowsingActions. self logDebuggerActions. + self logClyBrowserActions. "Intruments exceptions" self instrumentExceptionSignalling ] +{ #category : 'interactions' } +DSSpyInstrumenter >> instrumentTabMorph [ + "Instruments the active Tab Morph" + + TabSelectorMorph link: DSMorphTabRecord link toAST: (TabSelectorMorph >> #selectedIndex:) ast +] + { #category : 'debugpoints' } DSSpyInstrumenter >> listenToDebugPointChanges [ "Listen to the announcements link to debugPoints modification and record the event" @@ -231,6 +239,13 @@ DSSpyInstrumenter >> logClipboardActions [ self instrumentPaste ] +{ #category : 'system-instrumentation' } +DSSpyInstrumenter >> logClyBrowserActions [ + "Instrument actions link to the Browser UI : scrolling, change in tabs, ..." + + self instrumentTabMorph +] + { #category : 'system-instrumentation' } DSSpyInstrumenter >> logCodeInteractions [ "Instruments actions linked to code execution : do it, print it, inspect it, ..." From cd83ca7f4b245358924ccd9afbbc58409c770142 Mon Sep 17 00:00:00 2001 From: Jules Boulet Date: Fri, 6 Feb 2026 16:23:03 +0100 Subject: [PATCH 2/8] fix(instrumentation): fix morph table instrumentation --- DebuggingSpy/DSMorphTabRecord.class.st | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DebuggingSpy/DSMorphTabRecord.class.st b/DebuggingSpy/DSMorphTabRecord.class.st index 27043bb..bb578e9 100644 --- a/DebuggingSpy/DSMorphTabRecord.class.st +++ b/DebuggingSpy/DSMorphTabRecord.class.st @@ -21,5 +21,5 @@ DSMorphTabRecord >> eventName [ { #category : 'actions api' } DSMorphTabRecord >> record: aTabMorphSelector [ - tabName := (aTabMorphSelector submorphs select: #isSelected) first + tabName := ((aTabMorphSelector submorphs select: [:morph | morph class = TabLabelMorph]) select: #isSelected) first asString ] From 7cb32bc0e54fc637760ffda95d5730ecd7c6dfb0 Mon Sep 17 00:00:00 2001 From: Jules Boulet Date: Mon, 9 Feb 2026 11:19:32 +0100 Subject: [PATCH 3/8] test(instrumentation): fix tests by including tab changes --- .../DSSpyInstrumenterTest.class.st | 22 ++++++++++++------- DebuggingSpy/DSMorphTabRecord.class.st | 6 ++++- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/DebuggingSpy-Tests/DSSpyInstrumenterTest.class.st b/DebuggingSpy-Tests/DSSpyInstrumenterTest.class.st index 3747ab7..103eb54 100644 --- a/DebuggingSpy-Tests/DSSpyInstrumenterTest.class.st +++ b/DebuggingSpy-Tests/DSSpyInstrumenterTest.class.st @@ -408,7 +408,7 @@ DSSpyInstrumenterTest >> testInstrumentClyTextEditorInspectIt [ clyEditor := self clyTextEditor. clyEditor inspectIt. - self assert: self registry size equals: 2. + self assert: self registry size equals: 3. record := self registry first. self assert: record class identicalTo: DSInspectItRecord. @@ -658,7 +658,7 @@ DSSpyInstrumenterTest >> testInstrumentRubEditorInspectIt [ rubEditor selectAll. rubEditor inspectIt. - self assert: self registry size equals: 2. + self assert: self registry size equals: 3. record := self registry first. self assert: record class identicalTo: DSInspectItRecord. @@ -721,7 +721,7 @@ DSSpyInstrumenterTest >> testInstrumentSendersAction [ rubEditor := self rubSmalltalkEditor. rubEditor sendersOf: #testInstrumentHaltHits. - self assert: self registry size equals: 2. + self assert: self registry size equals: 3. record := self registry first. self assert: record class identicalTo: DSImplementorsRecord. @@ -739,7 +739,7 @@ DSSpyInstrumenterTest >> testInstrumentSpCodeBrowse [ codePresenter rawSelection: (1 to: 4). browseCommand execute. - self assert: self registry size equals: 2. + self assert: self registry size equals: 6. record := self registry first. self assert: record class identicalTo: DSBrowseRecord. @@ -835,13 +835,16 @@ DSSpyInstrumenterTest >> testInstrumentSpCodeImplementors [ codePresenter selectionInterval: (1 to: 7). browseCommand execute. - self assert: self registry size equals: 2. + self assert: self registry size equals: 3. record := self registry first. self assert: record class identicalTo: DSImplementorsRecord. self assert: record windowId equals: codePresenter window identityHash. - + record := self registry second. + self assert: record class identicalTo: DSMorphTabRecord. + + record := self registry third. self assert: record class identicalTo: DSWindowOpenedRecord ] @@ -856,7 +859,7 @@ DSSpyInstrumenterTest >> testInstrumentSpCodeInspectIt [ codePresenter rawSelection: (1 to: 4). inspectItCommand execute. - self assert: self registry size equals: 2. + self assert: self registry size equals: 3. record := self registry first. self assert: record class identicalTo: DSInspectItRecord. @@ -890,13 +893,16 @@ DSSpyInstrumenterTest >> testInstrumentSpCodeSenders [ codePresenter selectionInterval: (1 to: 7). browseCommand execute. - self assert: self registry size equals: 2. + self assert: self registry size equals: 3. record := self registry first. self assert: record class identicalTo: DSSendersRecord. self assert: record windowId equals: codePresenter window identityHash. record := self registry second. + self assert: record class identicalTo: DSMorphTabRecord. + + record := self registry third. self assert: record class identicalTo: DSWindowOpenedRecord ] diff --git a/DebuggingSpy/DSMorphTabRecord.class.st b/DebuggingSpy/DSMorphTabRecord.class.st index bb578e9..ed5cb5e 100644 --- a/DebuggingSpy/DSMorphTabRecord.class.st +++ b/DebuggingSpy/DSMorphTabRecord.class.st @@ -21,5 +21,9 @@ DSMorphTabRecord >> eventName [ { #category : 'actions api' } DSMorphTabRecord >> record: aTabMorphSelector [ - tabName := ((aTabMorphSelector submorphs select: [:morph | morph class = TabLabelMorph]) select: #isSelected) first asString + | selectedTab | + + selectedTab := ((aTabMorphSelector submorphs select: [:morph | morph class = TabLabelMorph]) select: #isSelected). + + tabName := selectedTab isEmpty ifTrue: [ nil ] ifFalse: [ selectedTab first asString ] ] From b2902ae4baa179764befdf42b00b4b81973344f7 Mon Sep 17 00:00:00 2001 From: Jules Boulet Date: Mon, 9 Feb 2026 14:04:33 +0100 Subject: [PATCH 4/8] fix(instrumentation): record morph tab only when selected --- .../DSSpyInstrumenterTest.class.st | 22 +++++++------------ DebuggingSpy/DSMorphTabRecord.class.st | 16 +++++++++++--- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/DebuggingSpy-Tests/DSSpyInstrumenterTest.class.st b/DebuggingSpy-Tests/DSSpyInstrumenterTest.class.st index 103eb54..817db20 100644 --- a/DebuggingSpy-Tests/DSSpyInstrumenterTest.class.st +++ b/DebuggingSpy-Tests/DSSpyInstrumenterTest.class.st @@ -408,7 +408,7 @@ DSSpyInstrumenterTest >> testInstrumentClyTextEditorInspectIt [ clyEditor := self clyTextEditor. clyEditor inspectIt. - self assert: self registry size equals: 3. + self assert: self registry size equals: 2. record := self registry first. self assert: record class identicalTo: DSInspectItRecord. @@ -658,7 +658,7 @@ DSSpyInstrumenterTest >> testInstrumentRubEditorInspectIt [ rubEditor selectAll. rubEditor inspectIt. - self assert: self registry size equals: 3. + self assert: self registry size equals: 2. record := self registry first. self assert: record class identicalTo: DSInspectItRecord. @@ -721,7 +721,7 @@ DSSpyInstrumenterTest >> testInstrumentSendersAction [ rubEditor := self rubSmalltalkEditor. rubEditor sendersOf: #testInstrumentHaltHits. - self assert: self registry size equals: 3. + self assert: self registry size equals: 2. record := self registry first. self assert: record class identicalTo: DSImplementorsRecord. @@ -739,7 +739,7 @@ DSSpyInstrumenterTest >> testInstrumentSpCodeBrowse [ codePresenter rawSelection: (1 to: 4). browseCommand execute. - self assert: self registry size equals: 6. + self assert: self registry size equals: 2. record := self registry first. self assert: record class identicalTo: DSBrowseRecord. @@ -835,16 +835,13 @@ DSSpyInstrumenterTest >> testInstrumentSpCodeImplementors [ codePresenter selectionInterval: (1 to: 7). browseCommand execute. - self assert: self registry size equals: 3. + self assert: self registry size equals: 2. record := self registry first. self assert: record class identicalTo: DSImplementorsRecord. self assert: record windowId equals: codePresenter window identityHash. record := self registry second. - self assert: record class identicalTo: DSMorphTabRecord. - - record := self registry third. self assert: record class identicalTo: DSWindowOpenedRecord ] @@ -859,7 +856,7 @@ DSSpyInstrumenterTest >> testInstrumentSpCodeInspectIt [ codePresenter rawSelection: (1 to: 4). inspectItCommand execute. - self assert: self registry size equals: 3. + self assert: self registry size equals: 2. record := self registry first. self assert: record class identicalTo: DSInspectItRecord. @@ -893,16 +890,13 @@ DSSpyInstrumenterTest >> testInstrumentSpCodeSenders [ codePresenter selectionInterval: (1 to: 7). browseCommand execute. - self assert: self registry size equals: 3. + self assert: self registry size equals: 2. record := self registry first. self assert: record class identicalTo: DSSendersRecord. self assert: record windowId equals: codePresenter window identityHash. - - record := self registry second. - self assert: record class identicalTo: DSMorphTabRecord. - record := self registry third. + record := self registry second. self assert: record class identicalTo: DSWindowOpenedRecord ] diff --git a/DebuggingSpy/DSMorphTabRecord.class.st b/DebuggingSpy/DSMorphTabRecord.class.st index ed5cb5e..2e40816 100644 --- a/DebuggingSpy/DSMorphTabRecord.class.st +++ b/DebuggingSpy/DSMorphTabRecord.class.st @@ -12,6 +12,16 @@ Class { #tag : 'Records' } +{ #category : 'instance creation' } +DSMorphTabRecord class >> for: aTabMorphSelector [ + + | rec | + rec := self new record: aTabMorphSelector. + rec ifNotNil: [ DSRecordRegistry current addRecord: rec ]. + + ^ rec +] + { #category : 'accessing' } DSMorphTabRecord >> eventName [ @@ -22,8 +32,8 @@ DSMorphTabRecord >> eventName [ DSMorphTabRecord >> record: aTabMorphSelector [ | selectedTab | + selectedTab := (aTabMorphSelector submorphs select: [ :morph | morph class = TabLabelMorph ]) select: #isSelected. + selectedTab ifEmpty: [ ^ nil ]. - selectedTab := ((aTabMorphSelector submorphs select: [:morph | morph class = TabLabelMorph]) select: #isSelected). - - tabName := selectedTab isEmpty ifTrue: [ nil ] ifFalse: [ selectedTab first asString ] + tabName := selectedTab first asString ] From 9a57e582a4c6cb0233cb4a56a43c7d65232eab0d Mon Sep 17 00:00:00 2001 From: Jules Boulet Date: Tue, 10 Feb 2026 15:08:41 +0100 Subject: [PATCH 5/8] fix(instrumentation): record the componant when tab change --- DebuggingSpy/DSMorphTabRecord.class.st | 24 ++++++++++++------------ DebuggingSpy/DSRecordHistory.class.st | 1 - DebuggingSpy/DSSpyInstrumenter.class.st | 3 ++- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/DebuggingSpy/DSMorphTabRecord.class.st b/DebuggingSpy/DSMorphTabRecord.class.st index 2e40816..a13f6e6 100644 --- a/DebuggingSpy/DSMorphTabRecord.class.st +++ b/DebuggingSpy/DSMorphTabRecord.class.st @@ -12,14 +12,14 @@ Class { #tag : 'Records' } -{ #category : 'instance creation' } -DSMorphTabRecord class >> for: aTabMorphSelector [ - - | rec | - rec := self new record: aTabMorphSelector. - rec ifNotNil: [ DSRecordRegistry current addRecord: rec ]. +{ #category : 'accessing' } +DSMorphTabRecord class >> link [ - ^ rec + ^ DSMetaLink new + metaObject: self; + selector: #for:; + arguments: #( arguments ); + control: #before ] { #category : 'accessing' } @@ -29,11 +29,11 @@ DSMorphTabRecord >> eventName [ ] { #category : 'actions api' } -DSMorphTabRecord >> record: aTabMorphSelector [ +DSMorphTabRecord >> record: anArrayOfArguments [ - | selectedTab | - selectedTab := (aTabMorphSelector submorphs select: [ :morph | morph class = TabLabelMorph ]) select: #isSelected. - selectedTab ifEmpty: [ ^ nil ]. + | newTabMorph | + + newTabMorph := anArrayOfArguments second. - tabName := selectedTab first asString + tabName := newTabMorph asString ] diff --git a/DebuggingSpy/DSRecordHistory.class.st b/DebuggingSpy/DSRecordHistory.class.st index b969084..e420809 100644 --- a/DebuggingSpy/DSRecordHistory.class.st +++ b/DebuggingSpy/DSRecordHistory.class.st @@ -496,7 +496,6 @@ DSRecordHistory >> processRecords: array [ self records: (array reject: [ :e | #( 0 ) includes: e windowId ]). "Transform raw events to model events" - (self allRecordsOfKind: DSStepActionRecord) do: #asStepRecord. (self allRecordsOfKind: DSAbstractDebugPointEventRecord) do: #asDebugPointRecord. "Detect if we're in a specific task" diff --git a/DebuggingSpy/DSSpyInstrumenter.class.st b/DebuggingSpy/DSSpyInstrumenter.class.st index ef2d579..6cf283f 100644 --- a/DebuggingSpy/DSSpyInstrumenter.class.st +++ b/DebuggingSpy/DSSpyInstrumenter.class.st @@ -191,7 +191,8 @@ DSSpyInstrumenter >> instrumentSystem [ DSSpyInstrumenter >> instrumentTabMorph [ "Instruments the active Tab Morph" - TabSelectorMorph link: DSMorphTabRecord link toAST: (TabSelectorMorph >> #selectedIndex:) ast + ClyNotebookMorph link: DSMorphTabRecord link toAST: (ClyNotebookMorph >> #updateContentMorph:with:) ast. + SpNotebookMorph link: DSMorphTabRecord link toAST: (SpNotebookMorph >> #updateContentMorph:with:) ast ] { #category : 'debugpoints' } From f81f3cc78c3d417a4ef167fa6e1072a141af1f9c Mon Sep 17 00:00:00 2001 From: Jules Boulet Date: Wed, 11 Feb 2026 10:44:41 +0100 Subject: [PATCH 6/8] fix: recording sender and implementors windows --- DebuggingSpy/ClyShowMessageImplementorCommand.extension.st | 7 +++++++ DebuggingSpy/ClyShowMessageSenderCommand.extension.st | 7 +++++++ 2 files changed, 14 insertions(+) create mode 100644 DebuggingSpy/ClyShowMessageImplementorCommand.extension.st create mode 100644 DebuggingSpy/ClyShowMessageSenderCommand.extension.st diff --git a/DebuggingSpy/ClyShowMessageImplementorCommand.extension.st b/DebuggingSpy/ClyShowMessageImplementorCommand.extension.st new file mode 100644 index 0000000..57cb831 --- /dev/null +++ b/DebuggingSpy/ClyShowMessageImplementorCommand.extension.st @@ -0,0 +1,7 @@ +Extension { #name : 'ClyShowMessageImplementorCommand' } + +{ #category : '*DebuggingSpy' } +ClyShowMessageImplementorCommand >> recordWindow [ + + ^ browser +] diff --git a/DebuggingSpy/ClyShowMessageSenderCommand.extension.st b/DebuggingSpy/ClyShowMessageSenderCommand.extension.st new file mode 100644 index 0000000..378fb78 --- /dev/null +++ b/DebuggingSpy/ClyShowMessageSenderCommand.extension.st @@ -0,0 +1,7 @@ +Extension { #name : 'ClyShowMessageSenderCommand' } + +{ #category : '*DebuggingSpy' } +ClyShowMessageSenderCommand >> recordWindow [ + + ^ browser +] From 701f3f244aed35e7d8e0523f1c61afe5bc5f269f Mon Sep 17 00:00:00 2001 From: Jules Boulet Date: Wed, 11 Feb 2026 11:28:17 +0100 Subject: [PATCH 7/8] refactor: change instrumentation of TabMorph to capture all changes in tabs --- .../DSSpyInstrumenterTest.class.st | 2 +- DebuggingSpy/DSMorphTabRecord.class.st | 22 +++++++++---------- DebuggingSpy/DSSpyInstrumenter.class.st | 6 +++-- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/DebuggingSpy-Tests/DSSpyInstrumenterTest.class.st b/DebuggingSpy-Tests/DSSpyInstrumenterTest.class.st index 817db20..a00c8be 100644 --- a/DebuggingSpy-Tests/DSSpyInstrumenterTest.class.st +++ b/DebuggingSpy-Tests/DSSpyInstrumenterTest.class.st @@ -739,7 +739,7 @@ DSSpyInstrumenterTest >> testInstrumentSpCodeBrowse [ codePresenter rawSelection: (1 to: 4). browseCommand execute. - self assert: self registry size equals: 2. + self assert: self registry size equals: 4. record := self registry first. self assert: record class identicalTo: DSBrowseRecord. diff --git a/DebuggingSpy/DSMorphTabRecord.class.st b/DebuggingSpy/DSMorphTabRecord.class.st index a13f6e6..904dec0 100644 --- a/DebuggingSpy/DSMorphTabRecord.class.st +++ b/DebuggingSpy/DSMorphTabRecord.class.st @@ -12,14 +12,13 @@ Class { #tag : 'Records' } -{ #category : 'accessing' } -DSMorphTabRecord class >> link [ +{ #category : 'instance creation' } +DSMorphTabRecord class >> for: anObject [ - ^ DSMetaLink new - metaObject: self; - selector: #for:; - arguments: #( arguments ); - control: #before + | rec | + rec := self new record: anObject. + rec ifNotNil: [ DSRecordRegistry current addRecord: rec ]. + ^ rec ] { #category : 'accessing' } @@ -29,11 +28,12 @@ DSMorphTabRecord >> eventName [ ] { #category : 'actions api' } -DSMorphTabRecord >> record: anArrayOfArguments [ +DSMorphTabRecord >> record: aTabGroupMorph [ - | newTabMorph | + | tabTool| - newTabMorph := anArrayOfArguments second. + tabTool := aTabGroupMorph submorphs first submorphs. + tabTool isEmpty ifTrue: [ ^ nil ]. - tabName := newTabMorph asString + tabName := tabTool first asString ] diff --git a/DebuggingSpy/DSSpyInstrumenter.class.st b/DebuggingSpy/DSSpyInstrumenter.class.st index 6cf283f..bffadb4 100644 --- a/DebuggingSpy/DSSpyInstrumenter.class.st +++ b/DebuggingSpy/DSSpyInstrumenter.class.st @@ -191,8 +191,10 @@ DSSpyInstrumenter >> instrumentSystem [ DSSpyInstrumenter >> instrumentTabMorph [ "Instruments the active Tab Morph" - ClyNotebookMorph link: DSMorphTabRecord link toAST: (ClyNotebookMorph >> #updateContentMorph:with:) ast. - SpNotebookMorph link: DSMorphTabRecord link toAST: (SpNotebookMorph >> #updateContentMorph:with:) ast + "ClyNotebookMorph link: DSMorphTabRecord link toAST: (ClyNotebookMorph >> #updateContentMorph:with:) ast. + SpNotebookMorph link: DSMorphTabRecord link toAST: (SpNotebookMorph >> #updateContentMorph:with:) ast" + + TabGroupMorph link: DSMorphTabRecord link toAST: (TabGroupMorph >> #update:with:) ast ] { #category : 'debugpoints' } From 3a20fe527c7b93f948d984af80bc276c11f9f69c Mon Sep 17 00:00:00 2001 From: Jules Boulet Date: Thu, 19 Feb 2026 11:47:33 +0100 Subject: [PATCH 8/8] feat(instrumentation): capture scrolling events --- DebuggingSpy/DSScrollingRecord.class.st | 24 ++++++++++++++++++++++++ DebuggingSpy/DSSpyInstrumenter.class.st | 13 ++++++++++--- 2 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 DebuggingSpy/DSScrollingRecord.class.st diff --git a/DebuggingSpy/DSScrollingRecord.class.st b/DebuggingSpy/DSScrollingRecord.class.st new file mode 100644 index 0000000..c07bf2e --- /dev/null +++ b/DebuggingSpy/DSScrollingRecord.class.st @@ -0,0 +1,24 @@ +" +I am recording events linked to scrolling. +" +Class { + #name : 'DSScrollingRecord', + #superclass : 'DSAbstractEventRecord', + #instVars : [ + 'toolName' + ], + #category : 'DebuggingSpy-Records', + #package : 'DebuggingSpy', + #tag : 'Records' +} + +{ #category : 'accessing' } +DSScrollingRecord >> eventName [ + ^ 'Scrolling' +] + +{ #category : 'actions api' } +DSScrollingRecord >> record: aMorph [ + + toolName := aMorph asString +] diff --git a/DebuggingSpy/DSSpyInstrumenter.class.st b/DebuggingSpy/DSSpyInstrumenter.class.st index bffadb4..a6ee8e1 100644 --- a/DebuggingSpy/DSSpyInstrumenter.class.st +++ b/DebuggingSpy/DSSpyInstrumenter.class.st @@ -143,6 +143,16 @@ DSSpyInstrumenter >> instrumentPrintIt [ SpCodePrintItCommand link: DSPrintItRecord link toAST: (SpCodePrintItCommand >> #execute) ast ] +{ #category : 'interactions' } +DSSpyInstrumenter >> instrumentScrolling [ + "Instruments the scrolling in different components" + + Morph link: DSScrollingRecord link toAST: (Morph >> #mouseWheel:) ast. + Morph link: DSScrollingRecord link toAST: (Morph >> #dragging:) ast. + GeneralScrollPaneMorph link: DSScrollingRecord link toAST: (GeneralScrollPaneMorph >> #mouseWheel:) ast + +] + { #category : 'system' } DSSpyInstrumenter >> instrumentSendersActions [ "Instruments actions to show senders of a method or class" @@ -191,9 +201,6 @@ DSSpyInstrumenter >> instrumentSystem [ DSSpyInstrumenter >> instrumentTabMorph [ "Instruments the active Tab Morph" - "ClyNotebookMorph link: DSMorphTabRecord link toAST: (ClyNotebookMorph >> #updateContentMorph:with:) ast. - SpNotebookMorph link: DSMorphTabRecord link toAST: (SpNotebookMorph >> #updateContentMorph:with:) ast" - TabGroupMorph link: DSMorphTabRecord link toAST: (TabGroupMorph >> #update:with:) ast ]