brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.9 KiB · 4a64543 Raw
50 lines · cpp
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-exception6//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>(std::move(*ASTSelection));40  std::optional<CodeRangeASTSelection> CodeRange =41      CodeRangeASTSelection::create(Context.getSelectionRange(),42                                    *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