| // 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 SRC_DEVELOPER_DEBUG_ZXDB_CONSOLE_FORMAT_NAME_H_ |
| #define SRC_DEVELOPER_DEBUG_ZXDB_CONSOLE_FORMAT_NAME_H_ |
| |
| #include "src/developer/debug/zxdb/console/output_buffer.h" |
| #include "src/developer/debug/zxdb/expr/parsed_identifier.h" |
| |
| namespace zxdb { |
| |
| class Function; |
| class TargetSymbols; |
| |
| struct FormatIdentifierOptions { |
| // Includes the preceeding "::" if the identifier is marked as globally qualified. Otherwise the |
| // leading "::" is omitted regardless of qualification. |
| bool show_global_qual = false; |
| |
| // When true, nonempty template parameters will be replaced with "...". This is useful in |
| // relatively nonambiguous situations where long templates can get in the way. |
| bool elide_templates = false; |
| |
| // The last component of function name is normally the most important, and with long templates |
| // it can be difficult to find. Setting this marks that bold. |
| bool bold_last = false; |
| }; |
| |
| // Formats the given string as an identifier, with any template annotations dimmed. |
| // |
| // If |show_global_qual| is set, the output will be preceeded with "::" if it's globally qualified. |
| // Otherwise, global qualifications on the identifier will be ignored. Callers may want to ignore |
| // the global qualifiers in cases where it's clear in context whether the name is global or not. |
| // For example, function names in backtraces are always global and adding "::" to everything adds |
| // noise. |
| // |
| // If |bold_last| is set, the last identifier component will be bolded. This is best when printing |
| // function names. |
| OutputBuffer FormatIdentifier(const Identifier& str, const FormatIdentifierOptions& options); |
| OutputBuffer FormatIdentifier(const ParsedIdentifier& str, const FormatIdentifierOptions& options); |
| |
| struct FormatFunctionNameOptions { |
| // Options for name formatting. |
| FormatIdentifierOptions name; |
| |
| enum Params { |
| kNoParams, // No parens or parameters after the name. |
| kElideParams, // Either "()" for no params, or "(...)" if there are params. |
| kParamTypes, // Include parameter types. |
| }; |
| Params params = Params::kParamTypes; |
| }; |
| |
| // Formats the function name with syntax highlighting. |
| // |
| // It will apply some simple rewrite rules to clean up some symbols. |
| // |
| // If optional_target_symbols is provided it can provide extra cleanup for some generated lambda |
| // names by using the shortest possible unique file name. |
| // |
| // If show_params is true, the types of the function parameters will be output. Otherwise the |
| // function name will end with "()" if there are no parameters, or "(...)" if there are some. The |
| // goal is to be as short as possible without being misleading (showing "()" when there are |
| // parameters may be misleading, and no parens at all don't look like a function). |
| OutputBuffer FormatFunctionName(const Function* function, const FormatFunctionNameOptions& options); |
| |
| } // namespace zxdb |
| |
| #endif // SRC_DEVELOPER_DEBUG_ZXDB_CONSOLE_FORMAT_NAME_H_ |