Skip to content

Commit

Permalink
Fixed recognition multiple nested while/for/if/switch-case statements
Browse files Browse the repository at this point in the history
  • Loading branch information
jakub-suliga committed Sep 25, 2024
1 parent a1ee2a6 commit d1b3eef
Showing 1 changed file with 4 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -960,29 +960,19 @@ private void computeFoldingStructure(FoldingStructureComputationContext ctx) {
private void computeFoldingStructureOfControlStatements(String source, FoldingStructureComputationContext ctx) {
IScanner scanner = ctx.getScanner();
scanner.setSource(source.toCharArray());

int token;
Stack<Integer> blockStarts = new Stack<>();

int token;
try {
while ((token = scanner.getNextToken()) != ITerminalSymbols.TokenNameEOF) {
switch (token) {
case ITerminalSymbols.TokenNameif:
case ITerminalSymbols.TokenNamewhile:
case ITerminalSymbols.TokenNamefor:
case ITerminalSymbols.TokenNameswitch:
case ITerminalSymbols.TokenNamedo:
blockStarts.push(scanner.getCurrentTokenStartPosition());
break;

case ITerminalSymbols.TokenNameLBRACE:
if (!blockStarts.isEmpty()) {
blockStarts.push(scanner.getCurrentTokenStartPosition());
}
blockStarts.push(scanner.getCurrentTokenStartPosition());
break;
case ITerminalSymbols.TokenNameRBRACE:
if (!blockStarts.isEmpty()) {
int start = blockStarts.pop();
if (!blockStarts.isEmpty() && source.charAt(start) == '{') {
if (source.charAt(start) == '{') {
IRegion region = new Region(start + 1, scanner.getCurrentTokenEndPosition() - start);
IRegion normalized = alignRegion(region, ctx);
if (normalized != null) {
Expand Down

0 comments on commit d1b3eef

Please sign in to comment.