Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

IntelliSense Controller #43

Open
sharwell opened this issue Oct 18, 2014 · 0 comments
Open

IntelliSense Controller #43

sharwell opened this issue Oct 18, 2014 · 0 comments

Comments

@sharwell
Copy link
Member

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)?
    • Automatically triggered by typing a space (e.g. the space after typing override in 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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant