zeek/src/zeekygen/utils.h

92 lines
2.9 KiB
C++

// See the file "COPYING" in the main distribution directory for copyright.
#pragma once
#include "zeek/zeek-config.h"
#include <time.h> // for time_t
#include <string>
#include <optional>
namespace zeek::detail { class ID; }
namespace zeek::zeekygen::detail {
/**
* Transform content of a Zeekygen comment which may contain function
* parameter or return value documentation to a prettier reST format.
* @param s Content from a Zeekygen comment to transform. "id: ..." and
* "Returns: ..." change to ":id: ..." and ":returns: ...".
* @return Whether any content in \a s was transformed.
*/
bool prettify_params(std::string& s);
/**
* Check whether an identifier is part of the "public" interface.
* @param id A script-level identifier.
* @return true if the ID is in the global scope or if it's exported in to
* any modules namespace.
*/
bool is_public_api(const zeek::detail::ID* id);
/**
* Get the modification time of a file or abort if there's an error.
* @param filename Path to a file.
* @return The modification time of \a filename via stat(2).
*/
time_t get_mtime(const std::string& filename);
/**
* Make a reST-style heading.
* @param heading Content of the heading.
* @param underline Character in which to underline heading content.
* @return underlined heading string.
*/
std::string make_heading(const std::string& heading, char underline);
/**
* Get the position of the end of the first sentence in a string.
* @param s Any string.
* @return The position which looks like the end of the first sentence in
* \a s or 0 if no such position is found.
*/
size_t end_of_first_sentence(const std::string& s);
/**
* Check if a string is entirely white space.
* @param s Any string.
* @return True if \a s is nothing but white space, else false.
*/
bool is_all_whitespace(const std::string& s);
/**
* @return a string indicating the script that has redef'd an enum value or
* record field.
*/
std::string redef_indication(const std::string& from_script);
/**
* Turns a script's path into a shortened, normalized version that
* can be used for indexing and cross-referencing links.
*
* @param path the associate path to a Zeek script, which may be absolute.
*
* @return a normalized/shortened path (containing no ZEEKPATH components)
*
*/
std::string normalize_script_path(std::string_view path);
/**
* Determines the associated section of source code associated with an
* identifier's definition.
*
* @param id identifier for which obtain source code location info is obtained
*
* @return a nil value if source code location could not be determined, else
* a space-separated string with 3 components. The 1st component is a path
* relative to the "scripts/" directory, the 2nd and 3rd components are
* line numbers denoting the start and end of the relevant source code.
*/
std::optional<std::string> source_code_range(const zeek::detail::ID* id);
} // namespace zeek::zeekygen::detail