exclude languages from language picker normal section if they are a detected language

上级 475eacd1
...@@ -1158,11 +1158,6 @@ export class ChangeModeAction extends Action { ...@@ -1158,11 +1158,6 @@ export class ChangeModeAction extends Action {
const textModel = activeTextEditorControl.getModel(); const textModel = activeTextEditorControl.getModel();
const resource = EditorResourceAccessor.getOriginalUri(this.editorService.activeEditor, { supportSideBySide: SideBySideEditor.PRIMARY }); const resource = EditorResourceAccessor.getOriginalUri(this.editorService.activeEditor, { supportSideBySide: SideBySideEditor.PRIMARY });
let hasLanguageSupport = !!resource;
if (resource?.scheme === Schemas.untitled && !this.textFileService.untitled.get(resource)?.hasAssociatedFilePath) {
hasLanguageSupport = false; // no configuration for untitled resources (e.g. "Untitled-1")
}
// Compute mode // Compute mode
let currentLanguageId: string | undefined; let currentLanguageId: string | undefined;
let currentModeId: string | undefined; let currentModeId: string | undefined;
...@@ -1171,25 +1166,38 @@ export class ChangeModeAction extends Action { ...@@ -1171,25 +1166,38 @@ export class ChangeModeAction extends Action {
currentLanguageId = withNullAsUndefined(this.modeService.getLanguageName(currentModeId)); currentLanguageId = withNullAsUndefined(this.modeService.getLanguageName(currentModeId));
} }
let hasLanguageSupport = !!resource;
let detectedLanguages: string[] = [];
if (resource?.scheme === Schemas.untitled && !this.textFileService.untitled.get(resource)?.hasAssociatedFilePath) {
hasLanguageSupport = false; // no configuration for untitled resources (e.g. "Untitled-1")
// Detect languages since we are in an untitled file
detectedLanguages = await this.languageDetectionService.detectLanguages(resource);
}
// All languages are valid picks // All languages are valid picks
const languages = this.modeService.getRegisteredLanguageNames(); const languages = this.modeService.getRegisteredLanguageNames();
const picks: QuickPickInput[] = languages.sort().map(lang => { const picks: QuickPickInput[] = languages.sort()
const modeId = this.modeService.getModeIdForLanguageName(lang.toLowerCase()) || 'unknown'; .filter(lang => {
const extensions = this.modeService.getExtensions(lang).join(' '); const modeId = this.modeService.getModeIdForLanguageName(lang.toLowerCase()) || 'unknown';
let description: string; return (detectedLanguages.indexOf(modeId) === -1);
if (currentLanguageId === lang) { }).map(lang => {
description = localize('languageDescription', "({0}) - Configured Language", modeId); const modeId = this.modeService.getModeIdForLanguageName(lang.toLowerCase()) || 'unknown';
} else { const extensions = this.modeService.getExtensions(lang).join(' ');
description = localize('languageDescriptionConfigured', "({0})", modeId); let description: string;
} if (currentLanguageId === lang) {
description = localize('languageDescription', "({0}) - Configured Language", modeId);
} else {
description = localize('languageDescriptionConfigured', "({0})", modeId);
}
return { return {
label: lang, label: lang,
meta: extensions, meta: extensions,
iconClasses: getIconClassesForModeId(modeId), iconClasses: getIconClassesForModeId(modeId),
description description
}; };
}); });
picks.unshift({ type: 'separator', label: localize('languagesPicks', "languages (identifier)") }); picks.unshift({ type: 'separator', label: localize('languagesPicks', "languages (identifier)") });
...@@ -1218,28 +1226,25 @@ export class ChangeModeAction extends Action { ...@@ -1218,28 +1226,25 @@ export class ChangeModeAction extends Action {
if (hasLanguageSupport) { if (hasLanguageSupport) {
picks.unshift(autoDetectMode); picks.unshift(autoDetectMode);
} else if (resource) { } else if (detectedLanguages) {
// Handle language detection // Add untitled detected languages
const detectedLanguages = await this.languageDetectionService.detectLanguages(resource); for (const modeId of detectedLanguages.reverse()) {
if (detectedLanguages) { const lang = this.modeService.getLanguageName(modeId) || 'unknown';
for (const modeId of detectedLanguages.reverse()) { let description: string;
const lang = this.modeService.getLanguageName(modeId) || 'unknown'; if (currentLanguageId === lang) {
let description: string; description = localize('languageDescriptionCurrent', "({0}) - Current Language", modeId);
if (currentLanguageId === lang) { } else {
description = localize('languageDescriptionCurrent', "({0}) - Current Language", modeId); description = localize('languageDescriptionConfigured', "({0})", modeId);
} else {
description = localize('languageDescriptionConfigured', "({0})", modeId);
}
picks.unshift({
label: lang,
iconClasses: getIconClassesForModeId(modeId),
description
});
} }
picks.unshift({ type: 'separator', label: localize('detectedLanguagesPicks', "detected languages (identifier)") }); picks.unshift({
label: lang,
iconClasses: getIconClassesForModeId(modeId),
description
});
} }
picks.unshift({ type: 'separator', label: localize('detectedLanguagesPicks', "detected languages (identifier)") });
} }
const pick = await this.quickInputService.pick(picks, { placeHolder: localize('pickLanguage', "Select Language Mode"), matchOnDescription: true }); const pick = await this.quickInputService.pick(picks, { placeHolder: localize('pickLanguage', "Select Language Mode"), matchOnDescription: true });
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册