Move pragma detection/insertion to plugins (#3685)

New pragma infrastructure, only JS and JSON has detection/insertion implemented
This commit is contained in:
Lucas Duailibe authored and GitHub committed 2018-03-08 13:50:33 -03:00
1 parent bb1c354453
commit 13103101eb
18 files changed
+44 -21

No files matched your search

+6 -18
View File
@@ -1,7 +1,5 @@
"use strict";
const docblock = require("jest-docblock");
const version = require("./package.json").version;
const privateUtil = require("./src/common/util");
@@ -38,11 +36,6 @@ function attachComments(text, ast, opts) {
return astComments;
}
function hasPragma(text) {
const pragmas = Object.keys(docblock.parse(docblock.extract(text)));
return pragmas.indexOf("prettier") !== -1 || pragmas.indexOf("format") !== -1;
}
function ensureAllCommentsPrinted(astComments) {
if (!astComments) {
return;
@@ -69,7 +62,9 @@ function ensureAllCommentsPrinted(astComments) {
}
function formatWithCursor(text, opts, addAlignmentSize) {
if (opts.requirePragma && !hasPragma(text)) {
const selectedParser = parser.resolveParser(opts);
const hasPragma = !selectedParser.hasPragma || selectedParser.hasPragma(text);
if (opts.requirePragma && !hasPragma) {
return { formatted: text };
}
@@ -81,19 +76,12 @@ function formatWithCursor(text, opts, addAlignmentSize) {
if (
opts.insertPragma &&
!hasPragma(text) &&
opts.printer.insertPragma &&
!hasPragma &&
opts.rangeStart === 0 &&
opts.rangeEnd === Infinity
) {
const parsedDocblock = docblock.parseWithComments(docblock.extract(text));
const pragmas = Object.assign({ format: "" }, parsedDocblock.pragmas);
const newDocblock = docblock.print({
pragmas,
comments: parsedDocblock.comments.replace(/^(\s+?\r?\n)+/, "") // remove leading newlines
});
const strippedText = docblock.strip(text);
const separatingNewlines = strippedText.startsWith("\n") ? "\n" : "\n\n";
text = newDocblock + separatingNewlines + strippedText;
text = opts.printer.insertPragma(text);
}
addAlignmentSize = addAlignmentSize || 0;
+9 -1
View File
@@ -1,6 +1,7 @@
"use strict";
const printer = require("./printer-estree");
const hasPragma = require("./pragma").hasPragma;
const options = require("./options");
const privateUtil = require("../common/util");
@@ -161,6 +162,7 @@ const typescript = {
return eval("require")("./parser-typescript");
},
astFormat: "estree",
hasPragma,
locStart,
locEnd
};
@@ -170,18 +172,24 @@ const babylon = {
return eval("require")("./parser-babylon");
},
astFormat: "estree",
hasPragma,
locStart,
locEnd
};
const parsers = {
babylon,
json: babylon,
json: Object.assign({}, babylon, {
hasPragma() {
return false;
}
}),
flow: {
get parse() {
return eval("require")("./parser-flow");
},
astFormat: "estree",
hasPragma,
locStart,
locEnd
},
+25
View File
@@ -0,0 +1,25 @@
"use strict";
const docblock = require("jest-docblock");
function hasPragma(text) {
const pragmas = Object.keys(docblock.parse(docblock.extract(text)));
return pragmas.indexOf("prettier") !== -1 || pragmas.indexOf("format") !== -1;
}
function insertPragma(text) {
const parsedDocblock = docblock.parseWithComments(docblock.extract(text));
const pragmas = Object.assign({ format: "" }, parsedDocblock.pragmas);
const newDocblock = docblock.print({
pragmas,
comments: parsedDocblock.comments.replace(/^(\s+?\r?\n)+/, "") // remove leading newlines
});
const strippedText = docblock.strip(text);
const separatingNewlines = strippedText.startsWith("\n") ? "\n" : "\n\n";
return newDocblock + separatingNewlines + strippedText;
}
module.exports = {
hasPragma,
insertPragma
};
+2
View File
@@ -8,6 +8,7 @@ const sharedUtil = require("../common/util-shared");
const isIdentifierName = require("esutils").keyword.isIdentifierNameES6;
const embed = require("./embed");
const clean = require("./clean");
const insertPragma = require("./pragma").insertPragma;
const doc = require("../doc");
const docBuilders = doc.builders;
@@ -5408,6 +5409,7 @@ function printJsDocComment(comment) {
module.exports = {
print: genericPrint,
embed,
insertPragma,
massageAstNode: clean,
hasPrettierIgnore,
willPrintOwnComments,
+1
View File
@@ -0,0 +1 @@
run_spec(__dirname, ["flow", "babylon", "typescript"], { insertPragma: true });
-1
View File
@@ -1 +0,0 @@
run_spec(__dirname, ["flow"], { insertPragma: true });
+1
View File
@@ -0,0 +1 @@
run_spec(__dirname, ["flow", "babylon", "typescript"], { requirePragma: true });
-1
View File
@@ -1 +0,0 @@
run_spec(__dirname, ["flow"], { requirePragma: true });