kbobyrev created this revision. kbobyrev added a reviewer: sammccall. Herald added subscribers: cfe-commits, usaxena95, kadircet, arphaman. Herald added a project: clang. kbobyrev requested review of this revision. Herald added subscribers: MaskRay, ilya-biryukov.
Follow-up on https://reviews.llvm.org/D88553#inline-837013 Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D90588 Files: clang-tools-extra/clangd/ClangdServer.cpp clang-tools-extra/clangd/SemanticSelection.cpp clang-tools-extra/clangd/SemanticSelection.h clang-tools-extra/clangd/unittests/SemanticSelectionTests.cpp Index: clang-tools-extra/clangd/unittests/SemanticSelectionTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/SemanticSelectionTests.cpp +++ clang-tools-extra/clangd/unittests/SemanticSelectionTests.cpp @@ -263,7 +263,8 @@ for (const char *Test : Tests) { auto T = Annotations(Test); auto AST = TestTU::withCode(T.code()).build(); - EXPECT_THAT(gatherFoldingRanges(llvm::cantFail(getFoldingRanges(AST))), + EXPECT_THAT(gatherFoldingRanges(llvm::cantFail( + getFoldingRanges(AST.getASTContext(), AST.getTokens()))), UnorderedElementsAreArray(T.ranges())) << Test; } Index: clang-tools-extra/clangd/SemanticSelection.h =================================================================== --- clang-tools-extra/clangd/SemanticSelection.h +++ clang-tools-extra/clangd/SemanticSelection.h @@ -14,6 +14,7 @@ #define LLVM_CLANG_TOOLS_EXTRA_CLANGD_SEMANTICSELECTION_H #include "ParsedAST.h" #include "Protocol.h" +#include "clang/Tooling/Syntax/Tokens.h" #include "llvm/Support/Error.h" #include <vector> namespace clang { @@ -27,7 +28,8 @@ /// Returns a list of ranges whose contents might be collapsible in an editor. /// This should include large scopes, preprocessor blocks etc. -llvm::Expected<std::vector<FoldingRange>> getFoldingRanges(ParsedAST &AST); +llvm::Expected<std::vector<FoldingRange>> +getFoldingRanges(ASTContext &Context, const syntax::TokenBuffer &Tokens); } // namespace clangd } // namespace clang Index: clang-tools-extra/clangd/SemanticSelection.cpp =================================================================== --- clang-tools-extra/clangd/SemanticSelection.cpp +++ clang-tools-extra/clangd/SemanticSelection.cpp @@ -12,6 +12,7 @@ #include "Protocol.h" #include "Selection.h" #include "SourceCode.h" +#include "clang/AST/ASTContext.h" #include "clang/AST/DeclBase.h" #include "clang/Basic/SourceLocation.h" #include "clang/Basic/SourceManager.h" @@ -158,11 +159,12 @@ // other code regions (e.g. public/private/protected sections of classes, // control flow statement bodies). // Related issue: https://github.com/clangd/clangd/issues/310 -llvm::Expected<std::vector<FoldingRange>> getFoldingRanges(ParsedAST &AST) { - syntax::Arena A(AST.getSourceManager(), AST.getLangOpts(), AST.getTokens()); +llvm::Expected<std::vector<FoldingRange>> +getFoldingRanges(ASTContext &Context, const syntax::TokenBuffer &Tokens) { + syntax::Arena A(Context.getSourceManager(), Context.getLangOpts(), Tokens); const auto *SyntaxTree = - syntax::buildSyntaxTree(A, *AST.getASTContext().getTranslationUnitDecl()); - return collectFoldingRanges(SyntaxTree, AST.getSourceManager()); + syntax::buildSyntaxTree(A, *Context.getTranslationUnitDecl()); + return collectFoldingRanges(SyntaxTree, Context.getSourceManager()); } } // namespace clangd Index: clang-tools-extra/clangd/ClangdServer.cpp =================================================================== --- clang-tools-extra/clangd/ClangdServer.cpp +++ clang-tools-extra/clangd/ClangdServer.cpp @@ -711,7 +711,8 @@ [CB = std::move(CB)](llvm::Expected<InputsAndAST> InpAST) mutable { if (!InpAST) return CB(InpAST.takeError()); - CB(clangd::getFoldingRanges(InpAST->AST)); + CB(clangd::getFoldingRanges(InpAST->AST.getASTContext(), + InpAST->AST.getTokens())); }; WorkScheduler.runWithAST("foldingRanges", File, std::move(Action), TUScheduler::InvalidateOnUpdate);
Index: clang-tools-extra/clangd/unittests/SemanticSelectionTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/SemanticSelectionTests.cpp +++ clang-tools-extra/clangd/unittests/SemanticSelectionTests.cpp @@ -263,7 +263,8 @@ for (const char *Test : Tests) { auto T = Annotations(Test); auto AST = TestTU::withCode(T.code()).build(); - EXPECT_THAT(gatherFoldingRanges(llvm::cantFail(getFoldingRanges(AST))), + EXPECT_THAT(gatherFoldingRanges(llvm::cantFail( + getFoldingRanges(AST.getASTContext(), AST.getTokens()))), UnorderedElementsAreArray(T.ranges())) << Test; } Index: clang-tools-extra/clangd/SemanticSelection.h =================================================================== --- clang-tools-extra/clangd/SemanticSelection.h +++ clang-tools-extra/clangd/SemanticSelection.h @@ -14,6 +14,7 @@ #define LLVM_CLANG_TOOLS_EXTRA_CLANGD_SEMANTICSELECTION_H #include "ParsedAST.h" #include "Protocol.h" +#include "clang/Tooling/Syntax/Tokens.h" #include "llvm/Support/Error.h" #include <vector> namespace clang { @@ -27,7 +28,8 @@ /// Returns a list of ranges whose contents might be collapsible in an editor. /// This should include large scopes, preprocessor blocks etc. -llvm::Expected<std::vector<FoldingRange>> getFoldingRanges(ParsedAST &AST); +llvm::Expected<std::vector<FoldingRange>> +getFoldingRanges(ASTContext &Context, const syntax::TokenBuffer &Tokens); } // namespace clangd } // namespace clang Index: clang-tools-extra/clangd/SemanticSelection.cpp =================================================================== --- clang-tools-extra/clangd/SemanticSelection.cpp +++ clang-tools-extra/clangd/SemanticSelection.cpp @@ -12,6 +12,7 @@ #include "Protocol.h" #include "Selection.h" #include "SourceCode.h" +#include "clang/AST/ASTContext.h" #include "clang/AST/DeclBase.h" #include "clang/Basic/SourceLocation.h" #include "clang/Basic/SourceManager.h" @@ -158,11 +159,12 @@ // other code regions (e.g. public/private/protected sections of classes, // control flow statement bodies). // Related issue: https://github.com/clangd/clangd/issues/310 -llvm::Expected<std::vector<FoldingRange>> getFoldingRanges(ParsedAST &AST) { - syntax::Arena A(AST.getSourceManager(), AST.getLangOpts(), AST.getTokens()); +llvm::Expected<std::vector<FoldingRange>> +getFoldingRanges(ASTContext &Context, const syntax::TokenBuffer &Tokens) { + syntax::Arena A(Context.getSourceManager(), Context.getLangOpts(), Tokens); const auto *SyntaxTree = - syntax::buildSyntaxTree(A, *AST.getASTContext().getTranslationUnitDecl()); - return collectFoldingRanges(SyntaxTree, AST.getSourceManager()); + syntax::buildSyntaxTree(A, *Context.getTranslationUnitDecl()); + return collectFoldingRanges(SyntaxTree, Context.getSourceManager()); } } // namespace clangd Index: clang-tools-extra/clangd/ClangdServer.cpp =================================================================== --- clang-tools-extra/clangd/ClangdServer.cpp +++ clang-tools-extra/clangd/ClangdServer.cpp @@ -711,7 +711,8 @@ [CB = std::move(CB)](llvm::Expected<InputsAndAST> InpAST) mutable { if (!InpAST) return CB(InpAST.takeError()); - CB(clangd::getFoldingRanges(InpAST->AST)); + CB(clangd::getFoldingRanges(InpAST->AST.getASTContext(), + InpAST->AST.getTokens())); }; WorkScheduler.runWithAST("foldingRanges", File, std::move(Action), TUScheduler::InvalidateOnUpdate);
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits