Skip to content

Commit 7abf6af

Browse files
authored
Include usage information in generated docs (dart-archive/linter#4370)
* Include usage information in generated docs * Adjust wording
1 parent dd395d2 commit 7abf6af

File tree

1 file changed

+44
-26
lines changed

1 file changed

+44
-26
lines changed

tool/doc.dart

Lines changed: 44 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -203,8 +203,7 @@ Future<void> generateDocs(String? dir,
203203
var fixStatus = getFixStatus(rule, fixStatusMap);
204204
RuleHtmlGenerator(rule, fixStatus).generate(outDir);
205205
if (enableMarkdown) {
206-
RuleMarkdownGenerator(rule)
207-
.generate(filePath: outDir, fixStatus: fixStatus);
206+
RuleMarkdownGenerator(rule, fixStatus).generate(outDir);
208207
}
209208
}
210209

@@ -576,14 +575,43 @@ linter:
576575
''';
577576
}
578577

579-
class RuleHtmlGenerator {
578+
abstract class RuleGenerator {
580579
final LintRule rule;
581580
final String fixStatus;
582581

583-
RuleHtmlGenerator(this.rule, this.fixStatus);
582+
RuleGenerator(this.rule, this.fixStatus);
584583

585584
String get details => rule.details;
586585

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+
587615
String get detailsHeader {
588616
if (state.isRemoved) {
589617
var version = state.since;
@@ -594,10 +622,6 @@ class RuleHtmlGenerator {
594622
return '';
595623
}
596624

597-
String get group => rule.group.name;
598-
599-
String get humanReadableName => rule.name;
600-
601625
String get incompatibleRuleDetails {
602626
var sb = StringBuffer();
603627
var incompatibleRules = rule.incompatibleRules;
@@ -617,8 +641,6 @@ class RuleHtmlGenerator {
617641
return sb.toString();
618642
}
619643

620-
String get name => rule.name;
621-
622644
String get since {
623645
var info = sinceInfo[name]!;
624646
var sdkVersion = info.sinceDartSdk != null
@@ -630,8 +652,6 @@ class RuleHtmlGenerator {
630652
return 'Dart SDK: $sdkVersion • <small>(Linter $linterVersion)</small>';
631653
}
632654

633-
State get state => rule.state;
634-
635655
String get stateString {
636656
if (state.isDeprecated) {
637657
return '<span style="color:orangered;font-weight:bold;" >${state.label}</span>';
@@ -644,6 +664,7 @@ class RuleHtmlGenerator {
644664
}
645665
}
646666

667+
@override
647668
void generate([String? filePath]) {
648669
var generated = _generate();
649670
if (filePath != null) {
@@ -689,6 +710,7 @@ class RuleHtmlGenerator {
689710
$detailsHeader
690711
${markdownToHtml(details)}
691712
$incompatibleRuleDetails
713+
${markdownToHtml(usageMarkdown)}
692714
</section>
693715
</div>
694716
<footer>
@@ -700,16 +722,8 @@ class RuleHtmlGenerator {
700722
''';
701723
}
702724

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);
713727

714728
String get since {
715729
var info = sinceInfo[name]!;
@@ -721,15 +735,16 @@ class RuleMarkdownGenerator {
721735
return 'Dart SDK: $sdkVersion • _(Linter $linterVersion)_';
722736
}
723737

724-
String get state => describeState(rule);
738+
String get stateString => describeState(rule);
725739

726-
void generate({String? filePath, String? fixStatus}) {
740+
@override
741+
void generate([String? filePath]) {
727742
var buffer = StringBuffer();
728743

729744
buffer.writeln('# Rule $name');
730745
buffer.writeln();
731746
buffer.writeln('**Group**: $group\\');
732-
buffer.writeln('**State**: $state\\');
747+
buffer.writeln('**State**: $stateString\\');
733748
buffer.writeln('**Since**: $since\\');
734749
buffer.writeln();
735750

@@ -757,18 +772,21 @@ class RuleMarkdownGenerator {
757772
buffer.writeln('## Description');
758773
buffer.writeln();
759774
buffer.writeln(details.trim());
775+
buffer.writeln();
760776

761777
// incompatible rules
762778
var incompatibleRules = rule.incompatibleRules;
763779
if (incompatibleRules.isNotEmpty) {
764-
buffer.writeln('## Incompatible With');
780+
buffer.writeln('## Incompatible with');
765781
buffer.writeln();
766782
for (var rule in incompatibleRules) {
767783
buffer.writeln('- [$rule]($rule.md)');
768784
}
769785
buffer.writeln();
770786
}
771787

788+
buffer.write(usageMarkdown);
789+
772790
if (filePath == null) {
773791
print(buffer);
774792
} else {

0 commit comments

Comments
 (0)