prettierx
Version:
prettierX - a less opinionated fork of the Prettier code formatter
49 lines (39 loc) • 1.21 kB
JavaScript
;
const { parseWithComments, strip, extract, print } = require("jest-docblock");
const { getShebang } = require("../common/util");
const { normalizeEndOfLine } = require("../common/end-of-line");
function parseDocBlock(text) {
const shebang = getShebang(text);
if (shebang) {
text = text.slice(shebang.length + 1);
}
const docBlock = extract(text);
const { pragmas, comments } = parseWithComments(docBlock);
return { shebang, text, pragmas, comments };
}
function hasPragma(text) {
const pragmas = Object.keys(parseDocBlock(text).pragmas);
return pragmas.includes("prettier") || pragmas.includes("format");
}
function insertPragma(originalText) {
const { shebang, text, pragmas, comments } = parseDocBlock(originalText);
const strippedText = strip(text);
const docBlock = print({
pragmas: {
format: "",
...pragmas,
},
comments: comments.trimStart(),
});
return (
(shebang ? `${shebang}\n` : "") +
// normalise newlines (mitigate use of os.EOL by jest-docblock)
normalizeEndOfLine(docBlock) +
(strippedText.startsWith("\n") ? "\n" : "\n\n") +
strippedText
);
}
module.exports = {
hasPragma,
insertPragma,
};