The way to do this is by having a scope that matches the whole method
"head" (`at: anIndex put: aValue`, say) and add that to the symbol list
with a transformation removing the parameters.

This is not generally a trivial task, but it can be done if you can
either find a simpler matcher (usually a match instead of a begin/end
pair) or a clean separator between a method's head and body (the "hard"
way), or if you're fine without having separate scopes for method head,
body and (complete) definition.

In your example, if you can do without the `'#language_elements`
inclusion you could try a matcher like
^([-+])\s+((\w+:?)(\s*\w+)?)+
to match the whole line at once and assign some scope to the 0 capture.

I'll have to document the "hard" way properly some day, but the gist is
you can match a construct of the form `X stuff Y more Z` with a pair
of begin/end matchers for X and Z and then including nested begin/end
matchers for X to Y and Y to Z using lots of lookaheads and -behinds.

An example is included in my Maude grammar[1] as the `#operator` rule
with a matcher for the whole operator construct and nested matchers for
its range, domain and definition.

Hope that helps anyway?


1: yeah language elements is left over from a previous attempt at something else that I need to return to. Not needed here. Should have clipped.

I've managed to do... add to symbol list or highlight syntax correctly but not both at once.

Perhaps there is an answer above and I missed it, but is there a way to:

match entire thing and transform symbol <-- yes because i have done that
but also have highlighting so that

at: anIndex put: aValue

has at: and put: marked as 'function' 
anIndex and aValue marked as 'parameters'

AND

then remove at: & put: from the symbol list?

I can do highlighting. I can do symbols. I can't figure out how to combine the 2 together.