- //===---------- IssueHash.h - Generate identification hashes ----*- C++ -*-===// 
- // 
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 
- // See https://llvm.org/LICENSE.txt for license information. 
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 
- // 
- //===----------------------------------------------------------------------===// 
- #ifndef LLVM_CLANG_ANALYSIS_ISSUEHASH_H 
- #define LLVM_CLANG_ANALYSIS_ISSUEHASH_H 
-   
- #include "llvm/ADT/SmallString.h" 
-   
- namespace clang { 
- class Decl; 
- class FullSourceLoc; 
- class LangOptions; 
-   
- /// Returns an opaque identifier for a diagnostic. 
- /// 
- /// This opaque identifier is intended to be stable even when the source code 
- /// is changed. It allows to track diagnostics in the long term, for example, 
- /// find which diagnostics are "new", maintain a database of suppressed 
- /// diagnostics etc. 
- /// 
- /// We may introduce more variants of issue hashes in the future 
- /// but older variants will still be available for compatibility. 
- /// 
- /// This hash is based on the following information: 
- ///   - Name of the checker that emitted the diagnostic. 
- ///   - Warning message. 
- ///   - Name of the enclosing declaration. 
- ///   - Contents of the line of code with the issue, excluding whitespace. 
- ///   - Column number (but not the line number! - which makes it stable). 
- llvm::SmallString<32> getIssueHash(const FullSourceLoc &IssueLoc, 
-                                    llvm::StringRef CheckerName, 
-                                    llvm::StringRef WarningMessage, 
-                                    const Decl *IssueDecl, 
-                                    const LangOptions &LangOpts); 
-   
- /// Get the unhashed string representation of the V1 issue hash. 
- /// When hashed, it becomes the actual issue hash. Useful for testing. 
- /// See GetIssueHashV1() for more information. 
- std::string getIssueString(const FullSourceLoc &IssueLoc, 
-                            llvm::StringRef CheckerName, 
-                            llvm::StringRef WarningMessage, 
-                            const Decl *IssueDecl, const LangOptions &LangOpts); 
- } // namespace clang 
-   
- #endif 
-