Skip to content

Commit e664ba6

Browse files
committed
Fixes microsoft#18262: interpret languages with empty aliases array as languages that don't want to show up in the picker
1 parent 32d16d3 commit e664ba6

3 files changed

Lines changed: 43 additions & 7 deletions

File tree

extensions/javascript/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
},
5252
{
5353
"id": "jsx-tags",
54+
"aliases": [],
5455
"configuration": "./tags-language-configuration.json"
5556
}
5657
],

src/vs/editor/common/services/languagesRegistry.ts

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -164,20 +164,30 @@ export class LanguagesRegistry {
164164

165165
resolvedLanguage.aliases.push(langId);
166166

167+
let langAliases: string[] = null;
167168
if (typeof lang.aliases !== 'undefined' && Array.isArray(lang.aliases)) {
168-
for (let i = 0; i < lang.aliases.length; i++) {
169-
if (!lang.aliases[i] || lang.aliases[i].length === 0) {
169+
if (lang.aliases.length === 0) {
170+
// signal that this language should not get a name
171+
langAliases = [null];
172+
} else {
173+
langAliases = lang.aliases;
174+
}
175+
}
176+
177+
if (langAliases !== null) {
178+
for (let i = 0; i < langAliases.length; i++) {
179+
if (!langAliases[i] || langAliases[i].length === 0) {
170180
continue;
171181
}
172-
resolvedLanguage.aliases.push(lang.aliases[i]);
182+
resolvedLanguage.aliases.push(langAliases[i]);
173183
}
174184
}
175185

176-
let containsAliases = (typeof lang.aliases !== 'undefined' && Array.isArray(lang.aliases) && lang.aliases.length > 0);
177-
if (containsAliases && lang.aliases[0] === null) {
186+
let containsAliases = (langAliases !== null && langAliases.length > 0);
187+
if (containsAliases && langAliases[0] === null) {
178188
// signal that this language should not get a name
179189
} else {
180-
let bestName = (containsAliases ? lang.aliases[0] : null) || langId;
190+
let bestName = (containsAliases ? langAliases[0] : null) || langId;
181191
if (containsAliases || !resolvedLanguage.name) {
182192
resolvedLanguage.name = bestName;
183193
}

src/vs/editor/test/common/services/languagesRegistry.test.ts

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ suite('LanguagesRegistry', () => {
4242
registry._registerLanguages([{
4343
id: 'modeId',
4444
extensions: [],
45-
aliases: [],
4645
mimetypes: ['bla'],
4746
}]);
4847

@@ -173,6 +172,32 @@ suite('LanguagesRegistry', () => {
173172
assert.deepEqual(registry.getLanguageName('a'), 'A3');
174173
});
175174

175+
test('empty aliases array means no alias', () => {
176+
let registry = new LanguagesRegistry(false);
177+
178+
registry._registerLanguages([{
179+
id: 'a'
180+
}]);
181+
182+
assert.deepEqual(registry.getRegisteredLanguageNames(), ['a']);
183+
assert.deepEqual(registry.getModeIdsFromLanguageName('a'), ['a']);
184+
assert.deepEqual(registry.getModeIdForLanguageNameLowercase('a'), 'a');
185+
assert.deepEqual(registry.getLanguageName('a'), 'a');
186+
187+
registry._registerLanguages([{
188+
id: 'b',
189+
aliases: []
190+
}]);
191+
192+
assert.deepEqual(registry.getRegisteredLanguageNames(), ['a']);
193+
assert.deepEqual(registry.getModeIdsFromLanguageName('a'), ['a']);
194+
assert.deepEqual(registry.getModeIdsFromLanguageName('b'), []);
195+
assert.deepEqual(registry.getModeIdForLanguageNameLowercase('a'), 'a');
196+
assert.deepEqual(registry.getModeIdForLanguageNameLowercase('b'), 'b');
197+
assert.deepEqual(registry.getLanguageName('a'), 'a');
198+
assert.deepEqual(registry.getLanguageName('b'), null);
199+
});
200+
176201
test('extensions', () => {
177202
let registry = new LanguagesRegistry(false);
178203

0 commit comments

Comments
 (0)