+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."
