public static ClangTidyPredefinedChecksOptionsView GetClangTidyPredefinedChecksOptionsView() { ClangTidyPredefinedChecksOptionsView clangTidyPredefinedChecksOptionsView = new ClangTidyPredefinedChecksOptionsView(); clangTidyPredefinedChecksOptionsView.LoadSettingsFromStorage(); return(clangTidyPredefinedChecksOptionsView); }
protected void RunScript(string aCommandName, ClangTidyOptionsView mTidyOptions = null, ClangTidyPredefinedChecksOptionsView mTidyChecks = null, ClangTidyCustomChecksOptionsView mTidyCustomChecks = null, ClangFormatOptionsView aClangFormatView = null) { try { mCompileTidyScriptBuilder = new ClangCompileTidyScript(); mCompileTidyScriptBuilder.ConstructParameters(mGeneralOptions, mTidyOptions, mTidyChecks, mTidyCustomChecks, aClangFormatView, DTEObj, VsEdition, VsVersion); string solutionPath = DTEObj.Solution.FullName; mOutputManager = new OutputManager(DTEObj); InitPowerShell(); ClearWindows(); mOutputManager.AddMessage($"\n{OutputWindowConstants.kStart} {aCommandName}\n"); StatusBarHandler.Status(aCommandName + " started...", 1, vsStatusAnimation.vsStatusAnimationBuild, 1); foreach (var item in mItemsCollector.GetItems) { var script = mCompileTidyScriptBuilder.GetScript(item, solutionPath); if (!mCommandsController.Running) { break; } mOutputManager.Hierarchy = AutomationUtil.GetItemHierarchy(ServiceProvider, item); var process = mPowerShell.Invoke(script, mRunningProcesses); if (mOutputManager.MissingLlvm) { mOutputManager.AddMessage(ErrorParserConstants.kMissingLlvmMessage); break; } } if (!mOutputManager.EmptyBuffer) { mOutputManager.AddMessage(String.Join("\n", mOutputManager.Buffer)); } if (!mOutputManager.MissingLlvm) { mOutputManager.Show(); mOutputManager.AddMessage($"\n{OutputWindowConstants.kDone} {aCommandName}\n"); } if (mOutputManager.HasErrors) { ErrorManager.Instance.AddErrors(mOutputManager.Errors); } } catch (Exception) { mOutputManager.Show(); mOutputManager.AddMessage($"\n{OutputWindowConstants.kDone} {aCommandName}\n"); } finally { StatusBarHandler.Status(aCommandName + " finished", 0, vsStatusAnimation.vsStatusAnimationBuild, 0); } }
private string GetTidyParameters(ClangTidyOptionsView aTidyOptions, ClangTidyPredefinedChecksOptionsView aTidyChecks, ClangTidyCustomChecksOptionsView aTidyCustomChecks) { string parameters = string.Empty; if (0 == string.Compare(ComboBoxConstants.kTidyFile, ClangTidyUseChecksFromConvertor.ToString(aTidyOptions.UseChecksFrom))) { parameters = ScriptConstants.kTidyFile; mUseTidyFile = true; } else if (0 == string.Compare(ComboBoxConstants.kCustomChecks, ClangTidyUseChecksFromConvertor.ToString(aTidyOptions.UseChecksFrom))) { if (false == string.IsNullOrWhiteSpace(aTidyCustomChecks.TidyChecks)) { parameters = $",{aTidyCustomChecks.TidyChecks.Replace(';', ',')}"; } } else if (0 == string.Compare(ComboBoxConstants.kPredefinedChecks, ClangTidyUseChecksFromConvertor.ToString(aTidyOptions.UseChecksFrom))) { foreach (PropertyInfo prop in aTidyChecks.GetType().GetProperties()) { object[] propAttrs = prop.GetCustomAttributes(false); object clangCheckAttr = propAttrs.FirstOrDefault(attr => typeof(ClangCheckAttribute) == attr.GetType()); object displayNameAttrObj = propAttrs.FirstOrDefault(attr => typeof(DisplayNameAttribute) == attr.GetType()); if (null == clangCheckAttr || null == displayNameAttrObj) { continue; } DisplayNameAttribute displayNameAttr = (DisplayNameAttribute)displayNameAttrObj; var value = prop.GetValue(aTidyChecks, null); if (Boolean.TrueString != value.ToString()) { continue; } parameters = $"{parameters},{displayNameAttr.DisplayName}"; } } if (string.Empty != parameters) { parameters = string.Format("{0} ''{1}{2}''", (true == aTidyOptions.Fix ? ScriptConstants.kTidyFix : ScriptConstants.kTidy), (mUseTidyFile ? "" : "-*"), parameters); } if (null != aTidyOptions.HeaderFilter && false == string.IsNullOrWhiteSpace(aTidyOptions.HeaderFilter.HeaderFilters)) { parameters = string.Format("{0} {1} ''{2}''", parameters, ScriptConstants.kHeaderFilter, true == string.IsNullOrWhiteSpace(ClangTidyHeaderFiltersConvertor.ScriptEncode(aTidyOptions.HeaderFilter.HeaderFilters)) ? aTidyOptions.HeaderFilter.HeaderFilters : ClangTidyHeaderFiltersConvertor.ScriptEncode(aTidyOptions.HeaderFilter.HeaderFilters)); } return(parameters); }
public ClangTidyPredefinedChecksOptionsUserControl(ClangTidyPredefinedChecksOptionsView clangTidyChecksOptions) { InitializeComponent(); wpfPropGrid.SelectedObject = clangTidyChecksOptions; Loaded += delegate { UIElementsActivator.Activate(HwndSource.FromVisual(this) as HwndSource); }; }
public async Task ClangTidyPredefinedChecksOptionsView_NotNullAsync() { //Arrange await UnitTestUtility.LoadPackageAsync(); //Act ClangTidyPredefinedChecksOptionsView tidyPredefinedChecks = SettingsProvider.TidyPredefinedChecks; //Assert Assert.NotNull(tidyPredefinedChecks); }
/// <summary> /// Instance constructor /// </summary> public GenericScriptBuilder(ClangGeneralOptionsView aGeneralOptions, ClangTidyOptionsView aTidyOptions, ClangTidyPredefinedChecksOptionsView aTidyChecks, ClangTidyCustomChecksOptionsView aTidyCustomChecks, ClangFormatOptionsView aClangFormatView, string aVsEdition, string aVsVersion, bool aTidyFixFlag = false) { mGeneralOptions = aGeneralOptions; mTidyOptions = aTidyOptions; mTidyChecks = aTidyChecks; mTidyCustomChecks = aTidyCustomChecks; mClangFormatView = aClangFormatView; mVsEdition = aVsEdition; mVsVersion = aVsVersion; mTidyFixFlag = aTidyFixFlag; mUseClangTidyConfigFile = false; }
public async Task PredefinedChecks_ChangeValue_CompareViewToFileAsync() { await UnitTestUtility.LoadPackageAsync(); SettingsTestUtility.ResetClangTidyPredefinedChecksOptionsView(); ClangTidyPredefinedChecksOptionsView tidyPredefinedChecksOptionsView = SettingsProvider.TidyPredefinedChecks; tidyPredefinedChecksOptionsView.AbseilDurationDivision = true; SettingsTestUtility.SaveClangTidyPredefinedChecksOptionsView(tidyPredefinedChecksOptionsView); ClangTidyPredefinedChecksOptionsView tidyCustomCheckesFromFile = SettingsTestUtility.GetClangTidyPredefinedChecksOptionsView(); Assert.Equal(tidyPredefinedChecksOptionsView.AbseilDurationDivision, tidyCustomCheckesFromFile.AbseilDurationDivision); }
/// <summary> /// Initializes a new instance of the <see cref="TidyCommand"/> class. /// Adds our command handlers for menu (commands must exist in the command table file) /// </summary> /// <param name="package">Owner package, not null.</param> private TidyCommand(OleMenuCommandService aCommandService, CommandsController aCommandsController, ErrorWindowController aErrorWindow, OutputWindowController aOutputWindow, AsyncPackage aPackage, Guid aGuid, int aId) : base(aCommandsController, aErrorWindow, aOutputWindow, aPackage, aGuid, aId) { mTidyOptions = (ClangTidyOptionsView)AsyncPackage.GetDialogPage(typeof(ClangTidyOptionsView)); mTidyChecks = (ClangTidyPredefinedChecksOptionsView)AsyncPackage.GetDialogPage(typeof(ClangTidyPredefinedChecksOptionsView)); mTidyCustomChecks = (ClangTidyCustomChecksOptionsView)AsyncPackage.GetDialogPage(typeof(ClangTidyCustomChecksOptionsView)); mClangFormatView = (ClangFormatOptionsView)AsyncPackage.GetDialogPage(typeof(ClangFormatOptionsView)); if (null != aCommandService) { var menuCommandID = new CommandID(CommandSet, Id); var menuCommand = new OleMenuCommand(RunClangTidy, menuCommandID); menuCommand.BeforeQueryStatus += mCommandsController.OnBeforeClangCommand; menuCommand.Enabled = true; aCommandService.AddCommand(menuCommand); } }
private string GetPredefinedChecks(ClangTidyPredefinedChecksOptionsView predefinedChecksSettings) { StringBuilder predefinedChecks = new StringBuilder(); PropertyInfo[] properties = predefinedChecksSettings.GetType().GetProperties(); foreach (var item in properties) { var attribute = item.GetCustomAttribute(typeof(DisplayNameAttribute)) as DisplayNameAttribute; bool?value = item.GetValue(predefinedChecksSettings) as bool?; if (value != null && value == true && attribute != null) { predefinedChecks.Append(attribute.DisplayName + ","); } } return(predefinedChecks.ToString().TrimEnd(',')); }
/// <summary> /// Initializes a new instance of the <see cref="TidyCommand"/> class. /// Adds our command handlers for menu (commands must exist in the command table file) /// </summary> /// <param name="package">Owner package, not null.</param> public TidyCommand(Package aPackage, Guid aGuid, int aId, CommandsController aCommandsController) : base(aCommandsController, aPackage, aGuid, aId) { mTidyOptions = (ClangTidyOptionsView)Package.GetDialogPage(typeof(ClangTidyOptionsView)); mTidyChecks = (ClangTidyPredefinedChecksOptionsView)Package.GetDialogPage(typeof(ClangTidyPredefinedChecksOptionsView)); mTidyCustomChecks = (ClangTidyCustomChecksOptionsView)Package.GetDialogPage(typeof(ClangTidyCustomChecksOptionsView)); mClangFormatView = (ClangFormatOptionsView)Package.GetDialogPage(typeof(ClangFormatOptionsView)); mFileOpener = new FileOpener(DTEObj); if (ServiceProvider.GetService(typeof(IMenuCommandService)) is OleMenuCommandService commandService) { var menuCommandID = new CommandID(CommandSet, Id); var menuCommand = new OleMenuCommand(this.RunClangTidy, menuCommandID); menuCommand.BeforeQueryStatus += mCommandsController.QueryCommandHandler; menuCommand.Enabled = true; commandService.AddCommand(menuCommand); } }
public void ConstructParameters(ClangGeneralOptionsView aGeneralOptions, ClangTidyOptionsView aTidyOptions, ClangTidyPredefinedChecksOptionsView aTidyChecks, ClangTidyCustomChecksOptionsView aTidyCustomChecks, ClangFormatOptionsView aClangFormatView, DTE2 aDTEObj, string aVsEdition, string aVsVersion) { mParameters = GetGeneralParameters(aGeneralOptions); mParameters = null != aTidyOptions ? $"{mParameters} {GetTidyParameters(aTidyOptions, aTidyChecks, aTidyCustomChecks)}" : $"{mParameters} {ScriptConstants.kParallel}"; if (null != aClangFormatView && null != aTidyOptions && true == aTidyOptions.Fix && true == aTidyOptions.FormatAfterTidy) { mParameters = $"{mParameters} {ScriptConstants.kClangFormatStyle} {aClangFormatView.Style}"; } mParameters = $"{mParameters} {ScriptConstants.kVsVersion} {aVsVersion} {ScriptConstants.kVsEdition} {aVsEdition}"; }
/// <summary> /// Instance constructor /// </summary> public ClangTidyModeParametersFactory(ClangTidyCustomChecksOptionsView aTidyCustomChecks, ClangTidyPredefinedChecksOptionsView aTidyChecks) { mTidyCustomChecks = aTidyCustomChecks; mTidyChecks = aTidyChecks; }
public static void SaveClangTidyPredefinedChecksOptionsView(ClangTidyPredefinedChecksOptionsView clangTidyPredefinedChecksOptionsView) { clangTidyPredefinedChecksOptionsView.SaveSettingsToStorage(); }
protected void RunScript(string aCommandName, ClangTidyOptionsView mTidyOptions = null, ClangTidyPredefinedChecksOptionsView mTidyChecks = null, ClangTidyCustomChecksOptionsView mTidyCustomChecks = null, ClangFormatOptionsView aClangFormatView = null, bool aTidyFixFlag = false) { try { var dte = VsServiceProvider.GetService(typeof(DTE)) as DTE2; dte.Solution.SaveAs(dte.Solution.FullName); IBuilder <string> runModeScriptBuilder = new RunModeScriptBuilder(); runModeScriptBuilder.Build(); var runModeParameters = runModeScriptBuilder.GetResult(); IBuilder <string> genericScriptBuilder = new GenericScriptBuilder(mGeneralOptions, mTidyOptions, mTidyChecks, mTidyCustomChecks, aClangFormatView, VsEdition, VsVersion, aTidyFixFlag); genericScriptBuilder.Build(); var genericParameters = genericScriptBuilder.GetResult(); string solutionPath = dte.Solution.FullName; InitPowerShell(); ClearWindows(); mOutputWindow.Write($"\n{OutputWindowConstants.kStart} {aCommandName}\n"); StatusBarHandler.Status(aCommandName + " started...", 1, vsStatusAnimation.vsStatusAnimationBuild, 1); VsServiceProvider.TryGetService(typeof(SVsSolution), out object vsSolutionService); var vsSolution = vsSolutionService as IVsSolution; foreach (var item in mItemsCollector.GetItems) { if (!mCommandsController.Running) { break; } IBuilder <string> itemRelatedScriptBuilder = new ItemRelatedScriptBuilder(item); itemRelatedScriptBuilder.Build(); var itemRelatedParameters = itemRelatedScriptBuilder.GetResult(); // From the first parameter is removed the last character which is mandatory "'" // and added to the end of the string to close the script var script = $"{runModeParameters.Remove(runModeParameters.Length - 1)} {itemRelatedParameters} {genericParameters}'"; if (null != vsSolution) { mOutputWindow.Hierarchy = AutomationUtil.GetItemHierarchy(vsSolution as IVsSolution, item); } var process = mPowerShell.Invoke(script, mRunningProcesses); if (mOutputWindow.MissingLlvm) { mOutputWindow.Write(ErrorParserConstants.kMissingLlvmMessage); break; } } if (!mOutputWindow.MissingLlvm) { mOutputWindow.Show(); mOutputWindow.Write($"\n{OutputWindowConstants.kDone} {aCommandName}\n"); } if (mOutputWindow.HasErrors) { mErrorWindow.AddErrors(mOutputWindow.Errors); } } catch (Exception) { mOutputWindow.Show(); mOutputWindow.Write($"\n{OutputWindowConstants.kDone} {aCommandName}\n"); } finally { StatusBarHandler.Status(aCommandName + " finished", 0, vsStatusAnimation.vsStatusAnimationBuild, 0); } }