1//===--- ASTSelectionRequirements.cpp - Clang refactoring library ---------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#include "clang/Tooling/Refactoring/RefactoringActionRuleRequirements.h"
10#include <optional>
11
12using namespace clang;
13using namespace tooling;
14
15Expected<SelectedASTNode>
16ASTSelectionRequirement::evaluate(RefactoringRuleContext &Context) const {
17 // FIXME: Memoize so that selection is evaluated only once.
18 Expected<SourceRange> Range =
19 SourceRangeSelectionRequirement::evaluate(Context);
20 if (!Range)
21 return Range.takeError();
22
23 std::optional<SelectedASTNode> Selection =
24 findSelectedASTNodes(Context.getASTContext(), *Range);
25 if (!Selection)
26 return Context.createDiagnosticError(
27 Range->getBegin(), diag::err_refactor_selection_invalid_ast);
28 return std::move(*Selection);
29}
30
31Expected<CodeRangeASTSelection> CodeRangeASTSelectionRequirement::evaluate(
32 RefactoringRuleContext &Context) const {
33 // FIXME: Memoize so that selection is evaluated only once.
34 Expected<SelectedASTNode> ASTSelection =
35 ASTSelectionRequirement::evaluate(Context);
36 if (!ASTSelection)
37 return ASTSelection.takeError();
38 std::unique_ptr<SelectedASTNode> StoredSelection =
39 std::make_unique<SelectedASTNode>(args: std::move(*ASTSelection));
40 std::optional<CodeRangeASTSelection> CodeRange =
41 CodeRangeASTSelection::create(SelectionRange: Context.getSelectionRange(),
42 ASTSelection: *StoredSelection);
43 if (!CodeRange)
44 return Context.createDiagnosticError(
45 Context.getSelectionRange().getBegin(),
46 diag::err_refactor_selection_invalid_ast);
47 Context.setASTSelection(std::move(StoredSelection));
48 return std::move(*CodeRange);
49}
50

Provided by KDAB

Privacy Policy
Learn to use CMake with our Intro Training
Find out more

source code of clang/lib/Tooling/Refactoring/ASTSelectionRequirements.cpp