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); }
/// <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)); }
public void MenuItemCallback(object sender, EventArgs e) { if (ShowErrorMessageAndReturnTrueIfNoSolutionOpen()) { return; } DteUtil.EnsureSelectedProjReferencesAreLoadedCommand(ServiceProvider, false); }
/// <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()); }
/// <summary> /// 获取触发点字符串 /// </summary> /// <returns></returns> private string GetSelection() { // 触发内容 string code = DteUtil.GetSelection(Dte); // 没有选中内容则获取当前行代码 if (string.IsNullOrEmpty(code)) { code = DteUtil.GetSelectString(Dte); } return(code); }
/// <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)); }
/// <summary> /// 解析代码设置目标对象 /// </summary> private void AnalyzeInfo() { DteUtil.AnalyzeFunc(Dte, ref _funcInfo); }
/// <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)); }