internal override int QueryStatusOnNode()

in Nodejs/Product/Nodejs/Project/DependencyNode.cs [119:200]


        internal override int QueryStatusOnNode(Guid cmdGroup, uint cmd, IntPtr pCmdText, ref QueryStatusResult result)
        {
            //  Latter condition is because it's only valid to carry out npm operations
            //  on top level dependencies of the user's project, not sub-dependencies.
            //  Performing operations on sub-dependencies would just break things.
            if (cmdGroup == Guids.NodejsNpmCmdSet)
            {
                switch (cmd)
                {
                    case PkgCmdId.cmdidNpmOpenModuleHomepage:
                        if (this.Package.Homepages != null)
                        {
                            using (var enumerator = this.Package.Homepages.GetEnumerator())
                            {
                                if (enumerator.MoveNext() && !string.IsNullOrEmpty(enumerator.Current))
                                {
                                    result = QueryStatusResult.ENABLED | QueryStatusResult.SUPPORTED;
                                }
                                else
                                {
                                    result = QueryStatusResult.SUPPORTED;
                                }
                            }
                        }
                        return VSConstants.S_OK;
                }

                if (null == this._parent)
                {
                    switch (cmd)
                    {
                        case PkgCmdId.cmdidNpmInstallSingleMissingModule:
                            if (null == this._projectNode.ModulesNode
                                || this._projectNode.ModulesNode.IsCurrentStateASuppressCommandsMode())
                            {
                                result = QueryStatusResult.SUPPORTED;
                            }
                            else
                            {
                                if (null != this.Package)
                                {
                                    result = QueryStatusResult.ENABLED | QueryStatusResult.SUPPORTED;
                                }
                                else
                                {
                                    result = QueryStatusResult.SUPPORTED;
                                }
                            }
                            return VSConstants.S_OK;

                        case PkgCmdId.cmdidNpmUpdateSingleModule:
                        case PkgCmdId.cmdidNpmUninstallModule:
                            if (null != this._projectNode.ModulesNode &&
                                !this._projectNode.ModulesNode.IsCurrentStateASuppressCommandsMode())
                            {
                                result = QueryStatusResult.ENABLED | QueryStatusResult.SUPPORTED;
                            }
                            else
                            {
                                result = QueryStatusResult.SUPPORTED;
                            }
                            return VSConstants.S_OK;

                        case PkgCmdId.cmdidNpmInstallModules:
                        case PkgCmdId.cmdidNpmUpdateModules:
                            result = QueryStatusResult.SUPPORTED | QueryStatusResult.INVISIBLE;
                            return VSConstants.S_OK;
                    }
                }
            }
            else if (cmdGroup == Microsoft.VisualStudioTools.Project.VsMenus.guidStandardCommandSet2K)
            {
                switch ((VsCommands2K)cmd)
                {
                    case CommonConstants.OpenFolderInExplorerCmdId:
                        result = QueryStatusResult.SUPPORTED | QueryStatusResult.ENABLED;
                        return VSConstants.S_OK;
                }
            }

            return base.QueryStatusOnNode(cmdGroup, cmd, pCmdText, ref result);
        }