mirror of
https://github.com/fish-shell/fish-shell.git
synced 2026-06-06 17:31:14 -03:00
restyle highlight module to match project style
Reduces lint errors from 176 to 69 (-61%). Line count from 1627 to 1426 (-12%). Another step in resolving issue #2902.
This commit is contained in:
1448
src/highlight.cpp
1448
src/highlight.cpp
File diff suppressed because it is too large
Load Diff
165
src/highlight.h
165
src/highlight.h
@@ -1,39 +1,38 @@
|
|||||||
/** \file highlight.h
|
// Prototypes for functions for syntax highlighting.
|
||||||
Prototypes for functions for syntax highlighting
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef FISH_HIGHLIGHT_H
|
#ifndef FISH_HIGHLIGHT_H
|
||||||
#define FISH_HIGHLIGHT_H
|
#define FISH_HIGHLIGHT_H
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
#include <stdbool.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <stdbool.h>
|
|
||||||
|
|
||||||
|
#include "color.h"
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "env.h"
|
#include "env.h"
|
||||||
#include "color.h"
|
|
||||||
|
|
||||||
/* Internally, we specify highlight colors using a set of bits. Each highlight_spec is a 32 bit uint. We divide this into low 16 (foreground) and high 16 (background). Each half we further subdivide into low 8 (primary) and high 8 (modifiers). The primary is not a bitmask; specify exactly one. The modifiers are a bitmask; specify any number */
|
// Internally, we specify highlight colors using a set of bits. Each highlight_spec is a 32 bit
|
||||||
enum
|
// uint. We divide this into low 16 (foreground) and high 16 (background). Each half we further
|
||||||
{
|
// subdivide into low 8 (primary) and high 8 (modifiers). The primary is not a bitmask; specify
|
||||||
/* The following values are mutually exclusive; specify at most one */
|
// exactly one. The modifiers are a bitmask; specify any number.
|
||||||
highlight_spec_normal = 0, // normal text
|
enum {
|
||||||
highlight_spec_error, // error
|
// The following values are mutually exclusive; specify at most one.
|
||||||
highlight_spec_command, //command
|
highlight_spec_normal = 0, // normal text
|
||||||
highlight_spec_statement_terminator, //process separator
|
highlight_spec_error, // error
|
||||||
highlight_spec_param, //command parameter (argument)
|
highlight_spec_command, // command
|
||||||
highlight_spec_comment, //comment
|
highlight_spec_statement_terminator, // process separator
|
||||||
highlight_spec_match, //matching parenthesis, etc.
|
highlight_spec_param, // command parameter (argument)
|
||||||
highlight_spec_search_match, //search match
|
highlight_spec_comment, // comment
|
||||||
highlight_spec_operator, //operator
|
highlight_spec_match, // matching parenthesis, etc.
|
||||||
highlight_spec_escape, //escape sequences
|
highlight_spec_search_match, // search match
|
||||||
highlight_spec_quote, //quoted string
|
highlight_spec_operator, // operator
|
||||||
highlight_spec_redirection, //redirection
|
highlight_spec_escape, // escape sequences
|
||||||
highlight_spec_autosuggestion, //autosuggestion
|
highlight_spec_quote, // quoted string
|
||||||
|
highlight_spec_redirection, // redirection
|
||||||
|
highlight_spec_autosuggestion, // autosuggestion
|
||||||
highlight_spec_selection,
|
highlight_spec_selection,
|
||||||
|
|
||||||
// Pager support
|
// Pager support.
|
||||||
highlight_spec_pager_prefix,
|
highlight_spec_pager_prefix,
|
||||||
highlight_spec_pager_completion,
|
highlight_spec_pager_completion,
|
||||||
highlight_spec_pager_description,
|
highlight_spec_pager_description,
|
||||||
@@ -42,91 +41,91 @@ enum
|
|||||||
|
|
||||||
HIGHLIGHT_SPEC_PRIMARY_MASK = 0xFF,
|
HIGHLIGHT_SPEC_PRIMARY_MASK = 0xFF,
|
||||||
|
|
||||||
/* The following values are modifiers */
|
// The following values are modifiers.
|
||||||
highlight_modifier_valid_path = 0x100,
|
highlight_modifier_valid_path = 0x100,
|
||||||
highlight_modifier_force_underline = 0x200,
|
highlight_modifier_force_underline = 0x200,
|
||||||
highlight_modifier_sloppy_background = 0x300, //hackish, indicates that we should treat a foreground color as background, per certain historical behavior
|
// Hackish, indicates that we should treat a foreground color as background, per certain
|
||||||
|
// historical behavior.
|
||||||
|
highlight_modifier_sloppy_background = 0x300,
|
||||||
/* Very special value */
|
/* Very special value */
|
||||||
highlight_spec_invalid = 0xFFFF
|
highlight_spec_invalid = 0xFFFF
|
||||||
|
|
||||||
};
|
};
|
||||||
typedef uint32_t highlight_spec_t;
|
typedef uint32_t highlight_spec_t;
|
||||||
|
|
||||||
inline highlight_spec_t highlight_get_primary(highlight_spec_t val)
|
inline highlight_spec_t highlight_get_primary(highlight_spec_t val) {
|
||||||
{
|
|
||||||
return val & HIGHLIGHT_SPEC_PRIMARY_MASK;
|
return val & HIGHLIGHT_SPEC_PRIMARY_MASK;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline highlight_spec_t highlight_make_background(highlight_spec_t val)
|
inline highlight_spec_t highlight_make_background(highlight_spec_t val) {
|
||||||
{
|
assert(val >> 16 ==
|
||||||
assert(val >> 16 == 0); //should have nothing in upper bits, otherwise this is already a background
|
0); // should have nothing in upper bits, otherwise this is already a background
|
||||||
return val << 16;
|
return val << 16;
|
||||||
}
|
}
|
||||||
|
|
||||||
class history_item_t;
|
class history_item_t;
|
||||||
struct file_detection_context_t;
|
struct file_detection_context_t;
|
||||||
|
|
||||||
/**
|
/// Perform syntax highlighting for the shell commands in buff. The result is stored in the color
|
||||||
Perform syntax highlighting for the shell commands in buff. The result is
|
/// array as a color_code from the HIGHLIGHT_ enum for each character in buff.
|
||||||
stored in the color array as a color_code from the HIGHLIGHT_ enum
|
///
|
||||||
for each character in buff.
|
/// \param buff The buffer on which to perform syntax highlighting
|
||||||
|
/// \param color The array in wchich to store the color codes. The first 8 bits are used for fg
|
||||||
|
/// color, the next 8 bits for bg color.
|
||||||
|
/// \param pos the cursor position. Used for quote matching, etc.
|
||||||
|
/// \param error a list in which a description of each error will be inserted. May be 0, in whcich
|
||||||
|
/// case no error descriptions will be generated.
|
||||||
|
void highlight_shell(const wcstring &buffstr, std::vector<highlight_spec_t> &color, size_t pos,
|
||||||
|
wcstring_list_t *error, const env_vars_snapshot_t &vars);
|
||||||
|
|
||||||
\param buff The buffer on which to perform syntax highlighting
|
/// Perform a non-blocking shell highlighting. The function will not do any I/O that may block. As a
|
||||||
\param color The array in wchich to store the color codes. The first 8 bits are used for fg color, the next 8 bits for bg color.
|
/// result, invalid commands may not be detected, etc.
|
||||||
\param pos the cursor position. Used for quote matching, etc.
|
void highlight_shell_no_io(const wcstring &buffstr, std::vector<highlight_spec_t> &color,
|
||||||
\param error a list in which a description of each error will be inserted. May be 0, in whcich case no error descriptions will be generated.
|
size_t pos, wcstring_list_t *error, const env_vars_snapshot_t &vars);
|
||||||
*/
|
|
||||||
void highlight_shell(const wcstring &buffstr, std::vector<highlight_spec_t> &color, size_t pos, wcstring_list_t *error, const env_vars_snapshot_t &vars);
|
|
||||||
|
|
||||||
/**
|
/// Perform syntax highlighting for the text in buff. Matching quotes and paranthesis are
|
||||||
Perform a non-blocking shell highlighting. The function will not do any I/O that may block. As a result, invalid commands may not be detected, etc.
|
/// highlighted. The result is stored in the color array as a color_code from the HIGHLIGHT_ enum
|
||||||
*/
|
/// for each character in buff.
|
||||||
void highlight_shell_no_io(const wcstring &buffstr, std::vector<highlight_spec_t> &color, size_t pos, wcstring_list_t *error, const env_vars_snapshot_t &vars);
|
///
|
||||||
|
/// \param buff The buffer on which to perform syntax highlighting
|
||||||
|
/// \param color The array in wchich to store the color codes. The first 8 bits are used for fg
|
||||||
|
/// color, the next 8 bits for bg color.
|
||||||
|
/// \param pos the cursor position. Used for quote matching, etc.
|
||||||
|
/// \param error a list in which a description of each error will be inserted. May be 0, in whcich
|
||||||
|
/// case no error descriptions will be generated.
|
||||||
|
void highlight_universal(const wcstring &buffstr, std::vector<highlight_spec_t> &color, size_t pos,
|
||||||
|
wcstring_list_t *error, const env_vars_snapshot_t &vars);
|
||||||
|
|
||||||
/**
|
/// Translate from HIGHLIGHT_* to FISH_COLOR_* according to environment variables. Defaults to
|
||||||
Perform syntax highlighting for the text in buff. Matching quotes and paranthesis are highlighted. The result is
|
/// FISH_COLOR_NORMAL.
|
||||||
stored in the color array as a color_code from the HIGHLIGHT_ enum
|
///
|
||||||
for each character in buff.
|
/// Example:
|
||||||
|
///
|
||||||
\param buff The buffer on which to perform syntax highlighting
|
/// If the environment variable FISH_FISH_COLOR_ERROR is set to 'red', a call to
|
||||||
\param color The array in wchich to store the color codes. The first 8 bits are used for fg color, the next 8 bits for bg color.
|
/// highlight_get_color( highlight_error) will return FISH_COLOR_RED.
|
||||||
\param pos the cursor position. Used for quote matching, etc.
|
|
||||||
\param error a list in which a description of each error will be inserted. May be 0, in whcich case no error descriptions will be generated.
|
|
||||||
*/
|
|
||||||
void highlight_universal(const wcstring &buffstr, std::vector<highlight_spec_t> &color, size_t pos, wcstring_list_t *error, const env_vars_snapshot_t &vars);
|
|
||||||
|
|
||||||
/**
|
|
||||||
Translate from HIGHLIGHT_* to FISH_COLOR_* according to environment
|
|
||||||
variables. Defaults to FISH_COLOR_NORMAL.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
If the environment variable FISH_FISH_COLOR_ERROR is set to 'red', a
|
|
||||||
call to highlight_get_color( highlight_error) will return
|
|
||||||
FISH_COLOR_RED.
|
|
||||||
*/
|
|
||||||
rgb_color_t highlight_get_color(highlight_spec_t highlight, bool is_background);
|
rgb_color_t highlight_get_color(highlight_spec_t highlight, bool is_background);
|
||||||
|
|
||||||
/** Given a command 'str' from the history, try to determine whether we ought to suggest it by specially recognizing the command.
|
/// Given a command 'str' from the history, try to determine whether we ought to suggest it by
|
||||||
Returns true if we validated the command. If so, returns by reference whether the suggestion is valid or not.
|
/// specially recognizing the command. Returns true if we validated the command. If so, returns by
|
||||||
*/
|
/// reference whether the suggestion is valid or not.
|
||||||
bool autosuggest_validate_from_history(const history_item_t &item, file_detection_context_t &detector, const wcstring &working_directory, const env_vars_snapshot_t &vars);
|
bool autosuggest_validate_from_history(const history_item_t &item,
|
||||||
|
file_detection_context_t &detector,
|
||||||
|
const wcstring &working_directory,
|
||||||
|
const env_vars_snapshot_t &vars);
|
||||||
|
|
||||||
/* Tests whether the specified string cpath is the prefix of anything we could cd to. directories is a list of possible parent directories (typically either the working directory, or the cdpath). This does I/O!
|
// Tests whether the specified string cpath is the prefix of anything we could cd to. directories is
|
||||||
|
// a list of possible parent directories (typically either the working directory, or the cdpath).
|
||||||
This is used only internally to this file, and is exposed only for testing.
|
// This does I/O!
|
||||||
*/
|
//
|
||||||
enum
|
// This is used only internally to this file, and is exposed only for testing.
|
||||||
{
|
enum {
|
||||||
/* The path must be to a directory */
|
// The path must be to a directory.
|
||||||
PATH_REQUIRE_DIR = 1 << 0,
|
PATH_REQUIRE_DIR = 1 << 0,
|
||||||
|
// Expand any leading tilde in the path.
|
||||||
/* Expand any leading tilde in the path */
|
|
||||||
PATH_EXPAND_TILDE = 1 << 1
|
PATH_EXPAND_TILDE = 1 << 1
|
||||||
};
|
};
|
||||||
typedef unsigned int path_flags_t;
|
typedef unsigned int path_flags_t;
|
||||||
bool is_potential_path(const wcstring &const_path, const wcstring_list_t &directories, path_flags_t flags);
|
bool is_potential_path(const wcstring &const_path, const wcstring_list_t &directories,
|
||||||
|
path_flags_t flags);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user