@@ -41,6 +41,9 @@ public class ProvideCommentHelp : ConfigurableRule
4141 [ ConfigurableRuleProperty ( defaultValue : true ) ]
4242 public bool BlockComment { get ; protected set ; }
4343
44+ [ ConfigurableRuleProperty ( defaultValue : false ) ]
45+ public bool VSCodeSnippetCorrection { get ; protected set ; }
46+
4447 public ProvideCommentHelp ( ) : base ( )
4548 {
4649 // Enable the rule by default
@@ -148,7 +151,7 @@ private IEnumerable<CorrectionExtent> GetCorrection(FunctionDefinitionAst funcDe
148151 funcDefnAst . Extent . StartLineNumber ,
149152 funcDefnAst . Extent . StartColumnNumber ,
150153 funcDefnAst . Extent . StartColumnNumber ,
151- helpBuilder . GetCommentHelp ( BlockComment ) + Environment . NewLine ,
154+ helpBuilder . GetCommentHelp ( BlockComment , VSCodeSnippetCorrection ) + Environment . NewLine ,
152155 funcDefnAst . Extent . File ) ;
153156 }
154157
@@ -220,20 +223,21 @@ public void AddParameter(string paramName)
220223 parameters . Add ( new ParameterHelpNode ( paramName , "Parameter description" ) ) ;
221224 }
222225
223- public string GetCommentHelp ( bool blockComment )
226+ public string GetCommentHelp ( bool blockComment , bool snippet )
224227 {
225228 var sb = new StringBuilder ( ) ;
229+ var helpContent = snippet ? this . ToSnippetString ( ) : this . ToString ( ) ;
226230 if ( blockComment )
227231 {
228232 sb . AppendLine ( "<#" ) ;
229- sb . AppendLine ( this . ToString ( ) ) ;
233+ sb . AppendLine ( helpContent ) ;
230234 sb . Append ( "#>" ) ;
231235 }
232236 else
233237 {
234238 var boundaryString = new String ( '#' , 30 ) ;
235239 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 ' ) ) ;
237241 foreach ( var line in lines )
238242 {
239243 sb . Append ( "#" ) ;
@@ -261,6 +265,21 @@ public override string ToString()
261265 return sb . ToString ( ) ;
262266 }
263267
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+ }
264283 private class CommentHelpNode
265284 {
266285 public CommentHelpNode ( string nodeName , string description )
@@ -283,6 +302,18 @@ public override string ToString()
283302
284303 return sb . ToString ( ) ;
285304 }
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+ }
286317 }
287318
288319 private class ParameterHelpNode : CommentHelpNode
@@ -306,6 +337,18 @@ public override string ToString()
306337
307338 return sb . ToString ( ) ;
308339 }
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+ }
309352 }
310353 }
311354 }
0 commit comments