diff --git a/ivette/src/renderer/ASTview.tsx b/ivette/src/renderer/ASTview.tsx index d21a73b27ea2376869a9a98478ea912595337a74..b308be9465aefd90b98f33c650385668cda022e9 100644 --- a/ivette/src/renderer/ASTview.tsx +++ b/ivette/src/renderer/ASTview.tsx @@ -89,6 +89,7 @@ const ASTview = () => { const [theme, setTheme] = Dome.useGlobalSetting('ASTview.theme', 'default'); const [fontSize, setFontSize] = Dome.useGlobalSetting('ASTview.fontSize', 12); const [wrapText, setWrapText] = Dome.useSwitch('ASTview.wrapText', false); + const markers = States.useSyncArray('kernel.ast.markerKind'); const theFunction = select && select.function; const theMarker = select && select.marker; @@ -111,6 +112,17 @@ const ASTview = () => { const zoomOut = () => fontSize > 4 && setFontSize(fontSize - 2); const onSelection = (marker: any) => setSelect({ marker }); + function contextMenu(id: string) { + const marker = markers[id]; + if (marker && marker.kind === 'function') { + const item1 = { + label: `Go to definition of ${marker.name}`, + onClick: () => setSelect({ function: marker.name }), + }; + Dome.popupMenu([item1]); + } + } + // Theme Popup const selectTheme = (id?: string) => id && setTheme(id); @@ -155,6 +167,7 @@ const ASTview = () => { lineWrapping={wrapText} selection={theMarker} onSelection={onSelection} + onContextMenu={contextMenu} readOnly /> </>