Skip to content

Commit 1b4ac85

Browse files
author
Kapil Borle
committed
Add methods to return brace pairs
1 parent a42fa1a commit 1b4ac85

File tree

1 file changed

+38
-1
lines changed

1 file changed

+38
-1
lines changed

Engine/TokenOperations.cs

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@ public IEnumerable<Token> GetOpenBracesInCommandElements()
6161
return GetBraceInCommandElement(TokenKind.LCurly);
6262
}
6363

64-
6564
/// <summary>
6665
/// Return tokens of kind RCurly that end a scriptblock expression in an command element.
6766
///
@@ -74,6 +73,44 @@ public IEnumerable<Token> GetCloseBracesInCommandElements()
7473
return GetBraceInCommandElement(TokenKind.RCurly);
7574
}
7675

76+
/// <summary>
77+
/// Returns pairs of associatd braces.
78+
/// </summary>
79+
/// <returns>Tuples of tokens such that item1 is LCurly token and item2 is RCurly token.</returns>
80+
public IEnumerable<Tuple<Token, Token>> GetBracePairs()
81+
{
82+
var openBraceStack = new Stack<Token>();
83+
foreach (var token in tokens)
84+
{
85+
if (token.Kind == TokenKind.LCurly)
86+
{
87+
openBraceStack.Push(token);
88+
continue;
89+
}
90+
91+
if (token.Kind == TokenKind.RCurly
92+
&& openBraceStack.Count > 0)
93+
{
94+
yield return new Tuple<Token, Token>(openBraceStack.Pop(), token);
95+
}
96+
}
97+
}
98+
99+
/// <summary>
100+
/// Returns brace pairs that are on the same line.
101+
/// </summary>
102+
/// <returns>Tuples of tokens such that item1 is LCurly token and item2 is RCurly token.</returns>
103+
public IEnumerable<Tuple<Token, Token>> GetBracePairsOnSameLine()
104+
{
105+
foreach (var bracePair in GetBracePairs())
106+
{
107+
if (bracePair.Item1.Extent.StartLineNumber == bracePair.Item2.Extent.StartLineNumber)
108+
{
109+
yield return bracePair;
110+
}
111+
}
112+
}
113+
77114
private IEnumerable<Token> GetBraceInCommandElement(TokenKind tokenKind)
78115
{
79116
var cmdElemAsts = ast.FindAll(x => x is CommandElementAst && x is ScriptBlockExpressionAst, true);

0 commit comments

Comments
 (0)