From 86fffecf2f6fb359fad6104f55061b3ec87494ef Mon Sep 17 00:00:00 2001 From: fisker Date: Mon, 15 Jan 2024 20:54:48 +0800 Subject: [PATCH 1/8] Use `jsonc` parser for `.vscode/*.json` --- .prettierrc | 7 +++---- .vscode/extensions.json | 4 ++-- .vscode/settings.example.json | 8 ++++---- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/.prettierrc b/.prettierrc index 20c2d97a0926..bb34518270e9 100644 --- a/.prettierrc +++ b/.prettierrc @@ -5,7 +5,6 @@ overrides: - files: "bin/prettier.cjs" options: trailingComma: none - # TODO: Enable this after `jsonc` parser released - # - files: ".vscode/*.json" - # options: - # parser: jsonc + - files: ".vscode/*.json" + options: + parser: jsonc diff --git a/.vscode/extensions.json b/.vscode/extensions.json index a0ee92829b81..ebce3d3e0697 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -3,6 +3,6 @@ "esbenp.prettier-vscode", "editorconfig.editorconfig", "dbaeumer.vscode-eslint", - "streetsidesoftware.code-spell-checker" - ] + "streetsidesoftware.code-spell-checker", + ], } diff --git a/.vscode/settings.example.json b/.vscode/settings.example.json index a01541d57723..fca393e94753 100644 --- a/.vscode/settings.example.json +++ b/.vscode/settings.example.json @@ -2,14 +2,14 @@ "[javascript]": { "editor.defaultFormatter": "esbenp.prettier-vscode", "editor.formatOnSave": true, - "editor.codeActionsOnSave": ["source.fixAll.eslint"] + "editor.codeActionsOnSave": ["source.fixAll.eslint"], }, "editor.codeActionsOnSave": { - "source.fixAll.eslint": "explicit" + "source.fixAll.eslint": "explicit", }, "prettier.requireConfig": true, "eslint.experimental.useFlatConfig": true, "files.exclude": { - "dist*": true - } + "dist*": true, + }, } From f908c96fe48fda52b1222eb78f1a2695939e4ef2 Mon Sep 17 00:00:00 2001 From: fisker Date: Mon, 15 Jan 2024 21:08:23 +0800 Subject: [PATCH 2/8] Fix parser inference --- src/utils/infer-parser.js | 17 +++++++++++------ tests/integration/__tests__/file-info.js | 4 ++++ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/utils/infer-parser.js b/src/utils/infer-parser.js index 42923955404b..ae6cef6b0c38 100644 --- a/src/utils/infer-parser.js +++ b/src/utils/infer-parser.js @@ -11,10 +11,15 @@ function getLanguageByFileName(languages, file) { const basename = getFileBasename(file).toLowerCase(); - return languages.find( - (language) => - language.extensions?.some((extension) => basename.endsWith(extension)) || - language.filenames?.some((name) => name.toLowerCase() === basename), + return ( + languages.find( + (language) => + language.filenames?.some((name) => name.toLowerCase() === basename), + ) ?? + languages.find( + (language) => + language.extensions?.some((extension) => basename.endsWith(extension)), + ) ); } @@ -45,8 +50,8 @@ function getLanguageByInterpreter(languages, file) { return; } - return languages.find((language) => - language.interpreters?.includes(interpreter), + return languages.find( + (language) => language.interpreters?.includes(interpreter), ); } diff --git a/tests/integration/__tests__/file-info.js b/tests/integration/__tests__/file-info.js index 74a65314c160..a05d3ee79f08 100644 --- a/tests/integration/__tests__/file-info.js +++ b/tests/integration/__tests__/file-info.js @@ -130,6 +130,10 @@ test("API getFileInfo with filepath only", async () => { ignored: false, inferredParser: "markdown", }); + await expect(prettier.getFileInfo("tsconfig.json")).resolves.toEqual({ + ignored: false, + inferredParser: "jsonc", + }); }); describe("API getFileInfo resolveConfig", () => { From d0c635bd2bf0bfd991a906255892db231dd83d5c Mon Sep 17 00:00:00 2001 From: fisker Date: Mon, 15 Jan 2024 21:12:42 +0800 Subject: [PATCH 3/8] Add changelog --- changelog_unreleased/api/15927.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 changelog_unreleased/api/15927.md diff --git a/changelog_unreleased/api/15927.md b/changelog_unreleased/api/15927.md new file mode 100644 index 000000000000..36a468c81a28 --- /dev/null +++ b/changelog_unreleased/api/15927.md @@ -0,0 +1,12 @@ +#### Fix parser inference (#15927 by @fisker) + + +```console +// Prettier stable +prettier --file-info tsconfig.json +{ "ignored": false, "inferredParser": "json" } + +// Prettier main +prettier --file-info tsconfig.json +{ "ignored": false, "inferredParser": "jsonc" } +``` From 646dbc9552c06eae00a926fc9a8c468f7806d266 Mon Sep 17 00:00:00 2001 From: fisker Date: Mon, 15 Jan 2024 21:13:53 +0800 Subject: [PATCH 4/8] Linting --- src/utils/infer-parser.js | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/utils/infer-parser.js b/src/utils/infer-parser.js index ae6cef6b0c38..a482f5abf611 100644 --- a/src/utils/infer-parser.js +++ b/src/utils/infer-parser.js @@ -12,13 +12,11 @@ function getLanguageByFileName(languages, file) { const basename = getFileBasename(file).toLowerCase(); return ( - languages.find( - (language) => - language.filenames?.some((name) => name.toLowerCase() === basename), + languages.find((language) => + language.filenames?.some((name) => name.toLowerCase() === basename), ) ?? - languages.find( - (language) => - language.extensions?.some((extension) => basename.endsWith(extension)), + languages.find((language) => + language.extensions?.some((extension) => basename.endsWith(extension)), ) ); } @@ -50,8 +48,8 @@ function getLanguageByInterpreter(languages, file) { return; } - return languages.find( - (language) => language.interpreters?.includes(interpreter), + return languages.find((language) => + language.interpreters?.includes(interpreter), ); } From 2f15634792ab00e857207e2ed351ff4dbb1a5623 Mon Sep 17 00:00:00 2001 From: fisker Date: Mon, 15 Jan 2024 21:16:19 +0800 Subject: [PATCH 5/8] Minor tweak --- src/utils/infer-parser.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/utils/infer-parser.js b/src/utils/infer-parser.js index a482f5abf611..6fabf8eeee23 100644 --- a/src/utils/infer-parser.js +++ b/src/utils/infer-parser.js @@ -12,11 +12,13 @@ function getLanguageByFileName(languages, file) { const basename = getFileBasename(file).toLowerCase(); return ( - languages.find((language) => - language.filenames?.some((name) => name.toLowerCase() === basename), + languages.find( + ({ filenames }) => + filenames?.some((name) => name.toLowerCase() === basename), ) ?? - languages.find((language) => - language.extensions?.some((extension) => basename.endsWith(extension)), + languages.find( + ({ extensions }) => + extensions?.some((extension) => basename.endsWith(extension)), ) ); } @@ -48,8 +50,8 @@ function getLanguageByInterpreter(languages, file) { return; } - return languages.find((language) => - language.interpreters?.includes(interpreter), + return languages.find( + (language) => language.interpreters?.includes(interpreter), ); } From 473a77e70b3799700f015fea1360b49fd59d304e Mon Sep 17 00:00:00 2001 From: fisker Date: Mon, 15 Jan 2024 21:17:57 +0800 Subject: [PATCH 6/8] Minor tweak --- src/utils/infer-parser.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/infer-parser.js b/src/utils/infer-parser.js index 6fabf8eeee23..44a1b01032c8 100644 --- a/src/utils/infer-parser.js +++ b/src/utils/infer-parser.js @@ -51,7 +51,7 @@ function getLanguageByInterpreter(languages, file) { } return languages.find( - (language) => language.interpreters?.includes(interpreter), + ({ interpreters }) => interpreters?.includes(interpreter), ); } From c71cc5005c0df1bdf98f4b2fb0ccc510d56484cc Mon Sep 17 00:00:00 2001 From: fisker Date: Mon, 15 Jan 2024 21:18:26 +0800 Subject: [PATCH 7/8] Linting --- src/utils/infer-parser.js | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/utils/infer-parser.js b/src/utils/infer-parser.js index 44a1b01032c8..22ea74b3e101 100644 --- a/src/utils/infer-parser.js +++ b/src/utils/infer-parser.js @@ -12,13 +12,11 @@ function getLanguageByFileName(languages, file) { const basename = getFileBasename(file).toLowerCase(); return ( - languages.find( - ({ filenames }) => - filenames?.some((name) => name.toLowerCase() === basename), + languages.find(({ filenames }) => + filenames?.some((name) => name.toLowerCase() === basename), ) ?? - languages.find( - ({ extensions }) => - extensions?.some((extension) => basename.endsWith(extension)), + languages.find(({ extensions }) => + extensions?.some((extension) => basename.endsWith(extension)), ) ); } @@ -50,8 +48,8 @@ function getLanguageByInterpreter(languages, file) { return; } - return languages.find( - ({ interpreters }) => interpreters?.includes(interpreter), + return languages.find(({ interpreters }) => + interpreters?.includes(interpreter), ); } From 7339f729e68db21bd7e72c35c2e614580f3884e0 Mon Sep 17 00:00:00 2001 From: fisker Date: Mon, 15 Jan 2024 21:21:42 +0800 Subject: [PATCH 8/8] Rename function --- src/utils/infer-parser.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/utils/infer-parser.js b/src/utils/infer-parser.js index 22ea74b3e101..6762e47359fe 100644 --- a/src/utils/infer-parser.js +++ b/src/utils/infer-parser.js @@ -21,7 +21,7 @@ function getLanguageByFileName(languages, file) { ); } -function getLanguageByName(languages, languageName) { +function getLanguageByLanguageName(languages, languageName) { if (!languageName) { return; } @@ -69,7 +69,7 @@ function inferParser(options, fileInfo) { // interpreter in the shebang line, if any; but since this requires FS access, // do it last. const language = - getLanguageByName(languages, fileInfo.language) ?? + getLanguageByLanguageName(languages, fileInfo.language) ?? getLanguageByFileName(languages, fileInfo.physicalFile) ?? getLanguageByFileName(languages, fileInfo.file) ?? getLanguageByInterpreter(languages, fileInfo.physicalFile);