Richard, something like this should do the trick:
| searcher symbols|
symbols := Set new.
searcher := ParseTreeSearcher new.
searcher
answer: false;
matches: 'self gbsMessenger
statusTag: `@symbol
message: `@message
with: `@first
with: `@second
with: `@third'
do: [:node :answer | | literalValue |
literalValue := node arguments first value.
literalValue isSymbol
ifTrue: [symbols add: literalValue].
false].
SmalllintChecker newWithContext
rule: (
TransformationRule new
rewriteUsing: searcher;
yourself);
environment: (
ClassEnvironment
onEnvironment: BrowserEnvironment new
classes: ((System loadedApplications select: [:app | app name beginsWith: #Gb ] )
inject: OrderedCollection new into: [:classes :app |
app withAllSubApplications do: [:subapp |
classes addAll: subapp defined;yourself ].
classes]));
run.
symbols