@@ -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