dsanders11 created this revision.
dsanders11 added reviewers: aaron.ballman, njames93.
Herald added subscribers: llvm-commits, cfe-commits, hiraditya, xazax.hun.
Herald added projects: clang, LLVM.
dsanders11 requested review of this revision.

On Windows the --use-color option cannot be used for its originally intended 
purpose of forcing color when piping stdout, since Windows does not use ANSI 
escape codes by default. This change turns on ANSI escape codes on Windows when 
forcing color to a non-displayed stdout (e.g. piped).


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D90109

Files:
  clang-tools-extra/clang-tidy/ClangTidy.cpp
  llvm/lib/Support/Windows/Process.inc


Index: llvm/lib/Support/Windows/Process.inc
===================================================================
--- llvm/lib/Support/Windows/Process.inc
+++ llvm/lib/Support/Windows/Process.inc
@@ -327,9 +327,10 @@
   if (enable) {
     HANDLE Console = GetStdHandle(STD_OUTPUT_HANDLE);
     DWORD Mode;
-    GetConsoleMode(Console, &Mode);
-    Mode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
-    SetConsoleMode(Console, Mode);
+    if (GetConsoleMode(Console, &Mode) != 0) {
+      Mode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
+      SetConsoleMode(Console, Mode);
+    }
   }
 #endif
   UseANSI = enable;
Index: clang-tools-extra/clang-tidy/ClangTidy.cpp
===================================================================
--- clang-tools-extra/clang-tidy/ClangTidy.cpp
+++ clang-tools-extra/clang-tidy/ClangTidy.cpp
@@ -110,6 +110,11 @@
     DiagOpts->ShowColors = Context.getOptions().UseColor.getValueOr(
         llvm::sys::Process::StandardOutHasColors());
     DiagPrinter->BeginSourceFile(LangOpts);
+#if defined(_WIN32)
+    if (DiagOpts->ShowColors && !llvm::sys::Process::StandardOutIsDisplayed()) 
{
+      llvm::sys::Process::UseANSIEscapeCodes(true);
+    }
+#endif
   }
 
   SourceManager &getSourceManager() { return SourceMgr; }


Index: llvm/lib/Support/Windows/Process.inc
===================================================================
--- llvm/lib/Support/Windows/Process.inc
+++ llvm/lib/Support/Windows/Process.inc
@@ -327,9 +327,10 @@
   if (enable) {
     HANDLE Console = GetStdHandle(STD_OUTPUT_HANDLE);
     DWORD Mode;
-    GetConsoleMode(Console, &Mode);
-    Mode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
-    SetConsoleMode(Console, Mode);
+    if (GetConsoleMode(Console, &Mode) != 0) {
+      Mode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
+      SetConsoleMode(Console, Mode);
+    }
   }
 #endif
   UseANSI = enable;
Index: clang-tools-extra/clang-tidy/ClangTidy.cpp
===================================================================
--- clang-tools-extra/clang-tidy/ClangTidy.cpp
+++ clang-tools-extra/clang-tidy/ClangTidy.cpp
@@ -110,6 +110,11 @@
     DiagOpts->ShowColors = Context.getOptions().UseColor.getValueOr(
         llvm::sys::Process::StandardOutHasColors());
     DiagPrinter->BeginSourceFile(LangOpts);
+#if defined(_WIN32)
+    if (DiagOpts->ShowColors && !llvm::sys::Process::StandardOutIsDisplayed()) {
+      llvm::sys::Process::UseANSIEscapeCodes(true);
+    }
+#endif
   }
 
   SourceManager &getSourceManager() { return SourceMgr; }
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to