Move pragma detection/insertion to plugins (#3685)
New pragma infrastructure, only JS and JSON has detection/insertion implemented
This commit is contained in:
1 parent
bb1c354453
commit
13103101eb
18 files changed
+44
-21
No files matched your search
@@ -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;
|
||||
|
||||
@@ -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
|
||||
},
|
||||
|
||||
@@ -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
|
||||
};
|
||||
@@ -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,
|
||||
|
||||
File renamed without changes.
@@ -0,0 +1 @@
|
||||
run_spec(__dirname, ["flow", "babylon", "typescript"], { insertPragma: true });
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -1 +0,0 @@
|
||||
run_spec(__dirname, ["flow"], { insertPragma: true });
|
||||
File renamed without changes.
@@ -0,0 +1 @@
|
||||
run_spec(__dirname, ["flow", "babylon", "typescript"], { requirePragma: true });
|
||||
File renamed without changes.
File renamed without changes.
@@ -1 +0,0 @@
|
||||
run_spec(__dirname, ["flow"], { requirePragma: true });
|
||||
Reference in new issue
Block a user