brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.5 KiB · a58a435 Raw
83 lines · c
1//===--- Diagnostics.h - Helper class for error diagnostics -----*- C++ -*-===//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// Diagnostics class to manage error messages. Implementation shares similarity10// to clang-query Diagnostics.11//12//===----------------------------------------------------------------------===//13 14#ifndef MLIR_TOOLS_MLIRQUERY_MATCHER_DIAGNOSTICS_H15#define MLIR_TOOLS_MLIRQUERY_MATCHER_DIAGNOSTICS_H16 17#include "mlir/Query/Matcher/ErrorBuilder.h"18#include "llvm/ADT/ArrayRef.h"19#include "llvm/ADT/StringRef.h"20#include "llvm/ADT/Twine.h"21#include "llvm/Support/raw_ostream.h"22#include <string>23#include <vector>24 25namespace mlir::query::matcher::internal {26 27// Diagnostics class to manage error messages.28class Diagnostics {29public:30  // Helper stream class for constructing error messages.31  class ArgStream {32  public:33    ArgStream(std::vector<std::string> *out) : out(out) {}34    template <class T>35    ArgStream &operator<<(const T &arg) {36      return operator<<(llvm::Twine(arg));37    }38    ArgStream &operator<<(const llvm::Twine &arg);39 40  private:41    std::vector<std::string> *out;42  };43 44  // Add an error message with the specified range and error type.45  // Returns an ArgStream object to allow constructing the error message using46  // the << operator.47  ArgStream addError(SourceRange range, ErrorType error);48 49  // Print all error messages to the specified output stream.50  void print(llvm::raw_ostream &os) const;51 52private:53  // Information stored for one frame of the context.54  struct ContextFrame {55    SourceRange range;56    std::vector<std::string> args;57  };58 59  // Information stored for each error found.60  struct ErrorContent {61    std::vector<ContextFrame> contextStack;62    struct Message {63      SourceRange range;64      ErrorType type;65      std::vector<std::string> args;66    };67    std::vector<Message> messages;68  };69 70  void printMessage(const ErrorContent::Message &message,71                    const llvm::Twine Prefix, llvm::raw_ostream &os) const;72 73  void printErrorContent(const ErrorContent &content,74                         llvm::raw_ostream &os) const;75 76  std::vector<ContextFrame> contextStack;77  std::vector<ErrorContent> errorValues;78};79 80} // namespace mlir::query::matcher::internal81 82#endif // MLIR_TOOLS_MLIRQUERY_MATCHER_DIAGNOSTICS_H83