From 1df287acc802939edfd5eed3ffabf3979a8cc3ae Mon Sep 17 00:00:00 2001 From: Georgii Dolzhykov Date: Wed, 27 Jan 2021 06:36:39 +0200 Subject: [PATCH] Use default parameters where possible and other microrefactoring (#10135) --- cspell.json | 1 + src/common/util.js | 10 ++---- src/document/doc-builders.js | 8 ++--- src/language-markdown/printer-markdown.js | 6 +--- src/language-markdown/utils.js | 4 +-- src/main/core.js | 44 ++++++++++++----------- src/main/options.js | 4 +-- src/main/parser.js | 4 +-- tests_config/utils/create-snapshot.js | 3 +- tests_integration/runPrettier.js | 2 -- 10 files changed, 35 insertions(+), 51 deletions(-) diff --git a/cspell.json b/cspell.json index c6c7c29d6..8edacecc9 100644 --- a/cspell.json +++ b/cspell.json @@ -105,6 +105,7 @@ "elektronik", "Eneman", "ENOENT", + "eqeqeq", "Ericsburgh", "errored", "Esben", diff --git a/src/common/util.js b/src/common/util.js index ca986ee3b..fe7c180f0 100644 --- a/src/common/util.js +++ b/src/common/util.js @@ -164,8 +164,7 @@ function skipNewline(text, index, opts) { * @param {SkipOptions=} opts * @returns {boolean} */ -function hasNewline(text, index, opts) { - opts = opts || {}; +function hasNewline(text, index, opts = {}) { const idx = skipSpaces(text, opts.backwards ? index - 1 : index, opts); const idx2 = skipNewline(text, idx, opts); return idx !== idx2; @@ -292,8 +291,7 @@ function getNextNonSpaceNonCommentCharacter(text, node, locEnd) { * @param {SkipOptions=} opts * @returns {boolean} */ -function hasSpaces(text, index, opts) { - opts = opts || {}; +function hasSpaces(text, index, opts = {}) { const idx = skipSpaces(text, opts.backwards ? index - 1 : index, opts); return idx !== index; } @@ -304,9 +302,7 @@ function hasSpaces(text, index, opts) { * @param {number=} startIndex * @returns {number} */ -function getAlignmentSize(value, tabWidth, startIndex) { - startIndex = startIndex || 0; - +function getAlignmentSize(value, tabWidth, startIndex = 0) { let size = 0; for (let i = startIndex; i < value.length; ++i) { if (value[i] === "\t") { diff --git a/src/document/doc-builders.js b/src/document/doc-builders.js index a875f9be0..ad08e1775 100644 --- a/src/document/doc-builders.js +++ b/src/document/doc-builders.js @@ -86,9 +86,7 @@ function align(n, contents) { * @param {object} [opts] - TBD ??? * @returns Doc */ -function group(contents, opts) { - opts = opts || {}; - +function group(contents, opts = {}) { if (process.env.NODE_ENV !== "production") { assertDoc(contents); } @@ -156,9 +154,7 @@ function fill(parts) { * @param {object} [opts] - TBD ??? * @returns Doc */ -function ifBreak(breakContents, flatContents, opts) { - opts = opts || {}; - +function ifBreak(breakContents, flatContents, opts = {}) { if (process.env.NODE_ENV !== "production") { if (breakContents) { assertDoc(breakContents); diff --git a/src/language-markdown/printer-markdown.js b/src/language-markdown/printer-markdown.js index d9db1dc3c..c31e1b394 100644 --- a/src/language-markdown/printer-markdown.js +++ b/src/language-markdown/printer-markdown.js @@ -504,8 +504,6 @@ function getNthListSiblingIndex(node, parentNode) { } function getNthSiblingIndex(node, parentNode, condition) { - condition = condition || (() => true); - let index = -1; for (const childNode of parentNode.children) { @@ -698,9 +696,7 @@ function printRoot(path, options, print) { }); } -function printChildren(path, options, print, events) { - events = events || {}; - +function printChildren(path, options, print, events = {}) { const { postprocessor } = events; const processor = events.processor || ((childPath) => childPath.call(print)); diff --git a/src/language-markdown/utils.js b/src/language-markdown/utils.js index 8d839260c..de21b4e60 100644 --- a/src/language-markdown/utils.js +++ b/src/language-markdown/utils.js @@ -204,8 +204,6 @@ function getFencedCodeBlockValue(node, originalText) { function mapAst(ast, handler) { return (function preorder(node, index, parentStack) { - parentStack = parentStack || []; - const newNode = { ...handler(node, index, parentStack) }; if (newNode.children) { newNode.children = newNode.children.map((child, index) => @@ -214,7 +212,7 @@ function mapAst(ast, handler) { } return newNode; - })(ast, null, null); + })(ast, null, []); } function isAutolink(node) { diff --git a/src/main/core.js b/src/main/core.js index 511df6ce9..768433776 100644 --- a/src/main/core.js +++ b/src/main/core.js @@ -36,13 +36,11 @@ function attachComments(text, ast, opts) { return astComments; } -function coreFormat(originalText, opts, addAlignmentSize) { +function coreFormat(originalText, opts, addAlignmentSize = 0) { if (!originalText || originalText.trim().length === 0) { return { formatted: "", cursorOffset: -1 }; } - addAlignmentSize = addAlignmentSize || 0; - const { ast, text } = parser.parse(originalText, opts); if (opts.cursorOffset >= 0) { @@ -181,8 +179,7 @@ function formatRange(originalText, opts) { let { cursorOffset } = opts; if (cursorOffset >= rangeEnd) { // handle the case where the cursor was past the end of the range - cursorOffset = - opts.cursorOffset + (rangeTrimmed.length - rangeString.length); + cursorOffset += rangeTrimmed.length - rangeString.length; } else if (rangeResult.cursorOffset >= 0) { // handle the case where the cursor was in the range cursorOffset = rangeResult.cursorOffset + rangeStart; @@ -272,22 +269,21 @@ function normalizeInputAndOptions(text, options) { }; } -function format(originalText, originalOptions) { +function hasPragma(text, options) { + const selectedParser = parser.resolveParser(options); + return !selectedParser.hasPragma || selectedParser.hasPragma(text); +} + +function formatWithCursor(originalText, originalOptions) { let { hasBOM, text, options } = normalizeInputAndOptions( originalText, normalizeOptions(originalOptions) ); - if (options.rangeStart >= options.rangeEnd && text !== "") { - return { - formatted: originalText, - cursorOffset: originalOptions.cursorOffset, - }; - } - - const selectedParser = parser.resolveParser(options); - const hasPragma = !selectedParser.hasPragma || selectedParser.hasPragma(text); - if (options.requirePragma && !hasPragma) { + if ( + (options.rangeStart >= options.rangeEnd && text !== "") || + (options.requirePragma && !hasPragma(text, options)) + ) { return { formatted: originalText, cursorOffset: originalOptions.cursorOffset, @@ -299,7 +295,12 @@ function format(originalText, originalOptions) { if (options.rangeStart > 0 || options.rangeEnd < text.length) { result = formatRange(text, options); } else { - if (!hasPragma && options.insertPragma && options.printer.insertPragma) { + if ( + !options.requirePragma && + options.insertPragma && + options.printer.insertPragma && + !hasPragma(text, options) + ) { text = options.printer.insertPragma(text); } result = coreFormat(text, options); @@ -317,7 +318,8 @@ function format(originalText, originalOptions) { } module.exports = { - formatWithCursor: format, + formatWithCursor, + parse(originalText, originalOptions, massage) { const { text, options } = normalizeInputAndOptions( originalText, @@ -338,8 +340,10 @@ module.exports = { // Doesn't handle shebang for now formatDoc(doc, options) { - return format(printDocToDebug(doc), { ...options, parser: "babel" }) - .formatted; + return formatWithCursor(printDocToDebug(doc), { + ...options, + parser: "babel", + }).formatted; }, printToDoc(originalText, options) { diff --git a/src/main/options.js b/src/main/options.js index fecf5834d..a12b5bcad 100644 --- a/src/main/options.js +++ b/src/main/options.js @@ -18,9 +18,7 @@ const hiddenDefaults = { }; // Copy options and fill in default values. -function normalize(options, opts) { - opts = opts || {}; - +function normalize(options, opts = {}) { const rawOptions = { ...options }; const supportOptions = getSupportInfo({ diff --git a/src/main/parser.js b/src/main/parser.js index ed354c653..65b31bc39 100644 --- a/src/main/parser.js +++ b/src/main/parser.js @@ -27,9 +27,7 @@ function getParsers(options) { return parsers; } -function resolveParser(opts, parsers) { - parsers = parsers || getParsers(opts); - +function resolveParser(opts, parsers = getParsers(opts)) { if (typeof opts.parser === "function") { // Custom parser API always works with JavaScript. return { diff --git a/tests_config/utils/create-snapshot.js b/tests_config/utils/create-snapshot.js index 0a5eb8755..d700c305d 100644 --- a/tests_config/utils/create-snapshot.js +++ b/tests_config/utils/create-snapshot.js @@ -2,8 +2,7 @@ const raw = require("jest-snapshot-serializer-raw").wrap; -function printSeparator(width, description) { - description = description || ""; +function printSeparator(width, description = "") { const leftLength = Math.floor((width - description.length) / 2); const rightLength = width - leftLength - description.length; return "=".repeat(leftLength) + description + "=".repeat(rightLength); diff --git a/tests_integration/runPrettier.js b/tests_integration/runPrettier.js index 7ebb7f7e7..50848a9bd 100644 --- a/tests_integration/runPrettier.js +++ b/tests_integration/runPrettier.js @@ -116,8 +116,6 @@ function runPrettier(dir, args = [], options = {}) { const result = { status, stdout, stderr, write }; const testResult = (testOptions) => { - testOptions = testOptions || {}; - for (const name of Object.keys(result)) { test(`(${name})`, () => { const value =