[clang-tools-extra] r364392 - [clangd] Don't rename the namespace.
Haojian Wu via cfe-commits
cfe-commits at lists.llvm.org
Wed Jun 26 01:10:27 PDT 2019
Author: hokein
Date: Wed Jun 26 01:10:26 2019
New Revision: 364392
URL: http://llvm.org/viewvc/llvm-project?rev=364392&view=rev
Log:
[clangd] Don't rename the namespace.
Summary:
Also fix a small bug -- the extra argument "-xc++" doesn't overwrite the
language if the argument is present after the file name in the compiler
command.
Reviewers: sammccall
Subscribers: ilya-biryukov, MaskRay, jkorous, arphaman, kadircet, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D63759
Modified:
clang-tools-extra/trunk/clangd/refactor/Rename.cpp
clang-tools-extra/trunk/clangd/unittests/RenameTests.cpp
clang-tools-extra/trunk/clangd/unittests/TestTU.cpp
Modified: clang-tools-extra/trunk/clangd/refactor/Rename.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/refactor/Rename.cpp?rev=364392&r1=364391&r2=364392&view=diff
==============================================================================
--- clang-tools-extra/trunk/clangd/refactor/Rename.cpp (original)
+++ clang-tools-extra/trunk/clangd/refactor/Rename.cpp Wed Jun 26 01:10:26 2019
@@ -93,12 +93,15 @@ enum ReasonToReject {
NoIndexProvided,
NonIndexable,
UsedOutsideFile,
+ UnsupportedSymbol,
};
// Check the symbol Decl is renameable (per the index) within the file.
llvm::Optional<ReasonToReject> renamableWithinFile(const NamedDecl &Decl,
StringRef MainFile,
const SymbolIndex *Index) {
+ if (llvm::isa<NamespaceDecl>(&Decl))
+ return ReasonToReject::UnsupportedSymbol;
auto &ASTCtx = Decl.getASTContext();
const auto &SM = ASTCtx.getSourceManager();
bool MainFileIsHeader = ASTCtx.getLangOpts().IsHeaderFile;
@@ -160,6 +163,8 @@ renameWithinFile(ParsedAST &AST, llvm::S
return "the symbol is used outside main file";
case NonIndexable:
return "symbol may be used in other files (not eligible for indexing)";
+ case UnsupportedSymbol:
+ return "symbol is not a supported kind (e.g. namespace)";
}
llvm_unreachable("unhandled reason kind");
};
Modified: clang-tools-extra/trunk/clangd/unittests/RenameTests.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/RenameTests.cpp?rev=364392&r1=364391&r2=364392&view=diff
==============================================================================
--- clang-tools-extra/trunk/clangd/unittests/RenameTests.cpp (original)
+++ clang-tools-extra/trunk/clangd/unittests/RenameTests.cpp Wed Jun 26 01:10:26 2019
@@ -93,28 +93,41 @@ TEST(RenameTest, SingleFile) {
TEST(RenameTest, Renameable) {
// Test cases where the symbol is declared in header.
- const char *Headers[] = {
- R"cpp(// allow -- function-local
+ struct Case {
+ const char* HeaderCode;
+ const char* ErrorMessage; // null if no error
+ };
+ Case Cases[] = {
+ {R"cpp(// allow -- function-local
void f(int [[Lo^cal]]) {
[[Local]] = 2;
}
)cpp",
+ nullptr},
- R"cpp(// allow -- symbol is indexable and has no refs in index.
+ {R"cpp(// allow -- symbol is indexable and has no refs in index.
void [[On^lyInThisFile]]();
)cpp",
+ nullptr},
- R"cpp(// disallow -- symbol is indexable and has other refs in index.
+ {R"cpp(// disallow -- symbol is indexable and has other refs in index.
void f() {
Out^side s;
}
)cpp",
+ "used outside main file"},
- R"cpp(// disallow -- symbol is not indexable.
+ {R"cpp(// disallow -- symbol is not indexable.
namespace {
class Unin^dexable {};
}
)cpp",
+ "not eligible for indexing"},
+
+ {R"cpp(// disallow -- namespace symbol isn't supported
+ namespace fo^o {}
+ )cpp",
+ "not a supported kind"},
};
const char *CommonHeader = "class Outside {};";
TestTU OtherFile = TestTU::withCode("Outside s;");
@@ -123,13 +136,14 @@ TEST(RenameTest, Renameable) {
// The index has a "Outside" reference.
auto OtherFileIndex = OtherFile.index();
- for (const char *Header : Headers) {
- Annotations T(Header);
+ for (const auto& Case : Cases) {
+ Annotations T(Case.HeaderCode);
// We open the .h file as the main file.
TestTU TU = TestTU::withCode(T.code());
TU.Filename = "test.h";
TU.HeaderCode = CommonHeader;
- TU.ExtraArgs.push_back("-xc++");
+ // Parsing the .h file as C++ include.
+ TU.ExtraArgs.push_back("-xobjective-c++-header");
auto AST = TU.build();
auto Results = renameWithinFile(AST, testPath(TU.Filename), T.point(),
@@ -138,9 +152,11 @@ TEST(RenameTest, Renameable) {
if (T.ranges().empty())
WantRename = false;
if (!WantRename) {
+ assert(Case.ErrorMessage && "Error message must be set!");
EXPECT_FALSE(Results) << "expected renameWithinFile returned an error: "
<< T.code();
- llvm::consumeError(Results.takeError());
+ auto ActualMessage = llvm::toString(Results.takeError());
+ EXPECT_THAT(ActualMessage, testing::HasSubstr(Case.ErrorMessage));
} else {
EXPECT_TRUE(bool(Results)) << "renameWithinFile returned an error: "
<< llvm::toString(Results.takeError());
Modified: clang-tools-extra/trunk/clangd/unittests/TestTU.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/TestTU.cpp?rev=364392&r1=364391&r2=364392&view=diff
==============================================================================
--- clang-tools-extra/trunk/clangd/unittests/TestTU.cpp (original)
+++ clang-tools-extra/trunk/clangd/unittests/TestTU.cpp Wed Jun 26 01:10:26 2019
@@ -31,7 +31,7 @@ ParsedAST TestTU::build() const {
Files[FullHeaderName] = HeaderCode;
Files[ImportThunk] = ThunkContents;
- std::vector<const char *> Cmd = {"clang", FullFilename.c_str()};
+ std::vector<const char *> Cmd = {"clang"};
// FIXME: this shouldn't need to be conditional, but it breaks a
// GoToDefinition test for some reason (getMacroArgExpandedLocation fails).
if (!HeaderCode.empty()) {
@@ -40,6 +40,9 @@ ParsedAST TestTU::build() const {
: FullHeaderName.c_str());
}
Cmd.insert(Cmd.end(), ExtraArgs.begin(), ExtraArgs.end());
+ // Put the file name at the end -- this allows the extra arg (-xc++) to
+ // override the language setting.
+ Cmd.push_back(FullFilename.c_str());
ParseInputs Inputs;
Inputs.CompileCommand.Filename = FullFilename;
Inputs.CompileCommand.CommandLine = {Cmd.begin(), Cmd.end()};
More information about the cfe-commits
mailing list