Skip to content

Commit 5838e03

Browse files
committed
[SourceKit] Add a SourceKitd test argument -pos-end.
Manually specifying range length is laborious and error-prone; this commit adds an argument -end-pos=Line:Column to specify the end position of a given range under test.
1 parent 982a57f commit 5838e03

File tree

5 files changed

+27
-3
lines changed

5 files changed

+27
-3
lines changed

test/SourceKit/RangeInfo/basic.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,13 @@ struct S { func foo() {} }
3131
// RUN: %sourcekitd-test -req=range -pos=3:1 -length 55 %s -- %s | %FileCheck %s -check-prefix=CHECK9
3232
// RUN: %sourcekitd-test -req=range -pos=4:1 -length 36 %s -- %s | %FileCheck %s -check-prefix=CHECK10
3333

34+
// RUN: %sourcekitd-test -req=range -pos=8:1 -end-pos 8:32 %s -- %s | %FileCheck %s -check-prefix=CHECK5
35+
// RUN: %sourcekitd-test -req=range -pos=9:1 -end-pos 9:26 %s -- %s | %FileCheck %s -check-prefix=CHECK6
36+
// RUN: %sourcekitd-test -req=range -pos=10:1 -end-pos 10:27 %s -- %s | %FileCheck %s -check-prefix=CHECK7
37+
// RUN: %sourcekitd-test -req=range -pos=3:1 -end-pos=4:26 %s -- %s | %FileCheck %s -check-prefix=CHECK8
38+
// RUN: %sourcekitd-test -req=range -pos=3:1 -end-pos=5:13 %s -- %s | %FileCheck %s -check-prefix=CHECK9
39+
// RUN: %sourcekitd-test -req=range -pos=4:1 -end-pos=5:13 %s -- %s | %FileCheck %s -check-prefix=CHECK10
40+
3441
// CHECK1-DAG: <kind>source.lang.swift.range.singleexpression</kind>
3542
// CHECK1-DAG: <content>1 + 2</content>
3643
// CHECK1-DAG: <type>Int</type>

tools/SourceKit/tools/sourcekitd-test/Options.td

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,3 +87,6 @@ def interested_usr : Separate<["-"], "interested-usr">,
8787

8888
def async : Flag<["-"], "async">,
8989
HelpText<"Perform request asynchronously">;
90+
91+
def end_pos : Separate<["-"], "end-pos">, HelpText<"line:col">;
92+
def end_pos_EQ : Joined<["-"], "end-pos=">, Alias<end_pos>;

tools/SourceKit/tools/sourcekitd-test/TestOptions.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,13 @@ bool TestOptions::parseArgs(llvm::ArrayRef<const char *> Args) {
164164
break;
165165
}
166166

167+
case OPT_end_pos: {
168+
auto linecol = parseLineCol(InputArg->getValue());
169+
EndLine = linecol.first;
170+
EndCol = linecol.second;
171+
break;
172+
}
173+
167174
case OPT_line:
168175
if (StringRef(InputArg->getValue()).getAsInteger(10, Line)) {
169176
llvm::errs() << "error: expected integer for 'line'\n";

tools/SourceKit/tools/sourcekitd-test/TestOptions.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ struct TestOptions {
6363
std::string InterestedUSR;
6464
unsigned Line = 0;
6565
unsigned Col = 0;
66+
unsigned EndLine = 0;
67+
unsigned EndCol = 0;
6668
unsigned Offset = 0;
6769
unsigned Length = 0;
6870
llvm::Optional<std::string> ReplaceText;

tools/SourceKit/tools/sourcekitd-test/sourcekitd-test.cpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -543,12 +543,17 @@ static int handleTestInvocation(ArrayRef<const char *> Args,
543543
sourcekitd_request_dictionary_set_int64(Req, KeyOffset, ByteOffset);
544544
}
545545
break;
546-
case SourceKitRequest::RangeInfo:
546+
case SourceKitRequest::RangeInfo: {
547547
sourcekitd_request_dictionary_set_uid(Req, KeyRequest, RequestRangeInfo);
548548
sourcekitd_request_dictionary_set_int64(Req, KeyOffset, ByteOffset);
549-
sourcekitd_request_dictionary_set_int64(Req, KeyLength, Opts.Length);
549+
auto Length = Opts.Length;
550+
if (Opts.Length == 0 && Opts.EndLine > 0) {
551+
auto EndOff = resolveFromLineCol(Opts.EndLine, Opts.EndCol, SourceFile);
552+
Length = EndOff - ByteOffset;
553+
}
554+
sourcekitd_request_dictionary_set_int64(Req, KeyLength, Length);
550555
break;
551-
556+
}
552557
case SourceKitRequest::RelatedIdents:
553558
sourcekitd_request_dictionary_set_uid(Req, KeyRequest, RequestRelatedIdents);
554559
sourcekitd_request_dictionary_set_int64(Req, KeyOffset, ByteOffset);

0 commit comments

Comments
 (0)