Skip to content

Instantly share code, notes, and snippets.

@Skitionek
Last active April 19, 2019 15:03
Show Gist options
  • Save Skitionek/9db395016195864aa18efac5e312771f to your computer and use it in GitHub Desktop.
Save Skitionek/9db395016195864aa18efac5e312771f to your computer and use it in GitHub Desktop.
Add Github markdown links to tree output
const { spawn } = require('child_process');
const args = process.argv.slice(2);
const child = spawn('tree',['-f', '--', args[0] || '.']);
child.stdout.setEncoding('utf8');
child.stdout.on('data', (chunk) => {
const lines = chunk.split(/\n/g).filter(line=>line!==''&&!line.match(/^\d/));
lines.forEach(line=>console.log(line.replace(/([^ \n]*?)([^ /\n]*)$/,'[$2]($1$2)')));
});
/*
Replaces this:
```bash
> tree -- graphql
graphql
└── src
   ├── constants.js
   └── index.js
2 directories, 2 files
```
with this:
```bash
> node GitMarkdownTree.js graphql
[graphql](graphql)
└── [src](graphql/src)
   └── [constants.js](graphql/src/constants.js)
   └── [index.js](graphql/src/index.js)
```
*/
@Skitionek
Copy link
Author

const { spawn } = require('child_process');
const args = process.argv.slice(2);
const child = spawn('tree',['--noreport','-fi', '--', args[0] || '.']);

child.stdout.setEncoding('utf8');
let prevBackslashesLenght = 0;
child.stdout.on('data', (chunk) => {
	const lines = chunk.split(/\n/g).filter(line=>line!==''&&!line.match(/^\d/));
	lines.forEach(line=>{
		const backslashes = line.split('/').map(()=>'>').join('');
		if(prevBackslashesLenght>backslashes.length) console.log(backslashes);
		prevBackslashesLenght=backslashes.length;
		console.log(line.split('/').map(()=>'>').join(''),line.replace(/([^ \n]*?)([^ /\n]*)$/,'[$2]($1$2)'),'  ')
	});
});

Formats with backslashes.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment