@codingame/monaco-vscode-language-detection-worker-service-override 8.0.4 → 9.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +3 -3
- package/vscode/src/vs/workbench/contrib/languageDetection/browser/languageDetection.contribution.js +5 -5
- package/vscode/src/vs/workbench/services/languageDetection/browser/languageDetectionSimpleWorker.js +18 -15
- package/vscode/src/vs/workbench/services/languageDetection/browser/languageDetectionWorker.protocol.js +11 -0
- package/vscode/src/vs/workbench/services/languageDetection/browser/languageDetectionWorkerServiceImpl.js +32 -59
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@codingame/monaco-vscode-language-detection-worker-service-override",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "9.0.2",
|
|
4
4
|
"keywords": [],
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "CodinGame",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
}
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"vscode": "npm:@codingame/monaco-vscode-api@
|
|
33
|
-
"@vscode/vscode-languagedetection": "
|
|
32
|
+
"vscode": "npm:@codingame/monaco-vscode-api@9.0.2",
|
|
33
|
+
"@vscode/vscode-languagedetection": "1.0.21"
|
|
34
34
|
}
|
|
35
35
|
}
|
package/vscode/src/vs/workbench/contrib/languageDetection/browser/languageDetection.contribution.js
CHANGED
|
@@ -75,15 +75,15 @@ let LanguageDetectionStatusContribution = class LanguageDetectionStatusContribut
|
|
|
75
75
|
const existing = editorModel.getLanguageId();
|
|
76
76
|
if (lang && lang !== existing && skip[existing] !== lang) {
|
|
77
77
|
const detectedName = this._languageService.getLanguageName(lang) || lang;
|
|
78
|
-
let tooltip = ( localize(
|
|
78
|
+
let tooltip = ( localize(2146, "Accept Detected Language: {0}", detectedName));
|
|
79
79
|
const keybinding = this._keybindingService.lookupKeybinding(detectLanguageCommandId);
|
|
80
80
|
const label = keybinding?.getLabel();
|
|
81
81
|
if (label) {
|
|
82
82
|
tooltip += ` (${label})`;
|
|
83
83
|
}
|
|
84
84
|
const props = {
|
|
85
|
-
name: ( localize(
|
|
86
|
-
ariaLabel: ( localize(
|
|
85
|
+
name: ( localize(2147, "Language Detection")),
|
|
86
|
+
ariaLabel: ( localize(2148, "Change to Detected Language: {0}", lang)),
|
|
87
87
|
tooltip,
|
|
88
88
|
command: detectLanguageCommandId,
|
|
89
89
|
text: '$(lightbulb-autofix)',
|
|
@@ -115,7 +115,7 @@ registerAction2(class extends Action2 {
|
|
|
115
115
|
constructor() {
|
|
116
116
|
super({
|
|
117
117
|
id: detectLanguageCommandId,
|
|
118
|
-
title: ( localize2(
|
|
118
|
+
title: ( localize2(2149, "Detect Language from Content")),
|
|
119
119
|
f1: true,
|
|
120
120
|
precondition: ( (ContextKeyExpr.and(
|
|
121
121
|
(NOTEBOOK_EDITOR_EDITABLE.toNegated()),
|
|
@@ -136,7 +136,7 @@ registerAction2(class extends Action2 {
|
|
|
136
136
|
editor.getModel()?.setLanguage(lang, LanguageDetectionLanguageEventSource);
|
|
137
137
|
}
|
|
138
138
|
else {
|
|
139
|
-
notificationService.warn(( localize(
|
|
139
|
+
notificationService.warn(( localize(2150, "Unable to detect editor language")));
|
|
140
140
|
}
|
|
141
141
|
}
|
|
142
142
|
}
|
package/vscode/src/vs/workbench/services/languageDetection/browser/languageDetectionSimpleWorker.js
CHANGED
|
@@ -1,21 +1,24 @@
|
|
|
1
1
|
import { ModelOperations } from '@vscode/vscode-languagedetection';
|
|
2
2
|
import { StopWatch } from 'vscode/vscode/vs/base/common/stopwatch';
|
|
3
|
-
import {
|
|
3
|
+
import { LanguageDetectionWorkerHost } from './languageDetectionWorker.protocol.js';
|
|
4
|
+
import { WorkerTextModelSyncServer } from 'vscode/vscode/vs/editor/common/services/textModelSync/textModelSync.impl';
|
|
4
5
|
|
|
5
|
-
function create(
|
|
6
|
-
return ( new LanguageDetectionSimpleWorker(
|
|
6
|
+
function create(workerServer) {
|
|
7
|
+
return ( new LanguageDetectionSimpleWorker(workerServer));
|
|
7
8
|
}
|
|
8
|
-
class LanguageDetectionSimpleWorker
|
|
9
|
-
constructor() {
|
|
10
|
-
super(...arguments);
|
|
11
|
-
this._loadFailed = false;
|
|
12
|
-
this.modelIdToCoreId = ( new Map());
|
|
13
|
-
}
|
|
9
|
+
class LanguageDetectionSimpleWorker {
|
|
14
10
|
static { this.expectedRelativeConfidence = 0.2; }
|
|
15
11
|
static { this.positiveConfidenceCorrectionBucket1 = 0.05; }
|
|
16
12
|
static { this.positiveConfidenceCorrectionBucket2 = 0.025; }
|
|
17
13
|
static { this.negativeConfidenceCorrection = 0.5; }
|
|
18
|
-
|
|
14
|
+
constructor(workerServer) {
|
|
15
|
+
this._workerTextModelSyncServer = ( new WorkerTextModelSyncServer());
|
|
16
|
+
this._loadFailed = false;
|
|
17
|
+
this.modelIdToCoreId = ( new Map());
|
|
18
|
+
this._host = LanguageDetectionWorkerHost.getChannel(workerServer);
|
|
19
|
+
this._workerTextModelSyncServer.bindToServer(workerServer);
|
|
20
|
+
}
|
|
21
|
+
async $detectLanguage(uri, langBiases, preferHistory, supportedLangs) {
|
|
19
22
|
const languages = [];
|
|
20
23
|
const confidences = [];
|
|
21
24
|
const stopWatch = ( new StopWatch());
|
|
@@ -26,7 +29,7 @@ class LanguageDetectionSimpleWorker extends EditorSimpleWorker {
|
|
|
26
29
|
const neuralResolver = async () => {
|
|
27
30
|
for await (const language of this.detectLanguagesImpl(documentTextSample)) {
|
|
28
31
|
if (!( this.modelIdToCoreId.has(language.languageId))) {
|
|
29
|
-
this.modelIdToCoreId.set(language.languageId, await this._host
|
|
32
|
+
this.modelIdToCoreId.set(language.languageId, await this._host.$getLanguageId(language.languageId));
|
|
30
33
|
}
|
|
31
34
|
const coreId = this.modelIdToCoreId.get(language.languageId);
|
|
32
35
|
if (coreId && (!supportedLangs?.length || supportedLangs.includes(coreId))) {
|
|
@@ -36,7 +39,7 @@ class LanguageDetectionSimpleWorker extends EditorSimpleWorker {
|
|
|
36
39
|
}
|
|
37
40
|
stopWatch.stop();
|
|
38
41
|
if (languages.length) {
|
|
39
|
-
this._host
|
|
42
|
+
this._host.$sendTelemetryEvent(languages, confidences, stopWatch.elapsed());
|
|
40
43
|
return languages[0];
|
|
41
44
|
}
|
|
42
45
|
return undefined;
|
|
@@ -48,7 +51,7 @@ class LanguageDetectionSimpleWorker extends EditorSimpleWorker {
|
|
|
48
51
|
return undefined;
|
|
49
52
|
}
|
|
50
53
|
getTextForDetection(uri) {
|
|
51
|
-
const editorModel = this.
|
|
54
|
+
const editorModel = this._workerTextModelSyncServer.getModel(uri);
|
|
52
55
|
if (!editorModel) {
|
|
53
56
|
return;
|
|
54
57
|
}
|
|
@@ -67,7 +70,7 @@ class LanguageDetectionSimpleWorker extends EditorSimpleWorker {
|
|
|
67
70
|
}
|
|
68
71
|
this._modelOperations = ( new ModelOperations({
|
|
69
72
|
modelJsonLoaderFunc: async () => {
|
|
70
|
-
const response = await fetch(await this._host
|
|
73
|
+
const response = await fetch(await this._host.$getModelJsonUri());
|
|
71
74
|
try {
|
|
72
75
|
const modelJSON = await response.json();
|
|
73
76
|
return modelJSON;
|
|
@@ -78,7 +81,7 @@ class LanguageDetectionSimpleWorker extends EditorSimpleWorker {
|
|
|
78
81
|
}
|
|
79
82
|
},
|
|
80
83
|
weightsLoaderFunc: async () => {
|
|
81
|
-
const response = await fetch(await this._host
|
|
84
|
+
const response = await fetch(await this._host.$getWeightsUri());
|
|
82
85
|
const buffer = await response.arrayBuffer();
|
|
83
86
|
return buffer;
|
|
84
87
|
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
class LanguageDetectionWorkerHost {
|
|
2
|
+
static { this.CHANNEL_NAME = 'languageDetectionWorkerHost'; }
|
|
3
|
+
static getChannel(workerServer) {
|
|
4
|
+
return workerServer.getChannel(LanguageDetectionWorkerHost.CHANNEL_NAME);
|
|
5
|
+
}
|
|
6
|
+
static setChannel(workerClient, obj) {
|
|
7
|
+
workerClient.setChannel(LanguageDetectionWorkerHost.CHANNEL_NAME, obj);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export { LanguageDetectionWorkerHost };
|
|
@@ -2,18 +2,15 @@ import { __decorate, __param } from 'vscode/external/tslib/tslib.es6.js';
|
|
|
2
2
|
import { Disposable } from 'vscode/vscode/vs/base/common/lifecycle';
|
|
3
3
|
import { LanguageDetectionStatsId } from 'vscode/vscode/vs/workbench/services/languageDetection/common/languageDetectionWorkerService';
|
|
4
4
|
import 'vscode/vscode/vs/platform/instantiation/common/instantiation';
|
|
5
|
-
import { nodeModulesPath,
|
|
5
|
+
import { nodeModulesPath, FileAccess, Schemas } from 'vscode/vscode/vs/base/common/network';
|
|
6
6
|
import { IWorkbenchEnvironmentService } from 'vscode/vscode/vs/workbench/services/environment/common/environmentService.service';
|
|
7
7
|
import { IConfigurationService } from 'vscode/vscode/vs/platform/configuration/common/configuration.service';
|
|
8
8
|
import { ILanguageService } from 'vscode/vscode/vs/editor/common/languages/language';
|
|
9
9
|
import { URI } from 'vscode/vscode/vs/base/common/uri';
|
|
10
|
-
import
|
|
10
|
+
import 'vscode/vscode/vs/base/common/platform';
|
|
11
11
|
import 'vscode/vscode/vs/platform/instantiation/common/extensions';
|
|
12
12
|
import { IModelService } from 'vscode/vscode/vs/editor/common/services/model';
|
|
13
|
-
import { SimpleWorkerClient } from 'vscode/vscode/vs/base/common/worker/simpleWorker';
|
|
14
13
|
import { ITelemetryService } from 'vscode/vscode/vs/platform/telemetry/common/telemetry.service';
|
|
15
|
-
import { EditorWorkerClient, EditorWorkerHost } from 'vscode/vscode/vs/editor/browser/services/editorWorkerService';
|
|
16
|
-
import { ILanguageConfigurationService } from 'vscode/vscode/vs/editor/common/languages/languageConfigurationRegistry';
|
|
17
14
|
import { IDiagnosticsService } from 'vscode/vscode/vs/platform/diagnostics/common/diagnostics.service';
|
|
18
15
|
import { IWorkspaceContextService } from 'vscode/vscode/vs/platform/workspace/common/workspace.service';
|
|
19
16
|
import { IEditorService } from 'vscode/vscode/vs/workbench/services/editor/common/editorService.service';
|
|
@@ -21,13 +18,15 @@ import { StorageScope, StorageTarget } from 'vscode/vscode/vs/platform/storage/c
|
|
|
21
18
|
import { IStorageService } from 'vscode/vscode/vs/platform/storage/common/storage.service';
|
|
22
19
|
import { LRUCache } from 'vscode/vscode/vs/base/common/map';
|
|
23
20
|
import { ILogService } from 'vscode/vscode/vs/platform/log/common/log.service';
|
|
21
|
+
import 'vscode/vscode/vs/base/common/amd';
|
|
22
|
+
import { createWebWorker } from 'vscode/vscode/vs/base/browser/defaultWorkerFactory';
|
|
23
|
+
import { WorkerTextModelSyncClient } from 'vscode/vscode/vs/editor/common/services/textModelSync/textModelSync.impl';
|
|
24
|
+
import { LanguageDetectionWorkerHost } from './languageDetectionWorker.protocol.js';
|
|
24
25
|
|
|
25
26
|
var LanguageDetectionService_1;
|
|
26
27
|
const TOP_LANG_COUNTS = 12;
|
|
27
28
|
const regexpModuleLocation = `${nodeModulesPath}/vscode-regexp-languagedetection`;
|
|
28
|
-
const regexpModuleLocationAsar = `${nodeModulesAsarPath}/vscode-regexp-languagedetection`;
|
|
29
29
|
const moduleLocation = `${nodeModulesPath}/@vscode/vscode-languagedetection`;
|
|
30
|
-
const moduleLocationAsar = `${nodeModulesAsarPath}/@vscode/vscode-languagedetection`;
|
|
31
30
|
let LanguageDetectionService = class LanguageDetectionService extends Disposable {
|
|
32
31
|
static { LanguageDetectionService_1 = this; }
|
|
33
32
|
static { this.enablementSettingKey = 'workbench.editor.languageDetection'; }
|
|
@@ -35,7 +34,7 @@ let LanguageDetectionService = class LanguageDetectionService extends Disposable
|
|
|
35
34
|
static { this.preferHistoryConfig = 'workbench.editor.preferHistoryBasedLanguageDetection'; }
|
|
36
35
|
static { this.workspaceOpenedLanguagesStorageKey = 'workbench.editor.languageDetectionOpenedLanguages.workspace'; }
|
|
37
36
|
static { this.globalOpenedLanguagesStorageKey = 'workbench.editor.languageDetectionOpenedLanguages.global'; }
|
|
38
|
-
constructor(_environmentService, languageService, _configurationService, _diagnosticsService, _workspaceContextService, modelService, _editorService, telemetryService, storageService, _logService
|
|
37
|
+
constructor(_environmentService, languageService, _configurationService, _diagnosticsService, _workspaceContextService, modelService, _editorService, telemetryService, storageService, _logService) {
|
|
39
38
|
super();
|
|
40
39
|
this._environmentService = _environmentService;
|
|
41
40
|
this._configurationService = _configurationService;
|
|
@@ -54,19 +53,10 @@ let LanguageDetectionService = class LanguageDetectionService extends Disposable
|
|
|
54
53
|
modelService,
|
|
55
54
|
languageService,
|
|
56
55
|
telemetryService,
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
? ( ( FileAccess.asBrowserUri(`${moduleLocationAsar}/model/model.json`)).toString(true))
|
|
62
|
-
: ( ( FileAccess.asBrowserUri(`${moduleLocation}/model/model.json`)).toString(true)),
|
|
63
|
-
this._environmentService.isBuilt && !isWeb
|
|
64
|
-
? ( ( FileAccess.asBrowserUri(`${moduleLocationAsar}/model/group1-shard1of1.bin`)).toString(true))
|
|
65
|
-
: ( ( FileAccess.asBrowserUri(`${moduleLocation}/model/group1-shard1of1.bin`)).toString(true)),
|
|
66
|
-
this._environmentService.isBuilt && !isWeb
|
|
67
|
-
? ( ( FileAccess.asBrowserUri(`${regexpModuleLocationAsar}/dist/index.js`)).toString(true))
|
|
68
|
-
: ( ( FileAccess.asBrowserUri(`${regexpModuleLocation}/dist/index.js`)).toString(true)),
|
|
69
|
-
languageConfigurationService
|
|
56
|
+
( ( FileAccess.asBrowserUri(`${moduleLocation}/dist/lib/index.js`)).toString(true)),
|
|
57
|
+
( ( FileAccess.asBrowserUri(`${moduleLocation}/model/model.json`)).toString(true)),
|
|
58
|
+
( ( FileAccess.asBrowserUri(`${moduleLocation}/model/group1-shard1of1.bin`)).toString(true)),
|
|
59
|
+
( ( FileAccess.asBrowserUri(`${regexpModuleLocation}/dist/index.js`)).toString(true))
|
|
70
60
|
)));
|
|
71
61
|
this.initEditorOpenedListeners(storageService);
|
|
72
62
|
}
|
|
@@ -157,12 +147,12 @@ LanguageDetectionService = LanguageDetectionService_1 = ( __decorate([
|
|
|
157
147
|
( __param(6, IEditorService)),
|
|
158
148
|
( __param(7, ITelemetryService)),
|
|
159
149
|
( __param(8, IStorageService)),
|
|
160
|
-
( __param(9, ILogService))
|
|
161
|
-
( __param(10, ILanguageConfigurationService))
|
|
150
|
+
( __param(9, ILogService))
|
|
162
151
|
], LanguageDetectionService));
|
|
163
|
-
class LanguageDetectionWorkerClient extends
|
|
164
|
-
constructor(
|
|
165
|
-
super(
|
|
152
|
+
class LanguageDetectionWorkerClient extends Disposable {
|
|
153
|
+
constructor(_modelService, _languageService, _telemetryService, _indexJsUri, _modelJsonUri, _weightsUri, _regexpModelUri) {
|
|
154
|
+
super();
|
|
155
|
+
this._modelService = _modelService;
|
|
166
156
|
this._languageService = _languageService;
|
|
167
157
|
this._telemetryService = _telemetryService;
|
|
168
158
|
this._indexJsUri = _indexJsUri;
|
|
@@ -171,17 +161,20 @@ class LanguageDetectionWorkerClient extends EditorWorkerClient {
|
|
|
171
161
|
this._regexpModelUri = _regexpModelUri;
|
|
172
162
|
}
|
|
173
163
|
_getOrCreateLanguageDetectionWorker() {
|
|
174
|
-
if (this.
|
|
175
|
-
|
|
164
|
+
if (!this.worker) {
|
|
165
|
+
const workerClient = this._register(createWebWorker('vs/workbench/services/languageDetection/browser/languageDetectionSimpleWorker', 'LanguageDetectionWorker'));
|
|
166
|
+
LanguageDetectionWorkerHost.setChannel(workerClient, {
|
|
167
|
+
$getIndexJsUri: async () => this.getIndexJsUri(),
|
|
168
|
+
$getLanguageId: async (languageIdOrExt) => this.getLanguageId(languageIdOrExt),
|
|
169
|
+
$sendTelemetryEvent: async (languages, confidences, timeSpent) => this.sendTelemetryEvent(languages, confidences, timeSpent),
|
|
170
|
+
$getRegexpModelUri: async () => this.getRegexpModelUri(),
|
|
171
|
+
$getModelJsonUri: async () => this.getModelJsonUri(),
|
|
172
|
+
$getWeightsUri: async () => this.getWeightsUri(),
|
|
173
|
+
});
|
|
174
|
+
const workerTextModelSyncClient = WorkerTextModelSyncClient.create(workerClient, this._modelService);
|
|
175
|
+
this.worker = { workerClient, workerTextModelSyncClient };
|
|
176
176
|
}
|
|
177
|
-
this.
|
|
178
|
-
resolve(this._register(( new SimpleWorkerClient(
|
|
179
|
-
this._workerFactory,
|
|
180
|
-
'vs/workbench/services/languageDetection/browser/languageDetectionSimpleWorker',
|
|
181
|
-
( new EditorWorkerHost(this))
|
|
182
|
-
))));
|
|
183
|
-
}));
|
|
184
|
-
return this.workerPromise;
|
|
177
|
+
return this.worker;
|
|
185
178
|
}
|
|
186
179
|
_guessLanguageIdByUri(uri) {
|
|
187
180
|
const guess = this._languageService.guessLanguageIdByFilepathOrFirstLine(uri);
|
|
@@ -190,27 +183,6 @@ class LanguageDetectionWorkerClient extends EditorWorkerClient {
|
|
|
190
183
|
}
|
|
191
184
|
return undefined;
|
|
192
185
|
}
|
|
193
|
-
async _getProxy() {
|
|
194
|
-
return (await this._getOrCreateLanguageDetectionWorker()).getProxyObject();
|
|
195
|
-
}
|
|
196
|
-
async fhr(method, args) {
|
|
197
|
-
switch (method) {
|
|
198
|
-
case 'getIndexJsUri':
|
|
199
|
-
return this.getIndexJsUri();
|
|
200
|
-
case 'getModelJsonUri':
|
|
201
|
-
return this.getModelJsonUri();
|
|
202
|
-
case 'getWeightsUri':
|
|
203
|
-
return this.getWeightsUri();
|
|
204
|
-
case 'getRegexpModelUri':
|
|
205
|
-
return this.getRegexpModelUri();
|
|
206
|
-
case 'getLanguageId':
|
|
207
|
-
return this.getLanguageId(args[0]);
|
|
208
|
-
case 'sendTelemetryEvent':
|
|
209
|
-
return this.sendTelemetryEvent(args[0], args[1], args[2]);
|
|
210
|
-
default:
|
|
211
|
-
return super.fhr(method, args);
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
186
|
async getIndexJsUri() {
|
|
215
187
|
return this._indexJsUri;
|
|
216
188
|
}
|
|
@@ -249,8 +221,9 @@ class LanguageDetectionWorkerClient extends EditorWorkerClient {
|
|
|
249
221
|
if (quickGuess) {
|
|
250
222
|
return quickGuess;
|
|
251
223
|
}
|
|
252
|
-
|
|
253
|
-
|
|
224
|
+
const { workerClient, workerTextModelSyncClient } = this._getOrCreateLanguageDetectionWorker();
|
|
225
|
+
await workerTextModelSyncClient.ensureSyncedResources([resource]);
|
|
226
|
+
const modelId = await workerClient.proxy.$detectLanguage(( resource.toString()), langBiases, preferHistory, supportedLangs);
|
|
254
227
|
const languageId = this.getLanguageId(modelId);
|
|
255
228
|
const LanguageDetectionStatsId = 'automaticlanguagedetection.perf';
|
|
256
229
|
this._telemetryService.publicLog2(LanguageDetectionStatsId, {
|