@@ -110,6 +110,86 @@ private IEnumerable<Token> GetBraceInCommandElement(TokenKind tokenKind)
110
110
}
111
111
}
112
112
113
+ public IEnumerable < Token > GetCloseBraceInOneLineIfStatement ( )
114
+ {
115
+ return GetBraceInOneLineIfStatment ( TokenKind . RCurly ) ;
116
+ }
117
+
118
+ public IEnumerable < Token > GetOpenBraceInOneLineIfStatement ( )
119
+ {
120
+ return GetBraceInOneLineIfStatment ( TokenKind . LCurly ) ;
121
+ }
122
+
123
+ // TODO Fix code duplication in the following method and GetBraceInCommandElement
124
+ private IEnumerable < Token > GetBraceInOneLineIfStatment ( TokenKind tokenKind )
125
+ {
126
+ var ifStatementAsts = ast . FindAll ( ast =>
127
+ {
128
+ var ifAst = ast as IfStatementAst ;
129
+ if ( ifAst == null )
130
+ {
131
+ return false ;
132
+ }
133
+
134
+ return ifAst . Extent . StartLineNumber == ifAst . Extent . EndLineNumber ;
135
+ } ,
136
+ true ) ;
137
+
138
+ if ( ifStatementAsts == null )
139
+ {
140
+ yield break ;
141
+ }
142
+
143
+ var braceTokens = new List < Token > ( ) ;
144
+ foreach ( var ast in ifStatementAsts )
145
+ {
146
+ var ifStatementAst = ast as IfStatementAst ;
147
+ foreach ( var clause in ifStatementAst . Clauses )
148
+ {
149
+ var tokenIf
150
+ = tokenKind == TokenKind . LCurly
151
+ ? GetTokens ( clause . Item2 ) . FirstOrDefault ( )
152
+ : GetTokens ( clause . Item2 ) . LastOrDefault ( ) ;
153
+ if ( tokenIf != null )
154
+ {
155
+ yield return tokenIf ;
156
+ }
157
+ }
158
+
159
+ if ( ifStatementAst . ElseClause == null )
160
+ {
161
+ continue ;
162
+ }
163
+
164
+ var tokenElse
165
+ = tokenKind == TokenKind . LCurly
166
+ ? GetTokens ( ifStatementAst . ElseClause ) . FirstOrDefault ( )
167
+ : GetTokens ( ifStatementAst . ElseClause ) . LastOrDefault ( ) ;
168
+ if ( tokenElse != null )
169
+ {
170
+ yield return tokenElse ;
171
+ }
172
+ }
173
+ }
174
+
175
+ private IEnumerable < Token > GetTokens ( Ast ast )
176
+ {
177
+ int k = 0 ;
178
+ while ( k < tokens . Length && tokens [ k ] . Extent . EndOffset <= ast . Extent . StartOffset )
179
+ {
180
+ k ++ ;
181
+ }
182
+
183
+ while ( k < tokens . Length && tokens [ k ] . Extent . EndOffset <= ast . Extent . EndOffset )
184
+ {
185
+ var token = tokens [ k ++ ] ;
186
+ if ( token . Extent . StartOffset >= ast . Extent . StartOffset )
187
+ {
188
+ yield return token ;
189
+ }
190
+ }
191
+ }
192
+
113
193
public IEnumerable < LinkedListNode < Token > > GetTokenNodes ( TokenKind kind )
114
194
{
115
195
return GetTokenNodes ( ( token ) => token . Kind == kind ) ;
0 commit comments