mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-31 20:23:26 +02:00
Bug 333816 - [c++0x] Double right angle brackets formatting breaks indentation when mixed with comments
This commit is contained in:
parent
08de213b26
commit
edd24cd3c5
2 changed files with 35 additions and 5 deletions
|
@ -1,5 +1,5 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2006, 2010 Wind River Systems, Inc. and others.
|
||||
* Copyright (c) 2006, 2011 Wind River Systems, Inc. and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
|
@ -206,6 +206,7 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor,
|
|||
private boolean fExpectSemicolonAfterDeclaration= true;
|
||||
|
||||
private MultiStatus fStatus;
|
||||
private int fOpenAngleBrackets;
|
||||
|
||||
|
||||
public CodeFormatterVisitor(DefaultCodeFormatterOptions preferences, int offset, int length) {
|
||||
|
@ -941,7 +942,7 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor,
|
|||
align.fSpaceBeforeComma= preferences.insert_space_before_comma_in_template_parameters;
|
||||
formatList(Arrays.asList(templateParameters), align, false, false);
|
||||
}
|
||||
scribe.printNextToken(Token.tGT, preferences.insert_space_before_closing_angle_bracket_in_template_parameters);
|
||||
scribe.printNextToken(new int[] { Token.tGT, Token.tSHIFTR }, preferences.insert_space_before_closing_angle_bracket_in_template_parameters);
|
||||
if (preferences.insert_space_after_closing_angle_bracket_in_template_parameters) {
|
||||
scribe.space();
|
||||
}
|
||||
|
@ -1314,7 +1315,7 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor,
|
|||
align.fSpaceBeforeComma= preferences.insert_space_before_comma_in_template_parameters;
|
||||
formatList(Arrays.asList(templateParameters), align, false, false);
|
||||
}
|
||||
scribe.printNextToken(Token.tGT, preferences.insert_space_before_closing_angle_bracket_in_template_parameters);
|
||||
scribe.printNextToken(new int[] { Token.tGT, Token.tSHIFTR }, preferences.insert_space_before_closing_angle_bracket_in_template_parameters);
|
||||
if (preferences.insert_space_after_closing_angle_bracket_in_template_parameters) {
|
||||
scribe.space();
|
||||
}
|
||||
|
@ -2736,6 +2737,7 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor,
|
|||
if (preferences.insert_space_after_opening_angle_bracket_in_template_arguments) {
|
||||
scribe.space();
|
||||
}
|
||||
int angleBrackets = fOpenAngleBrackets++;
|
||||
final IASTNode[] templateArguments= node.getTemplateArguments();
|
||||
if (templateArguments.length > 0) {
|
||||
final ListAlignment align= new ListAlignment(Alignment.M_COMPACT_SPLIT);
|
||||
|
@ -2743,7 +2745,21 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor,
|
|||
align.fSpaceBeforeComma= preferences.insert_space_before_comma_in_template_arguments;
|
||||
formatList(Arrays.asList(templateArguments), align, false, false);
|
||||
}
|
||||
scribe.printNextToken(Token.tGT, preferences.insert_space_before_closing_angle_bracket_in_template_arguments);
|
||||
if (peekNextToken() == Token.tSHIFTR) {
|
||||
if (fOpenAngleBrackets == angleBrackets + 2) {
|
||||
fOpenAngleBrackets -= 2;
|
||||
scribe.printNextToken(Token.tSHIFTR, preferences.insert_space_before_closing_angle_bracket_in_template_arguments);
|
||||
} else {
|
||||
scribe.printComment();
|
||||
if (preferences.insert_space_before_closing_angle_bracket_in_template_arguments) {
|
||||
scribe.space();
|
||||
}
|
||||
return PROCESS_SKIP;
|
||||
}
|
||||
} else {
|
||||
--fOpenAngleBrackets;
|
||||
scribe.printNextToken(Token.tGT, preferences.insert_space_before_closing_angle_bracket_in_template_arguments);
|
||||
}
|
||||
int nextToken= peekNextToken();
|
||||
if (node.getPropertyInParent() != ICPPASTQualifiedName.SEGMENT_NAME || nextToken == Token.tGT) {
|
||||
if (preferences.insert_space_after_closing_angle_bracket_in_template_arguments) {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2007, 2010 Wind River Systems, Inc. and others.
|
||||
* Copyright (c) 2007, 2011 Wind River Systems, Inc. and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
|
@ -1538,4 +1538,18 @@ public class CodeFormatterTest extends BaseUITestCase {
|
|||
assertFormatterResult();
|
||||
}
|
||||
|
||||
//int main() {
|
||||
// std::vector<std::vector<int>> test;
|
||||
// // some comment
|
||||
// return 0;
|
||||
//}
|
||||
|
||||
//int main() {
|
||||
// std::vector<std::vector<int>> test;
|
||||
// // some comment
|
||||
// return 0;
|
||||
//}
|
||||
public void testDoubleClosingAngleBrackets_Bug333816() throws Exception {
|
||||
assertFormatterResult();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue