Excel-DNA / IntelliSense

Add in-sheet IntelliSense for Excel UDFs
MIT License
166 stars 52 forks source link

Add tip resources from VBA code comments and other features suggestions. #137

Open loquat opened 2 months ago

loquat commented 2 months ago

it seems Intellisense tip have 3 types of resources 1) external xml file with $workbook.name$..IntelliSense.xml 2) built-in xml part inside workbook using Workbook.CustomXMLParts.Add strXMLContent 3) worksheet with a name of "IntelliSense" i have found two problems 1) when tip resources updated then tips will not auto-update maybe we can add a callback function to update tip resources by hand. 2) when the external and built-in xml resource does not exist, the worksheet("Intellisense") resource seems not load which seems like a bug and i have suggestions like below 1) maybe we can add a new resource, which read from VBA IDE.VBE code comments '@FuncDesc:A function described by vba comments '@Param1:FirstArg As Variant '@Desc1:this is for FirstArg ' and this for FirstArg too '@Param2:SndArg As Long '@Desc2:this is for SndArg Function MyVbaFunction(FirstArg, SndArg) MyVbaFunction = FirstArg + SndArg End Function 2) when four types of tip resources all on i think the tip load priority can be like this: vba comments -> worksheet -> external xml -> built in xml because vba comments and worksheet data can be set and update more conveniently. 3) maybe we can add a callback function to set custom tip data like this. Sub GetTipString(byref strTipContent as string) strTipContent = ReadTextFile("c:\1.xml") End Sub

govert commented 1 month ago

Hi @loquat - thank you for the great feedback.

There is a way to refresh the IntelliSense server, though it's only easy to call from C# as IntelliSenseServer.Refresh(). From VBA one would have to get the active IntelliSense server Id from the environment variable EXCELDNA_INTELLISENSE_ACTIVE_SERVER, then call a magic hidden function called IntelliSenseServerControl_{activeServerId} with the argument "REFRESH". I'll try to make a VBA sample when I get a chance. This would rescan all the IntelliSense sources for descriptions etc.

Your point 5 indeed sounds like a bug - I'll have to check.

Scanning the VBA for such pseudo-attributes is an interesting suggestion.

What do you see as the advantage of option 8 beyond writing the external file like 1 and having a refresh option?

loquat commented 1 month ago

I'll try to make a VBA sample when I get a chance. This would rescan all the IntelliSense sources for descriptions etc.

----thanks in advance, i will try myself too.

Scanning the VBA for such pseudo-attributes is an interesting suggestion.

----i know some people would use this kind of comments to auto generate help files like chm. ----so this idea should take visual studio ide features as reference.

What do you see as the advantage of option 8 beyond writing the external file like 1 and having a refresh option?

----that is my idea for vba developers to update or add tip resources at runtime as their wish. such as: IntelliSenseServerControl{activeServerId} "StartServer" IntelliSenseServerControl{activeServerId} "ReStartServer" IntelliSenseServerControl{activeServerId} "StopServer" IntelliSenseServerControl{activeServerId} "UpdateResources", enuAll 'update tip resources follow option 7 loading priority. update externalxml or worksheet tip or both, it will edit/replace tip resource items, no deleting the old ones. IntelliSenseServerControl{activeServerId} "AddCustomResource", enuXML, "c:\1.xml" IntelliSenseServerControl{activeServerId} "AddCustomResource", enuJSON, "c:\1.json" IntelliSenseServerControl_{activeServerId} "AddCustomResource", enuString, strTips 'one can add func tips once a time. when i say AddCustomResource, it means edit/replace tip resouce items, no deleting the old ones.