[squeak-dev] The Inbox: Tools-eem.1169.mcz
Eliot Miranda
eliot.miranda at gmail.com
Thu Jul 28 23:04:58 UTC 2022
On Tue, Jul 26, 2022 at 6:30 PM Chris Muller <asqueaker at gmail.com> wrote:
> Hi Eliot,
>
> I don't necessarily have an opinion about this, but wondered if you've
> tried Command+a+c, followed by Command+Shift+C to compare selection to
> clipboard. It's a pretty rare need, but really handy whenever I need to
> diff code in a way not offered by the IDE.
>
I use it all the time. But show diffs in the browser is nicer, and wanting
to compare across inherited versions is something I do enough that I'd like
it to be integrated.
>
> 1) Select the subclass method, press Command+a+c (select and copy the
> method text to the clipboard).
> 2) Select the superclass method, press Command+a+C (<--- as in, Shift c,
> capital C).
>
> A new window opens showing the diff between the selection and the
> clipboard contents.
>
I know; thanks. But it's a mouthful of clicks where a button setting would
do.
>
> - Chris
>
> On Mon, Jul 25, 2022 at 2:07 PM <commits at source.squeak.org> wrote:
>
>> A new version of Tools was added to project The Inbox:
>> http://source.squeak.org/inbox/Tools-eem.1169.mcz
>>
>> ==================== Summary ====================
>>
>> Name: Tools-eem.1169
>> Author: eem
>> Time: 25 July 2022, 12:06:53.062032 pm
>> UUID: f21870f4-8dbf-4b68-b24b-1ab56fa8f9f4
>> Ancestors: Tools-eem.1168
>>
>> This is a quick hack to provide inheritance based diffing in message
>> trace browsers; i.e. instead of diffing a selected method against its
>> previous version it is diffed against the nearest inherited version, if
>> present.
>> It is useful, but really points to the whole framework needing to be
>> reimplemented properly. For example, the scheme shoudl separate what is
>> diffed against (previous version, method above/below in a messaqge trace,
>> etc) from how it is diffed (pretty/token diffs vs exact/text diffs).
>>
>> I note that the CodeHolder class variable ContentsSymbolQuints is not
>> changed (addContentsSymbolQuint:afterEntry:,
>> addContentsSymbolQuint:afterPosition:, removeContentsSymbol: have no
>> senders). SO the flexibility gets in the way, and arguably should be
>> removed.
>>
>> =============== Diff against Tools-eem.1168 ===============
>>
>> Item was added:
>> + ----- Method: ChangeList>>sourceAndDiffsQuintsOnly (in category
>> 'controls') -----
>> + sourceAndDiffsQuintsOnly
>> + "Answer a list of quintuplets representing information on the
>> alternative views available in the code pane for the case where the only
>> plausible choices are showing source or either of the two kinds of diffs"
>> +
>> + ^ #(
>> + (source togglePlainSource
>> showingPlainSourceString 'source' 'the
>> textual source code as writen')
>> + (showDiffs toggleRegularDiffing
>> showingRegularDiffsString 'showDiffs' 'the textual source
>> diffed from its prior version')
>> + (prettyDiffs togglePrettyDiffing
>> showingPrettyDiffsString 'prettyDiffs' 'formatted textual
>> source diffed from formatted form of prior version'))!
>>
>> Item was changed:
>> ----- Method: CodeHolder class>>defaultContentsSymbolQuints (in
>> category 'controls') -----
>> defaultContentsSymbolQuints
>> "Default list of quintuplets representing information on the
>> alternative views available in the code pane
>> first element: the contentsSymbol used
>> second element: the selector to call when this item is
>> chosen.
>> third element: the selector to call to obtain the
>> wording of the menu item.
>> fourth element: the wording to represent this view
>> fifth element: balloon help
>> A hypen indicates a need for a seperator line in a menu of such
>> choices"
>>
>> ^ {
>> {#source
>> . #togglePlainSource
>> . #showingPlainSourceString
>> . 'source'
>> . 'the textual source code as written'
>> translated} .
>> {#documentation
>> . #toggleShowDocumentation
>> . #showingDocumentationString
>> . 'documentation'
>> . 'the first comment in the method' translated} .
>>
>> #- .
>> {#prettyPrint
>> . #togglePrettyPrint
>> . #prettyPrintString
>> . 'prettyPrint'
>> . 'the method source presented in a standard text
>> format' translated} .
>>
>> #- .
>> {#showDiffs
>> . #toggleRegularDiffing
>> . #showingRegularDiffsString
>> . 'showDiffs'
>> . 'the textual source diffed from its prior
>> version' translated} .
>> + {#showInheritanceDiffs
>> + . #toggleInheritanceDiffing
>> + . #showingInheritanceDiffsString
>> + . 'showInheritanceDiffs'
>> + . 'the textual source diffed from its superclass
>> implementation' translated} .
>>
>> #- .
>> {#decompile
>> . #toggleDecompile
>> . #showingDecompileString
>> . 'decompile'
>> . 'source code decompiled from byteCodes'
>> translated} .
>> {#byteCodes
>> . #toggleShowingByteCodes
>> . #showingByteCodesString
>> . 'byteCodes'
>> . 'the bytecodes that comprise the compiled
>> method' translated} .
>> }!
>>
>> Item was added:
>> + ----- Method: CodeHolder>>diffFromSuperclassFor:class:selector: (in
>> category 'diffs') -----
>> + diffFromSuperclassFor: sourceCode class: class selector: selector
>> + "If there is a prior version of source for the selected method,
>> return a diff, else just return the source code"
>> +
>> + ^(class superclass whichClassIncludesSelector: selector)
>> + ifNil: [sourceCode]
>> + ifNotNil:
>> + [:superclass|
>> + TextDiffBuilder buildDisplayPatchFrom:
>> (superclass sourceCodeAt: selector) to: sourceCode inClass: class
>> prettyDiffs: self showingPrettyDiffs]!
>>
>> Item was added:
>> + ----- Method: CodeHolder>>showInheritanceDiffs (in category 'diffs')
>> -----
>> + showInheritanceDiffs
>> + "Answer whether the receiver is showing diffs of source code
>> based on inheritance."
>> +
>> + ^ contentsSymbol == #showInheritanceDiffs
>> + !
>>
>> Item was added:
>> + ----- Method: CodeHolder>>showInheritanceDiffs: (in category 'diffs')
>> -----
>> + showInheritanceDiffs: aBoolean
>> + "Set whether I'm showing regular diffs as indicated"
>> +
>> + self showingInheritanceDiffs
>> + ifFalse:
>> + [aBoolean ifTrue:
>> + [contentsSymbol := #showInheritanceDiffs]]
>> + ifTrue:
>> + [aBoolean ifFalse:
>> + [contentsSymbol := #source]].
>> + self setContentsToForceRefetch.
>> + self contentsChanged!
>>
>> Item was changed:
>> ----- Method: CodeHolder>>showingAnyKindOfDiffs (in category 'diffs')
>> -----
>> showingAnyKindOfDiffs
>> "Answer whether the receiver is currently set to show any kind of
>> diffs"
>>
>> + ^ #(showDiffs showInheritanceDiffs prettyDiffs) includes:
>> contentsSymbol!
>> - ^ #(showDiffs prettyDiffs) includes: contentsSymbol!
>>
>> Item was added:
>> + ----- Method: CodeHolder>>showingInheritanceDiffs (in category 'diffs')
>> -----
>> + showingInheritanceDiffs
>> + "Answer whether the receiver is showing regular diffs of source
>> code"
>> +
>> + ^ contentsSymbol == #showInheritanceDiffs
>> + !
>>
>> Item was added:
>> + ----- Method: CodeHolder>>showingInheritanceDiffsString (in category
>> 'diffs') -----
>> + showingInheritanceDiffsString
>> + "Answer a string representing whether I'm showing regular diffs"
>> +
>> + ^ (self showingInheritanceDiffs
>> + ifTrue:
>> + ['<yes>']
>> + ifFalse:
>> + ['<no>']), 'showInheritanceDiffs'!
>>
>> Item was changed:
>> ----- Method: CodeHolder>>sourceAndDiffsQuintsOnly (in category
>> 'controls') -----
>> sourceAndDiffsQuintsOnly
>> "Answer a list of quintuplets representing information on the
>> alternative views available in the code pane for the case where the only
>> plausible choices are showing source or either of the two kinds of diffs"
>>
>> ^ #(
>> (source togglePlainSource
>> showingPlainSourceString 'source' 'the
>> textual source code as writen')
>> (showDiffs toggleRegularDiffing
>> showingRegularDiffsString 'showDiffs' 'the textual source
>> diffed from its prior version')
>> + (showInheritanceDiffs toggleInheritanceDiffing
>> showingInheritanceDiffsString 'showInheritanceDiffs' 'the
>> textual source diffed from its superclass implementation')
>> (prettyDiffs togglePrettyDiffing
>> showingPrettyDiffsString 'prettyDiffs' 'formatted textual
>> source diffed from formatted form of prior version'))!
>>
>> Item was changed:
>> ----- Method: CodeHolder>>sourceStringPrettifiedAndDiffed (in category
>> 'message list') -----
>> sourceStringPrettifiedAndDiffed
>> "Answer a copy of the source code for the selected message,
>> transformed by diffing and pretty-printing exigencies"
>>
>> | class selector sourceString |
>> class := self selectedClassOrMetaClass.
>> selector := self selectedMessageName.
>> (class isNil or: [selector isNil]) ifTrue: [^'missing'].
>> sourceString := class ultimateSourceCodeAt: selector ifAbsent:
>> [^'error'].
>> self validateMessageSource: sourceString forSelector: selector
>> inClass: class.
>> (#(#prettyPrint #prettyDiffs)
>> includes: contentsSymbol)
>> ifTrue:
>> [sourceString := class prettyPrinterClass
>> format:
>> sourceString
>> in: class
>> notifying: nil].
>> self showingAnyKindOfDiffs
>> + ifTrue: [sourceString := contentsSymbol ==
>> #showInheritanceDiffs
>> + ifTrue:
>> [self diffFromSuperclassFor: sourceString class: self selectedClass
>> selector: self selectedMessageName]
>> + ifFalse:
>> [self diffFromPriorSourceFor: contents]].
>> - ifTrue: [sourceString := self diffFromPriorSourceFor:
>> sourceString].
>> ^sourceString!
>>
>> Item was added:
>> + ----- Method: CodeHolder>>toggleInheritanceDiffing (in category
>> 'diffs') -----
>> + toggleInheritanceDiffing
>> + "Toggle whether inheritance-diffing should be shown in the code
>> pane"
>> +
>> + | wasShowingDiffs |
>> + self okToChange ifTrue:
>> + [wasShowingDiffs := self showingRegularDiffs or: [self
>> showingInheritanceDiffs].
>> + self restoreTextualCodingPane.
>> + self showInheritanceDiffs: wasShowingDiffs not.
>> + self setContentsToForceRefetch.
>> + self contentsChanged]
>> +
>> + !
>>
>> Item was changed:
>> ----- Method: CodeHolder>>toggleRegularDiffing (in category 'diffs')
>> -----
>> toggleRegularDiffing
>> "Toggle whether regular-diffing should be shown in the code pane"
>>
>> | wasShowingDiffs |
>> self okToChange ifTrue:
>> + [wasShowingDiffs := self showingRegularDiffs or: [self
>> showingInheritanceDiffs].
>> - [wasShowingDiffs := self showingRegularDiffs.
>> self restoreTextualCodingPane.
>> self showRegularDiffs: wasShowingDiffs not.
>> self setContentsToForceRefetch.
>> self contentsChanged]
>>
>> !
>>
>> Item was changed:
>> + (PackageInfo named: 'Tools') postscript: 'CodeHolder initialize. "To
>> see CodeHolder class>>defaultContentsSymbolQuints''s quints"
>> - (PackageInfo named: 'Tools') postscript: 'ToolIcons icons removeKey:
>> #font ifAbsent: [].
>>
>> + ToolIcons icons removeKey: #font ifAbsent: [].
>> +
>> "Update description of the preference #extraDebuggerButtons
>> (Tools-ct.1128)"
>> (Preferences preferenceAt: #extraDebuggerButtons) instVarNamed:
>> ''helpString'' put: ''If true, debugger windows will show *two* rows of
>> buttons -- the debugger-specific row (proceed, restart, etc.) and also the
>> conventional code-tools row. This preference overrides the "Optional
>> buttons" preference for debuggers.''.'!
>>
>>
>>
>
--
_,,,^..^,,,_
best, Eliot
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20220728/e3074ceb/attachment.html>
More information about the Squeak-dev
mailing list
|