@codingame/monaco-vscode-extensions-service-override
Version:
VSCode public API plugged on the monaco editor - extensions service-override
74 lines (70 loc) • 3.67 kB
JavaScript
import { __decorate, __param } from '@codingame/monaco-vscode-api/external/tslib/tslib.es6';
import { URI } from '@codingame/monaco-vscode-api/vscode/vs/base/common/uri';
import { ILanguageService } from '@codingame/monaco-vscode-api/vscode/vs/editor/common/languages/language.service';
import { IModelService } from '@codingame/monaco-vscode-api/vscode/vs/editor/common/services/model.service';
import { ExtHostContext, MainContext } from '@codingame/monaco-vscode-api/vscode/vs/workbench/api/common/extHost.protocol';
import { extHostNamedCustomer } from '../../services/extensions/common/extHostCustomers.js';
import { Range } from '@codingame/monaco-vscode-api/vscode/vs/editor/common/core/range';
import { ITextModelService } from '@codingame/monaco-vscode-api/vscode/vs/editor/common/services/resolverService.service';
import { ILanguageStatusService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/languageStatus/common/languageStatusService.service';
import { Disposable, DisposableMap } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
let MainThreadLanguages = class MainThreadLanguages extends Disposable {
constructor(
_extHostContext,
_languageService,
_modelService,
_resolverService,
_languageStatusService
) {
super();
this._languageService = _languageService;
this._modelService = _modelService;
this._resolverService = _resolverService;
this._languageStatusService = _languageStatusService;
this._status = this._register(( new DisposableMap()));
this._proxy = ( _extHostContext.getProxy(ExtHostContext.ExtHostLanguages));
this._proxy.$acceptLanguageIds(_languageService.getRegisteredLanguageIds());
this._register(_languageService.onDidChange(_ => {
this._proxy.$acceptLanguageIds(_languageService.getRegisteredLanguageIds());
}));
}
async $changeLanguage(resource, languageId) {
if (!this._languageService.isRegisteredLanguageId(languageId)) {
return Promise.reject(( new Error(`Unknown language id: ${languageId}`)));
}
const uri = URI.revive(resource);
const ref = await this._resolverService.createModelReference(uri);
try {
ref.object.textEditorModel.setLanguage(this._languageService.createById(languageId));
} finally {
ref.dispose();
}
}
async $tokensAtPosition(resource, position) {
const uri = URI.revive(resource);
const model = this._modelService.getModel(uri);
if (!model) {
return undefined;
}
model.tokenization.tokenizeIfCheap(position.lineNumber);
const tokens = model.tokenization.getLineTokens(position.lineNumber);
const idx = tokens.findTokenIndexAtOffset(position.column - 1);
return {
type: tokens.getStandardTokenType(idx),
range: ( new Range(
position.lineNumber,
1 + tokens.getStartOffset(idx),
position.lineNumber,
1 + tokens.getEndOffset(idx)
))
};
}
$setLanguageStatus(handle, status) {
this._status.set(handle, this._languageStatusService.addStatus(status));
}
$removeLanguageStatus(handle) {
this._status.deleteAndDispose(handle);
}
};
MainThreadLanguages = __decorate([extHostNamedCustomer(MainContext.MainThreadLanguages), ( __param(1, ILanguageService)), ( __param(2, IModelService)), ( __param(3, ITextModelService)), ( __param(4, ILanguageStatusService))], MainThreadLanguages);
export { MainThreadLanguages };