aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/viml/parser/expressions.c
diff options
context:
space:
mode:
authorZyX <kp-pav@yandex.ru>2017-10-16 00:30:55 +0300
committerZyX <kp-pav@yandex.ru>2017-10-16 00:30:55 +0300
commitfe81380bf5d4d161187998088aa9cff948b7c891 (patch)
treece4ffb5e8307443e50cfcd8e9338ee8e02f9beba /src/nvim/viml/parser/expressions.c
parent5e92ee6565233c56e7a33b12ef6a61f05eae91aa (diff)
downloadrneovim-fe81380bf5d4d161187998088aa9cff948b7c891.tar.gz
rneovim-fe81380bf5d4d161187998088aa9cff948b7c891.tar.bz2
rneovim-fe81380bf5d4d161187998088aa9cff948b7c891.zip
viml/parser/expressions: Highlight prefix separately from number
Should make accidental octals more visible.
Diffstat (limited to 'src/nvim/viml/parser/expressions.c')
-rw-r--r--src/nvim/viml/parser/expressions.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/nvim/viml/parser/expressions.c b/src/nvim/viml/parser/expressions.c
index 4801d66988..35f4385f33 100644
--- a/src/nvim/viml/parser/expressions.c
+++ b/src/nvim/viml/parser/expressions.c
@@ -1042,6 +1042,7 @@ void viml_pexpr_free_ast(ExprAST ast)
//
// NVimRegister -> SpecialChar
// NVimNumber -> Number
+// NVimNumberPrefix -> SpecialChar
// NVimFloat -> NVimNumber
//
// NVimNestingParenthesis -> NVimParenthesis
@@ -1842,6 +1843,14 @@ static const int want_node_to_lexer_flags[] = {
[kENodeArgumentSeparator] = kELFlagForbidScope,
};
+/// Number of characters to highlight as NumberPrefix depending on the base
+static const uint8_t base_to_prefix_length[] = {
+ [2] = 2,
+ [8] = 1,
+ [10] = 0,
+ [16] = 2,
+};
+
/// Parse one VimL expression
///
/// @param pstate Parser state.
@@ -2632,7 +2641,13 @@ viml_pexpr_parse_figure_brace_closing_error:
} else {
NEW_NODE_WITH_CUR_POS(cur_node, kExprNodeInteger);
cur_node->data.num.value = cur_token.data.num.val.integer;
- HL_CUR_TOKEN(Number);
+ const uint8_t prefix_length = base_to_prefix_length[
+ cur_token.data.num.base];
+ viml_parser_highlight(pstate, cur_token.start, prefix_length,
+ HL(NumberPrefix));
+ viml_parser_highlight(
+ pstate, shifted_pos(cur_token.start, prefix_length),
+ cur_token.len - prefix_length, HL(Number));
}
want_node = kENodeOperator;
*top_node_p = cur_node;