@@ -203,8 +203,7 @@ Future<void> generateDocs(String? dir,
203
203
var fixStatus = getFixStatus (rule, fixStatusMap);
204
204
RuleHtmlGenerator (rule, fixStatus).generate (outDir);
205
205
if (enableMarkdown) {
206
- RuleMarkdownGenerator (rule)
207
- .generate (filePath: outDir, fixStatus: fixStatus);
206
+ RuleMarkdownGenerator (rule, fixStatus).generate (outDir);
208
207
}
209
208
}
210
209
@@ -576,14 +575,43 @@ linter:
576
575
''' ;
577
576
}
578
577
579
- class RuleHtmlGenerator {
578
+ abstract class RuleGenerator {
580
579
final LintRule rule;
581
580
final String fixStatus;
582
581
583
- RuleHtmlGenerator (this .rule, this .fixStatus);
582
+ RuleGenerator (this .rule, this .fixStatus);
584
583
585
584
String get details => rule.details;
586
585
586
+ String get group => rule.group.name;
587
+
588
+ String get humanReadableName => rule.name;
589
+
590
+ String get name => rule.name;
591
+
592
+ State get state => rule.state;
593
+
594
+ String get usageMarkdown => '''
595
+ ## Usage
596
+
597
+ To enable the `$name ` lint,
598
+ add `$name ` under **linter > rules** in your
599
+ [`analysis_options.yaml`](https://dart.dev/guides/language/analysis-options)
600
+ file:
601
+
602
+ ```yaml
603
+ linter:
604
+ rules:
605
+ - $name
606
+ ```
607
+ ''' ;
608
+
609
+ void generate ([String ? filePath]);
610
+ }
611
+
612
+ class RuleHtmlGenerator extends RuleGenerator {
613
+ RuleHtmlGenerator (super .rule, super .fixStatus);
614
+
587
615
String get detailsHeader {
588
616
if (state.isRemoved) {
589
617
var version = state.since;
@@ -594,10 +622,6 @@ class RuleHtmlGenerator {
594
622
return '' ;
595
623
}
596
624
597
- String get group => rule.group.name;
598
-
599
- String get humanReadableName => rule.name;
600
-
601
625
String get incompatibleRuleDetails {
602
626
var sb = StringBuffer ();
603
627
var incompatibleRules = rule.incompatibleRules;
@@ -617,8 +641,6 @@ class RuleHtmlGenerator {
617
641
return sb.toString ();
618
642
}
619
643
620
- String get name => rule.name;
621
-
622
644
String get since {
623
645
var info = sinceInfo[name]! ;
624
646
var sdkVersion = info.sinceDartSdk != null
@@ -630,8 +652,6 @@ class RuleHtmlGenerator {
630
652
return 'Dart SDK: $sdkVersion • <small>(Linter $linterVersion )</small>' ;
631
653
}
632
654
633
- State get state => rule.state;
634
-
635
655
String get stateString {
636
656
if (state.isDeprecated) {
637
657
return '<span style="color:orangered;font-weight:bold;" >${state .label }</span>' ;
@@ -644,6 +664,7 @@ class RuleHtmlGenerator {
644
664
}
645
665
}
646
666
667
+ @override
647
668
void generate ([String ? filePath]) {
648
669
var generated = _generate ();
649
670
if (filePath != null ) {
@@ -689,6 +710,7 @@ class RuleHtmlGenerator {
689
710
$detailsHeader
690
711
${markdownToHtml (details )}
691
712
$incompatibleRuleDetails
713
+ ${markdownToHtml (usageMarkdown )}
692
714
</section>
693
715
</div>
694
716
<footer>
@@ -700,16 +722,8 @@ class RuleHtmlGenerator {
700
722
''' ;
701
723
}
702
724
703
- class RuleMarkdownGenerator {
704
- final LintRule rule;
705
-
706
- RuleMarkdownGenerator (this .rule);
707
-
708
- String get details => rule.details;
709
-
710
- String get group => rule.group.name;
711
-
712
- String get name => rule.name;
725
+ class RuleMarkdownGenerator extends RuleGenerator {
726
+ RuleMarkdownGenerator (super .rule, super .fixStatus);
713
727
714
728
String get since {
715
729
var info = sinceInfo[name]! ;
@@ -721,15 +735,16 @@ class RuleMarkdownGenerator {
721
735
return 'Dart SDK: $sdkVersion • _(Linter $linterVersion )_' ;
722
736
}
723
737
724
- String get state => describeState (rule);
738
+ String get stateString => describeState (rule);
725
739
726
- void generate ({String ? filePath, String ? fixStatus}) {
740
+ @override
741
+ void generate ([String ? filePath]) {
727
742
var buffer = StringBuffer ();
728
743
729
744
buffer.writeln ('# Rule $name ' );
730
745
buffer.writeln ();
731
746
buffer.writeln ('**Group**: $group \\ ' );
732
- buffer.writeln ('**State**: $state \\ ' );
747
+ buffer.writeln ('**State**: $stateString \\ ' );
733
748
buffer.writeln ('**Since**: $since \\ ' );
734
749
buffer.writeln ();
735
750
@@ -757,18 +772,21 @@ class RuleMarkdownGenerator {
757
772
buffer.writeln ('## Description' );
758
773
buffer.writeln ();
759
774
buffer.writeln (details.trim ());
775
+ buffer.writeln ();
760
776
761
777
// incompatible rules
762
778
var incompatibleRules = rule.incompatibleRules;
763
779
if (incompatibleRules.isNotEmpty) {
764
- buffer.writeln ('## Incompatible With ' );
780
+ buffer.writeln ('## Incompatible with ' );
765
781
buffer.writeln ();
766
782
for (var rule in incompatibleRules) {
767
783
buffer.writeln ('- [$rule ]($rule .md)' );
768
784
}
769
785
buffer.writeln ();
770
786
}
771
787
788
+ buffer.write (usageMarkdown);
789
+
772
790
if (filePath == null ) {
773
791
print (buffer);
774
792
} else {
0 commit comments