[squeak-dev] command-E
Chris Muller
asqueaker at gmail.com
Tue Apr 19 00:44:01 UTC 2016
I believe this feature was intended to help humans find methods from
seeing them in labels on the UI. Symbols would not normally concern
that use-case.
Having said that, one could argue that Symbols are Strings, and
therefore a Symbol used as a literal in a method is a String used as a
literal in a method, and the function is, "find a string literal".
For example, even in this case, we have a Symbol is referenced which
we intend to perform:
selectorToPerform := someCondition ifTrue: [ #add: ] ifFalse: [ #remove: ]
Then searching for the string 'add' would regard that a hit.
It seems like it shouldn't be a big deal even for the first use-case..
On Mon, Apr 18, 2016 at 6:35 PM, Eliot Miranda <eliot.miranda at gmail.com> wrote:
> Hi All,
>
> the "find method with string literals containing..." command, command-E
> does /not/ look inside Symbol literals. Here's a case where I specifically
> wanted it to, I wanted to find the reference to CogSimStackEntry in
>
> instVarNamesAndTypesForTranslationDo: aBinaryBlock
> "enumerate aBinaryBlock with the names and C type strings for the inst vars
> to include in a CogSSOptStatus struct."
>
> self instVarNames do:
> [:ivn|
> aBinaryBlock
> value: ivn
> value: (ivn = 'ssEntry'
> ifTrue: [#'CogSimStackEntry *']
> ifFalse: [#sqInt])]
>
> The method in question is
>
> SystemNavigation>>browseMethodsWithString: aString matchCase: caseSensitive
> "Launch a browser on all methods that contain string literals with aString
> as a substring. Make the search case-sensitive or insensitive as dictated by
> the caseSensitive boolean parameter"
>
> self browseAllSelect:
> [:method |
> method hasLiteralSuchThat: [:lit |
> (lit isString and: [lit isSymbol not]) and:
> [lit includesSubstring: aString caseSensitive: caseSensitive]]]
> name: 'Methods with string ', aString printString, (caseSensitive ifTrue:
> [' (case-sensitive)'] ifFalse: [' (case-insensitive)'])
> autoSelect: aString
>
> Would people object if I changed this? One way to change it is to exclude
> Symbol literals that are also messages in the receiver. So, e.g...
>
> browseMethodsWithString: aString matchCase: caseSensitive
> "Launch a browser on all methods that contain string literals with aString
> as a substring. Make the search case-sensitive or insensitive as dictated by
> the caseSensitive boolean parameter"
>
> self browseAllSelect:
> [:method |
> method hasLiteralSuchThat:
> [:lit |
> lit isString
> and: [(lit includesSubstring: aString caseSensitive: caseSensitive)
> and: [lit isSymbol
> ifTrue: [(method messages includes: lit) not]
> ifFalse: [true]]]]]
> name: 'Methods with string ', aString printString, (caseSensitive ifTrue:
> [' (case-sensitive)'] ifFalse: [' (case-insensitive)'])
> autoSelect: aString
>
> Would anyone object to me committing this definition?
>
> _,,,^..^,,,_
> best, Eliot
>
>
>
More information about the Squeak-dev
mailing list
|