[clang-tools-extra] r274845 - [include-fixer] Pull out Context implementation code to a cpp file.
Haojian Wu via cfe-commits
cfe-commits at lists.llvm.org
Fri Jul 8 06:11:38 PDT 2016
Author: hokein
Date: Fri Jul 8 08:11:38 2016
New Revision: 274845
URL: http://llvm.org/viewvc/llvm-project?rev=274845&view=rev
Log:
[include-fixer] Pull out Context implementation code to a cpp file.
Added:
clang-tools-extra/trunk/include-fixer/IncludeFixerContext.cpp
Modified:
clang-tools-extra/trunk/include-fixer/CMakeLists.txt
clang-tools-extra/trunk/include-fixer/IncludeFixerContext.h
Modified: clang-tools-extra/trunk/include-fixer/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/include-fixer/CMakeLists.txt?rev=274845&r1=274844&r2=274845&view=diff
==============================================================================
--- clang-tools-extra/trunk/include-fixer/CMakeLists.txt (original)
+++ clang-tools-extra/trunk/include-fixer/CMakeLists.txt Fri Jul 8 08:11:38 2016
@@ -4,6 +4,7 @@ set(LLVM_LINK_COMPONENTS
add_clang_library(clangIncludeFixer
IncludeFixer.cpp
+ IncludeFixerContext.cpp
InMemorySymbolIndex.cpp
SymbolIndexManager.cpp
YamlSymbolIndex.cpp
Added: clang-tools-extra/trunk/include-fixer/IncludeFixerContext.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/include-fixer/IncludeFixerContext.cpp?rev=274845&view=auto
==============================================================================
--- clang-tools-extra/trunk/include-fixer/IncludeFixerContext.cpp (added)
+++ clang-tools-extra/trunk/include-fixer/IncludeFixerContext.cpp Fri Jul 8 08:11:38 2016
@@ -0,0 +1,61 @@
+//===-- IncludeFixerContext.cpp - Include fixer context ---------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "IncludeFixerContext.h"
+#include <algorithm>
+
+namespace clang {
+namespace include_fixer {
+
+IncludeFixerContext::IncludeFixerContext(
+ llvm::StringRef Name, llvm::StringRef ScopeQualifiers,
+ const std::vector<find_all_symbols::SymbolInfo> Symbols,
+ tooling::Range Range)
+ : SymbolIdentifier(Name), SymbolScopedQualifiers(ScopeQualifiers),
+ MatchedSymbols(Symbols), SymbolRange(Range) {
+ // Deduplicate headers, so that we don't want to suggest the same header
+ // twice.
+ for (const auto &Symbol : MatchedSymbols)
+ Headers.push_back(Symbol.getFilePath());
+ Headers.erase(std::unique(Headers.begin(), Headers.end(),
+ [](const std::string &A, const std::string &B) {
+ return A == B;
+ }),
+ Headers.end());
+}
+
+tooling::Replacement
+IncludeFixerContext::createSymbolReplacement(llvm::StringRef FilePath,
+ size_t Idx) {
+ assert(Idx < MatchedSymbols.size());
+ std::string QualifiedName = MatchedSymbols[Idx].getQualifiedName();
+ // For nested classes, the qualified name constructed from database misses
+ // some stripped qualifiers, because when we search a symbol in database,
+ // we strip qualifiers from the end until we find a result. So append the
+ // missing stripped qualifiers here.
+ //
+ // Get stripped qualifiers.
+ llvm::SmallVector<llvm::StringRef, 8> SymbolQualifiers;
+ getSymbolIdentifier().split(SymbolQualifiers, "::");
+ std::string StrippedQualifiers;
+ while (!SymbolQualifiers.empty() &&
+ !llvm::StringRef(QualifiedName).endswith(SymbolQualifiers.back())) {
+ StrippedQualifiers = "::" + SymbolQualifiers.back().str();
+ SymbolQualifiers.pop_back();
+ }
+ // Append the missing stripped qualifiers.
+ std::string FullyQualifiedName = QualifiedName + StrippedQualifiers;
+ auto pos = FullyQualifiedName.find(SymbolScopedQualifiers);
+ return {FilePath, SymbolRange.getOffset(), SymbolRange.getLength(),
+ FullyQualifiedName.substr(
+ pos == std::string::npos ? 0 : SymbolScopedQualifiers.size())};
+}
+
+} // include_fixer
+} // clang
Modified: clang-tools-extra/trunk/include-fixer/IncludeFixerContext.h
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/include-fixer/IncludeFixerContext.h?rev=274845&r1=274844&r2=274845&view=diff
==============================================================================
--- clang-tools-extra/trunk/include-fixer/IncludeFixerContext.h (original)
+++ clang-tools-extra/trunk/include-fixer/IncludeFixerContext.h Fri Jul 8 08:11:38 2016
@@ -12,7 +12,6 @@
#include "find-all-symbols/SymbolInfo.h"
#include "clang/Tooling/Core/Replacement.h"
-#include <algorithm>
#include <string>
#include <vector>
@@ -22,51 +21,15 @@ namespace include_fixer {
/// \brief A context for the symbol being queried.
class IncludeFixerContext {
public:
- IncludeFixerContext() {}
+ IncludeFixerContext() = default;
IncludeFixerContext(llvm::StringRef Name, llvm::StringRef ScopeQualifiers,
const std::vector<find_all_symbols::SymbolInfo> Symbols,
- tooling::Range Range)
- : SymbolIdentifier(Name), SymbolScopedQualifiers(ScopeQualifiers),
- MatchedSymbols(Symbols), SymbolRange(Range) {
- // Deduplicate headers, so that we don't want to suggest the same header
- // twice.
- for (const auto &Symbol : MatchedSymbols)
- Headers.push_back(Symbol.getFilePath());
- Headers.erase(std::unique(Headers.begin(), Headers.end(),
- [](const std::string &A, const std::string &B) {
- return A == B;
- }),
- Headers.end());
- }
+ tooling::Range Range);
/// \brief Create a replacement for adding missing namespace qualifiers to the
/// symbol.
tooling::Replacement createSymbolReplacement(llvm::StringRef FilePath,
- size_t Idx = 0) {
- assert(Idx < MatchedSymbols.size());
- std::string QualifiedName = MatchedSymbols[Idx].getQualifiedName();
- // For nested classes, the qualified name constructed from database misses
- // some stripped qualifiers, because when we search a symbol in database,
- // we strip qualifiers from the end until we find a result. So append the
- // missing stripped qualifiers here.
- //
- // Get stripped qualifiers.
- llvm::SmallVector<llvm::StringRef, 8> SymbolQualifiers;
- getSymbolIdentifier().split(SymbolQualifiers, "::");
- std::string StrippedQualifiers;
- while (!SymbolQualifiers.empty() &&
- !llvm::StringRef(QualifiedName).endswith(SymbolQualifiers.back())) {
- StrippedQualifiers= "::" + SymbolQualifiers.back().str();
- SymbolQualifiers.pop_back();
- }
- // Append the missing stripped qualifiers.
- std::string FullyQualifiedName = QualifiedName + StrippedQualifiers;
- auto pos = FullyQualifiedName.find(SymbolScopedQualifiers);
- return {FilePath, SymbolRange.getOffset(), SymbolRange.getLength(),
- FullyQualifiedName.substr(
- pos == std::string::npos ? 0 : SymbolScopedQualifiers.size())};
- }
-
+ size_t Idx = 0);
/// \brief Get symbol name.
llvm::StringRef getSymbolIdentifier() const { return SymbolIdentifier; }
More information about the cfe-commits
mailing list