Editor actions question

Hi. I need some help refining editor behaviour.

Suppose we want to build something resembling Scala's generics with upper bounds, for instance there can be a List[Bar] and a List[Foo < Bar]. Lets call "Bar" an upper bound, and "Foo" is an (optional) default type.

ListType concept then naturally has
  upperBound : Type[1]
  defaultType : Type[0..1]

and ListTypeEditor looks something like
  [- List [ ?[- % defaultType % < -] % upperBound % ] -]

where "defaultType <" part is shown conditionally.

Now the question: how to implement the following:
1. Typing "<" before %upperBound% adds new defaultType
2. Typing "<" after %upperBould% sets defaultType to upperBound and upperBound to new empty node

I tried playing with keymaps (defining "<" event on upperBound) and side transform actions but MPS just makes "<" symbol part of the upperBound name.

Any ideas?
4 comments
Comment actions Permalink
Hey,
Side transform actions should be the right tool for that problem. If MPS just extent the name, something goes wrong with the action. Check the condition.
0
Comment actions Permalink
condition is very simple: node.defaultType.isNull

I guess my question is how MPS is supposed to understand that "<" can't be part of the name and should invoke a transform action?
0
Comment actions Permalink
It's some time ago, that I've implemented this. You could try
1) set an explicit side-transform-anchor-tag in the editor cell and the action and/or
2) use a left-side-transform-action at the following cell.
0
Comment actions Permalink
tried both of these.
My question of how MPS understands when to trigger side transformations still holds
0

Please sign in to leave a comment.