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, + }, } 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" } +``` diff --git a/src/utils/infer-parser.js b/src/utils/infer-parser.js index 42923955404b..6762e47359fe 100644 --- a/src/utils/infer-parser.js +++ b/src/utils/infer-parser.js @@ -11,14 +11,17 @@ 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(({ filenames }) => + filenames?.some((name) => name.toLowerCase() === basename), + ) ?? + languages.find(({ extensions }) => + extensions?.some((extension) => basename.endsWith(extension)), + ) ); } -function getLanguageByName(languages, languageName) { +function getLanguageByLanguageName(languages, languageName) { if (!languageName) { return; } @@ -45,8 +48,8 @@ function getLanguageByInterpreter(languages, file) { return; } - return languages.find((language) => - language.interpreters?.includes(interpreter), + return languages.find(({ interpreters }) => + interpreters?.includes(interpreter), ); } @@ -66,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); 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", () => {