| // Copyright 2017 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef TOOLS_FIDL_FIDLC_INCLUDE_FIDL_SOURCE_FILE_H_ |
| #define TOOLS_FIDL_FIDLC_INCLUDE_FIDL_SOURCE_FILE_H_ |
| |
| #include <string> |
| #include <string_view> |
| #include <utility> |
| #include <vector> |
| |
| namespace fidl { |
| |
| class SourceFile { |
| public: |
| SourceFile(std::string filename, std::string data); |
| virtual ~SourceFile(); |
| |
| // Enables move construction and assignment |
| SourceFile(SourceFile&& rhs) = default; |
| SourceFile& operator=(SourceFile&&) = default; |
| |
| // no copy or assign (move-only or pass by reference) |
| SourceFile(const SourceFile&) = delete; |
| SourceFile& operator=(const SourceFile&) = delete; |
| |
| std::string_view filename() const { return filename_; } |
| std::string_view data() const { return data_; } |
| |
| // This is in the coordinates that most editors use. Lines start |
| // at 1 and columns start at 1. |
| struct Position { |
| int line; |
| int column; |
| }; |
| |
| // Returns the line and `Position` containing a specified span. |
| // |
| // Parameters: |
| // * view: The span to search for. |
| // * position_out: Where to output the `Position` of the span within the `SourceFile`. |
| // |
| // Returns: |
| // * A `std::string_view` of the encompassing line. This line will not contain a newline |
| // character. |
| virtual std::string_view LineContaining(std::string_view view, Position* position_out) const; |
| |
| private: |
| std::string filename_; |
| std::string data_; |
| std::vector<std::string_view> lines_; |
| }; |
| |
| } // namespace fidl |
| |
| #endif // TOOLS_FIDL_FIDLC_INCLUDE_FIDL_SOURCE_FILE_H_ |