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 | |