Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | 1x 6x 6x 1x 5x 5x 5x 1x 4x 4x 4x 4x 4x 3x 4x 4x 4x 4x 1x 3x 3x 4x 4x 4x 4x 1x 1x 1x 1x 3x 1x 1x 1x 1x 1x 1x 4x | import * as vscode from 'vscode';
import { container } from 'tsyringe';
import { ServiceToken } from '@src/services/tokens';
import { ISettingsService } from '@src/services/core';
import { IDocumentContextService } from '@src/services/document';
interface LanguageQuckPickItem extends vscode.QuickPickItem {
/**
* The language code.
*/
language: string | undefined;
}
export const selectActiveLanguage = {
id: 'mentor.command.selectActiveLanguage',
handler: async () => {
const document = vscode.window.activeTextEditor?.document;
if (!document) {
return;
}
const contextService = container.resolve<IDocumentContextService>(ServiceToken.DocumentContextService);
const context = contextService.contexts[document.uri.toString()];
if (!context) {
return;
}
const quickPick = vscode.window.createQuickPick<LanguageQuckPickItem>();
quickPick.title = 'Select active document language';
const noLanguageKey = '__unspecified__';
const languageStats = new Map<string, number>();
for (const predicateStats of Object.values(context.predicateStats)) {
for (const [languageTag, count] of Object.entries(predicateStats.languageTags)) {
const key = languageTag && languageTag !== 'undefined' ? languageTag : noLanguageKey;
languageStats.set(key, (languageStats.get(key) ?? 0) + count);
}
}
const languageEntries = Array.from(languageStats.entries());
if (languageEntries.length === 0) {
quickPick.items = [{
label: 'No language tagged literals found.',
language: undefined
}];
} else {
// Note: We translate the language code into a readable name in the UI language of the editor.
const languageNames = new Intl.DisplayNames([vscode.env.language], { type: 'language' });
quickPick.items = languageEntries.map(([l, count]) => {
const language = l === noLanguageKey ? undefined : l;
const values = count === 1 ? 'value' : 'values';
const displayName = language ? (languageNames.of(language) ?? language) : 'undefined';
return {
language,
label: language ? `${language} - ${displayName}` : displayName,
description: `${count} ${values}`,
};
}).sort((a, b) => {
Iif (!a.language && b.language) {
return -1;
}
Iif (a.language && !b.language) {
return 1;
}
Iif (!a.language && !b.language) {
return 0;
}
return a.language!.localeCompare(b.language!);
});
quickPick.onDidChangeSelection((selection) => {
Eif (selection.length > 0) {
const language = selection[0].language;
context.activeLanguageTag = language;
// Refresh the tree views..
const settings = container.resolve<ISettingsService>(ServiceToken.SettingsService);
settings.set('view.activeLanguage', language);
quickPick.dispose();
}
});
}
quickPick.show();
}
}; |