Mercurial > vim
diff src/cindent.c @ 26819:0d798c7e1865 v8.2.3938
patch 8.2.3938: line comment start is also found in a string
Commit: https://github.com/vim/vim/commit/ba26367fea3b63df49d274f3d5cca0af38402add
Author: Bram Moolenaar <Bram@vim.org>
Date: Wed Dec 29 18:09:13 2021 +0000
patch 8.2.3938: line comment start is also found in a string
Problem: Line comment start is also found in a string.
Solution: Skip line comments in a string.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Wed, 29 Dec 2021 19:15:03 +0100 |
parents | fc859aea8cec |
children | fb4c30606b4a |
line wrap: on
line diff
--- a/src/cindent.c +++ b/src/cindent.c @@ -66,8 +66,6 @@ cin_is_cinword(char_u *line) } #endif -#if defined(FEAT_CINDENT) || defined(FEAT_SYN_HL) - /* * Skip to the end of a "string" and a 'c' character. * If there is no string or character, return argument unmodified. @@ -138,6 +136,21 @@ skip_string(char_u *p) } /* + * Return TRUE if "line[col]" is inside a C string. + */ + int +is_pos_in_string(char_u *line, colnr_T col) +{ + char_u *p; + + for (p = line; *p && (colnr_T)(p - line) < col; ++p) + p = skip_string(p); + return !((colnr_T)(p - line) <= col); +} + +#if defined(FEAT_CINDENT) || defined(FEAT_SYN_HL) + +/* * Find the start of a comment, not knowing if we are in a comment right now. * Search starts at w_cursor.lnum and goes backwards. * Return NULL when not inside a comment. @@ -152,8 +165,6 @@ ind_find_start_comment(void) // XXX find_start_comment(int ind_maxcomment) // XXX { pos_T *pos; - char_u *line; - char_u *p; int cur_maxcomment = ind_maxcomment; for (;;) @@ -164,10 +175,7 @@ find_start_comment(int ind_maxcomment) / // Check if the comment start we found is inside a string. // If it is then restrict the search to below this line and try again. - line = ml_get(pos->lnum); - for (p = line; *p && (colnr_T)(p - line) < pos->col; ++p) - p = skip_string(p); - if ((colnr_T)(p - line) <= pos->col) + if (!is_pos_in_string(ml_get(pos->lnum), pos->col)) break; cur_maxcomment = curwin->w_cursor.lnum - pos->lnum - 1; if (cur_maxcomment <= 0) @@ -188,8 +196,6 @@ find_start_comment(int ind_maxcomment) / find_start_rawstring(int ind_maxcomment) // XXX { pos_T *pos; - char_u *line; - char_u *p; int cur_maxcomment = ind_maxcomment; for (;;) @@ -200,10 +206,7 @@ find_start_rawstring(int ind_maxcomment) // Check if the raw string start we found is inside a string. // If it is then restrict the search to below this line and try again. - line = ml_get(pos->lnum); - for (p = line; *p && (colnr_T)(p - line) < pos->col; ++p) - p = skip_string(p); - if ((colnr_T)(p - line) <= pos->col) + if (!is_pos_in_string(ml_get(pos->lnum), pos->col)) break; cur_maxcomment = curwin->w_cursor.lnum - pos->lnum - 1; if (cur_maxcomment <= 0)