| // Copyright 2019 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_CHECK_DEF_H_ |
| #define TOOLS_FIDL_FIDLC_INCLUDE_FIDL_CHECK_DEF_H_ |
| |
| /////////////////////////////////////////////////////////////// |
| // Even though this file is namespaced to "fidl::lint", it |
| // could be promoted to the "fidl" namespace in the future. |
| // |
| // check and finding classes should not have any |
| // dependencies on the "Lint" process. They should be |
| // generic enough to be useful for capturing and reporting |
| // findings from other developer tools, such as fidlc. |
| /////////////////////////////////////////////////////////////// |
| |
| #include <iostream> |
| #include <string> |
| |
| #include <fidl/template_string.h> |
| |
| namespace fidl { |
| namespace linter { |
| |
| // Each CheckDef corresponds to some associated linting logic that verifies code |
| // meets or fails to meet a FIDL Readability requirement. |
| class CheckDef { |
| public: |
| // A check includes an ID (in kebab-case) and a string message or |
| // message_template (with optional placeholders for customizing the message, |
| // if any). The check logic (code) is external to this class. |
| CheckDef(std::string id, TemplateString message_template) |
| : id_(id), message_template_(message_template) {} |
| |
| inline const std::string& id() const { return id_; } |
| |
| inline const TemplateString& message_template() const { return message_template_; } |
| |
| // A |std::set| of |CheckDef| will sort by |id|. |
| inline bool operator<(const CheckDef& rhs) const { return id_ < rhs.id_; } |
| |
| // A |std::set| of |CheckDef| will not insert a CheckDef if it does not |
| // have a unique |id|. |
| inline bool operator==(const CheckDef& rhs) { return id_ == rhs.id_; } |
| |
| private: |
| std::string id_; // dash-separated (kebab-case), and URL suffixable |
| TemplateString message_template_; |
| }; |
| |
| } // namespace linter |
| } // namespace fidl |
| |
| #endif // TOOLS_FIDL_FIDLC_INCLUDE_FIDL_CHECK_DEF_H_ |