public async Task RunClangTidyAsync(int aCommandId, CommandUILocation commandUILocation, Document document = null) { await PrepareCommmandAsync(commandUILocation); await Task.Run(() => { lock (mutex) { try { using var silentFileController = new SilentFileChangerController(); using var fileChangerWatcher = new FileChangerWatcher(); var tidySettings = SettingsProvider.TidySettingsModel; if (CommandIds.kTidyFixId == aCommandId || tidySettings.TidyOnSave) { fileChangerWatcher.OnChanged += FileOpener.Open; var dte2 = VsServiceProvider.GetService(typeof(DTE)) as DTE2; string solutionFolderPath = SolutionInfo.IsOpenFolderModeActive() ? dte2.Solution.FullName : dte2.Solution.FullName .Substring(0, dte2.Solution.FullName.LastIndexOf('\\')); fileChangerWatcher.Run(solutionFolderPath); FilePathCollector fileCollector = new FilePathCollector(); var filesPath = fileCollector.Collect(mItemsCollector.Items).ToList(); silentFileController.SilentFiles(filesPath); silentFileController.SilentFiles(dte2.Documents); } if (tidySettings.DetectClangTidyFile && !mItemsCollector.IsEmpty) { // Check for .clang-tidy congif file if (FileSystem.SearchAllTopDirectories(mItemsCollector.Items[0].GetPath(), FileSystem.ConfigClangTidyFileName)) { tidySettings.UseChecksFrom = ClangTidyUseChecksFrom.TidyFile; } else { tidySettings.UseChecksFrom = ClangTidyUseChecksFrom.PredefinedChecks; } var settingsHandlder = new SettingsHandler(); settingsHandlder.SaveSettings(); } RunScript(aCommandId, false); } catch (Exception exception) { VsShellUtilities.ShowMessageBox(AsyncPackage, exception.Message, "Error", OLEMSGICON.OLEMSGICON_CRITICAL, OLEMSGBUTTON.OLEMSGBUTTON_OK, OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST); } } }); }
public void RunClangFormat(CommandUILocation commandUILocation) { if (CommandUILocation.ContextMenu == commandUILocation) { FormatAllSelectedDocuments(); } else { FormatActiveDocument(); } }
public void RunClangFormat(CommandUILocation commandUILocation) { if (CommandUILocation.ContextMenu == commandUILocation) { FormatAllSelectedDocuments(); } else // format command is called from toolbar (CommandUILocation.Toolbar == commandUILocation) { FormatActiveDocument(); } }
public void RunClangFormat(CommandUILocation commandUILocation) { if (CommandUILocation.ContextMenu == commandUILocation) { FormatAllSelectedDocuments(); return; } if (CommandUILocation.Toolbar == commandUILocation) { FormatActiveDocument(); return; } }
private void SetCommandLocation() { switch (currentCommand) { case CommandIds.kClangFormatToolbarId: case CommandIds.kCompileToolbarId: case CommandIds.kTidyToolbarId: case CommandIds.kTidyFixToolbarId: commandUILocation = CommandUILocation.Toolbar; break; default: commandUILocation = CommandUILocation.ContextMenu; break; } }
private void FormatAllSelectedDocuments(CommandUILocation commandUILocation) { foreach (var item in CollectItems(true, ScriptConstants.kAcceptedFileExtensions, commandUILocation)) { var document = (item.GetObject() as ProjectItem).Document; if (null == document) { document = DocumentsHandler.GetActiveDocument(); } mClangFormatView = SettingsProvider.ClangFormatSettings; mDocument = document; RunClangFormat(commandUILocation); } }
public async Task RunClangCompileAsync(int aCommandId, CommandUILocation commandUILocation) { await PrepareCommmandAsync(commandUILocation); await Task.Run(() => { try { RunScript(aCommandId); } catch (Exception exception) { VsShellUtilities.ShowMessageBox(AsyncPackage, exception.Message, "Error", OLEMSGICON.OLEMSGICON_CRITICAL, OLEMSGBUTTON.OLEMSGBUTTON_OK, OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST); } }); }
public async Task RunClangTidyAsync(int aCommandId, CommandUILocation commandUILocation) { await PrepareCommmandAsync(commandUILocation); await Task.Run(() => { try { using (var silentFileController = new SilentFileChangerController()) { using (var fileChangerWatcher = new FileChangerWatcher()) { SettingsProvider settingsProvider = new SettingsProvider(); TidySettingsModel tidySettings = settingsProvider.GetTidySettingsModel(); if (CommandIds.kTidyFixId == aCommandId || tidySettings.TidyOnSave) { fileChangerWatcher.OnChanged += FileOpener.Open; var dte2 = VsServiceProvider.GetService(typeof(DTE)) as DTE2; string solutionFolderPath = SolutionInfo.IsOpenFolderModeActive() ? dte2.Solution.FullName : dte2.Solution.FullName .Substring(0, dte2.Solution.FullName.LastIndexOf('\\')); fileChangerWatcher.Run(solutionFolderPath); FilePathCollector fileCollector = new FilePathCollector(); var filesPath = fileCollector.Collect(mItemsCollector.Items).ToList(); silentFileController.SilentFiles(filesPath); silentFileController.SilentFiles(dte2.Documents); } RunScript(aCommandId); } } } catch (Exception exception) { VsShellUtilities.ShowMessageBox(AsyncPackage, exception.Message, "Error", OLEMSGICON.OLEMSGICON_CRITICAL, OLEMSGBUTTON.OLEMSGBUTTON_OK, OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST); } }); }
public void RunClangFormat(CommandUILocation commandUILocation) { if (clearOutput == false) { OnFormatFile(new FormatCommandEventArgs() { CanFormat = true, Clear = clearOutput }); } clearOutput = true; if (CommandUILocation.ContextMenu == commandUILocation) { FormatAllSelectedDocuments(); } else { FormatActiveDocument(); } }
public async Task LaunchCommandAsync(int aCommandId, CommandUILocation aCommandUILocation) { switch (aCommandId) { case CommandIds.kSettingsId: { SettingsCommand.Instance.ShowSettings(); break; } case CommandIds.kStopClang: { await StopCommand.Instance.RunStopClangCommandAsync(); break; } case CommandIds.kClangFormat: { FormatCommand.Instance.RunClangFormat(aCommandUILocation); OnAfterFormatCommand(); break; } case CommandIds.kClangFormatToolbarId: { FormatCommand.Instance.RunClangFormat(aCommandUILocation); OnAfterFormatCommand(); break; } case CommandIds.kCompileId: { OnBeforeClangCommand(CommandIds.kCompileId); await CompileCommand.Instance.RunClangCompileAsync(CommandIds.kCompileId, aCommandUILocation); OnAfterClangCommand(); break; } case CommandIds.kCompileToolbarId: { OnBeforeClangCommand(CommandIds.kCompileId); await CompileCommand.Instance.RunClangCompileAsync(CommandIds.kCompileId, aCommandUILocation); OnAfterClangCommand(); break; } case CommandIds.kTidyId: { OnBeforeClangCommand(CommandIds.kTidyId); await TidyCommand.Instance.RunClangTidyAsync(CommandIds.kTidyId, aCommandUILocation); OnAfterClangCommand(); break; } case CommandIds.kTidyToolbarId: { OnBeforeClangCommand(CommandIds.kTidyId); await TidyCommand.Instance.RunClangTidyAsync(CommandIds.kTidyId, aCommandUILocation); OnAfterClangCommand(); break; } case CommandIds.kTidyFixId: { OnBeforeClangCommand(CommandIds.kTidyFixId); await TidyCommand.Instance.RunClangTidyAsync(CommandIds.kTidyFixId, aCommandUILocation); OnAfterClangCommand(); break; } case CommandIds.kTidyFixToolbarId: { OnBeforeClangCommand(CommandIds.kTidyFixId); await TidyCommand.Instance.RunClangTidyAsync(CommandIds.kTidyFixId, aCommandUILocation); OnAfterClangCommand(); break; } case CommandIds.kITidyExportConfigId: { TidyConfigCommand.Instance.ExportConfig(); break; } case CommandIds.kIgnoreFormatId: { IgnoreFormatCommand.Instance.RunIgnoreFormatCommand(CommandIds.kIgnoreFormatId); break; } case CommandIds.kIgnoreCompileId: { IgnoreCompileCommand.Instance.RunIgnoreCompileCommand(CommandIds.kIgnoreCompileId); break; } case CommandIds.kLogoutId: { Logout.Instance.LogoutUser(); break; } default: break; } }
public async Task LaunchCommandAsync(int aCommandId, CommandUILocation aCommandUILocation) { switch (aCommandId) { case CommandIds.kSettingsId: { await SettingsCommand.Instance.ShowSettingsAsync(); break; } case CommandIds.kStopClang: { await StopCommand.Instance.RunStopClangCommandAsync(false); break; } case CommandIds.kClangFormat: { clearOutputOnFormat = true; FormatCommand.Instance.RunClangFormat(aCommandUILocation); break; } case CommandIds.kClangFormatToolbarId: { clearOutputOnFormat = true; FormatCommand.Instance.RunClangFormat(aCommandUILocation); break; } case CommandIds.kCompileId: { await StopBackgroundRunnersAsync(); OnBeforeClangCommand(CommandIds.kCompileId); await CompileCommand.Instance.RunClangCompileAsync(CommandIds.kCompileId, aCommandUILocation); OnAfterClangCommand(); break; } case CommandIds.kCompileToolbarId: { await StopBackgroundRunnersAsync(); OnBeforeClangCommand(CommandIds.kCompileId); await CompileCommand.Instance.RunClangCompileAsync(CommandIds.kCompileId, aCommandUILocation); OnAfterClangCommand(); break; } case CommandIds.kTidyId: { await StopBackgroundRunnersAsync(); OnBeforeClangCommand(CommandIds.kTidyId); await TidyCommand.Instance.RunClangTidyAsync(CommandIds.kTidyId, aCommandUILocation); OnAfterClangCommand(); break; } case CommandIds.kTidyToolbarId: { await StopBackgroundRunnersAsync(); OnBeforeClangCommand(CommandIds.kTidyId); await TidyCommand.Instance.RunClangTidyAsync(CommandIds.kTidyId, aCommandUILocation); OnAfterClangCommand(); break; } case CommandIds.kTidyFixId: { await StopBackgroundRunnersAsync(); OnBeforeClangCommand(CommandIds.kTidyFixId); await TidyCommand.Instance.RunClangTidyAsync(CommandIds.kTidyFixId, aCommandUILocation); OnAfterClangCommand(); break; } case CommandIds.kTidyFixToolbarId: { await StopBackgroundRunnersAsync(); OnBeforeClangCommand(CommandIds.kTidyFixId); await TidyCommand.Instance.RunClangTidyAsync(CommandIds.kTidyFixId, aCommandUILocation); OnAfterClangCommand(); break; } case CommandIds.kIgnoreFormatId: { IgnoreFormatCommand.Instance.RunIgnoreFormatCommand(); break; } case CommandIds.kIgnoreCompileId: { IgnoreCompileCommand.Instance.RunIgnoreCompileCommand(); break; } case CommandIds.kJsonCompilationDatabase: { await StopBackgroundRunnersAsync(); OnBeforeClangCommand(CommandIds.kJsonCompilationDatabase); await JsonCompilationDatabaseCommand.Instance.ExportAsync(); OnAfterClangCommand(); break; } default: break; } }
public void RunClangFormat(CommandUILocation commandUILocation) { try { if (mClangFormatView == null) { FormatAllSelectedDocuments(commandUILocation); return; } if (ScriptConstants.kCMakeConfigFile == mDocument.Name.ToLower()) { return; } var view = Vsix.GetDocumentView(mDocument); if (view == null) { return; } StatusBarHandler.Status("Clang-Format started...", 1, vsStatusAnimation.vsStatusAnimationBuild, 1); System.Diagnostics.Process process; var dirPath = string.Empty; var filePath = Vsix.GetDocumentPath(view); var text = view.TextBuffer.CurrentSnapshot.GetText(); var startPosition = 0; var length = text.Length; if (false == view.Selection.StreamSelectionSpan.IsEmpty) { // get the necessary elements for format selection FindStartPositionAndLengthOfSelectedText(view, text, out startPosition, out length); dirPath = Vsix.GetDocumentParent(view); mClangFormatView = SettingsProvider.ClangFormatSettings; } else { // format the end of the file for format document text = FormatEndOfFile(view, filePath, out dirPath); } process = CreateProcess(text, startPosition, length, dirPath, filePath, mClangFormatView); try { process.Start(); } catch (Exception exception) { throw new Exception( $"Cannot execute {process.StartInfo.FileName}.\n{exception.Message}."); } process.StandardInput.Write(text); process.StandardInput.Close(); var output = process.StandardOutput.ReadToEnd(); process.WaitForExit(); if (0 != process.ExitCode) { throw new Exception(process.StandardError.ReadToEnd()); } ApplyClangFormat(output, view); } catch (Exception exception) { VsShellUtilities.ShowMessageBox(AsyncPackage, exception.Message, "Error while running clang-format", OLEMSGICON.OLEMSGICON_INFO, OLEMSGBUTTON.OLEMSGBUTTON_OK, OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST); } finally { mDocument = null; mClangFormatView = null; StatusBarHandler.Status("Clang-Format finished", 0, vsStatusAnimation.vsStatusAnimationBuild, 0); } }
public void FormatDocument(Document aDocument, ClangFormatOptionsView aOptions, CommandUILocation commandUILocation) { mClangFormatView = aOptions; mDocument = aDocument; RunClangFormat(commandUILocation); }