public void MenuItemCallback(object sender, EventArgs e)
        {
            if (ShowErrorMessageAndReturnTrueIfNoSolutionOpen())
            {
                return;
            }

            var dte = Package.GetGlobalService(typeof(DTE)) as DTE;

            string[] selectedProjectNames = DteUtil.GetSelectedItemNames(dte);

            IRoslynSolutionAnalysis roslyn = new RoslynSolutionAnalysis();

            var allProjectNamesToLoad = roslyn.GetProjectsDirectlyReferencing(dte.Solution.FileName, selectedProjectNames);

            DteUtil.EnsureProjectsLoadedByNames(dte, allProjectNamesToLoad, false);

            string message = "Load projects referencing selected projects directly complete";

            // Show a message box to prove we were here
            VsShellUtilities.ShowMessageBox(
                this.ServiceProvider,
                message,
                ProjectFocuserCommandPackage.MessageBoxName,
                OLEMSGICON.OLEMSGICON_INFO,
                OLEMSGBUTTON.OLEMSGBUTTON_OK,
                OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST);
        }
示例#2
0
        /// <summary>
        /// 定位方法
        /// </summary>
        /// <returns></returns>
        private bool ToFunc(Window win)
        {
            // 匹配方法定义代码
            string pattern = @"\w_ \.\<\>\[\]\t\n";

            switch (_funcInfo.ParamNum)
            {
            // -1不匹配参数个数
            case -1:
                pattern = $@"public\svirtual\s[a-zA-Z]+\s{_funcInfo.Func}\([^\)]*\)";
                break;

            case 0:
                pattern = $@"public\svirtual\s[a-zA-Z]+\s{_funcInfo.Func}\(\)";
                break;

            case 1:
                pattern = $@"public\svirtual\s[a-zA-Z]+\s{_funcInfo.Func}\([{pattern}]+\)";
                break;

            default:
                pattern =
                    $@"public\svirtual\s[a-zA-Z]+\s{_funcInfo.Func}\(([{pattern}]+,){{{_funcInfo.ParamNum - 1}}}[{pattern}]+\)";
                break;
            }

            return(DteUtil.ToCode(win, pattern));
        }
示例#3
0
        public void MenuItemCallback(object sender, EventArgs e)
        {
            if (ShowErrorMessageAndReturnTrueIfNoSolutionOpen())
            {
                return;
            }

            DteUtil.EnsureSelectedProjReferencesAreLoadedCommand(ServiceProvider, false);
        }
示例#4
0
        /// <summary>
        /// 根据service名称获取require引用代码
        /// </summary>
        /// <param name="service"></param>
        /// <returns>例如:Mysoft.Gtxt.GtFaMng.AppServices.GtFaAppService</returns>
        private string GetJs(string service)
        {
            // appService = require("Mysoft.Gtxt.GtFaMng.AppServices.GtFaAppService")
            string text = DteUtil.FindCode(Dte.ActiveWindow, $@"\b{service}\s+=\s+require\([""|'].+?[""|']\)");

            string pattern = $@"(?<=\brequire\([""|']).+?(?=[""|']\))";
            string value   = Regex.Match(text, pattern, RegexOptions.IgnoreCase).Value;

            return(value.Trim());
        }
示例#5
0
        /// <summary>
        /// 获取触发点字符串
        /// </summary>
        /// <returns></returns>
        private string GetSelection()
        {
            // 触发内容
            string code = DteUtil.GetSelection(Dte);

            // 没有选中内容则获取当前行代码
            if (string.IsNullOrEmpty(code))
            {
                code = DteUtil.GetSelectString(Dte);
            }

            return(code);
        }
示例#6
0
        /// <summary>
        /// 转到定义
        /// </summary>
        public override void Goto()
        {
            // 解析
            string selection = DteUtil.GetSelectRowCode(Dte);

            if (string.IsNullOrWhiteSpace(selection))
            {
                return;
            }
            AnalyzeInfo(selection);

            // 校验
            if (string.IsNullOrEmpty(_funcInfo.FullName))
            {
                MessageBox.Show("该方法缺少引用,请检查require!");
                return;
            }

            // 查找
            string path = GetFullPath();

            if (string.IsNullOrEmpty(path))
            {
                MessageBox.Show("未找到对应的后端文件!");
                return;
            }

            Window win = Dte.ItemOperations.OpenFile(path);

            if (!DteUtil.ToCode(win, _funcInfo))
            {
                if (_funcInfo.ParamNum > -1)
                {
                    // 如果带参数匹配不到,那么仅匹配方法名
                    _funcInfo.ParamNum = -1;

                    if (ToFunc(win))
                    {
                        MessageBox.Show("未找到匹配的方法,已定位到同名方法!");
                        return;
                    }
                }

                MessageBox.Show("未找到匹配的方法!");
                return;
            }
        }
        public void MenuItemCallback(object sender, EventArgs e)
        {
            if (ShowErrorMessageAndReturnTrueIfNoSolutionOpen())
            {
                return;
            }

            var componentModel = Package.GetGlobalService(typeof(SComponentModel)) as IComponentModel;
            var dte            = Package.GetGlobalService(typeof(DTE)) as DTE;
            var slnPath        = dte.Solution.FileName;

            IVsOutputWindowPane customPane = DteUtil.GetThisExtensionOutputPane();

            customPane.OutputStringThreadSafe($"Starting full compilation of {slnPath}\r\n");

            IRoslynSolutionAnalysis roslyn = new RoslynSolutionAnalysis();

            roslyn.CompileFullSolutionInBackgroundAndReportErrors(slnPath, (message) => customPane.OutputStringThreadSafe(message));
        }
示例#8
0
 /// <summary>
 /// 解析代码设置目标对象
 /// </summary>
 private void AnalyzeInfo()
 {
     DteUtil.AnalyzeFunc(Dte, ref _funcInfo);
 }
示例#9
0
        /// <summary>
        /// 定位SQL
        /// </summary>
        /// <param name="win"></param>
        /// <param name="sql"></param>
        /// <returns></returns>
        private bool ToSQL(Window win, string sql)
        {
            string pattern = $@"\b{sql}\b";

            return(DteUtil.ToCode(win, pattern));
        }