+1

Doru


> On Feb 25, 2018, at 9:25 PM, Stephane Ducasse <[email protected]> wrote:
> 
> This is cool!
> This is also why I started to do a pass (first reverse engineering how
> ecompletion is working)
> We should regularly improve the infrastructure of our tools to enable
> the next generation.
> I love that!
> 
> marcus because indeed this code needs love.
> 
> On Sun, Feb 25, 2018 at 7:23 PM, Marcus Denker <[email protected]> wrote:
>> Hi,
>> 
>> I started to simplidy the “SmartSuggestions” code. What does it do? It adds 
>> the “suggestions” menu to the editor context menu,
>> this shows operations that make sense for the AST node a the cursor position.
>> 
>> -> removed lots of state from SugsSuggestion (label, position, …). Instead 
>> uses methods.
>> -> simplified how to define new suggestions.
>> 
>> Here is a small example: a menu to browse the defintion of variables. First 
>> we need to make a suclass of
>> SugsSuggestion.
>> 
>> 1) add a subclass of SugsSuggestion
>> 
>> SugsSuggestion subclass: #SugsBrowseVariableDefintion
>>        instanceVariableNames: ''
>>        classVariableNames: ''
>>        package: 'SmartSuggestions-Suggestion'
>> 
>> 
>> 2)  define on the class side a method that defines for which AST nodes you 
>> want the menu
>> to be shown. Here is is all Variable Nodes:
>> 
>> nodes
>>        ^{RBVariableNode}
>> 
>> 3) On the instance side, we just need to define a label
>> 
>> 
>> label
>>        ^ 'Browse Variable definition' translated
>> 
>> 4) and we need to define #execute which just implements what is supposed to 
>> happen:
>> 
>> execute
>>        | semanticVariable |
>>        semanticVariable := context selectedNode binding.
>>        semanticVariable isInstance ifTrue: [ ^semanticVariable slot 
>> definingClass browse ].
>>        semanticVariable isTemp ifTrue: [ ^semanticVariable scope node method 
>> browse ].
>>        semanticVariable isClassVariable ifTrue: [ ^semanticVariable scope 
>> getClass browse ].
>>        semanticVariable isGlobal ifTrue: [ Smalltalk globals inspect ].
>> 
>> DONE.  The simplified SmartSuggestions are in the latest Pharo7, so you can 
>> play with the code
>> there, the SugsBrowseVariableDefintion is not (yet?) in Pharo7. (maybe 
>> someone wants to submit it?)
>> 
>> 
>> Next steps:
>>        - get rid of the “Context” and instead embed the AST in the editor. 
>> This will be nice for *many*
>>          other clients (AST Node navigation, code completion, syntax 
>> highlighting…)
>> 
>>        - liberate the AST menu entries from the “suggestions” submenu: they 
>> should just appear
>>          in the standard editor context menu.
>> 
>> 
>>        Marcus
> 

--
www.tudorgirba.com
www.feenk.com

"Every thing has its own flow."






Reply via email to