@@ -145,8 +145,26 @@ public override SourceType GetSourceType()
145
145
private IEnumerable < DiagnosticRecord > FindHashtableViolations ( TokenOperations tokenOps )
146
146
{
147
147
var hashtableAsts = tokenOps . Ast . FindAll ( ast => ast is HashtableAst , true ) ;
148
- if ( hashtableAsts == null )
148
+ if ( hashtableAsts == null || ! hashtableAsts . Any ( ) )
149
149
{
150
+ var configAsts = tokenOps . Ast . FindAll ( ast => ast is ConfigurationDefinitionAst , true ) ;
151
+ if ( configAsts != null )
152
+ {
153
+ // There are probably parse errors caused by an "Undefined DSC resource"
154
+ // which prevents the parser from detecting the property value pairs as
155
+ // hashtable. Hence, this is a workaround to format configurations which
156
+ // have "Undefined DSC resource" parse errors.
157
+
158
+ // TODO break down the function and reuse the alignment logic.
159
+
160
+ // find all commandAsts of the form "prop" "=" "val" that have the same parent
161
+ // and format those pairs.
162
+ foreach ( var configAst in configAsts )
163
+ {
164
+ var groups = GetCommandElementGroups ( configAst ) ;
165
+ }
166
+ }
167
+
150
168
yield break ;
151
169
}
152
170
@@ -204,6 +222,48 @@ private IEnumerable<DiagnosticRecord> FindHashtableViolations(TokenOperations to
204
222
}
205
223
}
206
224
225
+ private List < List < CommandAst > > GetCommandElementGroups ( Ast configAst )
226
+ {
227
+ var result = new List < List < CommandAst > > ( ) ;
228
+ var parents = new HashSet < Ast > ( ) ;
229
+ var parentChildrenGroup = configAst . FindAll ( ast => IsPropertyValueCommandAst ( ast ) , true ) ?
230
+ . Select ( ast => ast as CommandAst )
231
+ . GroupBy ( ast => ast . Parent . Parent ) ; // parent is pipeline and pipeline's parent is namedblockast
232
+ if ( parentChildrenGroup == null )
233
+ {
234
+ return result ;
235
+ }
236
+
237
+ // var parentChildrenMap = new Dictionary<Ast, List<Ast>>();
238
+ // foreach (var commandAst in commandAsts)
239
+ // {
240
+ // var parent = commandAst.Parent;
241
+ // if (parentChildrenMap.ContainsKey(parent))
242
+ // {
243
+ // parentChildrenMap[parent].Add(commandAst);
244
+ // }
245
+ // else
246
+ // {
247
+ // parentChildrenMap.Add(parent, new List<Ast>())
248
+ // }
249
+ // }
250
+
251
+ foreach ( var group in parentChildrenGroup )
252
+ {
253
+ result . Add ( group . ToList ( ) ) ;
254
+ }
255
+
256
+ return result ;
257
+ }
258
+
259
+ private bool IsPropertyValueCommandAst ( Ast ast )
260
+ {
261
+ var commandAst = ast as CommandAst ;
262
+ return commandAst != null
263
+ && commandAst . CommandElements . Count ( ) == 3
264
+ && commandAst . CommandElements [ 1 ] . Extent . Text . Equals ( "=" ) ;
265
+ }
266
+
207
267
private IEnumerable < CorrectionExtent > GetHashtableCorrections (
208
268
Tuple < IScriptExtent , IScriptExtent > extentTuple ,
209
269
int expectedStartColumnNumber )
0 commit comments