Skip to content

Commit 2bf9a23

Browse files
Robert Jacksonrondale-sc
andcommitted
Auto-generate per-transform README contents with update-docs.
Co-authored-by: Jonathan Jackson <[email protected]>
1 parent 845b72d commit 2bf9a23

3 files changed

Lines changed: 94 additions & 6 deletions

File tree

commands/global/new.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ module.exports.handler = function handler(options) {
3838
3939
## Transforms
4040
41-
<!--TRANSFORMS_TABLE_START-->
42-
<!--TRANSFORMS_TABLE_END-->
41+
<!--TRANSFORMS_START-->
42+
<!--TRANSFORMS_END-->
4343
4444
## Contributing
4545

commands/local/generate/codemod.js

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,11 @@ module.exports.builder = function builder(yargs) {
1010
module.exports.handler = function handler(options) {
1111
const fs = require('fs-extra');
1212
const { stripIndent } = require('common-tags');
13+
const importCwd = require('import-cwd');
1314
const generateFixture = require('./fixture').handler;
1415

1516
let { codemodName } = options;
17+
let projectName = importCwd('./package.json').name;
1618
let codemodDir = `${process.cwd()}/transforms/${codemodName}`;
1719

1820
fs.outputFileSync(
@@ -48,7 +50,32 @@ module.exports.handler = function handler(options) {
4850
`,
4951
'utf8'
5052
);
51-
fs.outputFileSync(`${codemodDir}/README.md`, `# ${codemodName}\n`, 'utf8');
53+
fs.outputFileSync(
54+
`${codemodDir}/README.md`,
55+
stripIndent`
56+
# ${codemodName}\n
57+
58+
## Usage
59+
60+
\`\`\`
61+
npx ${projectName} ${codemodName} path/of/files/ or/some**/*glob.js
62+
63+
# or
64+
65+
yarn global add ${projectName}
66+
${projectName} ${codemodName} path/of/files/ or/some**/*glob.js
67+
\`\`\`
68+
69+
## Input / Output
70+
71+
<!--FIXTURES_TOC_START-->
72+
<!--FIXTURES_TOC_END-->
73+
74+
<!--FIXTURES_CONTENT_START-->
75+
<!--FIXTURES_CONTENT_END-->
76+
`,
77+
'utf8'
78+
);
5279

5380
generateFixture({ codemodName, fixtureName: 'basic' });
5481
};

commands/local/update-docs.js

Lines changed: 64 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
module.exports.command = 'update-docs';
22
module.exports.desc = 'Update the project README with current list of transforms';
33

4-
module.exports.handler = function handler() {
4+
function updateProjectREADME() {
55
const fs = require('fs-extra');
66

7-
let TRANSFORMS_PLACE_HOLDER = /<!--TRANSFORMS_TABLE_START-->[\s\S]*<!--TRANSFORMS_TABLE_END-->/;
7+
let TRANSFORMS_PLACE_HOLDER = /<!--TRANSFORMS_START-->[\s\S]*<!--TRANSFORMS_END-->/;
88

99
let transforms = fs
1010
.readdirSync('transforms')
@@ -20,7 +20,68 @@ module.exports.handler = function handler() {
2020
.readFileSync('README.md', 'utf8')
2121
.replace(
2222
TRANSFORMS_PLACE_HOLDER,
23-
`<!--TRANSFORMS_TABLE_START-->\n${readmeContent}\n<!--TRANSFORMS_TABLE_END-->`
23+
`<!--TRANSFORMS_START-->\n${readmeContent}\n<!--TRANSFORMS_END-->`
24+
)
25+
);
26+
}
27+
28+
function updateTransformREADME(transformName) {
29+
const fs = require('fs-extra');
30+
const path = require('path');
31+
32+
let toc = [];
33+
let details = [];
34+
35+
let fixtureDir = `transforms/${transformName}/__testfixtures__`;
36+
37+
fs.readdirSync(fixtureDir)
38+
.filter(filename => /\.input$/.test(path.basename(filename, path.extname(filename))))
39+
.forEach(filename => {
40+
let extension = path.extname(filename);
41+
let testName = filename.replace(`.input${extension}`, '');
42+
let inputPath = path.join(fixtureDir, `${testName}.input${extension}`);
43+
let outputPath = path.join(fixtureDir, `${testName}.output${extension}`);
44+
45+
toc.push(`* [${testName}](#${testName})`);
46+
details.push(
47+
'---',
48+
`<a id="${testName}"></a>`,
49+
`**Input** (<small>[${testName}.input${extension}](${inputPath})</small>):`,
50+
fs.readFileSync(inputPath),
51+
`**Output** (<small>[${testName}.input${extension}](${outputPath})</small>):`,
52+
fs.readFileSync(outputPath)
53+
);
54+
});
55+
56+
let transformREADMEPath = `transforms/${transformName}/README.md`;
57+
58+
let FIXTURES_TOC_PLACE_HOLDER = /<!--FIXTURES_TOC_START-->[\s\S]*<!--FIXTURES_TOC_END-->/;
59+
let FIXTURES_CONTENTS_PLACE_HOLDER = /<!--FIXTURES_CONTENT_START-->[\s\S]*<!--FIXTURES_CONTENT_END-->/;
60+
61+
fs.writeFileSync(
62+
transformREADMEPath,
63+
fs
64+
.readFileSync(transformREADMEPath, 'utf8')
65+
.replace(
66+
FIXTURES_TOC_PLACE_HOLDER,
67+
`<!--FIXTURES_TOC_START-->\n${toc.join('\n')}\n<!--FIXTURES_TOC_END-->`
68+
)
69+
.replace(
70+
FIXTURES_CONTENTS_PLACE_HOLDER,
71+
`<!--FIXTURES_CONTENTS_START-->\n${details.join('\n')}\n<!--FIXTURES_CONTENTS_END-->`
2472
)
2573
);
74+
}
75+
76+
function updateTransformREADMEs() {
77+
const fs = require('fs-extra');
78+
79+
fs.readdirSync('transforms')
80+
.filter(file => fs.lstatSync(`transforms/${file}`).isDirectory())
81+
.forEach(updateTransformREADME);
82+
}
83+
84+
module.exports.handler = function handler() {
85+
updateProjectREADME();
86+
updateTransformREADMEs();
2687
};

0 commit comments

Comments
 (0)