mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-23 10:08:49 +01:00
turn language status API proposal into push model, https://github.com/microsoft/vscode/issues/129037
This commit is contained in:
@@ -7,7 +7,10 @@ import { MainContext, MainThreadLanguagesShape, IMainContext } from './extHost.p
|
||||
import type * as vscode from 'vscode';
|
||||
import { ExtHostDocuments } from 'vs/workbench/api/common/extHostDocuments';
|
||||
import * as typeConvert from 'vs/workbench/api/common/extHostTypeConverters';
|
||||
import { StandardTokenType, Range, Position } from 'vs/workbench/api/common/extHostTypes';
|
||||
import { StandardTokenType, Range, Position, LanguageStatusSeverity } from 'vs/workbench/api/common/extHostTypes';
|
||||
import Severity from 'vs/base/common/severity';
|
||||
import { disposableTimeout } from 'vs/base/common/async';
|
||||
import { IDisposable } from 'vs/base/common/lifecycle';
|
||||
|
||||
export class ExtHostLanguages {
|
||||
|
||||
@@ -61,4 +64,69 @@ export class ExtHostLanguages {
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private _handlePool: number = 0;
|
||||
|
||||
createLanguageStatusItem(selector: vscode.DocumentSelector): vscode.LanguageStatusItem {
|
||||
|
||||
const handle = this._handlePool++;
|
||||
const proxy = this._proxy;
|
||||
|
||||
const data: { selector: any, text: string, detail: string | vscode.MarkdownString, severity: vscode.LanguageStatusSeverity } = {
|
||||
selector,
|
||||
text: '',
|
||||
detail: '',
|
||||
severity: LanguageStatusSeverity.Information,
|
||||
};
|
||||
|
||||
let soonHandle: IDisposable | undefined;
|
||||
const updateAsync = () => {
|
||||
soonHandle?.dispose();
|
||||
soonHandle = disposableTimeout(() => {
|
||||
this._proxy.$setLanguageStatus(handle, {
|
||||
selector: data.selector,
|
||||
text: data.text,
|
||||
message: typeof data.detail === 'string' ? data.detail : typeConvert.MarkdownString.from(data.detail),
|
||||
severity: data.severity === LanguageStatusSeverity.Error ? Severity.Error : data.severity === LanguageStatusSeverity.Warning ? Severity.Warning : Severity.Info
|
||||
});
|
||||
}, 0);
|
||||
};
|
||||
|
||||
const result: vscode.LanguageStatusItem = {
|
||||
get selector() {
|
||||
return data.selector;
|
||||
},
|
||||
set selector(value) {
|
||||
data.selector = value;
|
||||
updateAsync();
|
||||
},
|
||||
get text() {
|
||||
return data.text;
|
||||
},
|
||||
set text(value) {
|
||||
data.text = value;
|
||||
updateAsync();
|
||||
},
|
||||
get detail() {
|
||||
return data.detail;
|
||||
},
|
||||
set detail(value) {
|
||||
data.detail = value;
|
||||
updateAsync();
|
||||
},
|
||||
get severity() {
|
||||
return data.severity;
|
||||
},
|
||||
set severity(value) {
|
||||
data.severity = value;
|
||||
updateAsync();
|
||||
},
|
||||
dispose() {
|
||||
soonHandle?.dispose();
|
||||
proxy.$removeLanguageStatus(handle);
|
||||
}
|
||||
};
|
||||
updateAsync();
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user