@@ -5,14 +5,19 @@ import { ModuleResolver } from "./ModuleResolver";
5
5
6
6
export class LanguageResolver {
7
7
constructor ( private moduleResolver : ModuleResolver ) { }
8
- public getParsersFromLanguageId (
8
+ public getParserFromLanguageId (
9
9
uri : Uri ,
10
10
languageId : string
11
- ) : prettier . BuiltInParserName [ ] | string [ ] {
12
- if ( uri . scheme === "untitled" && languageId === "html" ) {
13
- // This is a workaround for the HTML language when it is unsaved. By default,
14
- // the Angular parser matches first because both register the language 'html'
15
- return [ "html" ] ;
11
+ ) : prettier . BuiltInParserName | string | undefined {
12
+ // This is a workaround for when the vscodeLanguageId is duplicated in multiple
13
+ // prettier languages. In these cases the first match is not the preferred match
14
+ // so we override with the parser that exactly matches the languageId.
15
+ // Specific undesired cases here are:
16
+ // `html` matching to `angular`
17
+ // `json` matching to `json-stringify`
18
+ const languageParsers = [ "html" , "json" ] ;
19
+ if ( uri . scheme === "untitled" && languageParsers . includes ( languageId ) ) {
20
+ return languageId ;
16
21
}
17
22
const language = this . getSupportLanguages ( uri . fsPath ) . find (
18
23
( lang ) =>
@@ -21,10 +26,9 @@ export class LanguageResolver {
21
26
Array . isArray ( lang . vscodeLanguageIds ) &&
22
27
lang . vscodeLanguageIds . includes ( languageId )
23
28
) ;
24
- if ( ! language ) {
25
- return [ ] ;
29
+ if ( language && language . parsers ?. length > 0 ) {
30
+ return language . parsers [ 0 ] ;
26
31
}
27
- return language . parsers ;
28
32
}
29
33
30
34
public allEnabledLanguages ( fsPath ?: string ) : string [ ] {
0 commit comments