@@ -4,6 +4,7 @@ import 'package:path/path.dart';
44import 'package:solid_lints/src/utils/docs_parser/models/rule_doc.dart' ;
55import 'package:solid_lints/src/utils/docs_parser/output_formatters/markdown_formatter.dart' ;
66import 'package:solid_lints/src/utils/docs_parser/output_formatters/rules_documentation_formatter.dart' ;
7+ import 'package:yaml/yaml.dart' ;
78
89/// Formatter that generates markdown files for every separate rule
910class DocusaurusFormatter implements RulesDocumentationFormatter <void > {
@@ -15,41 +16,58 @@ sidebar_position: 0
1516
1617
1718''' ;
19+ static const _latestVersionPlaceholder = '<INSERT LATEST VERSION>' ;
1820 static final _markdownFormatter = MarkdownFormatter ();
1921
2022 final Directory _outputDirectory;
2123 final File _readmeFile;
24+ final File _pubspecFile;
2225
2326 /// DocusaurusFormatter
2427 DocusaurusFormatter ({
2528 required String docusaurusDocsDirPath,
2629 required String readmePath,
30+ required String pubspecPath,
2731 }) : _outputDirectory = Directory (docusaurusDocsDirPath),
28- _readmeFile = File (readmePath);
32+ _readmeFile = File (readmePath),
33+ _pubspecFile = File (pubspecPath);
2934
3035 @override
3136 void format (List <RuleDoc > rules) {
3237 if (! _outputDirectory.existsSync ()) {
3338 _outputDirectory.createSync (recursive: true );
3439 }
3540
36- File (join (_outputDirectory.parent.path, 'intro.md' ))
37- ..createSync ()
38- ..writeAsStringSync (_introFileMetadata + _readmeFile.readAsStringSync ());
41+ final stableVersion = _extractStableVersion ();
42+ final readmeContent = _readmeFile.readAsStringSync ().replaceAll (
43+ _latestVersionPlaceholder,
44+ stableVersion ?? _latestVersionPlaceholder,
45+ );
46+
47+ File (
48+ join (_outputDirectory.parent.path, 'intro.md' ),
49+ ).writeAsStringSync ('$_introFileMetadata $readmeContent ' );
3950
4051 rules.forEach (_createMarkdownFileForRule);
4152 }
4253
54+ String ? _extractStableVersion () {
55+ if (! _pubspecFile.existsSync ()) return null ;
56+ try {
57+ final yaml = loadYaml (_pubspecFile.readAsStringSync ());
58+ if (yaml case {'version' : final String rawVersion}) {
59+ return '^${rawVersion .split (RegExp ('[-+]' )).first }' ;
60+ }
61+ } catch (_) {}
62+ return null ;
63+ }
64+
4365 void _createMarkdownFileForRule (RuleDoc rule) =>
44- File (
45- join (_outputDirectory.path, '${rule .name }.md' ),
46- )
47- ..createSync ()
48- ..writeAsString (
49- _markdownFormatter.formatRuleToMarkdown (
50- rule,
51- includeName: false ,
52- parametersAsList: false ,
53- ),
54- );
66+ File (join (_outputDirectory.path, '${rule .name }.md' )).writeAsStringSync (
67+ _markdownFormatter.formatRuleToMarkdown (
68+ rule,
69+ includeName: false ,
70+ parametersAsList: false ,
71+ ),
72+ );
5573}
0 commit comments