@@ -834,11 +834,24 @@ static int handleTestInvocation(TestOptions Opts, TestOptions &InitOpts) {
834834 break ;
835835
836836 case SourceKitRequest::ExpandPlaceholder:
837- sourcekitd_request_dictionary_set_uid (Req, KeyRequest, RequestEditorOpen);
838- sourcekitd_request_dictionary_set_string (Req, KeyName, SemaName.c_str ());
839- sourcekitd_request_dictionary_set_int64 (Req, KeyEnableSyntaxMap, false );
840- sourcekitd_request_dictionary_set_int64 (Req, KeyEnableStructure, false );
841- sourcekitd_request_dictionary_set_int64 (Req, KeySyntacticOnly, !Opts.UsedSema );
837+ if (Opts.Length ) {
838+ // Single placeholder by location.
839+ sourcekitd_request_dictionary_set_uid (Req, KeyRequest, RequestEditorExpandPlaceholder);
840+ sourcekitd_request_dictionary_set_string (Req, KeyName, SemaName.c_str ());
841+ sourcekitd_request_dictionary_set_int64 (Req, KeyOffset, ByteOffset);
842+ sourcekitd_request_dictionary_set_int64 (Req, KeyLength, Opts.Length );
843+ } else {
844+ if (ByteOffset) {
845+ llvm::errs () << " Missing '-length <number>'\n " ;
846+ return 1 ;
847+ }
848+ // Expand all placeholders.
849+ sourcekitd_request_dictionary_set_uid (Req, KeyRequest, RequestEditorOpen);
850+ sourcekitd_request_dictionary_set_string (Req, KeyName, SemaName.c_str ());
851+ sourcekitd_request_dictionary_set_int64 (Req, KeyEnableSyntaxMap, false );
852+ sourcekitd_request_dictionary_set_int64 (Req, KeyEnableStructure, false );
853+ sourcekitd_request_dictionary_set_int64 (Req, KeySyntacticOnly, !Opts.UsedSema );
854+ }
842855 break ;
843856
844857 case SourceKitRequest::SyntaxTree:
@@ -1341,7 +1354,13 @@ static bool handleResponse(sourcekitd_response_t Resp, const TestOptions &Opts,
13411354 break ;
13421355
13431356 case SourceKitRequest::ExpandPlaceholder:
1344- expandPlaceholders (SourceBuf.get (), llvm::outs ());
1357+ if (Opts.Length ) {
1358+ // Single placeholder by location.
1359+ sourcekitd_response_description_dump_filedesc (Resp, STDOUT_FILENO);
1360+ } else {
1361+ // Expand all placeholders.
1362+ expandPlaceholders (SourceBuf.get (), llvm::outs ());
1363+ }
13451364 break ;
13461365 case SourceKitRequest::ModuleGroups:
13471366 printModuleGroupNames (Info, llvm::outs ());
0 commit comments