diff --git a/extensions/javascript/package.json b/extensions/javascript/package.json index 8385c006d33..9bc4eee60df 100644 --- a/extensions/javascript/package.json +++ b/extensions/javascript/package.json @@ -51,6 +51,7 @@ }, { "id": "jsx-tags", + "aliases": [], "configuration": "./tags-language-configuration.json" } ], diff --git a/src/vs/editor/common/services/languagesRegistry.ts b/src/vs/editor/common/services/languagesRegistry.ts index 59a1ff0934b..f3966c7a3a8 100644 --- a/src/vs/editor/common/services/languagesRegistry.ts +++ b/src/vs/editor/common/services/languagesRegistry.ts @@ -164,20 +164,30 @@ export class LanguagesRegistry { resolvedLanguage.aliases.push(langId); + let langAliases: string[] = null; if (typeof lang.aliases !== 'undefined' && Array.isArray(lang.aliases)) { - for (let i = 0; i < lang.aliases.length; i++) { - if (!lang.aliases[i] || lang.aliases[i].length === 0) { - continue; - } - resolvedLanguage.aliases.push(lang.aliases[i]); + if (lang.aliases.length === 0) { + // signal that this language should not get a name + langAliases = [null]; + } else { + langAliases = lang.aliases; } } - let containsAliases = (typeof lang.aliases !== 'undefined' && Array.isArray(lang.aliases) && lang.aliases.length > 0); - if (containsAliases && lang.aliases[0] === null) { + if (langAliases !== null) { + for (let i = 0; i < langAliases.length; i++) { + if (!langAliases[i] || langAliases[i].length === 0) { + continue; + } + resolvedLanguage.aliases.push(langAliases[i]); + } + } + + let containsAliases = (langAliases !== null && langAliases.length > 0); + if (containsAliases && langAliases[0] === null) { // signal that this language should not get a name } else { - let bestName = (containsAliases ? lang.aliases[0] : null) || langId; + let bestName = (containsAliases ? langAliases[0] : null) || langId; if (containsAliases || !resolvedLanguage.name) { resolvedLanguage.name = bestName; } diff --git a/src/vs/editor/test/common/services/languagesRegistry.test.ts b/src/vs/editor/test/common/services/languagesRegistry.test.ts index 9adf2bcc48e..42ed949ff4f 100644 --- a/src/vs/editor/test/common/services/languagesRegistry.test.ts +++ b/src/vs/editor/test/common/services/languagesRegistry.test.ts @@ -42,7 +42,6 @@ suite('LanguagesRegistry', () => { registry._registerLanguages([{ id: 'modeId', extensions: [], - aliases: [], mimetypes: ['bla'], }]); @@ -173,6 +172,32 @@ suite('LanguagesRegistry', () => { assert.deepEqual(registry.getLanguageName('a'), 'A3'); }); + test('empty aliases array means no alias', () => { + let registry = new LanguagesRegistry(false); + + registry._registerLanguages([{ + id: 'a' + }]); + + assert.deepEqual(registry.getRegisteredLanguageNames(), ['a']); + assert.deepEqual(registry.getModeIdsFromLanguageName('a'), ['a']); + assert.deepEqual(registry.getModeIdForLanguageNameLowercase('a'), 'a'); + assert.deepEqual(registry.getLanguageName('a'), 'a'); + + registry._registerLanguages([{ + id: 'b', + aliases: [] + }]); + + assert.deepEqual(registry.getRegisteredLanguageNames(), ['a']); + assert.deepEqual(registry.getModeIdsFromLanguageName('a'), ['a']); + assert.deepEqual(registry.getModeIdsFromLanguageName('b'), []); + assert.deepEqual(registry.getModeIdForLanguageNameLowercase('a'), 'a'); + assert.deepEqual(registry.getModeIdForLanguageNameLowercase('b'), 'b'); + assert.deepEqual(registry.getLanguageName('a'), 'a'); + assert.deepEqual(registry.getLanguageName('b'), null); + }); + test('extensions', () => { let registry = new LanguagesRegistry(false);