in vsintegration/src/FSharp.LanguageService.Base/ViewFilter.cs [322:429]
protected virtual int QueryCommandStatus(ref Guid guidCmdGroup, uint nCmdId)
{
ExpansionProvider ep = GetExpansionProvider();
if (ep != null && ep.InTemplateEditingMode)
{
int hr = 0;
if (ep.HandleQueryStatus(ref guidCmdGroup, nCmdId, out hr))
return hr;
}
if (guidCmdGroup == typeof(VsCommands).GUID)
{
VsCommands cmd = (VsCommands)nCmdId;
switch (cmd)
{
case VsCommands.GotoDefn:
case VsCommands.GotoDecl:
case VsCommands.GotoRef:
case VsCommands.Goto:
return (int)OLECMDF.OLECMDF_SUPPORTED | (int)OLECMDF.OLECMDF_ENABLED;
}
}
else if (guidCmdGroup == typeof(VsCommands2K).GUID)
{
VsCommands2K cmd = (VsCommands2K)nCmdId;
switch (cmd)
{
case VsCommands2K.FORMATDOCUMENT:
if (this.CanReformat())
return (int)OLECMDF.OLECMDF_SUPPORTED | (int)OLECMDF.OLECMDF_ENABLED;
break;
case VsCommands2K.FORMATSELECTION:
if (this.CanReformat())
return (int)OLECMDF.OLECMDF_SUPPORTED | (int)OLECMDF.OLECMDF_ENABLED;
break;
case VsCommands2K.COMMENT_BLOCK:
case VsCommands2K.UNCOMMENT_BLOCK:
if (this.commentSupported)
return (int)OLECMDF.OLECMDF_SUPPORTED | (int)OLECMDF.OLECMDF_ENABLED;
break;
case VsCommands2K.SHOWMEMBERLIST:
case VsCommands2K.COMPLETEWORD:
case VsCommands2K.PARAMINFO:
return (int)OLECMDF.OLECMDF_SUPPORTED | (int)OLECMDF.OLECMDF_ENABLED;
case VsCommands2K.QUICKINFO:
if (this.service.Preferences.EnableQuickInfo)
{
return (int)OLECMDF.OLECMDF_SUPPORTED | (int)OLECMDF.OLECMDF_ENABLED;
}
break;
// case VsCommands2K.HANDLEIMEMESSAGE:
// return 0;
// Let the core editor handle this. Stop outlining also removes user
// defined hidden sections so it is handy to keep this enabled.
// case VsCommands2K.OUTLN_STOP_HIDING_ALL:
// int rc = (int)OLECMDF.OLECMDF_SUPPORTED;
// if (this.source.OutliningEnabled) {
// rc |= (int)OLECMDF.OLECMDF_ENABLED;
// }
// return rc;
case VsCommands2K.OUTLN_START_AUTOHIDING:
if (this.source.OutliningEnabled)
{
return (int)OleConstants.OLECMDERR_E_NOTSUPPORTED;
}
return (int)OLECMDF.OLECMDF_SUPPORTED | (int)OLECMDF.OLECMDF_ENABLED;
case VsCommands2K.OUTLN_STOP_HIDING_ALL: //"stop outlining" on context menu
if (this.source.OutliningEnabled)
{
return (int)OLECMDF.OLECMDF_SUPPORTED | (int)OLECMDF.OLECMDF_ENABLED;
}
return (int)OleConstants.OLECMDERR_E_NOTSUPPORTED;
}
}
else if (guidCmdGroup == Microsoft.VisualStudio.VSConstants.VsStd11)
{
if (nCmdId == (uint)Microsoft.VisualStudio.VSConstants.VSStd11CmdID.ExecuteSelectionInInteractive)
{
return (int)OLECMDF.OLECMDF_SUPPORTED | (int)OLECMDF.OLECMDF_ENABLED;
}
else if (nCmdId == (uint)Microsoft.VisualStudio.VSConstants.VSStd11CmdID.ExecuteLineInInteractive)
{
return (int)OLECMDF.OLECMDF_SUPPORTED | (int)OLECMDF.OLECMDF_ENABLED | (int)OLECMDF.OLECMDF_DEFHIDEONCTXTMENU;
}
}
else if (guidCmdGroup == guidInteractive)
{
if (nCmdId == cmdIDDebugSelection)
{
var dbgState = Interactive.Hooks.GetDebuggerState(GetProjectSystemPackage());
if (dbgState == Interactive.FsiDebuggerState.AttachedNotToFSI)
return (int)OLECMDF.OLECMDF_INVISIBLE;
else
return (int)OLECMDF.OLECMDF_SUPPORTED | (int)OLECMDF.OLECMDF_ENABLED;
}
}
return (int)NativeMethods.E_FAIL; // delegate to next command target.
}