@@ -210,6 +210,10 @@ static void findRelatedIdents(StringRef Filename, int64_t Offset,
210210 SourceKitCancellationToken CancellationToken,
211211 ResponseReceiver Rec);
212212
213+ static void findActiveRegions(StringRef Filename, ArrayRef<const char *> Args,
214+ SourceKitCancellationToken CancellationToken,
215+ ResponseReceiver Rec);
216+
213217static sourcekitd_response_t
214218codeComplete(llvm::MemoryBuffer *InputBuf, int64_t Offset,
215219 Optional<RequestDict> optionsDict, ArrayRef<const char *> Args,
@@ -1682,6 +1686,25 @@ handleRequestRelatedIdents(const RequestDict &Req,
16821686 });
16831687}
16841688
1689+ static void
1690+ handleRequestActiveRegions(const RequestDict &Req,
1691+ SourceKitCancellationToken CancellationToken,
1692+ ResponseReceiver Rec) {
1693+ if (checkVFSNotSupported(Req, Rec))
1694+ return;
1695+
1696+ handleSemanticRequest(Req, Rec, [Req, CancellationToken, Rec]() {
1697+ auto SourceFile = getSourceFileNameForRequestOrEmitError(Req, Rec);
1698+ if (!SourceFile)
1699+ return;
1700+ SmallVector<const char *> Args;
1701+ if (getCompilerArgumentsForRequestOrEmitError(Req, Args, Rec))
1702+ return;
1703+
1704+ return findActiveRegions(*SourceFile, Args, CancellationToken, Rec);
1705+ });
1706+ }
1707+
16851708static void
16861709handleRequestDiagnostics(const RequestDict &Req,
16871710 SourceKitCancellationToken CancellationToken,
@@ -1805,6 +1828,7 @@ void handleRequestImpl(sourcekitd_object_t ReqObj,
18051828 handleRequestFindLocalRenameRanges)
18061829 HANDLE_REQUEST(RequestNameTranslation, handleRequestNameTranslation)
18071830 HANDLE_REQUEST(RequestRelatedIdents, handleRequestRelatedIdents)
1831+ HANDLE_REQUEST(RequestActiveRegions, handleRequestActiveRegions)
18081832 HANDLE_REQUEST(RequestDiagnostics, handleRequestDiagnostics)
18091833
18101834 {
@@ -2576,6 +2600,38 @@ static void findRelatedIdents(StringRef Filename, int64_t Offset,
25762600 });
25772601}
25782602
2603+ // ===----------------------------------------------------------------------===//
2604+ // FindActiveRegions
2605+ // ===----------------------------------------------------------------------===//
2606+
2607+ static void findActiveRegions (StringRef Filename, ArrayRef<const char *> Args,
2608+ SourceKitCancellationToken CancellationToken,
2609+ ResponseReceiver Rec) {
2610+ LangSupport &Lang = getGlobalContext ().getSwiftLangSupport ();
2611+
2612+ Lang.findActiveRegionsInFile (
2613+ Filename, Args, CancellationToken,
2614+ [Rec](const RequestResult<ActiveRegionsInfo> &Result) {
2615+ if (Result.isCancelled ())
2616+ return Rec (createErrorRequestCancelled ());
2617+ if (Result.isError ())
2618+ return Rec (createErrorRequestFailed (Result.getError ()));
2619+
2620+ const ActiveRegionsInfo &Info = Result.value ();
2621+
2622+ ResponseBuilder RespBuilder;
2623+ auto Arr = RespBuilder.getDictionary ().setArray (KeyResults);
2624+ for (auto Config : Info.Configs ) {
2625+ auto Elem = Arr.appendDictionary ();
2626+ Elem.set (KeyOffset, Config.Offset );
2627+ if (Config.IsActive )
2628+ Elem.setBool (KeyIsActive, true );
2629+ }
2630+
2631+ Rec (RespBuilder.createResponse ());
2632+ });
2633+ }
2634+
25792635// ===----------------------------------------------------------------------===//
25802636// CodeComplete
25812637// ===----------------------------------------------------------------------===//
0 commit comments