diff --git a/extensions/vscode-api-tests/src/singlefolder-tests/untitled.languagedetection.test.ts b/extensions/vscode-api-tests/src/singlefolder-tests/untitled.languagedetection.test.ts index 9c1e4b3cd29..e27689c8b24 100644 --- a/extensions/vscode-api-tests/src/singlefolder-tests/untitled.languagedetection.test.ts +++ b/extensions/vscode-api-tests/src/singlefolder-tests/untitled.languagedetection.test.ts @@ -20,7 +20,7 @@ suite('vscode - untitled automatic language detection', () => { assert.strictEqual(editor.document.languageId, 'plaintext'); - const settingResult = vscode.workspace.getConfiguration().get('workbench.editor.untitled.experimentalLanguageDetection'); + const settingResult = vscode.workspace.getConfiguration().get('workbench.editor.untitled.languageDetection'); assert.ok(settingResult); const result = await editor.edit(editBuilder => { diff --git a/extensions/vscode-api-tests/testWorkspace/.vscode/settings.json b/extensions/vscode-api-tests/testWorkspace/.vscode/settings.json index a62f521614a..2ad11d49651 100644 --- a/extensions/vscode-api-tests/testWorkspace/.vscode/settings.json +++ b/extensions/vscode-api-tests/testWorkspace/.vscode/settings.json @@ -6,5 +6,5 @@ "**/files-exclude/**": true }, "editor.minimap.enabled": false, // see https://github.com/microsoft/vscode/issues/115747 - "workbench.editor.untitled.experimentalLanguageDetection": true + "workbench.editor.untitled.languageDetection": true } diff --git a/src/vs/workbench/browser/workbench.contribution.ts b/src/vs/workbench/browser/workbench.contribution.ts index c25981ef61e..6c1466a12da 100644 --- a/src/vs/workbench/browser/workbench.contribution.ts +++ b/src/vs/workbench/browser/workbench.contribution.ts @@ -93,7 +93,7 @@ const registry = Registry.as(ConfigurationExtensions.Con 'default': 'text', 'markdownDescription': localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'untitledHint' }, "Controls if the untitled hint should be inline text in the editor or a floating button or hidden.") }, - 'workbench.editor.untitled.experimentalLanguageDetection': { + 'workbench.editor.untitled.languageDetection': { type: 'boolean', default: true, description: localize('workbench.editor.untitled.languageDetection', "Experimental. Controls whether the language in an untitled text editor is automatically detected unless the language has been explicitly set by the language picker. This can also be scoped by language so you can control which languages you want to trigger language detection on."), diff --git a/src/vs/workbench/services/languageDetection/browser/languageDetectionWorkerServiceImpl.ts b/src/vs/workbench/services/languageDetection/browser/languageDetectionWorkerServiceImpl.ts index 57caa4911b1..9c61e9e7a29 100644 --- a/src/vs/workbench/services/languageDetection/browser/languageDetectionWorkerServiceImpl.ts +++ b/src/vs/workbench/services/languageDetection/browser/languageDetectionWorkerServiceImpl.ts @@ -21,7 +21,7 @@ import { EditorWorkerClient, EditorWorkerHost } from 'vs/editor/common/services/ const moduleLocation = '../../../../../../node_modules/@vscode/vscode-languagedetection'; const moduleLocationAsar = '../../../../../../node_modules.asar/@vscode/vscode-languagedetection'; export class LanguageDetectionService extends Disposable implements ILanguageDetectionService { - static readonly enablementSettingKey = 'workbench.editor.untitled.experimentalLanguageDetection'; + static readonly enablementSettingKey = 'workbench.editor.untitled.languageDetection'; _serviceBrand: undefined; @@ -124,7 +124,7 @@ export class LanguageDetectionWorkerHost { } export class LanguageDetectionWorkerClient extends EditorWorkerClient { - private worker: IWorkerClient | undefined; + private workerPromise: Promise> | undefined; constructor( modelService: IModelService, @@ -136,20 +136,24 @@ export class LanguageDetectionWorkerClient extends EditorWorkerClient { super(modelService, true, 'languageDetectionWorkerService'); } - private _getOrCreateLanguageDetectionWorker(): IWorkerClient { - if (!this.worker) { + private _getOrCreateLanguageDetectionWorker(): Promise> { + if (this.workerPromise) { + return this.workerPromise; + } - this.worker = this._register(new SimpleWorkerClient( + this.workerPromise = new Promise((resolve, reject) => { + resolve(this._register(new SimpleWorkerClient( this._workerFactory, 'vs/workbench/services/languageDetection/browser/languageDetectionSimpleWorker', new EditorWorkerHost(this) - )); - } - return this.worker; + ))); + }); + + return this.workerPromise; } override async _getProxy(): Promise { - return await this._getOrCreateLanguageDetectionWorker().getProxyObject(); + return (await this._getOrCreateLanguageDetectionWorker()).getProxyObject(); } // foreign host request