mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-09-04 14:13:24 +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
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -206,6 +206,7 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor,
|
||||||
private boolean fExpectSemicolonAfterDeclaration= true;
|
private boolean fExpectSemicolonAfterDeclaration= true;
|
||||||
|
|
||||||
private MultiStatus fStatus;
|
private MultiStatus fStatus;
|
||||||
|
private int fOpenAngleBrackets;
|
||||||
|
|
||||||
|
|
||||||
public CodeFormatterVisitor(DefaultCodeFormatterOptions preferences, int offset, int length) {
|
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;
|
align.fSpaceBeforeComma= preferences.insert_space_before_comma_in_template_parameters;
|
||||||
formatList(Arrays.asList(templateParameters), align, false, false);
|
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) {
|
if (preferences.insert_space_after_closing_angle_bracket_in_template_parameters) {
|
||||||
scribe.space();
|
scribe.space();
|
||||||
}
|
}
|
||||||
|
@ -1314,7 +1315,7 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor,
|
||||||
align.fSpaceBeforeComma= preferences.insert_space_before_comma_in_template_parameters;
|
align.fSpaceBeforeComma= preferences.insert_space_before_comma_in_template_parameters;
|
||||||
formatList(Arrays.asList(templateParameters), align, false, false);
|
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) {
|
if (preferences.insert_space_after_closing_angle_bracket_in_template_parameters) {
|
||||||
scribe.space();
|
scribe.space();
|
||||||
}
|
}
|
||||||
|
@ -2736,6 +2737,7 @@ public class CodeFormatterVisitor extends ASTVisitor implements ICPPASTVisitor,
|
||||||
if (preferences.insert_space_after_opening_angle_bracket_in_template_arguments) {
|
if (preferences.insert_space_after_opening_angle_bracket_in_template_arguments) {
|
||||||
scribe.space();
|
scribe.space();
|
||||||
}
|
}
|
||||||
|
int angleBrackets = fOpenAngleBrackets++;
|
||||||
final IASTNode[] templateArguments= node.getTemplateArguments();
|
final IASTNode[] templateArguments= node.getTemplateArguments();
|
||||||
if (templateArguments.length > 0) {
|
if (templateArguments.length > 0) {
|
||||||
final ListAlignment align= new ListAlignment(Alignment.M_COMPACT_SPLIT);
|
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;
|
align.fSpaceBeforeComma= preferences.insert_space_before_comma_in_template_arguments;
|
||||||
formatList(Arrays.asList(templateArguments), align, false, false);
|
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();
|
int nextToken= peekNextToken();
|
||||||
if (node.getPropertyInParent() != ICPPASTQualifiedName.SEGMENT_NAME || nextToken == Token.tGT) {
|
if (node.getPropertyInParent() != ICPPASTQualifiedName.SEGMENT_NAME || nextToken == Token.tGT) {
|
||||||
if (preferences.insert_space_after_closing_angle_bracket_in_template_arguments) {
|
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
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -1538,4 +1538,18 @@ public class CodeFormatterTest extends BaseUITestCase {
|
||||||
assertFormatterResult();
|
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