Annotate missing docs script
This commit is contained in:
parent
bad2a244df
commit
9f73af3e53
65
annotatemissingdocs.js
Executable file
65
annotatemissingdocs.js
Executable file
@ -0,0 +1,65 @@
|
|||||||
|
#!/usr/bin/env node
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
const fs = require('fs');
|
||||||
|
const exec = require('child_process').exec;
|
||||||
|
|
||||||
|
// First run
|
||||||
|
// $ cargo build |& grep "warning: missing documentation" > missingdocs
|
||||||
|
const lines = fs.readFileSync('./missingdocs', 'utf8').split('\n');
|
||||||
|
const pattern = /(.+):([0-9]+):([0-9]+)/;
|
||||||
|
|
||||||
|
const errors = lines.map((line) => {
|
||||||
|
const parts = line.match(pattern);
|
||||||
|
if (!parts || parts.length < 4) {
|
||||||
|
console.error('Strange line: ' + line);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
path: parts[1],
|
||||||
|
line: parts[2],
|
||||||
|
col: parts[3]
|
||||||
|
};
|
||||||
|
}).filter((line) => line);
|
||||||
|
|
||||||
|
const indexed = errors.reduce((index, error) => {
|
||||||
|
if (!index[error.path]) {
|
||||||
|
index[error.path] = [];
|
||||||
|
}
|
||||||
|
index[error.path].push(error);
|
||||||
|
|
||||||
|
return index;
|
||||||
|
}, {});
|
||||||
|
|
||||||
|
for (let path in indexed) {
|
||||||
|
let file = fs.readFileSync(path, 'utf8').split('\n');
|
||||||
|
let error = indexed[path].sort((a, b) => b.line - a.line);
|
||||||
|
let next = () => {
|
||||||
|
let err = error.shift();
|
||||||
|
if (!err) {
|
||||||
|
fs.writeFileSync(path, file.join('\n'), 'utf8');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Process next error
|
||||||
|
let tabs = Array(parseInt(err.col, 10)).join('\t');
|
||||||
|
get_user(path, err.line, (user) => {
|
||||||
|
let line = err.line - 1;
|
||||||
|
let comment = `${tabs}/// TODO [${user}] Please document me`;
|
||||||
|
if (file[line] !== comment) {
|
||||||
|
file.splice(line, 0, comment);
|
||||||
|
}
|
||||||
|
next();
|
||||||
|
});
|
||||||
|
};
|
||||||
|
next();
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_user (path, line, cb) {
|
||||||
|
exec(`git blame ${path}`, (err, stdout, stderr) => {
|
||||||
|
if (err) throw err;
|
||||||
|
const l = stdout.split('\n')[line];
|
||||||
|
const user = l.match(/\(([a-zA-Z ]+?)\s+2/);
|
||||||
|
cb(user[1]);
|
||||||
|
});
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user