[clang-tools-extra] r366451 - [Clangd] Changed ExtractVariable to only work on non empty selections
Hans Wennborg via cfe-commits
cfe-commits at lists.llvm.org
Mon Jul 22 11:07:28 PDT 2019
Merged to the 9 branch in r366714
On Thu, Jul 18, 2019 at 8:37 AM Shaurya Gupta via cfe-commits
<cfe-commits at lists.llvm.org> wrote:
>
> Author: sureyeaah
> Date: Thu Jul 18 08:38:03 2019
> New Revision: 366451
>
> URL: http://llvm.org/viewvc/llvm-project?rev=366451&view=rev
> Log:
> [Clangd] Changed ExtractVariable to only work on non empty selections
>
> Summary:
> - For now, we don't trigger in any case if it's an empty selection
> - Fixed unittests
>
> Reviewers: kadircet, sammccall
>
> Subscribers: ilya-biryukov, MaskRay, jkorous, arphaman, cfe-commits
>
> Tags: #clang
>
> Differential Revision: https://reviews.llvm.org/D64912
>
> Modified:
> clang-tools-extra/trunk/clangd/refactor/Tweak.cpp
> clang-tools-extra/trunk/clangd/refactor/Tweak.h
> clang-tools-extra/trunk/clangd/refactor/tweaks/ExtractVariable.cpp
> clang-tools-extra/trunk/clangd/unittests/TweakTests.cpp
>
> Modified: clang-tools-extra/trunk/clangd/refactor/Tweak.cpp
> URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/refactor/Tweak.cpp?rev=366451&r1=366450&r2=366451&view=diff
> ==============================================================================
> --- clang-tools-extra/trunk/clangd/refactor/Tweak.cpp (original)
> +++ clang-tools-extra/trunk/clangd/refactor/Tweak.cpp Thu Jul 18 08:38:03 2019
> @@ -40,7 +40,8 @@ void validateRegistry() {
>
> Tweak::Selection::Selection(ParsedAST &AST, unsigned RangeBegin,
> unsigned RangeEnd)
> - : AST(AST), ASTSelection(AST.getASTContext(), RangeBegin, RangeEnd) {
> + : AST(AST), SelectionBegin(RangeBegin), SelectionEnd(RangeEnd),
> + ASTSelection(AST.getASTContext(), RangeBegin, RangeEnd) {
> auto &SM = AST.getSourceManager();
> Code = SM.getBufferData(SM.getMainFileID());
> Cursor = SM.getComposedLoc(SM.getMainFileID(), RangeBegin);
>
> Modified: clang-tools-extra/trunk/clangd/refactor/Tweak.h
> URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/refactor/Tweak.h?rev=366451&r1=366450&r2=366451&view=diff
> ==============================================================================
> --- clang-tools-extra/trunk/clangd/refactor/Tweak.h (original)
> +++ clang-tools-extra/trunk/clangd/refactor/Tweak.h Thu Jul 18 08:38:03 2019
> @@ -46,7 +46,12 @@ public:
> /// Parsed AST of the active file.
> ParsedAST &AST;
> /// A location of the cursor in the editor.
> + // FIXME: Cursor is redundant and should be removed
> SourceLocation Cursor;
> + /// The begin offset of the selection
> + unsigned SelectionBegin;
> + /// The end offset of the selection
> + unsigned SelectionEnd;
> /// The AST nodes that were selected.
> SelectionTree ASTSelection;
> // FIXME: provide a way to get sources and ASTs for other files.
>
> Modified: clang-tools-extra/trunk/clangd/refactor/tweaks/ExtractVariable.cpp
> URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/refactor/tweaks/ExtractVariable.cpp?rev=366451&r1=366450&r2=366451&view=diff
> ==============================================================================
> --- clang-tools-extra/trunk/clangd/refactor/tweaks/ExtractVariable.cpp (original)
> +++ clang-tools-extra/trunk/clangd/refactor/tweaks/ExtractVariable.cpp Thu Jul 18 08:38:03 2019
> @@ -219,7 +219,8 @@ bool ExtractVariable::prepare(const Sele
> const ASTContext &Ctx = Inputs.AST.getASTContext();
> const SourceManager &SM = Inputs.AST.getSourceManager();
> const SelectionTree::Node *N = Inputs.ASTSelection.commonAncestor();
> - if (!N)
> + // we don't trigger on empty selections for now
> + if (!N || Inputs.SelectionBegin == Inputs.SelectionEnd)
> return false;
> Target = llvm::make_unique<ExtractionContext>(N, SM, Ctx);
> return Target->isExtractable();
>
> Modified: clang-tools-extra/trunk/clangd/unittests/TweakTests.cpp
> URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/TweakTests.cpp?rev=366451&r1=366450&r2=366451&view=diff
> ==============================================================================
> --- clang-tools-extra/trunk/clangd/unittests/TweakTests.cpp (original)
> +++ clang-tools-extra/trunk/clangd/unittests/TweakTests.cpp Thu Jul 18 08:38:03 2019
> @@ -296,35 +296,36 @@ TEST(TweakTest, ExtractVariable) {
> checkAvailable(ID, R"cpp(
> int xyz() {
> // return statement
> - return ^1;
> + return [[1]];
> }
> void f() {
> - int a = 5 + [[4 ^* ^xyz^()]];
> + int a = [[5 +]] [[4 * [[[[xyz]]()]]]];
> // multivariable initialization
> if(1)
> - int x = ^1, y = ^a + 1, a = ^1, z = a + 1;
> + int x = [[1]], y = [[a]] + 1, a = [[1]], z = a + 1;
> // if without else
> - if(^1) {}
> + if([[1]])
> + a = [[1]];
> // if with else
> - if(a < ^3)
> - if(a == ^4)
> - a = ^5;
> + if(a < [[3]])
> + if(a == [[4]])
> + a = [[5]];
> else
> - a = ^6;
> - else if (a < ^4)
> - a = ^4;
> + a = [[5]];
> + else if (a < [[4]])
> + a = [[4]];
> else
> - a = ^5;
> + a = [[5]];
> // for loop
> - for(a = ^1; a > ^3^+^4; a++)
> - a = ^2;
> + for(a = [[1]]; a > [[[[3]] + [[4]]]]; a++)
> + a = [[2]];
> // while
> - while(a < ^1)
> - ^a++;
> + while(a < [[1]])
> + [[a]]++;
> // do while
> do
> - a = ^1;
> - while(a < ^3);
> + a = [[1]];
> + while(a < [[3]]);
> }
> )cpp");
> // Should not crash.
> @@ -336,29 +337,31 @@ TEST(TweakTest, ExtractVariable) {
> };
> )cpp");
> checkNotAvailable(ID, R"cpp(
> - int xyz(int a = ^1) {
> + int xyz(int a = [[1]]) {
> return 1;
> class T {
> - T(int a = ^1) {};
> - int xyz = ^1;
> + T(int a = [[1]]) {};
> + int xyz = [[1]];
> };
> }
> // function default argument
> - void f(int b = ^1) {
> + void f(int b = [[1]]) {
> + // empty selection
> + int a = ^1 ^+ ^2;
> // void expressions
> auto i = new int, j = new int;
> - de^lete i^, del^ete j;
> + [[[[delete i]], delete j]];
> // if
> if(1)
> - int x = 1, y = a + 1, a = 1, z = ^a + 1;
> + int x = 1, y = a + 1, a = 1, z = [[a + 1]];
> if(int a = 1)
> - if(^a == 4)
> - a = ^a ^+ 1;
> + if([[a]] == 4)
> + a = [[[[a]] +]] 1;
> // for loop
> - for(int a = 1, b = 2, c = 3; ^a > ^b ^+ ^c; ^a++)
> - a = ^a ^+ 1;
> + for(int a = 1, b = 2, c = 3; [[a]] > [[b + c]]; [[a]]++)
> + a = [[a + 1]];
> // lambda
> - auto lamb = [&^a, &^b](int r = ^1) {return 1;}
> + auto lamb = [&[[a]], &[[b]]](int r = [[1]]) {return 1;}
> }
> )cpp");
> // vector of pairs of input and output strings
> @@ -398,7 +401,7 @@ TEST(TweakTest, ExtractVariable) {
> {R"cpp(#define LOOP(x) {int a = x + 1;}
> void f(int a) {
> if(1)
> - LOOP(5 + ^3)
> + LOOP(5 + [[3]])
> })cpp",
> R"cpp(#define LOOP(x) {int a = x + 1;}
> void f(int a) {
> @@ -407,7 +410,7 @@ TEST(TweakTest, ExtractVariable) {
> })cpp"},
> // label and attribute testing
> {R"cpp(void f(int a) {
> - label: [ [gsl::suppress("type")] ] for (;;) a = ^1;
> + label: [ [gsl::suppress("type")] ] for (;;) a = [[1]];
> })cpp",
> R"cpp(void f(int a) {
> auto dummy = 1; label: [ [gsl::suppress("type")] ] for (;;) a = dummy;
> @@ -415,14 +418,14 @@ TEST(TweakTest, ExtractVariable) {
> // FIXME: Doesn't work because bug in selection tree
> /*{R"cpp(#define PLUS(x) x++
> void f(int a) {
> - PLUS(^a);
> + PLUS([[a]]);
> })cpp",
> R"cpp(#define PLUS(x) x++
> void f(int a) {
> auto dummy = a; PLUS(dummy);
> })cpp"},*/
> - // FIXME: Doesn't work correctly for \[\[clang::uninitialized\]\] int b
> - // = 1; since the attr is inside the DeclStmt and the bounds of
> + // FIXME: Doesn't work correctly for \[\[clang::uninitialized\]\] int
> + // b = [[1]]; since the attr is inside the DeclStmt and the bounds of
> // DeclStmt don't cover the attribute
> };
> for (const auto &IO : InputOutputs) {
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list