Skip to content

Commit

Permalink
Fix parser inference (#15927)
Browse files Browse the repository at this point in the history
  • Loading branch information
fisker committed Jan 16, 2024
1 parent be17405 commit c566c9d
Show file tree
Hide file tree
Showing 6 changed files with 36 additions and 18 deletions.
7 changes: 3 additions & 4 deletions .prettierrc
Expand Up @@ -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
4 changes: 2 additions & 2 deletions .vscode/extensions.json
Expand Up @@ -3,6 +3,6 @@
"esbenp.prettier-vscode",
"editorconfig.editorconfig",
"dbaeumer.vscode-eslint",
"streetsidesoftware.code-spell-checker"
]
"streetsidesoftware.code-spell-checker",
],
}
8 changes: 4 additions & 4 deletions .vscode/settings.example.json
Expand Up @@ -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,
},
}
12 changes: 12 additions & 0 deletions changelog_unreleased/api/15927.md
@@ -0,0 +1,12 @@
#### Fix parser inference (#15927 by @fisker)

<!-- prettier-ignore -->
```console
// Prettier stable
prettier --file-info tsconfig.json
{ "ignored": false, "inferredParser": "json" }

// Prettier main
prettier --file-info tsconfig.json
{ "ignored": false, "inferredParser": "jsonc" }
```
19 changes: 11 additions & 8 deletions src/utils/infer-parser.js
Expand Up @@ -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;
}
Expand All @@ -45,8 +48,8 @@ function getLanguageByInterpreter(languages, file) {
return;
}

return languages.find((language) =>
language.interpreters?.includes(interpreter),
return languages.find(({ interpreters }) =>
interpreters?.includes(interpreter),
);
}

Expand All @@ -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);
Expand Down
4 changes: 4 additions & 0 deletions tests/integration/__tests__/file-info.js
Expand Up @@ -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", () => {
Expand Down

0 comments on commit c566c9d

Please sign in to comment.