@@ -41,6 +41,9 @@ public class ProvideCommentHelp : ConfigurableRule
41
41
[ ConfigurableRuleProperty ( defaultValue : true ) ]
42
42
public bool BlockComment { get ; protected set ; }
43
43
44
+ [ ConfigurableRuleProperty ( defaultValue : false ) ]
45
+ public bool VSCodeSnippetCorrection { get ; protected set ; }
46
+
44
47
public ProvideCommentHelp ( ) : base ( )
45
48
{
46
49
// Enable the rule by default
@@ -148,7 +151,7 @@ private IEnumerable<CorrectionExtent> GetCorrection(FunctionDefinitionAst funcDe
148
151
funcDefnAst . Extent . StartLineNumber ,
149
152
funcDefnAst . Extent . StartColumnNumber ,
150
153
funcDefnAst . Extent . StartColumnNumber ,
151
- helpBuilder . GetCommentHelp ( BlockComment ) + Environment . NewLine ,
154
+ helpBuilder . GetCommentHelp ( BlockComment , VSCodeSnippetCorrection ) + Environment . NewLine ,
152
155
funcDefnAst . Extent . File ) ;
153
156
}
154
157
@@ -220,20 +223,21 @@ public void AddParameter(string paramName)
220
223
parameters . Add ( new ParameterHelpNode ( paramName , "Parameter description" ) ) ;
221
224
}
222
225
223
- public string GetCommentHelp ( bool blockComment )
226
+ public string GetCommentHelp ( bool blockComment , bool snippet )
224
227
{
225
228
var sb = new StringBuilder ( ) ;
229
+ var helpContent = snippet ? this . ToSnippetString ( ) : this . ToString ( ) ;
226
230
if ( blockComment )
227
231
{
228
232
sb . AppendLine ( "<#" ) ;
229
- sb . AppendLine ( this . ToString ( ) ) ;
233
+ sb . AppendLine ( helpContent ) ;
230
234
sb . Append ( "#>" ) ;
231
235
}
232
236
else
233
237
{
234
238
var boundaryString = new String ( '#' , 30 ) ;
235
239
sb . AppendLine ( boundaryString ) ;
236
- var lines = this . ToString ( ) . Split ( '\n ' ) . Select ( l => l . Trim ( '\r ' ) ) ;
240
+ var lines = helpContent . Split ( '\n ' ) . Select ( l => l . Trim ( '\r ' ) ) ;
237
241
foreach ( var line in lines )
238
242
{
239
243
sb . Append ( "#" ) ;
@@ -261,6 +265,21 @@ public override string ToString()
261
265
return sb . ToString ( ) ;
262
266
}
263
267
268
+ // todo remove code duplication
269
+ public string ToSnippetString ( ) {
270
+ var sb = new StringBuilder ( ) ;
271
+ int tabStop = 1 ;
272
+ sb . AppendLine ( synopsis . ToString ( tabStop ++ ) ) . AppendLine ( ) ;
273
+ sb . AppendLine ( description . ToString ( tabStop ++ ) ) . AppendLine ( ) ;
274
+ foreach ( var parameter in parameters )
275
+ {
276
+ sb . AppendLine ( parameter . ToString ( tabStop ++ ) ) . AppendLine ( ) ;
277
+ }
278
+
279
+ sb . AppendLine ( example . ToString ( tabStop ++ ) ) . AppendLine ( ) ;
280
+ sb . Append ( notes . ToString ( tabStop ++ ) ) ;
281
+ return sb . ToString ( ) ;
282
+ }
264
283
private class CommentHelpNode
265
284
{
266
285
public CommentHelpNode ( string nodeName , string description )
@@ -283,6 +302,18 @@ public override string ToString()
283
302
284
303
return sb . ToString ( ) ;
285
304
}
305
+
306
+ public virtual string ToString ( int tabStop )
307
+ {
308
+ var sb = new StringBuilder ( ) ;
309
+ sb . Append ( "." ) . AppendLine ( Name . ToUpper ( ) ) ;
310
+ if ( ! String . IsNullOrWhiteSpace ( Description ) )
311
+ {
312
+ sb . Append ( $ "${{{tabStop}:{ Description } }}") ;
313
+ }
314
+
315
+ return sb . ToString ( ) ;
316
+ }
286
317
}
287
318
288
319
private class ParameterHelpNode : CommentHelpNode
@@ -306,6 +337,18 @@ public override string ToString()
306
337
307
338
return sb . ToString ( ) ;
308
339
}
340
+
341
+ public override string ToString ( int tabStop )
342
+ {
343
+ var sb = new StringBuilder ( ) ;
344
+ sb . Append ( "." ) . Append ( Name . ToUpper ( ) ) . Append ( " " ) . AppendLine ( ParameterName ) ;
345
+ if ( ! String . IsNullOrWhiteSpace ( Description ) )
346
+ {
347
+ sb . Append ( $ "${{{tabStop}:{ Description } }}") ;
348
+ }
349
+
350
+ return sb . ToString ( ) ;
351
+ }
309
352
}
310
353
}
311
354
}
0 commit comments