in vsintegration/src/FSharp.LanguageService.Base/ViewFilter.cs [568:637]
public virtual void HandlePostExec(ref Guid guidCmdGroup, uint nCmdId, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut, bool bufferWasChanged) {
if (guidCmdGroup == typeof(VsCommands2K).GUID) {
Microsoft.VisualStudio.VSConstants.VSStd2KCmdID cmd = (VsCommands2K)nCmdId;
char ch = '\0';
if (cmd == VsCommands2K.TYPECHAR && pvaIn != IntPtr.Zero) {
Variant v = Variant.ToVariant(pvaIn);
ch = v.ToChar();
#if TRACE_EXEC
Trace.WriteLine(String.Format("ExecCommand: {0}, '{1}', {2}", cmd.ToString(), ch.ToString(), (int)ch));
#endif
}
switch (cmd) {
case Microsoft.VisualStudio.VSConstants.VSStd2KCmdID.RETURN:
gotEnterKey = true;
// Handle smart-indentation after core text editor has
// actually performed the newline operation.
if (bufferWasChanged && !this.wasCompletionActive && this.service.Preferences.IndentStyle == IndentingStyle.Smart) {
if (HandleSmartIndent())
break;
}
break;
case VsCommands2K.TYPECHAR:
case VsCommands2K.BACKSPACE:
case VsCommands2K.TAB:
case VsCommands2K.BACKTAB:
case VsCommands2K.DELETE:
// check general trigger characters for intellisense
if (bufferWasChanged) {
this.source.OnCommand(this.textView, cmd, ch);
}
break;
// these commands are important for parameter info and parentheses matching
case VsCommands2K.LEFT:
case VsCommands2K.LEFT_EXT:
case VsCommands2K.RIGHT:
case VsCommands2K.RIGHT_EXT:
case VsCommands2K.WORDNEXT:
case VsCommands2K.WORDNEXT_EXT:
case VsCommands2K.WORDPREV:
case VsCommands2K.WORDPREV_EXT:
// handle keys that change the location as well to make sure that parameter info disappears
case VsCommands2K.UP:
case VsCommands2K.UP_EXT:
case VsCommands2K.DOWN:
case VsCommands2K.DOWN_EXT:
case VsCommands2K.HOME:
case VsCommands2K.HOME_EXT:
case VsCommands2K.END:
case VsCommands2K.END_EXT:
// check general trigger characters for intellisense
this.source.OnCommand(this.textView, cmd, ch);
break;
case VsCommands2K.OUTLN_STOP_HIDING_ALL:
this.source.DisableOutlining();
break;
case VsCommands2K.OUTLN_START_AUTOHIDING:
// subtle way of calling this.source.OnUntypedParseInfoUpdate(..);
this.source.RecordChangeToView();
break;
case VsCommands2K.OUTLN_TOGGLE_ALL:
this.source.ToggleRegions();
break;
}
}
return;
}