UNPKG

@codingame/monaco-vscode-extensions-service-override

Version:

VSCode public API plugged on the monaco editor - extensions service-override

228 lines (225 loc) 10.8 kB
import { __decorate, __param } from 'vscode/external/tslib/tslib.es6.js'; import { illegalArgument } from 'vscode/vscode/vs/base/common/errors'; import { DisposableStore, dispose } from 'vscode/vscode/vs/base/common/lifecycle'; import { equals } from 'vscode/vscode/vs/base/common/objects'; import { URI } from 'vscode/vscode/vs/base/common/uri'; import { ICodeEditorService } from 'vscode/vscode/vs/editor/browser/services/codeEditorService'; import { CommandsRegistry } from 'vscode/vscode/vs/platform/commands/common/commands'; import { EditorActivation, EditorResolution } from 'vscode/vscode/vs/platform/editor/common/editor'; import { ExtHostContext } from 'vscode/vscode/vs/workbench/api/common/extHost.protocol'; import { editorGroupToColumn, columnToEditorGroup } from 'vscode/vscode/vs/workbench/services/editor/common/editorGroupColumn'; import { IEditorService } from 'vscode/vscode/vs/workbench/services/editor/common/editorService.service'; import { IEditorGroupsService } from 'vscode/vscode/vs/workbench/services/editor/common/editorGroupsService.service'; import { IEnvironmentService } from 'vscode/vscode/vs/platform/environment/common/environment.service'; import { IWorkingCopyService } from 'vscode/vscode/vs/workbench/services/workingCopy/common/workingCopyService.service'; import { getCodeEditor } from 'vscode/vscode/vs/editor/browser/editorBrowser'; import { IConfigurationService } from 'vscode/vscode/vs/platform/configuration/common/configuration.service'; var MainThreadTextEditors_1; let MainThreadTextEditors = class MainThreadTextEditors { static { MainThreadTextEditors_1 = this; } static { this.INSTANCE_COUNT = 0; } constructor(_editorLocator, extHostContext, _codeEditorService, _editorService, _editorGroupService, _configurationService) { this._editorLocator = _editorLocator; this._codeEditorService = _codeEditorService; this._editorService = _editorService; this._editorGroupService = _editorGroupService; this._configurationService = _configurationService; this._toDispose = ( new DisposableStore()); this._instanceId = String(++MainThreadTextEditors_1.INSTANCE_COUNT); this._proxy = ( extHostContext.getProxy(ExtHostContext.ExtHostEditors)); this._textEditorsListenersMap = Object.create(null); this._editorPositionData = null; this._toDispose.add(this._editorService.onDidVisibleEditorsChange(() => this._updateActiveAndVisibleTextEditors())); this._toDispose.add(this._editorGroupService.onDidRemoveGroup(() => this._updateActiveAndVisibleTextEditors())); this._toDispose.add(this._editorGroupService.onDidMoveGroup(() => this._updateActiveAndVisibleTextEditors())); this._registeredDecorationTypes = Object.create(null); } dispose() { ( Object.keys(this._textEditorsListenersMap)).forEach((editorId) => { dispose(this._textEditorsListenersMap[editorId]); }); this._textEditorsListenersMap = Object.create(null); this._toDispose.dispose(); for (const decorationType in this._registeredDecorationTypes) { this._codeEditorService.removeDecorationType(decorationType); } this._registeredDecorationTypes = Object.create(null); } handleTextEditorAdded(textEditor) { const id = textEditor.getId(); const toDispose = []; toDispose.push(textEditor.onPropertiesChanged((data) => { this._proxy.$acceptEditorPropertiesChanged(id, data); })); this._textEditorsListenersMap[id] = toDispose; } handleTextEditorRemoved(id) { dispose(this._textEditorsListenersMap[id]); delete this._textEditorsListenersMap[id]; } _updateActiveAndVisibleTextEditors() { const editorPositionData = this._getTextEditorPositionData(); if (!equals(this._editorPositionData, editorPositionData)) { this._editorPositionData = editorPositionData; this._proxy.$acceptEditorPositionData(this._editorPositionData); } } _getTextEditorPositionData() { const result = Object.create(null); for (const editorPane of this._editorService.visibleEditorPanes) { const id = this._editorLocator.findTextEditorIdFor(editorPane); if (id) { result[id] = editorGroupToColumn(this._editorGroupService, editorPane.group); } } return result; } async $tryShowTextDocument(resource, options) { const uri = URI.revive(resource); const editorOptions = { preserveFocus: options.preserveFocus, pinned: options.pinned, selection: options.selection, activation: options.preserveFocus ? EditorActivation.RESTORE : undefined, override: EditorResolution.EXCLUSIVE_ONLY }; const input = { resource: uri, options: editorOptions }; const editor = await this._editorService.openEditor(input, columnToEditorGroup(this._editorGroupService, this._configurationService, options.position)); if (!editor) { return undefined; } const editorControl = editor.getControl(); const codeEditor = getCodeEditor(editorControl); return codeEditor ? this._editorLocator.getIdOfCodeEditor(codeEditor) : undefined; } async $tryShowEditor(id, position) { const mainThreadEditor = this._editorLocator.getEditor(id); if (mainThreadEditor) { const model = mainThreadEditor.getModel(); await this._editorService.openEditor({ resource: model.uri, options: { preserveFocus: false } }, columnToEditorGroup(this._editorGroupService, this._configurationService, position)); return; } } async $tryHideEditor(id) { const mainThreadEditor = this._editorLocator.getEditor(id); if (mainThreadEditor) { const editorPanes = this._editorService.visibleEditorPanes; for (const editorPane of editorPanes) { if (mainThreadEditor.matches(editorPane)) { await editorPane.group.closeEditor(editorPane.input); return; } } } } $trySetSelections(id, selections) { const editor = this._editorLocator.getEditor(id); if (!editor) { return Promise.reject(illegalArgument(`TextEditor(${id})`)); } editor.setSelections(selections); return Promise.resolve(undefined); } $trySetDecorations(id, key, ranges) { key = `${this._instanceId}-${key}`; const editor = this._editorLocator.getEditor(id); if (!editor) { return Promise.reject(illegalArgument(`TextEditor(${id})`)); } editor.setDecorations(key, ranges); return Promise.resolve(undefined); } $trySetDecorationsFast(id, key, ranges) { key = `${this._instanceId}-${key}`; const editor = this._editorLocator.getEditor(id); if (!editor) { return Promise.reject(illegalArgument(`TextEditor(${id})`)); } editor.setDecorationsFast(key, ranges); return Promise.resolve(undefined); } $tryRevealRange(id, range, revealType) { const editor = this._editorLocator.getEditor(id); if (!editor) { return Promise.reject(illegalArgument(`TextEditor(${id})`)); } editor.revealRange(range, revealType); return Promise.resolve(); } $trySetOptions(id, options) { const editor = this._editorLocator.getEditor(id); if (!editor) { return Promise.reject(illegalArgument(`TextEditor(${id})`)); } editor.setConfiguration(options); return Promise.resolve(undefined); } $tryApplyEdits(id, modelVersionId, edits, opts) { const editor = this._editorLocator.getEditor(id); if (!editor) { return Promise.reject(illegalArgument(`TextEditor(${id})`)); } return Promise.resolve(editor.applyEdits(modelVersionId, edits, opts)); } $tryInsertSnippet(id, modelVersionId, template, ranges, opts) { const editor = this._editorLocator.getEditor(id); if (!editor) { return Promise.reject(illegalArgument(`TextEditor(${id})`)); } return Promise.resolve(editor.insertSnippet(modelVersionId, template, ranges, opts)); } $registerTextEditorDecorationType(extensionId, key, options) { key = `${this._instanceId}-${key}`; this._registeredDecorationTypes[key] = true; this._codeEditorService.registerDecorationType(`exthost-api-${extensionId}`, key, options); } $removeTextEditorDecorationType(key) { key = `${this._instanceId}-${key}`; delete this._registeredDecorationTypes[key]; this._codeEditorService.removeDecorationType(key); } $getDiffInformation(id) { const editor = this._editorLocator.getEditor(id); if (!editor) { return Promise.reject(( new Error('No such TextEditor'))); } const codeEditor = editor.getCodeEditor(); if (!codeEditor) { return Promise.reject(( new Error('No such CodeEditor'))); } const codeEditorId = codeEditor.getId(); const diffEditors = this._codeEditorService.listDiffEditors(); const [diffEditor] = diffEditors.filter(d => d.getOriginalEditor().getId() === codeEditorId || d.getModifiedEditor().getId() === codeEditorId); if (diffEditor) { return Promise.resolve(diffEditor.getLineChanges() || []); } const dirtyDiffContribution = codeEditor.getContribution('editor.contrib.dirtydiff'); if (dirtyDiffContribution) { return Promise.resolve(dirtyDiffContribution.getChanges()); } return Promise.resolve([]); } }; MainThreadTextEditors = MainThreadTextEditors_1 = ( __decorate([ ( __param(2, ICodeEditorService)), ( __param(3, IEditorService)), ( __param(4, IEditorGroupsService)), ( __param(5, IConfigurationService)) ], MainThreadTextEditors)); CommandsRegistry.registerCommand('_workbench.revertAllDirty', async function (accessor) { const environmentService = accessor.get(IEnvironmentService); if (!environmentService.extensionTestsLocationURI) { throw ( new Error('Command is only available when running extension tests.')); } const workingCopyService = accessor.get(IWorkingCopyService); for (const workingCopy of workingCopyService.dirtyWorkingCopies) { await workingCopy.revert({ soft: true }); } }); export { MainThreadTextEditors };