mirror of
https://github.com/neovim/neovim.git
synced 2025-09-28 14:08:32 +00:00
vim-patch:7.4.891
Problem: Indentation of array initializer is wrong.
Solution: Avoid that calling find_start_rawstring() changes the position
returned by find_start_comment(), add a test. (Hirohito Higashi)
089af18d1f
This commit is contained in:
@@ -69,22 +69,32 @@ find_start_comment ( /* XXX */
|
|||||||
return pos;
|
return pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/// Find the start of a comment or raw string, not knowing if we are in a
|
||||||
* Find the start of a comment or raw string, not knowing if we are in a
|
/// comment or raw string right now.
|
||||||
* comment or raw string right now.
|
/// Search starts at w_cursor.lnum and goes backwards.
|
||||||
* Search starts at w_cursor.lnum and goes backwards.
|
///
|
||||||
* Return NULL when not inside a comment or raw string.
|
/// @returns NULL when not inside a comment or raw string.
|
||||||
* "CORS" -> Comment Or Raw String
|
///
|
||||||
*/
|
/// @note "CORS" -> Comment Or Raw String
|
||||||
static pos_T *ind_find_start_CORS(void)
|
static pos_T *ind_find_start_CORS(void)
|
||||||
{ /* XXX */
|
{
|
||||||
|
// XXX
|
||||||
|
static pos_T comment_pos_copy;
|
||||||
|
|
||||||
pos_T *comment_pos = find_start_comment(curbuf->b_ind_maxcomment);
|
pos_T *comment_pos = find_start_comment(curbuf->b_ind_maxcomment);
|
||||||
|
if (comment_pos != NULL) {
|
||||||
|
// Need to make a copy of the static pos in findmatchlimit(),
|
||||||
|
// calling find_start_rawstring() may change it.
|
||||||
|
comment_pos_copy = *comment_pos;
|
||||||
|
comment_pos = &comment_pos_copy;
|
||||||
|
}
|
||||||
pos_T *rs_pos = find_start_rawstring(curbuf->b_ind_maxcomment);
|
pos_T *rs_pos = find_start_rawstring(curbuf->b_ind_maxcomment);
|
||||||
|
|
||||||
/* If comment_pos is before rs_pos the raw string is inside the comment.
|
// If comment_pos is before rs_pos the raw string is inside the comment.
|
||||||
* If rs_pos is before comment_pos the comment is inside the raw string. */
|
// If rs_pos is before comment_pos the comment is inside the raw string.
|
||||||
if (comment_pos == NULL || (rs_pos != NULL && lt(*rs_pos, *comment_pos)))
|
if (comment_pos == NULL || (rs_pos != NULL && lt(*rs_pos, *comment_pos))) {
|
||||||
return rs_pos;
|
return rs_pos;
|
||||||
|
}
|
||||||
return comment_pos;
|
return comment_pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2707,7 +2717,8 @@ int get_c_indent(void)
|
|||||||
|
|
||||||
if (terminated == 0 || (lookfor != LOOKFOR_UNTERM
|
if (terminated == 0 || (lookfor != LOOKFOR_UNTERM
|
||||||
&& terminated == ',')) {
|
&& terminated == ',')) {
|
||||||
if (*skipwhite(l) == '[' || l[STRLEN(l) - 1] == '[') {
|
if (lookfor != LOOKFOR_ENUM_OR_INIT
|
||||||
|
&& (*skipwhite(l) == '[' || l[STRLEN(l) - 1] == '[')) {
|
||||||
amount += ind_continuation;
|
amount += ind_continuation;
|
||||||
}
|
}
|
||||||
// If we're in the middle of a paren thing, Go back to the line
|
// If we're in the middle of a paren thing, Go back to the line
|
||||||
@@ -2915,34 +2926,35 @@ int get_c_indent(void)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Ignore unterminated lines in between, but
|
// Ignore unterminated lines in between, but
|
||||||
* reduce indent. */
|
// reduce indent.
|
||||||
if (amount > cur_amount)
|
if (amount > cur_amount) {
|
||||||
amount = cur_amount;
|
amount = cur_amount;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
/*
|
// Found first unterminated line on a row, may
|
||||||
* Found first unterminated line on a row, may
|
// line up with this line, remember its indent
|
||||||
* line up with this line, remember its indent
|
// 100 + // NOLINT(whitespace/tab)
|
||||||
* 100 +
|
// -> here; // NOLINT(whitespace/tab)
|
||||||
* -> here;
|
|
||||||
*/
|
|
||||||
l = get_cursor_line_ptr();
|
l = get_cursor_line_ptr();
|
||||||
amount = cur_amount;
|
amount = cur_amount;
|
||||||
if (*skipwhite(l) == ']' || l[STRLEN(l) - 1] == ']') {
|
|
||||||
|
n = (int)STRLEN(l);
|
||||||
|
if (terminated == ','
|
||||||
|
&& (*skipwhite(l) == ']'
|
||||||
|
|| (n >=2 && l[n - 2] == ']'))) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
// If previous line ends in ',', check whether we
|
||||||
* If previous line ends in ',', check whether we
|
// are in an initialization or enum
|
||||||
* are in an initialization or enum
|
// struct xxx =
|
||||||
* struct xxx =
|
// {
|
||||||
* {
|
// sizeof a,
|
||||||
* sizeof a,
|
// 124 };
|
||||||
* 124 };
|
// or a normal possible continuation line.
|
||||||
* or a normal possible continuation line.
|
// but only, of no other statement has been found
|
||||||
* but only, of no other statement has been found
|
// yet.
|
||||||
* yet.
|
|
||||||
*/
|
|
||||||
if (lookfor == LOOKFOR_INITIAL && terminated == ',') {
|
if (lookfor == LOOKFOR_INITIAL && terminated == ',') {
|
||||||
if (curbuf->b_ind_js) {
|
if (curbuf->b_ind_js) {
|
||||||
// Search for a line ending in a comma
|
// Search for a line ending in a comma
|
||||||
|
@@ -397,7 +397,7 @@ static int included_patches[] = {
|
|||||||
// 894 NA
|
// 894 NA
|
||||||
// 893,
|
// 893,
|
||||||
// 892,
|
// 892,
|
||||||
// 891,
|
891,
|
||||||
// 890 NA
|
// 890 NA
|
||||||
// 889,
|
// 889,
|
||||||
// 888,
|
// 888,
|
||||||
|
@@ -919,6 +919,28 @@ describe('cindent', function()
|
|||||||
)foo";
|
)foo";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
int a[4] = {
|
||||||
|
[0] = 0,
|
||||||
|
[1] = 1,
|
||||||
|
[2] = 2,
|
||||||
|
[3] = 3,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
a = b[2]
|
||||||
|
+ 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
if (1)
|
||||||
|
/* aaaaa
|
||||||
|
* bbbbb
|
||||||
|
*/
|
||||||
|
a = 1;
|
||||||
|
}
|
||||||
|
|
||||||
/* end of AUTO */
|
/* end of AUTO */
|
||||||
]=])
|
]=])
|
||||||
|
|
||||||
@@ -1825,6 +1847,28 @@ describe('cindent', function()
|
|||||||
)foo";
|
)foo";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
int a[4] = {
|
||||||
|
[0] = 0,
|
||||||
|
[1] = 1,
|
||||||
|
[2] = 2,
|
||||||
|
[3] = 3,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
a = b[2]
|
||||||
|
+ 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
if (1)
|
||||||
|
/* aaaaa
|
||||||
|
* bbbbb
|
||||||
|
*/
|
||||||
|
a = 1;
|
||||||
|
}
|
||||||
|
|
||||||
/* end of AUTO */
|
/* end of AUTO */
|
||||||
]=])
|
]=])
|
||||||
end)
|
end)
|
||||||
|
Reference in New Issue
Block a user