@@ -61,7 +61,6 @@ public IEnumerable<Token> GetOpenBracesInCommandElements()
61
61
return GetBraceInCommandElement ( TokenKind . LCurly ) ;
62
62
}
63
63
64
-
65
64
/// <summary>
66
65
/// Return tokens of kind RCurly that end a scriptblock expression in an command element.
67
66
///
@@ -74,6 +73,44 @@ public IEnumerable<Token> GetCloseBracesInCommandElements()
74
73
return GetBraceInCommandElement ( TokenKind . RCurly ) ;
75
74
}
76
75
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
+
77
114
private IEnumerable < Token > GetBraceInCommandElement ( TokenKind tokenKind )
78
115
{
79
116
var cmdElemAsts = ast . FindAll ( x => x is CommandElementAst && x is ScriptBlockExpressionAst , true ) ;
0 commit comments