@codingame/monaco-vscode-language-detection-worker-service-override 25.1.2 → 26.0.0
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 +2 -2
- package/vscode/src/vs/workbench/contrib/languageDetection/browser/languageDetection.contribution.js +48 -36
- package/vscode/src/vs/workbench/services/languageDetection/browser/languageDetectionWebWorker.js +42 -40
- package/vscode/src/vs/workbench/services/languageDetection/browser/languageDetectionWorkerServiceImpl.js +95 -47
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": "26.0.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "VSCode public API plugged on the monaco editor - language-detection-worker service-override",
|
|
6
6
|
"keywords": [],
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
},
|
|
16
16
|
"type": "module",
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@codingame/monaco-vscode-api": "
|
|
18
|
+
"@codingame/monaco-vscode-api": "26.0.0",
|
|
19
19
|
"@vscode/vscode-languagedetection": "npm:@codingame/vscode-languagedetection@1.0.23"
|
|
20
20
|
},
|
|
21
21
|
"main": "index.js",
|
package/vscode/src/vs/workbench/contrib/languageDetection/browser/languageDetection.contribution.js
CHANGED
|
@@ -25,11 +25,22 @@ import { Schemas } from '@codingame/monaco-vscode-api/vscode/vs/base/common/netw
|
|
|
25
25
|
import { IConfigurationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/configuration/common/configuration.service';
|
|
26
26
|
|
|
27
27
|
var LanguageDetectionStatusContribution_1;
|
|
28
|
-
const detectLanguageCommandId =
|
|
28
|
+
const detectLanguageCommandId = "editor.detectLanguage";
|
|
29
29
|
let LanguageDetectionStatusContribution = class LanguageDetectionStatusContribution {
|
|
30
|
-
static {
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
static {
|
|
31
|
+
LanguageDetectionStatusContribution_1 = this;
|
|
32
|
+
}
|
|
33
|
+
static {
|
|
34
|
+
this._id = "status.languageDetectionStatus";
|
|
35
|
+
}
|
|
36
|
+
constructor(
|
|
37
|
+
_languageDetectionService,
|
|
38
|
+
_statusBarService,
|
|
39
|
+
_configurationService,
|
|
40
|
+
_editorService,
|
|
41
|
+
_languageService,
|
|
42
|
+
_keybindingService
|
|
43
|
+
) {
|
|
33
44
|
this._languageDetectionService = _languageDetectionService;
|
|
34
45
|
this._statusBarService = _statusBarService;
|
|
35
46
|
this._configurationService = _configurationService;
|
|
@@ -63,63 +74,65 @@ let LanguageDetectionStatusContribution = class LanguageDetectionStatusContribut
|
|
|
63
74
|
const editorModel = editor?.getModel();
|
|
64
75
|
const editorUri = editorModel?.uri;
|
|
65
76
|
const existingId = editorModel?.getLanguageId();
|
|
66
|
-
const enablementConfig = this._configurationService.getValue(
|
|
67
|
-
const enabled = typeof enablementConfig ===
|
|
77
|
+
const enablementConfig = this._configurationService.getValue("workbench.editor.languageDetectionHints");
|
|
78
|
+
const enabled = typeof enablementConfig === "object" && enablementConfig?.untitledEditors;
|
|
68
79
|
const disableLightbulb = !enabled || editorUri?.scheme !== Schemas.untitled || !existingId;
|
|
69
80
|
if (disableLightbulb || !editorUri) {
|
|
70
81
|
this._combinedEntry?.dispose();
|
|
71
82
|
this._combinedEntry = undefined;
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
83
|
+
} else {
|
|
74
84
|
const lang = await this._languageDetectionService.detectLanguage(editorUri);
|
|
75
|
-
const skip = {
|
|
85
|
+
const skip = {
|
|
86
|
+
"jsonc": "json"
|
|
87
|
+
};
|
|
76
88
|
const existing = editorModel.getLanguageId();
|
|
77
89
|
if (lang && lang !== existing && skip[existing] !== lang) {
|
|
78
90
|
const detectedName = this._languageService.getLanguageName(lang) || lang;
|
|
79
|
-
|
|
80
|
-
const keybinding = this._keybindingService.lookupKeybinding(detectLanguageCommandId);
|
|
81
|
-
const label = keybinding?.getLabel();
|
|
82
|
-
if (label) {
|
|
83
|
-
tooltip += ` (${label})`;
|
|
84
|
-
}
|
|
91
|
+
const tooltip = this._keybindingService.appendKeybinding(( localize(8810, "Accept Detected Language: {0}", detectedName)), detectLanguageCommandId);
|
|
85
92
|
const props = {
|
|
86
|
-
name: ( localize(
|
|
87
|
-
ariaLabel: ( localize(
|
|
93
|
+
name: ( localize(8811, "Language Detection")),
|
|
94
|
+
ariaLabel: ( localize(8812, "Change to Detected Language: {0}", lang)),
|
|
88
95
|
tooltip,
|
|
89
96
|
command: detectLanguageCommandId,
|
|
90
|
-
text:
|
|
97
|
+
text: "$(lightbulb-autofix)"
|
|
91
98
|
};
|
|
92
99
|
if (!this._combinedEntry) {
|
|
93
|
-
this._combinedEntry = this._statusBarService.addEntry(
|
|
94
|
-
|
|
95
|
-
|
|
100
|
+
this._combinedEntry = this._statusBarService.addEntry(
|
|
101
|
+
props,
|
|
102
|
+
LanguageDetectionStatusContribution_1._id,
|
|
103
|
+
StatusbarAlignment.RIGHT,
|
|
104
|
+
{
|
|
105
|
+
location: {
|
|
106
|
+
id: "status.editor.mode",
|
|
107
|
+
priority: 100.1
|
|
108
|
+
},
|
|
109
|
+
alignment: StatusbarAlignment.RIGHT,
|
|
110
|
+
compact: true
|
|
111
|
+
}
|
|
112
|
+
);
|
|
113
|
+
} else {
|
|
96
114
|
this._combinedEntry.update(props);
|
|
97
115
|
}
|
|
98
|
-
}
|
|
99
|
-
else {
|
|
116
|
+
} else {
|
|
100
117
|
this._combinedEntry?.dispose();
|
|
101
118
|
this._combinedEntry = undefined;
|
|
102
119
|
}
|
|
103
120
|
}
|
|
104
121
|
}
|
|
105
122
|
};
|
|
106
|
-
LanguageDetectionStatusContribution = LanguageDetectionStatusContribution_1 = ( __decorate([
|
|
107
|
-
( __param(0, ILanguageDetectionService)),
|
|
108
|
-
( __param(1, IStatusbarService)),
|
|
109
|
-
( __param(2, IConfigurationService)),
|
|
110
|
-
( __param(3, IEditorService)),
|
|
111
|
-
( __param(4, ILanguageService)),
|
|
112
|
-
( __param(5, IKeybindingService))
|
|
113
|
-
], LanguageDetectionStatusContribution));
|
|
123
|
+
LanguageDetectionStatusContribution = LanguageDetectionStatusContribution_1 = ( __decorate([( __param(0, ILanguageDetectionService)), ( __param(1, IStatusbarService)), ( __param(2, IConfigurationService)), ( __param(3, IEditorService)), ( __param(4, ILanguageService)), ( __param(5, IKeybindingService))], LanguageDetectionStatusContribution));
|
|
114
124
|
( Registry.as(Extensions.Workbench)).registerWorkbenchContribution(LanguageDetectionStatusContribution, LifecyclePhase.Restored);
|
|
115
125
|
registerAction2(class extends Action2 {
|
|
116
126
|
constructor() {
|
|
117
127
|
super({
|
|
118
128
|
id: detectLanguageCommandId,
|
|
119
|
-
title: ( localize2(
|
|
129
|
+
title: ( localize2(8813, "Detect Language from Content")),
|
|
120
130
|
f1: true,
|
|
121
131
|
precondition: ( ContextKeyExpr.and(( NOTEBOOK_EDITOR_EDITABLE.toNegated()), EditorContextKeys.editorTextFocus)),
|
|
122
|
-
keybinding: {
|
|
132
|
+
keybinding: {
|
|
133
|
+
primary: KeyCode.KeyD | KeyMod.Alt | KeyMod.Shift,
|
|
134
|
+
weight: KeybindingWeight.WorkbenchContrib
|
|
135
|
+
}
|
|
123
136
|
});
|
|
124
137
|
}
|
|
125
138
|
async run(accessor) {
|
|
@@ -132,9 +145,8 @@ registerAction2(class extends Action2 {
|
|
|
132
145
|
const lang = await languageDetectionService.detectLanguage(editorUri);
|
|
133
146
|
if (lang) {
|
|
134
147
|
editor.getModel()?.setLanguage(lang, LanguageDetectionLanguageEventSource);
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
notificationService.warn(( localize(8507, "Unable to detect editor language")));
|
|
148
|
+
} else {
|
|
149
|
+
notificationService.warn(( localize(8814, "Unable to detect editor language")));
|
|
138
150
|
}
|
|
139
151
|
}
|
|
140
152
|
}
|
package/vscode/src/vs/workbench/services/languageDetection/browser/languageDetectionWebWorker.js
CHANGED
|
@@ -8,10 +8,18 @@ function create(workerServer) {
|
|
|
8
8
|
return ( new LanguageDetectionWorker(workerServer));
|
|
9
9
|
}
|
|
10
10
|
class LanguageDetectionWorker {
|
|
11
|
-
static {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
static {
|
|
11
|
+
static {
|
|
12
|
+
this.expectedRelativeConfidence = 0.2;
|
|
13
|
+
}
|
|
14
|
+
static {
|
|
15
|
+
this.positiveConfidenceCorrectionBucket1 = 0.05;
|
|
16
|
+
}
|
|
17
|
+
static {
|
|
18
|
+
this.positiveConfidenceCorrectionBucket2 = 0.025;
|
|
19
|
+
}
|
|
20
|
+
static {
|
|
21
|
+
this.negativeConfidenceCorrection = 0.5;
|
|
22
|
+
}
|
|
15
23
|
constructor(workerServer) {
|
|
16
24
|
this._requestHandlerBrand = undefined;
|
|
17
25
|
this._workerTextModelSyncServer = ( new WorkerTextModelSyncServer());
|
|
@@ -76,8 +84,7 @@ class LanguageDetectionWorker {
|
|
|
76
84
|
try {
|
|
77
85
|
const modelJSON = await response.json();
|
|
78
86
|
return modelJSON;
|
|
79
|
-
}
|
|
80
|
-
catch (e) {
|
|
87
|
+
} catch (e) {
|
|
81
88
|
const message = `Failed to parse model JSON.`;
|
|
82
89
|
throw ( new Error(message));
|
|
83
90
|
}
|
|
@@ -92,31 +99,31 @@ class LanguageDetectionWorker {
|
|
|
92
99
|
}
|
|
93
100
|
adjustLanguageConfidence(modelResult) {
|
|
94
101
|
switch (modelResult.languageId) {
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
102
|
+
case "js":
|
|
103
|
+
case "html":
|
|
104
|
+
case "json":
|
|
105
|
+
case "ts":
|
|
106
|
+
case "css":
|
|
107
|
+
case "py":
|
|
108
|
+
case "xml":
|
|
109
|
+
case "php":
|
|
110
|
+
modelResult.confidence += LanguageDetectionWorker.positiveConfidenceCorrectionBucket1;
|
|
111
|
+
break;
|
|
112
|
+
case "cpp":
|
|
113
|
+
case "sh":
|
|
114
|
+
case "java":
|
|
115
|
+
case "cs":
|
|
116
|
+
case "c":
|
|
117
|
+
modelResult.confidence += LanguageDetectionWorker.positiveConfidenceCorrectionBucket2;
|
|
118
|
+
break;
|
|
119
|
+
case "bat":
|
|
120
|
+
case "ini":
|
|
121
|
+
case "makefile":
|
|
122
|
+
case "sql":
|
|
123
|
+
case "csv":
|
|
124
|
+
case "toml":
|
|
125
|
+
modelResult.confidence -= LanguageDetectionWorker.negativeConfidenceCorrection;
|
|
126
|
+
break;
|
|
120
127
|
}
|
|
121
128
|
return modelResult;
|
|
122
129
|
}
|
|
@@ -127,8 +134,7 @@ class LanguageDetectionWorker {
|
|
|
127
134
|
let modelOperations;
|
|
128
135
|
try {
|
|
129
136
|
modelOperations = await this.getModelOperations();
|
|
130
|
-
}
|
|
131
|
-
catch (e) {
|
|
137
|
+
} catch (e) {
|
|
132
138
|
console.log(e);
|
|
133
139
|
this._loadFailed = true;
|
|
134
140
|
return;
|
|
@@ -136,13 +142,10 @@ class LanguageDetectionWorker {
|
|
|
136
142
|
let modelResults;
|
|
137
143
|
try {
|
|
138
144
|
modelResults = await modelOperations.runModel(content);
|
|
139
|
-
}
|
|
140
|
-
catch (e) {
|
|
145
|
+
} catch (e) {
|
|
141
146
|
console.warn(e);
|
|
142
147
|
}
|
|
143
|
-
if (!modelResults
|
|
144
|
-
|| modelResults.length === 0
|
|
145
|
-
|| modelResults[0].confidence < LanguageDetectionWorker.expectedRelativeConfidence) {
|
|
148
|
+
if (!modelResults || modelResults.length === 0 || modelResults[0].confidence < LanguageDetectionWorker.expectedRelativeConfidence) {
|
|
146
149
|
return;
|
|
147
150
|
}
|
|
148
151
|
const firstModelResult = this.adjustLanguageConfidence(modelResults[0]);
|
|
@@ -165,8 +168,7 @@ class LanguageDetectionWorker {
|
|
|
165
168
|
continue;
|
|
166
169
|
}
|
|
167
170
|
return;
|
|
168
|
-
}
|
|
169
|
-
else {
|
|
171
|
+
} else {
|
|
170
172
|
if (current.confidence > LanguageDetectionWorker.expectedRelativeConfidence) {
|
|
171
173
|
possibleLanguages.push(current);
|
|
172
174
|
continue;
|
|
@@ -29,13 +29,37 @@ const TOP_LANG_COUNTS = 12;
|
|
|
29
29
|
const regexpModuleLocation = `${nodeModulesPath}/vscode-regexp-languagedetection`;
|
|
30
30
|
const moduleLocation = `${nodeModulesPath}/@vscode/vscode-languagedetection`;
|
|
31
31
|
let LanguageDetectionService = class LanguageDetectionService extends Disposable {
|
|
32
|
-
static {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
static {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
32
|
+
static {
|
|
33
|
+
LanguageDetectionService_1 = this;
|
|
34
|
+
}
|
|
35
|
+
static {
|
|
36
|
+
this.enablementSettingKey = "workbench.editor.languageDetection";
|
|
37
|
+
}
|
|
38
|
+
static {
|
|
39
|
+
this.historyBasedEnablementConfig = "workbench.editor.historyBasedLanguageDetection";
|
|
40
|
+
}
|
|
41
|
+
static {
|
|
42
|
+
this.preferHistoryConfig = "workbench.editor.preferHistoryBasedLanguageDetection";
|
|
43
|
+
}
|
|
44
|
+
static {
|
|
45
|
+
this.workspaceOpenedLanguagesStorageKey = "workbench.editor.languageDetectionOpenedLanguages.workspace";
|
|
46
|
+
}
|
|
47
|
+
static {
|
|
48
|
+
this.globalOpenedLanguagesStorageKey = "workbench.editor.languageDetectionOpenedLanguages.global";
|
|
49
|
+
}
|
|
50
|
+
constructor(
|
|
51
|
+
_environmentService,
|
|
52
|
+
languageService,
|
|
53
|
+
_configurationService,
|
|
54
|
+
_diagnosticsService,
|
|
55
|
+
_workspaceContextService,
|
|
56
|
+
modelService,
|
|
57
|
+
_editorService,
|
|
58
|
+
telemetryService,
|
|
59
|
+
storageService,
|
|
60
|
+
_logService,
|
|
61
|
+
webWorkerService
|
|
62
|
+
) {
|
|
39
63
|
super();
|
|
40
64
|
this._environmentService = _environmentService;
|
|
41
65
|
this._configurationService = _configurationService;
|
|
@@ -82,7 +106,9 @@ let LanguageDetectionService = class LanguageDetectionService extends Disposable
|
|
|
82
106
|
this.dirtyBiases = true;
|
|
83
107
|
}
|
|
84
108
|
isEnabledForLanguage(languageId) {
|
|
85
|
-
return !!languageId && this._configurationService.getValue(LanguageDetectionService_1.enablementSettingKey, {
|
|
109
|
+
return !!languageId && this._configurationService.getValue(LanguageDetectionService_1.enablementSettingKey, {
|
|
110
|
+
overrideIdentifier: languageId
|
|
111
|
+
});
|
|
86
112
|
}
|
|
87
113
|
getLanguageBiases() {
|
|
88
114
|
if (!this.dirtyBiases) {
|
|
@@ -93,11 +119,14 @@ let LanguageDetectionService = class LanguageDetectionService extends Disposable
|
|
|
93
119
|
this.workspaceLanguageIds.forEach(lang => biases[lang] = (biases[lang] ?? 0) + 5);
|
|
94
120
|
[...( this.historicalWorkspaceOpenedLanguageIds.keys())].forEach(lang => biases[lang] = (biases[lang] ?? 0) + 3);
|
|
95
121
|
[...( this.historicalGlobalOpenedLanguageIds.keys())].forEach(lang => biases[lang] = (biases[lang] ?? 0) + 1);
|
|
96
|
-
this._logService.trace(
|
|
97
|
-
this._logService.trace(
|
|
98
|
-
this._logService.trace(
|
|
99
|
-
|
|
100
|
-
|
|
122
|
+
this._logService.trace("Session Languages:", JSON.stringify([...this.sessionOpenedLanguageIds]));
|
|
123
|
+
this._logService.trace("Workspace Languages:", JSON.stringify([...this.workspaceLanguageIds]));
|
|
124
|
+
this._logService.trace(
|
|
125
|
+
"Historical Workspace Opened Languages:",
|
|
126
|
+
JSON.stringify([...( this.historicalWorkspaceOpenedLanguageIds.keys())])
|
|
127
|
+
);
|
|
128
|
+
this._logService.trace("Historical Globally Opened Languages:", JSON.stringify([...( this.historicalGlobalOpenedLanguageIds.keys())]));
|
|
129
|
+
this._logService.trace("Computed Language Detection Biases:", JSON.stringify(biases));
|
|
101
130
|
this.dirtyBiases = false;
|
|
102
131
|
this.langBiases = biases;
|
|
103
132
|
return biases;
|
|
@@ -113,17 +142,23 @@ let LanguageDetectionService = class LanguageDetectionService extends Disposable
|
|
|
113
142
|
}
|
|
114
143
|
initEditorOpenedListeners(storageService) {
|
|
115
144
|
try {
|
|
116
|
-
const globalLangHistoryData = JSON.parse(storageService.get(
|
|
145
|
+
const globalLangHistoryData = JSON.parse(storageService.get(
|
|
146
|
+
LanguageDetectionService_1.globalOpenedLanguagesStorageKey,
|
|
147
|
+
StorageScope.PROFILE,
|
|
148
|
+
"[]"
|
|
149
|
+
));
|
|
117
150
|
this.historicalGlobalOpenedLanguageIds.fromJSON(globalLangHistoryData);
|
|
118
|
-
}
|
|
119
|
-
catch (e) {
|
|
151
|
+
} catch (e) {
|
|
120
152
|
console.error(e);
|
|
121
153
|
}
|
|
122
154
|
try {
|
|
123
|
-
const workspaceLangHistoryData = JSON.parse(storageService.get(
|
|
155
|
+
const workspaceLangHistoryData = JSON.parse(storageService.get(
|
|
156
|
+
LanguageDetectionService_1.workspaceOpenedLanguagesStorageKey,
|
|
157
|
+
StorageScope.WORKSPACE,
|
|
158
|
+
"[]"
|
|
159
|
+
));
|
|
124
160
|
this.historicalWorkspaceOpenedLanguageIds.fromJSON(workspaceLangHistoryData);
|
|
125
|
-
}
|
|
126
|
-
catch (e) {
|
|
161
|
+
} catch (e) {
|
|
127
162
|
console.error(e);
|
|
128
163
|
}
|
|
129
164
|
this._register(this._editorService.onDidActiveEditorChange(() => {
|
|
@@ -132,28 +167,35 @@ let LanguageDetectionService = class LanguageDetectionService extends Disposable
|
|
|
132
167
|
this.sessionOpenedLanguageIds.add(activeLanguage);
|
|
133
168
|
this.historicalGlobalOpenedLanguageIds.set(activeLanguage, true);
|
|
134
169
|
this.historicalWorkspaceOpenedLanguageIds.set(activeLanguage, true);
|
|
135
|
-
storageService.store(
|
|
136
|
-
|
|
170
|
+
storageService.store(
|
|
171
|
+
LanguageDetectionService_1.globalOpenedLanguagesStorageKey,
|
|
172
|
+
JSON.stringify(this.historicalGlobalOpenedLanguageIds.toJSON()),
|
|
173
|
+
StorageScope.PROFILE,
|
|
174
|
+
StorageTarget.MACHINE
|
|
175
|
+
);
|
|
176
|
+
storageService.store(
|
|
177
|
+
LanguageDetectionService_1.workspaceOpenedLanguagesStorageKey,
|
|
178
|
+
JSON.stringify(this.historicalWorkspaceOpenedLanguageIds.toJSON()),
|
|
179
|
+
StorageScope.WORKSPACE,
|
|
180
|
+
StorageTarget.MACHINE
|
|
181
|
+
);
|
|
137
182
|
this.dirtyBiases = true;
|
|
138
183
|
}
|
|
139
184
|
}));
|
|
140
185
|
}
|
|
141
186
|
};
|
|
142
|
-
LanguageDetectionService = LanguageDetectionService_1 = ( __decorate([
|
|
143
|
-
( __param(0, IWorkbenchEnvironmentService)),
|
|
144
|
-
( __param(1, ILanguageService)),
|
|
145
|
-
( __param(2, IConfigurationService)),
|
|
146
|
-
( __param(3, IDiagnosticsService)),
|
|
147
|
-
( __param(4, IWorkspaceContextService)),
|
|
148
|
-
( __param(5, IModelService)),
|
|
149
|
-
( __param(6, IEditorService)),
|
|
150
|
-
( __param(7, ITelemetryService)),
|
|
151
|
-
( __param(8, IStorageService)),
|
|
152
|
-
( __param(9, ILogService)),
|
|
153
|
-
( __param(10, IWebWorkerService))
|
|
154
|
-
], LanguageDetectionService));
|
|
187
|
+
LanguageDetectionService = LanguageDetectionService_1 = ( __decorate([( __param(0, IWorkbenchEnvironmentService)), ( __param(1, ILanguageService)), ( __param(2, IConfigurationService)), ( __param(3, IDiagnosticsService)), ( __param(4, IWorkspaceContextService)), ( __param(5, IModelService)), ( __param(6, IEditorService)), ( __param(7, ITelemetryService)), ( __param(8, IStorageService)), ( __param(9, ILogService)), ( __param(10, IWebWorkerService))], LanguageDetectionService));
|
|
155
188
|
class LanguageDetectionWorkerClient extends Disposable {
|
|
156
|
-
constructor(
|
|
189
|
+
constructor(
|
|
190
|
+
_modelService,
|
|
191
|
+
_languageService,
|
|
192
|
+
_telemetryService,
|
|
193
|
+
_webWorkerService,
|
|
194
|
+
_indexJsUri,
|
|
195
|
+
_modelJsonUri,
|
|
196
|
+
_weightsUri,
|
|
197
|
+
_regexpModelUri
|
|
198
|
+
) {
|
|
157
199
|
super();
|
|
158
200
|
this._modelService = _modelService;
|
|
159
201
|
this._languageService = _languageService;
|
|
@@ -168,26 +210,29 @@ class LanguageDetectionWorkerClient extends Disposable {
|
|
|
168
210
|
if (!this.worker) {
|
|
169
211
|
const workerClient = this._register(this._webWorkerService.createWorkerClient(( new WebWorkerDescriptor({
|
|
170
212
|
esmModuleLocation: ( FileAccess.asBrowserUri(
|
|
171
|
-
|
|
213
|
+
"vs/workbench/services/languageDetection/browser/languageDetectionWebWorkerMain.js"
|
|
172
214
|
)),
|
|
173
|
-
label:
|
|
215
|
+
label: "LanguageDetectionWorker"
|
|
174
216
|
}))));
|
|
175
217
|
LanguageDetectionWorkerHost.setChannel(workerClient, {
|
|
176
218
|
$getIndexJsUri: async () => this.getIndexJsUri(),
|
|
177
|
-
$getLanguageId: async
|
|
219
|
+
$getLanguageId: async languageIdOrExt => this.getLanguageId(languageIdOrExt),
|
|
178
220
|
$sendTelemetryEvent: async (languages, confidences, timeSpent) => this.sendTelemetryEvent(languages, confidences, timeSpent),
|
|
179
221
|
$getRegexpModelUri: async () => this.getRegexpModelUri(),
|
|
180
222
|
$getModelJsonUri: async () => this.getModelJsonUri(),
|
|
181
|
-
$getWeightsUri: async () => this.getWeightsUri()
|
|
223
|
+
$getWeightsUri: async () => this.getWeightsUri()
|
|
182
224
|
});
|
|
183
225
|
const workerTextModelSyncClient = this._register(WorkerTextModelSyncClient.create(workerClient, this._modelService));
|
|
184
|
-
this.worker = {
|
|
226
|
+
this.worker = {
|
|
227
|
+
workerClient,
|
|
228
|
+
workerTextModelSyncClient
|
|
229
|
+
};
|
|
185
230
|
}
|
|
186
231
|
return this.worker;
|
|
187
232
|
}
|
|
188
233
|
_guessLanguageIdByUri(uri) {
|
|
189
234
|
const guess = this._languageService.guessLanguageIdByFilepathOrFirstLine(uri);
|
|
190
|
-
if (guess && guess !==
|
|
235
|
+
if (guess && guess !== "unknown") {
|
|
191
236
|
return guess;
|
|
192
237
|
}
|
|
193
238
|
return undefined;
|
|
@@ -203,7 +248,7 @@ class LanguageDetectionWorkerClient extends Disposable {
|
|
|
203
248
|
return languageIdOrExt;
|
|
204
249
|
}
|
|
205
250
|
const guessed = this._guessLanguageIdByUri(URI.file(`file.${languageIdOrExt}`));
|
|
206
|
-
if (!guessed || guessed ===
|
|
251
|
+
if (!guessed || guessed === "unknown") {
|
|
207
252
|
return undefined;
|
|
208
253
|
}
|
|
209
254
|
return guessed;
|
|
@@ -219,8 +264,8 @@ class LanguageDetectionWorkerClient extends Disposable {
|
|
|
219
264
|
}
|
|
220
265
|
async sendTelemetryEvent(languages, confidences, timeSpent) {
|
|
221
266
|
this._telemetryService.publicLog2(LanguageDetectionStatsId, {
|
|
222
|
-
languages: languages.join(
|
|
223
|
-
confidences: confidences.join(
|
|
267
|
+
languages: languages.join(","),
|
|
268
|
+
confidences: confidences.join(","),
|
|
224
269
|
timeSpent
|
|
225
270
|
});
|
|
226
271
|
}
|
|
@@ -230,14 +275,17 @@ class LanguageDetectionWorkerClient extends Disposable {
|
|
|
230
275
|
if (quickGuess) {
|
|
231
276
|
return quickGuess;
|
|
232
277
|
}
|
|
233
|
-
const {
|
|
278
|
+
const {
|
|
279
|
+
workerClient,
|
|
280
|
+
workerTextModelSyncClient
|
|
281
|
+
} = this._getOrCreateLanguageDetectionWorker();
|
|
234
282
|
workerTextModelSyncClient.ensureSyncedResources([resource]);
|
|
235
283
|
const modelId = await workerClient.proxy.$detectLanguage(( resource.toString()), langBiases, preferHistory, supportedLangs);
|
|
236
284
|
const languageId = this.getLanguageId(modelId);
|
|
237
|
-
const LanguageDetectionStatsId =
|
|
285
|
+
const LanguageDetectionStatsId = "automaticlanguagedetection.perf";
|
|
238
286
|
this._telemetryService.publicLog2(LanguageDetectionStatsId, {
|
|
239
287
|
timeSpent: Date.now() - startTime,
|
|
240
|
-
detection: languageId ||
|
|
288
|
+
detection: languageId || "unknown"
|
|
241
289
|
});
|
|
242
290
|
return languageId;
|
|
243
291
|
}
|