-
Notifications
You must be signed in to change notification settings - Fork 4
Open
Labels
Description
This is a high-level issue to discuss the requirements for supporting IntelliSense in custom extensions, with a particular focus on operations which use an IIntellisenseController (for other IntelliSense commands see #44). The controller works closely with a custom command filter to ensure operations which modify keyboard behavior work properly.
IntelliSense Operations
- Code completion (
ICompletionSession) - Member info (
ISignatureHelpSession) - Quick info (
IQuickInfoSession) - Smart tags (
ISmartTagSession)
❓ Should a single IIntellisenseController instance handle all of these items?
Code completion
- Need to distinguish between the manner in which code completion was instantiated
- Triggered by typing Ctrl+Space (Edit.CompleteWord)
- Triggered by Edit.ListMembers (like Edit.CompleteWord, but does not automatically commit a unique result)
- Automatically triggered by typing a character
- ❓ Should this further distinguish between context info (e.g. typing the first letter of a variable in the current lexical scope) and member info (e.g. typing a
.for member selection)?
- ❓ Should this further distinguish between context info (e.g. typing the first letter of a variable in the current lexical scope) and member info (e.g. typing a
- Automatically triggered by typing a space (e.g. the space after typing
overridein C#)
- Need to handle code snippets (
IVsExpansionManager) - Need to handle the Edit.ToggleCompletionMode command
- ❓ Need to handle the Edit.OverrideMembers command
- Listens to some keystrokes
- Handles some keystrokes (i.e. not passed on to the editor)
Member info
- Need to distinguish between the manner in which member info was instantiated
- Triggered by typing Ctrl+Shift+Space (Edit.ParameterInfo)
- Automatically triggered by typing a character (e.g.
()
- Listens to keyboard commands, but does not handle any keystrokes
Quick info
- ❓ Can be triggered by hovering the mouse or Edit.QuickInfo, but do we need to distinguish?
Smart tags
TBD