1 //===---------- IssueHash.h - Generate identification hashes ----*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 #ifndef LLVM_CLANG_ANALYSIS_ISSUEHASH_H 9 #define LLVM_CLANG_ANALYSIS_ISSUEHASH_H 10 11 #include "llvm/ADT/SmallString.h" 12 13 namespace clang { 14 class Decl; 15 class FullSourceLoc; 16 class LangOptions; 17 18 /// Returns an opaque identifier for a diagnostic. 19 /// 20 /// This opaque identifier is intended to be stable even when the source code 21 /// is changed. It allows to track diagnostics in the long term, for example, 22 /// find which diagnostics are "new", maintain a database of suppressed 23 /// diagnostics etc. 24 /// 25 /// We may introduce more variants of issue hashes in the future 26 /// but older variants will still be available for compatibility. 27 /// 28 /// This hash is based on the following information: 29 /// - Name of the checker that emitted the diagnostic. 30 /// - Warning message. 31 /// - Name of the enclosing declaration. 32 /// - Contents of the line of code with the issue, excluding whitespace. 33 /// - Column number (but not the line number! - which makes it stable). 34 llvm::SmallString<32> getIssueHash(const FullSourceLoc &IssueLoc, 35 llvm::StringRef CheckerName, 36 llvm::StringRef WarningMessage, 37 const Decl *IssueDecl, 38 const LangOptions &LangOpts); 39 40 /// Get the unhashed string representation of the V1 issue hash. 41 /// When hashed, it becomes the actual issue hash. Useful for testing. 42 /// See GetIssueHashV1() for more information. 43 std::string getIssueString(const FullSourceLoc &IssueLoc, 44 llvm::StringRef CheckerName, 45 llvm::StringRef WarningMessage, 46 const Decl *IssueDecl, const LangOptions &LangOpts); 47 } // namespace clang 48 49 #endif 50