From 6d83f34afdb0833ae5d7173daf0f8e009e95afa0 Mon Sep 17 00:00:00 2001 From: George Karpenkov Date: Wed, 17 Jan 2018 20:06:26 +0000 Subject: [PATCH] [analyzer] Better UI in html reports for displaying shortcuts help Make the help window accessible, but don't show by default. Use a different CSS class from macro. llvm-svn: 322750 --- clang/lib/Rewrite/HTMLRewrite.cpp | 4 ++ .../StaticAnalyzer/Core/HTMLDiagnostics.cpp | 47 +++++++++++++++++-- 2 files changed, 48 insertions(+), 3 deletions(-) diff --git a/clang/lib/Rewrite/HTMLRewrite.cpp b/clang/lib/Rewrite/HTMLRewrite.cpp index d3247846bc61..349b088c3323 100644 --- a/clang/lib/Rewrite/HTMLRewrite.cpp +++ b/clang/lib/Rewrite/HTMLRewrite.cpp @@ -311,6 +311,10 @@ void html::AddHeaderFooterInternalBuiltinCSS(Rewriter &R, FileID FID, " -webkit-border-radius:5px; -webkit-box-shadow:1px 1px 7px #000; " " border-radius:5px; box-shadow:1px 1px 7px #000; " "position: absolute; top: -1em; left:10em; z-index: 1 } \n" + " #tooltiphint { position: fixed; width: 50em; margin-left: -25em;" + "left: 50%; padding: 10px; border: 1px solid #b0b0b0;" + "border-radius: 2px; box-shadow: 1px 1px 7px black; " + "background-color: #c0c0c0; z-index: 2; }\n" " .macro { color: darkmagenta; background-color:LemonChiffon;" // Macros are position: relative to provide base for expansions. " position: relative }\n" diff --git a/clang/lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp b/clang/lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp index 635625107f0f..acddcefc88f3 100644 --- a/clang/lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp +++ b/clang/lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp @@ -101,6 +101,9 @@ private: /// \return Executed lines from \p D in JSON format. std::string serializeExecutedLines(const PathDiagnostic &D); + + /// \return Javascript for displaying shortcuts help; + std::string showHelpJavascript(); }; } // end anonymous namespace @@ -347,6 +350,8 @@ void HTMLDiagnostics::FinalizeHTML(const PathDiagnostic& D, Rewriter &R, int LineNumber = path.back()->getLocation().asLocation().getExpansionLineNumber(); int ColumnNumber = path.back()->getLocation().asLocation().getExpansionColumnNumber(); + R.InsertTextBefore(SMgr.getLocForStartOfFile(FID), showHelpJavascript()); + R.InsertTextBefore(SMgr.getLocForStartOfFile(FID), generateKeyboardNavigationJavascript()); @@ -399,9 +404,17 @@ void HTMLDiagnostics::FinalizeHTML(const PathDiagnostic& D, Rewriter &R,

Annotated Source Code

-

[?] - Use j/k keys for keyboard navigation -

+

Press '?' + to see keyboard shortcuts

+ )<<<"; R.InsertTextBefore(SMgr.getLocForStartOfFile(FID), os.str()); @@ -461,6 +474,34 @@ void HTMLDiagnostics::FinalizeHTML(const PathDiagnostic& D, Rewriter &R, html::AddHeaderFooterInternalBuiltinCSS(R, FID, Entry->getName()); } +std::string HTMLDiagnostics::showHelpJavascript() { + return R"<<<( + +)<<<"; +} + std::string HTMLDiagnostics::showRelevantLinesJavascript(const PathDiagnostic &D) { std::string s;