https://github.com/legrosbuffle created https://github.com/llvm/llvm-project/pull/66480
We were previously checking that stencil input ranges were writable. It suffices for them to be readable. >From d9f8e39bb042165b53ae3c070f96a5bfe994f9fd Mon Sep 17 00:00:00 2001 From: Clement Courbet <cour...@google.com> Date: Fri, 15 Sep 2023 10:42:16 +0200 Subject: [PATCH] [clang-transformer] Allow stencils to read from system headers. We were previously checking that stencil input ranges were writable. It suffices for them to be readable. --- clang/include/clang/Tooling/Transformer/SourceCode.h | 4 ++++ clang/lib/Tooling/Transformer/SourceCode.cpp | 6 +++--- clang/lib/Tooling/Transformer/Stencil.cpp | 6 +++--- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/clang/include/clang/Tooling/Transformer/SourceCode.h b/clang/include/clang/Tooling/Transformer/SourceCode.h index 44a4749db74c96c..01d8ef05e5687e5 100644 --- a/clang/include/clang/Tooling/Transformer/SourceCode.h +++ b/clang/include/clang/Tooling/Transformer/SourceCode.h @@ -91,6 +91,10 @@ StringRef getExtendedText(const T &Node, tok::TokenKind Next, llvm::Error validateEditRange(const CharSourceRange &Range, const SourceManager &SM); +/// Determines whether \p Range is one that can be read from. +llvm::Error validateRange(const CharSourceRange &Range, const SourceManager &SM, + bool AllowSystemHeaders); + /// Attempts to resolve the given range to one that can be edited by a rewrite; /// generally, one that starts and ends within a particular file. If a value is /// returned, it satisfies \c validateEditRange. diff --git a/clang/lib/Tooling/Transformer/SourceCode.cpp b/clang/lib/Tooling/Transformer/SourceCode.cpp index 35edc261ef09670..30009537b5923ce 100644 --- a/clang/lib/Tooling/Transformer/SourceCode.cpp +++ b/clang/lib/Tooling/Transformer/SourceCode.cpp @@ -50,9 +50,9 @@ CharSourceRange clang::tooling::maybeExtendRange(CharSourceRange Range, return CharSourceRange::getTokenRange(Range.getBegin(), Tok.getLocation()); } -static llvm::Error validateRange(const CharSourceRange &Range, - const SourceManager &SM, - bool AllowSystemHeaders) { +llvm::Error clang::tooling::validateRange(const CharSourceRange &Range, + const SourceManager &SM, + bool AllowSystemHeaders) { if (Range.isInvalid()) return llvm::make_error<StringError>(errc::invalid_argument, "Invalid range"); diff --git a/clang/lib/Tooling/Transformer/Stencil.cpp b/clang/lib/Tooling/Transformer/Stencil.cpp index f2c1b6f8520a8cb..0c2037a8ae6c013 100644 --- a/clang/lib/Tooling/Transformer/Stencil.cpp +++ b/clang/lib/Tooling/Transformer/Stencil.cpp @@ -230,7 +230,7 @@ class SelectorStencil : public StencilInterface { // message. If it's valid, then something else is the cause and we just // return the generic failure message. if (auto Err = - tooling::validateEditRange(*RawRange, *Match.SourceManager)) + tooling::validateRange(*RawRange, *Match.SourceManager, true)) return handleErrors(std::move(Err), [](std::unique_ptr<StringError> E) { assert(E->convertToErrorCode() == llvm::make_error_code(errc::invalid_argument) && @@ -245,8 +245,8 @@ class SelectorStencil : public StencilInterface { "selected range could not be resolved to a valid source range"); } // Validate `Range`, because `makeFileCharRange` accepts some ranges that - // `validateEditRange` rejects. - if (auto Err = tooling::validateEditRange(Range, *Match.SourceManager)) + // `validateRange` rejects. + if (auto Err = tooling::validateRange(Range, *Match.SourceManager, true)) return joinErrors( llvm::createStringError(errc::invalid_argument, "selected range is not valid for editing"), _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits