Improve comments (#19359)
This commit is contained in:
1 parent
b149a978ec
commit
96693ea007
43 files changed
+59
-58
No files matched your search
+2
-1
@@ -240,6 +240,8 @@ const configs = [
|
|||||||
/* eslint-plugin-unicorn */
|
/* eslint-plugin-unicorn */
|
||||||
"unicorn/better-dom-traversing": "off",
|
"unicorn/better-dom-traversing": "off",
|
||||||
"unicorn/catch-error-name": "off",
|
"unicorn/catch-error-name": "off",
|
||||||
|
// Doesn't work for code and JSDoc in comments
|
||||||
|
"unicorn/comment-content": "off",
|
||||||
"unicorn/consistent-class-member-order": "off",
|
"unicorn/consistent-class-member-order": "off",
|
||||||
"unicorn/consistent-compound-words": "off",
|
"unicorn/consistent-compound-words": "off",
|
||||||
"unicorn/consistent-destructuring": "off",
|
"unicorn/consistent-destructuring": "off",
|
||||||
@@ -308,7 +310,6 @@ const configs = [
|
|||||||
"unicorn/template-indent": "error",
|
"unicorn/template-indent": "error",
|
||||||
|
|
||||||
// TODO: Enable the followings
|
// TODO: Enable the followings
|
||||||
"unicorn/comment-content": "off",
|
|
||||||
"unicorn/prefer-short-arrow-method": "off",
|
"unicorn/prefer-short-arrow-method": "off",
|
||||||
"unicorn/no-useless-concat": "off",
|
"unicorn/no-useless-concat": "off",
|
||||||
"unicorn/no-computed-property-existence-check": "off",
|
"unicorn/no-computed-property-existence-check": "off",
|
||||||
|
|||||||
@@ -92,7 +92,7 @@ function getEsbuildOptions({ packageConfig, file, cliOptions, buildOptions }) {
|
|||||||
module: "*",
|
module: "*",
|
||||||
process: (text, file) => transform(text, file, buildOptions),
|
process: (text, file) => transform(text, file, buildOptions),
|
||||||
},
|
},
|
||||||
// #12493, not sure what the problem is, but replace the cjs version with esm version seems fix it
|
// #12493, not sure what the problem is, but replace the CJS version with ESM version seems fix it
|
||||||
{
|
{
|
||||||
module: require.resolve("tslib"),
|
module: require.resolve("tslib"),
|
||||||
path: require.resolve("tslib").replace(/tslib\.js$/, "tslib.es6.js"),
|
path: require.resolve("tslib").replace(/tslib\.js$/, "tslib.es6.js"),
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ function esmifyTypescriptEslint(text) {
|
|||||||
````
|
````
|
||||||
*/
|
*/
|
||||||
text = text.replaceAll(
|
text = text.replaceAll(
|
||||||
// TODO: Use duplicate capture group name when eslint supports
|
// TODO: Use duplicate capture group name when ESLint supports
|
||||||
/(?<=\n)(?:const|let|var) (?<variable>\w+) = (?:__importStar\(require\(["'](?<moduleName1>.*?)["']\)\)|require\(["'](?<moduleName2>.*?)["']\));/g,
|
/(?<=\n)(?:const|let|var) (?<variable>\w+) = (?:__importStar\(require\(["'](?<moduleName1>.*?)["']\)\)|require\(["'](?<moduleName2>.*?)["']\));/g,
|
||||||
(...args) => {
|
(...args) => {
|
||||||
const groups = args.at(-1);
|
const groups = args.at(-1);
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ Get a package file.
|
|||||||
- a package name with path like `"prettier/index.js"`
|
- a package name with path like `"prettier/index.js"`
|
||||||
@param {string} [base] -- Where the package should be solved from
|
@param {string} [base] -- Where the package should be solved from
|
||||||
- a package name like `"prettier"`
|
- a package name like `"prettier"`
|
||||||
- a file url like `"file://path/to/prettier"`
|
- a file URL like `"file://path/to/prettier"`
|
||||||
- an absolute path like `"/path/to/prettier"`
|
- an absolute path like `"/path/to/prettier"`
|
||||||
@returns {string}
|
@returns {string}
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -159,7 +159,7 @@ function getCommentDescription(content, comment) {
|
|||||||
return `template comment on line ${startLine}-${endLine}`;
|
return `template comment on line ${startLine}-${endLine}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Forbid html in title
|
// Forbid HTML in title
|
||||||
// https://github.com/prettier/prettier/issues/17089
|
// https://github.com/prettier/prettier/issues/17089
|
||||||
function validateTitle(displayPath, title) {
|
function validateTitle(displayPath, title) {
|
||||||
const processor = unified().use(remarkParse);
|
const processor = unified().use(remarkParse);
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ function runCommand(command) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fetch git tags to get the previous version number (i.e. the latest tag)
|
// Fetch Git tags to get the previous version number (i.e. the latest tag)
|
||||||
await runCommand("git fetch --tags");
|
await runCommand("git fetch --tags");
|
||||||
|
|
||||||
// Install script's dependencies before any require
|
// Install script's dependencies before any require
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ export default async function updateVersion({ version, next }) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update github issue templates
|
// Update GitHub issue templates
|
||||||
processFile(".github/ISSUE_TEMPLATE/formatting.md", (content) =>
|
processFile(".github/ISSUE_TEMPLATE/formatting.md", (content) =>
|
||||||
content.replace(/^(\*\*Prettier ).*?(\*\*)$/m, `$1${version}$2`),
|
content.replace(/^(\*\*Prettier ).*?(\*\*)$/m, `$1${version}$2`),
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
const MESSAGE_ID = "jsx-identifier-case";
|
const MESSAGE_ID = "jsx-identifier-case";
|
||||||
|
|
||||||
// To ignore variables, config eslint like this
|
// To ignore variables, config ESLint like this
|
||||||
// {'prettier-internal-rules/jsx-identifier-case': ['error', 'name1', ... 'nameN']}
|
// {'prettier-internal-rules/jsx-identifier-case': ['error', 'name1', ... 'nameN']}
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ function parseArgv(rawArguments, detailedOptions, logger, keys) {
|
|||||||
...Object.fromEntries(
|
...Object.fromEntries(
|
||||||
Object.entries(normalized).map(([key, value]) => {
|
Object.entries(normalized).map(([key, value]) => {
|
||||||
const option = detailedOptions.find(({ name }) => name === key) || {};
|
const option = detailedOptions.find(({ name }) => name === key) || {};
|
||||||
// If the flag is a prettier api option, use the option name
|
// If the flag is a prettier API option, use the option name
|
||||||
// Otherwise use camel case for readability
|
// Otherwise use camel case for readability
|
||||||
// `--ignore-unknown` -> `ignoreUnknown`
|
// `--ignore-unknown` -> `ignoreUnknown`
|
||||||
return [option.forwardToApi || camelCase(key), value];
|
return [option.forwardToApi || camelCase(key), value];
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ async function getParser(file, options) {
|
|||||||
|
|
||||||
// We should wrap this function with `withPlugins` and use `options.plugins` directly instead of loading plugins here
|
// We should wrap this function with `withPlugins` and use `options.plugins` directly instead of loading plugins here
|
||||||
// See #18375 #18081
|
// See #18375 #18081
|
||||||
// But somehow it breaks VSCode extension, see #18353
|
// But somehow it breaks VS Code extension, see #18353
|
||||||
plugins = (
|
plugins = (
|
||||||
await Promise.all([loadBuiltinPlugins(), loadPlugins(plugins)])
|
await Promise.all([loadBuiltinPlugins(), loadPlugins(plugins)])
|
||||||
).flat();
|
).flat();
|
||||||
|
|||||||
@@ -127,7 +127,7 @@ function mergeOverrides(configResult, filePath) {
|
|||||||
return options;
|
return options;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Based on eslint: https://github.com/eslint/eslint/blob/master/lib/config/config-ops.js
|
// Based on ESLint: https://github.com/eslint/eslint/blob/master/lib/config/config-ops.js
|
||||||
function pathMatchesGlobs(filePath, patterns, excludedPatterns) {
|
function pathMatchesGlobs(filePath, patterns, excludedPatterns) {
|
||||||
const patternList = Array.isArray(patterns) ? patterns : [patterns];
|
const patternList = Array.isArray(patterns) ? patterns : [patterns];
|
||||||
// micromatch always matches against basename when the option is enabled
|
// micromatch always matches against basename when the option is enabled
|
||||||
|
|||||||
+1
-1
@@ -91,7 +91,7 @@ const inferParser = withPlugins((file, options) =>
|
|||||||
inferParserWithoutPlugins(options, { physicalFile: file }),
|
inferParserWithoutPlugins(options, { physicalFile: file }),
|
||||||
);
|
);
|
||||||
|
|
||||||
// Internal shared with cli
|
// Internal shared with CLI
|
||||||
const sharedWithCli = {
|
const sharedWithCli = {
|
||||||
errors,
|
errors,
|
||||||
optionCategories,
|
optionCategories,
|
||||||
|
|||||||
@@ -175,7 +175,7 @@ function parseNestedValue(node, options) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function parseValue(value, options) {
|
function parseValue(value, options) {
|
||||||
// Inline javascript in Less
|
// Inline JavaScript in Less
|
||||||
if (options.parser === "less" && value.startsWith("~`")) {
|
if (options.parser === "less" && value.startsWith("~`")) {
|
||||||
return { type: "value-unknown", value };
|
return { type: "value-unknown", value };
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -230,7 +230,7 @@ function parseNestedCSS(node, options) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// only css support custom-selector
|
// only CSS support custom-selector
|
||||||
if (options.parser === "css" && node.name === "custom-selector") {
|
if (options.parser === "css" && node.name === "custom-selector") {
|
||||||
const customSelector = node.params.match(/:--\S+\s+/)[0].trim();
|
const customSelector = node.params.match(/:--\S+\s+/)[0].trim();
|
||||||
node.customSelector = customSelector;
|
node.customSelector = customSelector;
|
||||||
|
|||||||
@@ -280,7 +280,7 @@ function printCommaSeparatedValueGroup(path, options, print) {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ignore css variables and interpolation in SCSS (i.e. `--#{$var}`)
|
// Ignore CSS variables and interpolation in SCSS (i.e. `--#{$var}`)
|
||||||
if (iNode.value === "--" && isHashNode(iNextNode)) {
|
if (iNode.value === "--" && isHashNode(iNextNode)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -533,7 +533,7 @@ function printCommaSeparatedValueGroup(path, options, print) {
|
|||||||
return group(indent(parts));
|
return group(indent(parts));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Indent is not needed for import url when url is very long
|
// Indent is not needed for import URL when URL is very long
|
||||||
// and node has two groups
|
// and node has two groups
|
||||||
// when type is value-comma_group
|
// when type is value-comma_group
|
||||||
// example @import url("verylongurl") projection,tv
|
// example @import url("verylongurl") projection,tv
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ const getCssStyleTags = (property) =>
|
|||||||
const CSS_DISPLAY_TAGS = {
|
const CSS_DISPLAY_TAGS = {
|
||||||
...getCssStyleTags("display"),
|
...getCssStyleTags("display"),
|
||||||
|
|
||||||
// special cases for some css display=none elements
|
// special cases for some CSS display=none elements
|
||||||
template: "inline",
|
template: "inline",
|
||||||
source: "block",
|
source: "block",
|
||||||
track: "block",
|
track: "block",
|
||||||
@@ -48,7 +48,7 @@ const CSS_DISPLAY_TAGS = {
|
|||||||
// `noscript` is inline
|
// `noscript` is inline
|
||||||
// noscript: "inline",
|
// noscript: "inline",
|
||||||
|
|
||||||
// there's no css display for these elements but they behave these ways
|
// there's no CSS display for these elements but they behave these ways
|
||||||
meter: "inline-block",
|
meter: "inline-block",
|
||||||
progress: "inline-block",
|
progress: "inline-block",
|
||||||
object: "inline-block",
|
object: "inline-block",
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ async function formatAttributeValue(
|
|||||||
shouldHugJsExpression,
|
shouldHugJsExpression,
|
||||||
) {
|
) {
|
||||||
options = {
|
options = {
|
||||||
// strictly prefer single quote to avoid unnecessary html entity escape
|
// strictly prefer single quote to avoid unnecessary HTML entity escape
|
||||||
__isInHtmlAttribute: true,
|
__isInHtmlAttribute: true,
|
||||||
__embeddedInHtml: true,
|
__embeddedInHtml: true,
|
||||||
...options,
|
...options,
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ function massageAstNode(original, cloned, parent) {
|
|||||||
(parent.fullName === "img" || parent.fullName === "source")) ||
|
(parent.fullName === "img" || parent.fullName === "source")) ||
|
||||||
(name === "allow" && parent.fullName === "iframe") ||
|
(name === "allow" && parent.fullName === "iframe") ||
|
||||||
name.startsWith("on") ||
|
name.startsWith("on") ||
|
||||||
// Vue attributes
|
// Vue.js attributes
|
||||||
name.startsWith("@") ||
|
name.startsWith("@") ||
|
||||||
name.startsWith(":") ||
|
name.startsWith(":") ||
|
||||||
name.startsWith(".") ||
|
name.startsWith(".") ||
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ function parseVue(input, parseOptions) {
|
|||||||
(node.kind === "element" && node.name.toLowerCase() === "html"),
|
(node.kind === "element" && node.name.toLowerCase() === "html"),
|
||||||
);
|
);
|
||||||
|
|
||||||
// If not Vue SFC, treat as html
|
// If not Vue.js SFC, treat as HTML
|
||||||
if (isHtml) {
|
if (isHtml) {
|
||||||
return parseHtml(input, HTML_PARSE_OPTIONS);
|
return parseHtml(input, HTML_PARSE_OPTIONS);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ const angularParser = createParser({
|
|||||||
tokenizeAngularLetDeclaration: true,
|
tokenizeAngularLetDeclaration: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
// Vue
|
// Vue.js
|
||||||
const vueParser = createParser({
|
const vueParser = createParser({
|
||||||
name: "vue",
|
name: "vue",
|
||||||
isTagNameCaseSensitive: true,
|
isTagNameCaseSensitive: true,
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ function shouldPreserveContent(node, options) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// incomplete html in ie conditional comment
|
// incomplete HTML in ie conditional comment
|
||||||
// e.g. <!--[if lt IE 9]></div><![endif]-->
|
// e.g. <!--[if lt IE 9]></div><![endif]-->
|
||||||
if (node.kind === "ieConditionalComment" && !node.complete) {
|
if (node.kind === "ieConditionalComment" && !node.complete) {
|
||||||
return true;
|
return true;
|
||||||
@@ -475,7 +475,7 @@ function hasParent(node, fn) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function getNodeCssStyleDisplay(node, options) {
|
function getNodeCssStyleDisplay(node, options) {
|
||||||
// Every root block in Vue SFC is a block
|
// Every root block in Vue.js SFC is a block
|
||||||
if (isVueSfcBlock(node, options)) {
|
if (isVueSfcBlock(node, options)) {
|
||||||
return "block";
|
return "block";
|
||||||
}
|
}
|
||||||
@@ -535,7 +535,7 @@ function getUnescapedAttributeValue(node) {
|
|||||||
return unescapeQuoteEntities(node.value);
|
return unescapeQuoteEntities(node.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
// top-level elements (excluding <template>, <style> and <script>) in Vue SFC are considered custom block
|
// top-level elements (excluding <template>, <style> and <script>) in Vue.js SFC are considered custom block
|
||||||
// See https://vue-loader.vuejs.org/spec.html for detail
|
// See https://vue-loader.vuejs.org/spec.html for detail
|
||||||
const vueRootElementsSet = new Set(["template", "style", "script"]);
|
const vueRootElementsSet = new Set(["template", "style", "script"]);
|
||||||
function isVueCustomBlock(node, options) {
|
function isVueCustomBlock(node, options) {
|
||||||
|
|||||||
@@ -356,7 +356,7 @@ function handleMethodNameComments({
|
|||||||
followingNode,
|
followingNode,
|
||||||
text,
|
text,
|
||||||
}) {
|
}) {
|
||||||
// This is only needed for estree parsers (flow, typescript) to attach
|
// This is only needed for estree parsers (Flow, TypeScript) to attach
|
||||||
// after a method name:
|
// after a method name:
|
||||||
// obj = { fn /*comment*/() {} };
|
// obj = { fn /*comment*/() {} };
|
||||||
if (
|
if (
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ function massageAstNode(original, cloned, parent) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// CSS template literals in css prop
|
// CSS template literals in CSS prop
|
||||||
if (
|
if (
|
||||||
original.type === "JSXAttribute" &&
|
original.type === "JSXAttribute" &&
|
||||||
original.name.name === "css" &&
|
original.name.name === "css" &&
|
||||||
@@ -155,7 +155,7 @@ function massageAstNode(original, cloned, parent) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// styled-components, graphql, markdown
|
// styled-components, GraphQL, markdown
|
||||||
if (
|
if (
|
||||||
original.type === "TaggedTemplateExpression" &&
|
original.type === "TaggedTemplateExpression" &&
|
||||||
(original.tag.type === "MemberExpression" ||
|
(original.tag.type === "MemberExpression" ||
|
||||||
|
|||||||
@@ -263,13 +263,13 @@ export {
|
|||||||
/** @internal */
|
/** @internal */
|
||||||
babelExpression as __js_expression,
|
babelExpression as __js_expression,
|
||||||
babelTSExpression as __ts_expression,
|
babelTSExpression as __ts_expression,
|
||||||
/** for vue filter */
|
/** for Vue.js filter */
|
||||||
babelExpression as __vue_expression,
|
babelExpression as __vue_expression,
|
||||||
/** for vue filter written in TS */
|
/** for Vue.js filter written in TS */
|
||||||
babelTSExpression as __vue_ts_expression,
|
babelTSExpression as __vue_ts_expression,
|
||||||
/** for vue event binding to handle semicolon */
|
/** for Vue.js event binding to handle semicolon */
|
||||||
babel as __vue_event_binding,
|
babel as __vue_event_binding,
|
||||||
/** for vue event binding written in TS to handle semicolon */
|
/** for Vue.js event binding written in TS to handle semicolon */
|
||||||
babelTs as __vue_ts_event_binding,
|
babelTs as __vue_ts_event_binding,
|
||||||
/** verify that we can print this AST */
|
/** verify that we can print this AST */
|
||||||
babelEstree as __babel_estree,
|
babelEstree as __babel_estree,
|
||||||
|
|||||||
@@ -150,7 +150,7 @@ function chooseLayout(path, options, print, leftDoc, rightPropertyName) {
|
|||||||
node.type === "ImportAttribute" ||
|
node.type === "ImportAttribute" ||
|
||||||
(rightNode.type === "CallExpression" &&
|
(rightNode.type === "CallExpression" &&
|
||||||
rightNode.callee.name === "require") ||
|
rightNode.callee.name === "require") ||
|
||||||
// do not put values on a separate line from the key in json
|
// do not put values on a separate line from the key in JSON
|
||||||
path.root.type === "JsonRoot"
|
path.root.type === "JsonRoot"
|
||||||
) {
|
) {
|
||||||
return "never-break-after-operator";
|
return "never-break-after-operator";
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import { printTypeAnnotationProperty } from "./type-annotation.js";
|
|||||||
|
|
||||||
function printIndexSignature(path, options, print) {
|
function printIndexSignature(path, options, print) {
|
||||||
const { node } = path;
|
const { node } = path;
|
||||||
// The typescript parser accepts multiple parameters here. If you're
|
// The TypeScript parser accepts multiple parameters here. If you're
|
||||||
// using them, it makes sense to have a trailing comma. But if you
|
// using them, it makes sense to have a trailing comma. But if you
|
||||||
// aren't, this is more like a computed property name than an array.
|
// aren't, this is more like a computed property name than an array.
|
||||||
// So we leave off the trailing comma when there's just one parameter.
|
// So we leave off the trailing comma when there's just one parameter.
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ function isKeySafeToQuote(node, options) {
|
|||||||
// Angular does not support unquoted numbers in expressions.
|
// Angular does not support unquoted numbers in expressions.
|
||||||
//
|
//
|
||||||
// So we play it safe and only unquote numbers for the JavaScript parsers.
|
// So we play it safe and only unquote numbers for the JavaScript parsers.
|
||||||
// (Vue supports unquoted numbers in expressions, but let’s keep it simple.)
|
// (Vue.js supports unquoted numbers in expressions, but let’s keep it simple.)
|
||||||
//
|
//
|
||||||
// Identifiers can be unquoted in more circumstances, though.
|
// Identifiers can be unquoted in more circumstances, though.
|
||||||
function isKeySafeToUnquote(node, options) {
|
function isKeySafeToUnquote(node, options) {
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ function printVariableDeclaration(path, options, print) {
|
|||||||
if (printed.length === 1 && !hasComment(node.declarations[0])) {
|
if (printed.length === 1 && !hasComment(node.declarations[0])) {
|
||||||
firstVariable = printed[0];
|
firstVariable = printed[0];
|
||||||
} else {
|
} else {
|
||||||
// Indent first var to comply with eslint one-var rule
|
// Indent first var to comply with ESLint one-var rule
|
||||||
firstVariable = indent(printed[0]);
|
firstVariable = indent(printed[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ function iterateClassMembersPath(path, iteratee) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (node.type === "ObjectTypeAnnotation") {
|
if (node.type === "ObjectTypeAnnotation") {
|
||||||
// Unfortunately, things grouped together in the ast can be
|
// Unfortunately, things grouped together in the AST can be
|
||||||
// interleaved in the source code. So we need to reorder them before
|
// interleaved in the source code. So we need to reorder them before
|
||||||
// printing them.
|
// printing them.
|
||||||
const children = flowObjectTypeAnnotationChildrenProperties
|
const children = flowObjectTypeAnnotationChildrenProperties
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* The argument is a duck type of AstPath, so we can use it in comment attach and ast massage */
|
/* The argument is a duck type of AstPath, so we can use it in comment attach and AST massage */
|
||||||
function isMeaningfulEmptyStatement({ node, parent }) {
|
function isMeaningfulEmptyStatement({ node, parent }) {
|
||||||
if (node?.type !== "EmptyStatement") {
|
if (node?.type !== "EmptyStatement") {
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { hasSameLocStart } from "../location/index.js";
|
import { hasSameLocStart } from "../location/index.js";
|
||||||
|
|
||||||
// Hack to differentiate between the following two which have the same ast
|
// Hack to differentiate between the following two which have the same AST
|
||||||
// declare function f(a): void;
|
// declare function f(a): void;
|
||||||
// var f: (a) => void;
|
// var f: (a) => void;
|
||||||
function isTypeAnnotationAFunction(node) {
|
function isTypeAnnotationAFunction(node) {
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ const languages = [
|
|||||||
name: "JSON.stringify",
|
name: "JSON.stringify",
|
||||||
parsers: ["json-stringify"],
|
parsers: ["json-stringify"],
|
||||||
vscodeLanguageIds: ["json"],
|
vscodeLanguageIds: ["json"],
|
||||||
extensions: [".importmap"], // .json file defaults to json instead of json-stringify
|
extensions: [".importmap"], // .json file defaults to `json` instead of `json-stringify`
|
||||||
filenames: ["package.json", "package-lock.json", "composer.json"],
|
filenames: ["package.json", "package-lock.json", "composer.json"],
|
||||||
})),
|
})),
|
||||||
createLanguage(linguistLanguages.JSON, (data) => ({
|
createLanguage(linguistLanguages.JSON, (data) => ({
|
||||||
|
|||||||
@@ -193,7 +193,7 @@ function attachComments(ast, options) {
|
|||||||
} else if (enclosingNode) {
|
} else if (enclosingNode) {
|
||||||
addDanglingComment(enclosingNode, comment);
|
addDanglingComment(enclosingNode, comment);
|
||||||
} else {
|
} else {
|
||||||
// There are no nodes, let's attach it to the root of the ast
|
// There are no nodes, let's attach it to the root of the AST
|
||||||
/* c8 ignore next */
|
/* c8 ignore next */
|
||||||
addDanglingComment(ast, comment);
|
addDanglingComment(ast, comment);
|
||||||
}
|
}
|
||||||
@@ -209,7 +209,7 @@ function attachComments(ast, options) {
|
|||||||
} else if (enclosingNode) {
|
} else if (enclosingNode) {
|
||||||
addDanglingComment(enclosingNode, comment);
|
addDanglingComment(enclosingNode, comment);
|
||||||
} else {
|
} else {
|
||||||
// There are no nodes, let's attach it to the root of the ast
|
// There are no nodes, let's attach it to the root of the AST
|
||||||
/* c8 ignore next */
|
/* c8 ignore next */
|
||||||
addDanglingComment(ast, comment);
|
addDanglingComment(ast, comment);
|
||||||
}
|
}
|
||||||
@@ -239,7 +239,7 @@ function attachComments(ast, options) {
|
|||||||
} else if (enclosingNode) {
|
} else if (enclosingNode) {
|
||||||
addDanglingComment(enclosingNode, comment);
|
addDanglingComment(enclosingNode, comment);
|
||||||
} else {
|
} else {
|
||||||
// There are no nodes, let's attach it to the root of the ast
|
// There are no nodes, let's attach it to the root of the AST
|
||||||
/* c8 ignore next */
|
/* c8 ignore next */
|
||||||
addDanglingComment(ast, comment);
|
addDanglingComment(ast, comment);
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -6,6 +6,6 @@ to remove the `__parsePrettierYamlConfig` export.
|
|||||||
*/
|
*/
|
||||||
export * from "../language-yaml/index.js";
|
export * from "../language-yaml/index.js";
|
||||||
|
|
||||||
// Exposed to parser prettier yaml config
|
// Exposed to parser prettier YAML config
|
||||||
import YAML from "yaml";
|
import YAML from "yaml";
|
||||||
export const __parsePrettierYamlConfig = YAML.parse;
|
export const __parsePrettierYamlConfig = YAML.parse;
|
||||||
@@ -38,7 +38,7 @@ const umdFiles = {
|
|||||||
"prettier/plugins/yaml.js",
|
"prettier/plugins/yaml.js",
|
||||||
"prettier/plugins/flow.js",
|
"prettier/plugins/flow.js",
|
||||||
"prettier/plugins/meriyah.js",
|
"prettier/plugins/meriyah.js",
|
||||||
// These two plugins don't have umd version
|
// These two plugins don't have UMD version
|
||||||
"plugin-hermes/index.mjs",
|
"plugin-hermes/index.mjs",
|
||||||
"plugin-oxc/index.browser.mjs",
|
"plugin-oxc/index.browser.mjs",
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ function* getFiles(context) {
|
|||||||
!file.isFile() ||
|
!file.isFile() ||
|
||||||
filename[0] === "." ||
|
filename[0] === "." ||
|
||||||
filename === FORMAT_TEST_SCRIPT_FILENAME ||
|
filename === FORMAT_TEST_SCRIPT_FILENAME ||
|
||||||
// VSCode creates this file sometime https://github.com/microsoft/vscode/issues/105191
|
// VS Code creates this file sometime https://github.com/microsoft/vscode/issues/105191
|
||||||
filename === "debug.log" ||
|
filename === "debug.log" ||
|
||||||
path.extname(filename) === ".snap"
|
path.extname(filename) === ".snap"
|
||||||
) {
|
) {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { parsing, transform } from "json-test-suite";
|
import { parsing, transform } from "json-test-suite";
|
||||||
|
|
||||||
const SKIP = new Set([
|
const SKIP = new Set([
|
||||||
// Prettier doesn't support other encodings than utf8
|
// Prettier doesn't support other encodings than UTF-8
|
||||||
"i_string_utf16BE_no_BOM.json",
|
"i_string_utf16BE_no_BOM.json",
|
||||||
"i_string_utf16LE_no_BOM.json",
|
"i_string_utf16LE_no_BOM.json",
|
||||||
"i_string_UTF-16LE_with_BOM.json",
|
"i_string_UTF-16LE_with_BOM.json",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { parsing, transform } from "json-test-suite";
|
import { parsing, transform } from "json-test-suite";
|
||||||
|
|
||||||
const SKIP = new Set([
|
const SKIP = new Set([
|
||||||
// Prettier doesn't support other encodings than utf8
|
// Prettier doesn't support other encodings than UTF-8
|
||||||
"i_string_utf16LE_no_BOM.json",
|
"i_string_utf16LE_no_BOM.json",
|
||||||
|
|
||||||
// Maximum call stack size exceeded
|
// Maximum call stack size exceeded
|
||||||
|
|||||||
@@ -479,7 +479,7 @@ test("Search from directory, not treat file as directory", async () => {
|
|||||||
"directory/.prettierrc",
|
"directory/.prettierrc",
|
||||||
);
|
);
|
||||||
|
|
||||||
// Api
|
// API
|
||||||
const directory = new URL("../cli/config/config-position/", import.meta.url);
|
const directory = new URL("../cli/config/config-position/", import.meta.url);
|
||||||
const getConfigFileByApi = async (file) => {
|
const getConfigFileByApi = async (file) => {
|
||||||
const configFile = await prettier.resolveConfigFile(
|
const configFile = await prettier.resolveConfigFile(
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ describe("format correctly if stdin content compatible with stdin-filepath", ()
|
|||||||
runCli(
|
runCli(
|
||||||
"cli",
|
"cli",
|
||||||
["--stdin-filepath", "abc.css"],
|
["--stdin-filepath", "abc.css"],
|
||||||
{ input: ".name { display: none; }" }, // css
|
{ input: ".name { display: none; }" }, // CSS
|
||||||
).test({
|
).test({
|
||||||
status: 0,
|
status: 0,
|
||||||
});
|
});
|
||||||
@@ -15,7 +15,7 @@ describe("throw error if stdin content incompatible with stdin-filepath", () =>
|
|||||||
runCli(
|
runCli(
|
||||||
"cli",
|
"cli",
|
||||||
["--stdin-filepath", "abc.js"],
|
["--stdin-filepath", "abc.js"],
|
||||||
{ input: ".name { display: none; }" }, // css
|
{ input: ".name { display: none; }" }, // CSS
|
||||||
).test({
|
).test({
|
||||||
status: "non-zero",
|
status: "non-zero",
|
||||||
});
|
});
|
||||||
@@ -25,7 +25,7 @@ describe("gracefully handle stdin-filepath with nonexistent directory", () => {
|
|||||||
runCli(
|
runCli(
|
||||||
"cli",
|
"cli",
|
||||||
["--stdin-filepath", "definitely/nonexistent/path.css"],
|
["--stdin-filepath", "definitely/nonexistent/path.css"],
|
||||||
{ input: ".name { display: none; }" }, // css
|
{ input: ".name { display: none; }" }, // CSS
|
||||||
).test({
|
).test({
|
||||||
status: 0,
|
status: 0,
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -138,7 +138,7 @@ describe("CLI --stdin-filepath works with --config-precedence prefer-file", () =
|
|||||||
runCli(
|
runCli(
|
||||||
"cli/config-precedence/overrides",
|
"cli/config-precedence/overrides",
|
||||||
["--stdin-filepath=abc.ts", "--no-semi", "--config-precedence=prefer-file"],
|
["--stdin-filepath=abc.ts", "--no-semi", "--config-precedence=prefer-file"],
|
||||||
{ input: "let x: keyof Y = foo<typeof X>()" }, // typescript
|
{ input: "let x: keyof Y = foo<typeof X>()" }, // TypeScript
|
||||||
).test({
|
).test({
|
||||||
stderr: "",
|
stderr: "",
|
||||||
status: 0,
|
status: 0,
|
||||||
@@ -153,7 +153,7 @@ describe("CLI --stdin-filepath works with --config-precedence file-override", ()
|
|||||||
"--no-semi",
|
"--no-semi",
|
||||||
"--config-precedence=file-override",
|
"--config-precedence=file-override",
|
||||||
],
|
],
|
||||||
{ input: "let x: keyof Y = foo<typeof X>()" }, // typescript
|
{ input: "let x: keyof Y = foo<typeof X>()" }, // TypeScript
|
||||||
).test({
|
).test({
|
||||||
stderr: "",
|
stderr: "",
|
||||||
status: 0,
|
status: 0,
|
||||||
@@ -168,7 +168,7 @@ describe("CLI --stdin-filepath works with --config-precedence cli-override", ()
|
|||||||
"--no-semi",
|
"--no-semi",
|
||||||
"--config-precedence=cli-override",
|
"--config-precedence=cli-override",
|
||||||
],
|
],
|
||||||
{ input: "let x: keyof Y = foo<typeof X>()" }, // typescript
|
{ input: "let x: keyof Y = foo<typeof X>()" }, // TypeScript
|
||||||
).test({
|
).test({
|
||||||
stderr: "",
|
stderr: "",
|
||||||
status: 0,
|
status: 0,
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ const config = {
|
|||||||
favicon: "icon.png",
|
favicon: "icon.png",
|
||||||
titleDelimiter: "·",
|
titleDelimiter: "·",
|
||||||
|
|
||||||
// Set the production url of your site here
|
// Set the production URL of your site here
|
||||||
url: packageJson.homepage,
|
url: packageJson.homepage,
|
||||||
// Set the /<baseUrl>/ pathname under which your site is served
|
// Set the /<baseUrl>/ pathname under which your site is served
|
||||||
// For GitHub pages deployment, it is often '/<projectName>/'
|
// For GitHub pages deployment, it is often '/<projectName>/'
|
||||||
@@ -58,7 +58,7 @@ const config = {
|
|||||||
onBrokenLinks: "throw",
|
onBrokenLinks: "throw",
|
||||||
|
|
||||||
// Even if you don't use internationalization, you can use this field to set
|
// Even if you don't use internationalization, you can use this field to set
|
||||||
// useful metadata like html lang. For example, if your site is Chinese, you
|
// useful metadata like HTML lang. For example, if your site is Chinese, you
|
||||||
// may want to replace "en" with "zh-Hans".
|
// may want to replace "en" with "zh-Hans".
|
||||||
i18n: {
|
i18n: {
|
||||||
defaultLocale: "en",
|
defaultLocale: "en",
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ export function read() {
|
|||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
// backwards support for old json encoded URIComponent
|
// backwards support for old JSON encoded URIComponent
|
||||||
const decode = hash.includes("%7B%22")
|
const decode = hash.includes("%7B%22")
|
||||||
? decodeURIComponent
|
? decodeURIComponent
|
||||||
: LZString.decompressFromEncodedURIComponent;
|
: LZString.decompressFromEncodedURIComponent;
|
||||||
|
|||||||
Reference in new issue
Block a user