Parameter Info in a Legacy Language Service
Note
This article applies to Visual Studio 2015. If you're looking for the latest Visual Studio documentation, see Visual Studio documentation. We recommend upgrading to the latest version of Visual Studio. Download it here
The IntelliSense Parameter Info tooltip provides users with hints about where they are in a language construct.
Legacy language services are implemented as part of a VSPackage, but the newer way to implement language service features is to use MEF extensions. To find out more, see Extending the Editor and Language Services.
Note
We recommend that you begin to use the new editor API as soon as possible. This will improve the performance of your language service and let you take advantage of new editor features.
How Parameter Info Tooltips Work
When you type a statement in the editor, the VSPackage displays a small tooltip window containing the definition of the statement being typed. For example, if you type a Microsoft Foundation Classes (MFC) statement (such as pMainFrame ->UpdateWindow
) and press the opening parenthesis key to begin listing parameters, a method tip appears displaying the definition of the UpdateWindow
method.
Parameter Info tooltips are usually used in conjunction with statement completion. They are most useful for languages that have parameters or other formatted information after the method name or keyword.
The Parameter Info tooltips are initiated by the language service through command interception. To intercept user characters, your language service object must implement the IOleCommandTarget interface and pass the text view a pointer to your IOleCommandTarget implementation, by calling the AddCommandFilter method in the IVsTextView interface. The command filter intercepts commands that you type into the code window. Monitor the command information to know when to display parameter information to the user. You can use the same command filter for statement completion, error markers, and so forth.
When you type a keyword for which the language service can provide hints, then the language service creates an IVsMethodTipWindow object and calls the UpdateTipWindow method in the IVsTextView interface to notify the IDE to display a hint. Create the IVsMethodTipWindow object using VSLocalCreateInstance
and specifying the coclass CLSID_VsMethodTipWindow
. VsLocalCreateInstance
is a function defined in the header file vsdoc.h that calls QueryService
for the local registry and calls CreateInstance
on this object for the CLSID_VsMethodTipWindow
.
Providing a Method Tip
To provide a method tip, call the SetMethodData method in the IVsMethodTipWindow interface, passing it your implementation of the IVsMethodData interface.
When your IVsMethodData class is invoked, its methods are called in the following order:
-
Returns the position and length of the relevant data in the current text buffer. This instructs the IDE to not obscure that data with the tooltip window.
-
Returns the method number (zero-based index) you want to be displayed initially. For example, if you return zero, then the first overloaded method is initially presented.
-
Returns the number of overloaded methods that are applicable in the current context. If you return a value greater than 1 for this method, then the text view displays up and down arrows for you. If you click the down arrow, the IDE calls the NextMethod method. If you click the up arrow, the IDE calls the PrevMethod method.
-
The text of the Parameter Info tooltip is constructed during several calls to the GetMethodText and GetParameterText methods.
-
Returns the number of parameters to display in the method.
-
If you return a method number corresponding with the overload you want displayed, this method is called, followed by a call to the UpdateView method.
-
Informs your language service to update the editor when a method tip is displayed. In the UpdateView method, call the following:
<pTxWin> ->UpdateTipWindow(<pTip>, UTW_CONTENTCHANGED | UTW_CONTEXTCHANGED).
-
You receive a call to the OnDismiss method when you close the method tip window.