[squeak-dev] The Inbox: Tools-eem.1169.mcz

Chris Muller asqueaker at gmail.com
Wed Jul 27 01:29:41 UTC 2022


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.

  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.

 - 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.''.'!
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20220726/b4c51951/attachment.html>


More information about the Squeak-dev mailing list