1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192
|
// RUN: clang-refactor extract -selection=test:%s %s -- -std=c++11 -fcxx-exceptions | grep -v CHECK | FileCheck %s
struct Rectangle { int width, height; };
void extractStatement(const Rectangle &r) {
/*range adeclstmt=->+0:59*/int area = r.width * r.height;
}
// CHECK: 1 'adeclstmt' results:
// CHECK: static void extracted() {
// CHECK-NEXT: int area = r.width * r.height;{{$}}
// CHECK-NEXT: }{{[[:space:]].*}}
// CHECK-NEXT: void extractStatement(const Rectangle &r) {
// CHECK-NEXT: /*range adeclstmt=->+0:59*/extracted();{{$}}
// CHECK-NEXT: }
void extractStatementNoSemiIf(const Rectangle &r) {
/*range bextractif=->+2:4*/if (r.width) {
int x = r.height;
}
}
// CHECK: 1 'bextractif' results:
// CHECK: static void extracted() {
// CHECK-NEXT: if (r.width) {
// CHECK-NEXT: int x = r.height;
// CHECK-NEXT: }{{$}}
// CHECK-NEXT: }{{[[:space:]].*}}
// CHECK-NEXT: void extractStatementNoSemiIf(const Rectangle &r) {
// CHECK-NEXT: /*range bextractif=->+2:4*/extracted();{{$}}
// CHECK-NEXT: }
void extractStatementDontExtraneousSemi(const Rectangle &r) {
/*range cextractif=->+2:4*/if (r.width) {
int x = r.height;
} ;
} //^ This semicolon shouldn't be extracted.
// CHECK: 1 'cextractif' results:
// CHECK: static void extracted() {
// CHECK-NEXT: if (r.width) {
// CHECK-NEXT: int x = r.height;
// CHECK-NEXT: }{{$}}
// CHECK-NEXT: }{{[[:space:]].*}}
// CHECK-NEXT: void extractStatementDontExtraneousSemi(const Rectangle &r) {
// CHECK-NEXT: extracted(); ;{{$}}
// CHECK-NEXT: }
void extractStatementNotSemiSwitch() {
/*range dextract=->+5:4*/switch (2) {
case 1:
break;
case 2:
break;
}
}
// CHECK: 1 'dextract' results:
// CHECK: static void extracted() {
// CHECK-NEXT: switch (2) {
// CHECK-NEXT: case 1:
// CHECK-NEXT: break;
// CHECK-NEXT: case 2:
// CHECK-NEXT: break;
// CHECK-NEXT: }{{$}}
// CHECK-NEXT: }{{[[:space:]].*}}
// CHECK-NEXT: void extractStatementNotSemiSwitch() {
// CHECK-NEXT: extracted();{{$}}
// CHECK-NEXT: }
void extractStatementNotSemiWhile() {
/*range eextract=->+2:4*/while (true) {
int x = 0;
}
}
// CHECK: 1 'eextract' results:
// CHECK: static void extracted() {
// CHECK-NEXT: while (true) {
// CHECK-NEXT: int x = 0;
// CHECK-NEXT: }{{$}}
// CHECK-NEXT: }{{[[:space:]].*}}
// CHECK-NEXT: void extractStatementNotSemiWhile() {
// CHECK-NEXT: extracted();{{$}}
// CHECK-NEXT: }
void extractStatementNotSemiFor() {
/*range fextract=->+1:4*/for (int i = 0; i < 10; ++i) {
}
}
// CHECK: 1 'fextract' results:
// CHECK: static void extracted() {
// CHECK-NEXT: for (int i = 0; i < 10; ++i) {
// CHECK-NEXT: }{{$}}
// CHECK-NEXT: }{{[[:space:]].*}}
// CHECK-NEXT: void extractStatementNotSemiFor() {
// CHECK-NEXT: extracted();{{$}}
// CHECK-NEXT: }
struct XS {
int *begin() { return 0; }
int *end() { return 0; }
};
void extractStatementNotSemiRangedFor(XS xs) {
/*range gextract=->+1:4*/for (int i : xs) {
}
}
// CHECK: 1 'gextract' results:
// CHECK: static void extracted() {
// CHECK-NEXT: for (int i : xs) {
// CHECK-NEXT: }{{$}}
// CHECK-NEXT: }{{[[:space:]].*}}
// CHECK-NEXT: void extractStatementNotSemiRangedFor(XS xs) {
// CHECK-NEXT: extracted();{{$}}
// CHECK-NEXT: }
void extractStatementNotSemiRangedTryCatch() {
/*range hextract=->+3:4*/try { int x = 0; }
catch (const int &i) {
int y = i;
}
}
// CHECK: 1 'hextract' results:
// CHECK: static void extracted() {
// CHECK-NEXT: try { int x = 0; }
// CHECK-NEXT: catch (const int &i) {
// CHECK-NEXT: int y = i;
// CHECK-NEXT: }{{$}}
// CHECK-NEXT: }{{[[:space:]].*}}
// CHECK-NEXT: void extractStatementNotSemiRangedTryCatch() {
// CHECK-NEXT: extracted();{{$}}
// CHECK-NEXT: }
void extractCantFindSemicolon() {
/*range iextract=->+1:17*/do {
} while (true)
// Add a semicolon in both the extracted and original function as we don't
// want to extract the semicolon below.
;
}
// CHECK: 1 'iextract' results:
// CHECK: static void extracted() {
// CHECK-NEXT: do {
// CHECK-NEXT: } while (true);{{$}}
// CHECK-NEXT: }{{[[:space:]].*}}
// CHECK-NEXT: void extractCantFindSemicolon() {
// CHECK-NEXT: extracted();{{$}}
// CHECK-NEXT: //
// CHECK-NEXT: //
// CHECK-NEXT: ;
// CHECK-NEXT: }
void extractFindSemicolon() {
/*range jextract=->+1:17*/do {
} while (true) /*grab*/ ;
}
// CHECK: 1 'jextract' results:
// CHECK: static void extracted() {
// CHECK-NEXT: do {
// CHECK-NEXT: } while (true) /*grab*/ ;{{$}}
// CHECK-NEXT: }{{[[:space:]].*}}
// CHECK-NEXT: void extractFindSemicolon() {
// CHECK-NEXT: extracted();{{$}}
// CHECK-NEXT: }
void call();
void careForNonCompoundSemicolons1() {
/*range kextract=->+1:11*/if (true)
call();
}
// CHECK: 1 'kextract' results:
// CHECK: static void extracted() {
// CHECK-NEXT: if (true)
// CHECK-NEXT: call();{{$}}
// CHECK-NEXT: }{{[[:space:]].*}}
// CHECK-NEXT: void careForNonCompoundSemicolons1() {
// CHECK-NEXT: extracted();{{$}}
// CHECK-NEXT: }
void careForNonCompoundSemicolons2() {
/*range lextract=->+3:1*/for (int i = 0; i < 10; ++i)
while (i != 0)
;
// end right here111!
}
// CHECK: 1 'lextract' results:
// CHECK: static void extracted() {
// CHECK-NEXT: for (int i = 0; i < 10; ++i)
// CHECK-NEXT: while (i != 0)
// CHECK-NEXT: ;{{$}}
// CHECK-NEXT: }{{[[:space:]].*}}
// CHECK-NEXT: void careForNonCompoundSemicolons2() {
// CHECK-NEXT: extracted();{{$}}
// CHECK-NEXT: //
// CHECK-NEXT: }
|