[clang-tools-extra] r336431 - [clangd] Make SymbolOrigin an enum class, rather than a plain enum.
Sam McCall via cfe-commits
cfe-commits at lists.llvm.org
Fri Jul 6 04:50:49 PDT 2018
Author: sammccall
Date: Fri Jul 6 04:50:49 2018
New Revision: 336431
URL: http://llvm.org/viewvc/llvm-project?rev=336431&view=rev
Log:
[clangd] Make SymbolOrigin an enum class, rather than a plain enum.
I never intended to define namespace pollution like clangd::AST, clangd::Unknown
etc. Oops!
Modified:
clang-tools-extra/trunk/clangd/CodeComplete.cpp
clang-tools-extra/trunk/clangd/index/Index.cpp
clang-tools-extra/trunk/clangd/index/Index.h
clang-tools-extra/trunk/clangd/index/Merge.cpp
clang-tools-extra/trunk/unittests/clangd/CodeCompleteTests.cpp
Modified: clang-tools-extra/trunk/clangd/CodeComplete.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/CodeComplete.cpp?rev=336431&r1=336430&r2=336431&view=diff
==============================================================================
--- clang-tools-extra/trunk/clangd/CodeComplete.cpp (original)
+++ clang-tools-extra/trunk/clangd/CodeComplete.cpp Fri Jul 6 04:50:49 2018
@@ -268,8 +268,7 @@ struct CodeCompletionBuilder {
: ASTCtx(ASTCtx), ExtractDocumentation(Opts.IncludeComments) {
add(C, SemaCCS);
if (C.SemaResult) {
- Completion.Origin =
- static_cast<SymbolOrigin>(Completion.Origin | SymbolOrigin::AST);
+ Completion.Origin |= SymbolOrigin::AST;
Completion.Name = llvm::StringRef(SemaCCS->getTypedText());
if (Completion.Scope.empty())
if (C.SemaResult->Kind == CodeCompletionResult::RK_Declaration)
@@ -281,8 +280,7 @@ struct CodeCompletionBuilder {
toCompletionItemKind(C.SemaResult->Kind, C.SemaResult->Declaration);
}
if (C.IndexResult) {
- Completion.Origin =
- static_cast<SymbolOrigin>(Completion.Origin | C.IndexResult->Origin);
+ Completion.Origin |= C.IndexResult->Origin;
if (Completion.Scope.empty())
Completion.Scope = C.IndexResult->Scope;
if (Completion.Kind == CompletionItemKind::Missing)
@@ -1156,17 +1154,18 @@ private:
else
return;
SymbolOrigin Origin = SymbolOrigin::Unknown;
+ bool FromIndex = false;
for (const auto &Candidate : Bundle) {
if (Candidate.IndexResult) {
Quality.merge(*Candidate.IndexResult);
Relevance.merge(*Candidate.IndexResult);
- Origin =
- static_cast<SymbolOrigin>(Origin | Candidate.IndexResult->Origin);
+ Origin |= Candidate.IndexResult->Origin;
+ FromIndex = true;
}
if (Candidate.SemaResult) {
Quality.merge(*Candidate.SemaResult);
Relevance.merge(*Candidate.SemaResult);
- Origin = static_cast<SymbolOrigin>(Origin | SymbolOrigin::AST);
+ Origin |= SymbolOrigin::AST;
}
}
@@ -1184,8 +1183,8 @@ private:
<< Quality << Relevance << "\n");
NSema += bool(Origin & SymbolOrigin::AST);
- NIndex += bool(Origin & ~SymbolOrigin::AST);
- NBoth += (Origin & SymbolOrigin::AST) && (Origin & ~SymbolOrigin::AST);
+ NIndex += FromIndex;
+ NBoth += bool(Origin & SymbolOrigin::AST) && FromIndex;
if (Candidates.push({std::move(Bundle), Scores}))
Incomplete = true;
}
Modified: clang-tools-extra/trunk/clangd/index/Index.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/index/Index.cpp?rev=336431&r1=336430&r2=336431&view=diff
==============================================================================
--- clang-tools-extra/trunk/clangd/index/Index.cpp (original)
+++ clang-tools-extra/trunk/clangd/index/Index.cpp Fri Jul 6 04:50:49 2018
@@ -49,7 +49,7 @@ raw_ostream &operator<<(raw_ostream &OS,
return OS << "unknown";
constexpr static char Sigils[] = "ADSM4567";
for (unsigned I = 0; I < sizeof(Sigils); ++I)
- if (O & static_cast<SymbolOrigin>(1 << I))
+ if (static_cast<uint8_t>(O) & 1u << I)
OS << Sigils[I];
return OS;
}
Modified: clang-tools-extra/trunk/clangd/index/Index.h
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/index/Index.h?rev=336431&r1=336430&r2=336431&view=diff
==============================================================================
--- clang-tools-extra/trunk/clangd/index/Index.h (original)
+++ clang-tools-extra/trunk/clangd/index/Index.h Fri Jul 6 04:50:49 2018
@@ -120,7 +120,7 @@ namespace clangd {
// Describes the source of information about a symbol.
// Mainly useful for debugging, e.g. understanding code completion reuslts.
// This is a bitfield as information can be combined from several sources.
-enum SymbolOrigin : uint8_t {
+enum class SymbolOrigin : uint8_t {
Unknown = 0,
AST = 1 << 0, // Directly from the AST (indexes should not set this).
Dynamic = 1 << 1, // From the dynamic index of opened files.
@@ -128,6 +128,17 @@ enum SymbolOrigin : uint8_t {
Merge = 1 << 3, // A non-trivial index merge was performed.
// Remaining bits reserved for index implementations.
};
+inline SymbolOrigin operator|(SymbolOrigin A, SymbolOrigin B) {
+ return static_cast<SymbolOrigin>(static_cast<uint8_t>(A) |
+ static_cast<uint8_t>(B));
+}
+inline SymbolOrigin &operator|=(SymbolOrigin &A, SymbolOrigin B) {
+ return A = A | B;
+}
+inline SymbolOrigin operator&(SymbolOrigin A, SymbolOrigin B) {
+ return static_cast<SymbolOrigin>(static_cast<uint8_t>(A) &
+ static_cast<uint8_t>(B));
+}
raw_ostream &operator<<(raw_ostream &, SymbolOrigin);
// The class presents a C++ symbol, e.g. class, function.
@@ -171,7 +182,7 @@ struct Symbol {
/// See also isIndexedForCodeCompletion().
bool IsIndexedForCodeCompletion = false;
/// Where this symbol came from. Usually an index provides a constant value.
- SymbolOrigin Origin = Unknown;
+ SymbolOrigin Origin = SymbolOrigin::Unknown;
/// A brief description of the symbol that can be appended in the completion
/// candidate list. For example, "(X x, Y y) const" is a function signature.
llvm::StringRef Signature;
Modified: clang-tools-extra/trunk/clangd/index/Merge.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/index/Merge.cpp?rev=336431&r1=336430&r2=336431&view=diff
==============================================================================
--- clang-tools-extra/trunk/clangd/index/Merge.cpp (original)
+++ clang-tools-extra/trunk/clangd/index/Merge.cpp Fri Jul 6 04:50:49 2018
@@ -116,8 +116,7 @@ mergeSymbol(const Symbol &L, const Symbo
S.Detail = O.Detail;
}
- S.Origin =
- static_cast<SymbolOrigin>(S.Origin | O.Origin | SymbolOrigin::Merge);
+ S.Origin |= O.Origin | SymbolOrigin::Merge;
return S;
}
Modified: clang-tools-extra/trunk/unittests/clangd/CodeCompleteTests.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/CodeCompleteTests.cpp?rev=336431&r1=336430&r2=336431&view=diff
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/CodeCompleteTests.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/CodeCompleteTests.cpp Fri Jul 6 04:50:49 2018
@@ -1257,8 +1257,7 @@ TEST(CompletionTest, Render) {
C.Header = "\"foo.h\"";
C.Kind = CompletionItemKind::Method;
C.Score.Total = 1.0;
- C.Origin =
- static_cast<SymbolOrigin>(SymbolOrigin::AST | SymbolOrigin::Static);
+ C.Origin = SymbolOrigin::AST | SymbolOrigin::Static;
CodeCompleteOptions Opts;
Opts.IncludeIndicator.Insert = "^";
More information about the cfe-commits
mailing list