Skip to content

Commit

Permalink
Merge pull request #163 from CodinGame/import-all-editor-features
Browse files Browse the repository at this point in the history
Fix 1.81 introduced issues
  • Loading branch information
CGNonofr authored Aug 17, 2023
2 parents 3b1acfe + 6878988 commit cba40c0
Show file tree
Hide file tree
Showing 37 changed files with 305 additions and 214 deletions.
7 changes: 3 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -120,9 +120,10 @@ await initialize({
})
```

Additionally, this library exposes 22 modules that include the vscode version of some services (with some glue to make it work with monaco):
Additionally, this library exposes 23 modules that include the vscode version of some services (with some glue to make it work with monaco):

- Extensions (included by default): `vscode/service-override/extensions`
- Files (included by default): `vscode/service-override/files`
- Notifications: `vscode/service-override/notifications`
- Dialogs: `vscode/service-override/dialogs`
- Model: `vscode/service-override/model`
Expand All @@ -135,7 +136,6 @@ Additionally, this library exposes 22 modules that include the vscode version of
- VSCode themes: `vscode/service-override/theme`
- Audio cue: `vscode/service-override/audioCue`
- Debug: `vscode/service-override/debug`
- Files: `vscode/service-override/files`
- Preferences: `vscode/service-override/preferences`
- Views: `vscode/service-override/views` (Is exclusive with `editor`, do not use both at the same time)
- QuickAccess: `vscode/service-override/quickaccess`
Expand All @@ -144,6 +144,7 @@ Additionally, this library exposes 22 modules that include the vscode version of
- Search: `vscode/service-override/search`
- Markers: `vscode/service-override/markers`
- Language detection worker: `vscode/service-override/languageDetectionWorker`
- Storage: `vscode/service-override/storage`

Usage:

Expand Down Expand Up @@ -295,8 +296,6 @@ It includes:
- Keybinding service, with user keybindings editor
- Debuggers

It also uses the `synchronizeJsonSchemas` function to register them on the monaco json worker and have autocomplete/hover on settings and keybindings.

From CLI run:

```bash
Expand Down
5 changes: 3 additions & 2 deletions demo/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ <h1>Editor</h1>
<button id="run">Run with debugger</button>
<button id="filesystem">Attach filesystem</button>
<button id="customEditorPanel">Open custom editor panel</button>
<button id="clearStorage">Clear storage</button>
</div>
</div>

Expand All @@ -29,10 +30,10 @@ <h1>Editor</h1>

<h1>Settings</h1>
<button id="settingsui">Open settings UI</button>
<div id="settings-editor" class="editor"></div>
<div id="settings-editor" class="standalone-editor"></div>
<h1>Keybindings</h1>
<button id="keybindingsui">Open keybindings UI</button>
<div id="keybindings-editor" class="editor"></div>
<div id="keybindings-editor" class="standalone-editor"></div>
</div>
<script type="module" src="/src/main.ts"></script>
</body>
Expand Down
2 changes: 1 addition & 1 deletion demo/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

13 changes: 11 additions & 2 deletions demo/src/features/output.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,17 @@
import * as vscode from 'vscode'
import { onExtHostInitialized } from 'vscode/extensions'
import { ExtensionHostKind, onExtHostInitialized, registerExtension } from 'vscode/extensions'

await new Promise<void>(resolve => onExtHostInitialized(resolve))

const { getApi } = registerExtension({
name: 'outputDemo',
publisher: 'codingame',
version: '1.0.0',
engines: {
vscode: '*'
}
}, ExtensionHostKind.LocalProcess)

const vscode = await getApi()
const fakeOutputChannel = vscode.window.createOutputChannel('Fake output')
const anotherFakeOutputChannel = vscode.window.createOutputChannel('Your code', 'javascript')

Expand Down
12 changes: 7 additions & 5 deletions demo/src/main.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
import './style.css'
import 'monaco-editor/esm/vs/editor/editor.all.js'
import * as monaco from 'monaco-editor/esm/vs/editor/editor.api.js'
import 'monaco-editor/esm/vs/editor/standalone/browser/iPadShowKeyboard/iPadShowKeyboard.js'
import './setup'
import * as monaco from 'monaco-editor'
import { createConfiguredEditor, createModelReference } from 'vscode/monaco'
import { registerFileSystemOverlay, HTMLFileSystemProvider } from 'vscode/service-override/files'
import * as vscode from 'vscode'
import { ILogService, StandaloneServices, IPreferencesService, IEditorService, IDialogService } from 'vscode/services'
import { ConfirmResult } from 'vscode/service-override/views'
import { clearStorage } from './setup'
import { CustomEditorInput } from './features/customView'
import './features/debugger'
import './features/search'
Expand Down Expand Up @@ -80,7 +78,7 @@ await vscode.window.showTextDocument(mainDocument, {

anotherFakeOutputChannel.replace(mainDocument.getText())
vscode.workspace.onDidChangeTextDocument((e) => {
if (e.document === mainDocument) {
if (e.document === mainDocument && e.contentChanges.length > 0) {
anotherFakeOutputChannel.replace(e.document.getText())
}
})
Expand Down Expand Up @@ -191,3 +189,7 @@ document.querySelector('#customEditorPanel')!.addEventListener('click', async ()
pinned: true
})
})

document.querySelector('#clearStorage')!.addEventListener('click', async () => {
clearStorage()
})
37 changes: 30 additions & 7 deletions demo/src/setup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,11 @@ import getSnippetServiceOverride from 'vscode/service-override/snippets'
import getQuickAccessServiceOverride from 'vscode/service-override/quickaccess'
import getOutputServiceOverride from 'vscode/service-override/output'
import getTerminalServiceOverride from 'vscode/service-override/terminal'
import getSearchAccessServiceOverride from 'vscode/service-override/search'
import getMarkersAccessServiceOverride from 'vscode/service-override/markers'
import getAccessibilityAccessServiceOverride from 'vscode/service-override/accessibility'
import getSearchServiceOverride from 'vscode/service-override/search'
import getMarkersServiceOverride from 'vscode/service-override/markers'
import getAccessibilityServiceOverride from 'vscode/service-override/accessibility'
import getLanguageDetectionWorkerServiceOverride from 'vscode/service-override/languageDetectionWorker'
import getStorageServiceOverride, { IStorageItemsChangeEvent, StorageScope } from 'vscode/service-override/storage'
import getExtensionServiceOverride from 'vscode/service-override/extensions'
import EditorWorker from 'monaco-editor/esm/vs/editor/editor.worker.js?worker'
import TextMateWorker from 'vscode/workers/textMate.worker?worker'
Expand Down Expand Up @@ -49,6 +50,8 @@ window.MonacoEnvironment = {
}
}

const onStorageChange = new monaco.Emitter<IStorageItemsChangeEvent>()

// Override services
await initializeMonacoService({
...getExtensionServiceOverride(toWorkerConfig(ExtensionHostWorker)),
Expand All @@ -71,13 +74,33 @@ await initializeMonacoService({
}),
...getOutputServiceOverride(),
...getTerminalServiceOverride(new TerminalBackend()),
...getSearchAccessServiceOverride(),
...getMarkersAccessServiceOverride(),
...getAccessibilityAccessServiceOverride(),
...getLanguageDetectionWorkerServiceOverride()
...getSearchServiceOverride(),
...getMarkersServiceOverride(),
...getAccessibilityServiceOverride(),
...getLanguageDetectionWorkerServiceOverride(),
...getStorageServiceOverride({
read (scope) {
return new Map(Object.entries(JSON.parse(localStorage.getItem(`storage-${scope}`) ?? '{}')))
},
async write (scope, data) {
localStorage.setItem(`storage-${scope}`, JSON.stringify(Object.fromEntries(data.entries())))
},
onDidChange: onStorageChange.event
})
})
StandaloneServices.get(ILogService).setLevel(LogLevel.Off)

export function clearStorage (): void {
const allKeys = new Set([StorageScope.APPLICATION, StorageScope.PROFILE, StorageScope.WORKSPACE].flatMap(scope => Object.keys(JSON.parse(localStorage.getItem(`storage-${scope}`) ?? '{}'))))
localStorage.removeItem(`storage-${StorageScope.APPLICATION}`)
localStorage.removeItem(`storage-${StorageScope.PROFILE}`)
localStorage.removeItem(`storage-${StorageScope.WORKSPACE}`)
onStorageChange.fire({
deleted: allKeys,
changed: new Map()
})
}

await initializeVscodeExtensions()

renderSidebarPart(document.querySelector<HTMLDivElement>('#sidebar')!)
Expand Down
2 changes: 1 addition & 1 deletion demo/src/style.css
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ body {
height: 30vh;
}

.editor {
.standalone-editor {
width: 100%;
height: 55vh;
}
2 changes: 1 addition & 1 deletion demo/vite.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ export default defineConfig({
'vscode/service-override/keybindings', 'vscode/service-override/textmate', 'vscode/service-override/theme', 'vscode/service-override/languages',
'vscode/service-override/audioCue', 'vscode/service-override/views', 'vscode/service-override/quickaccess', 'vscode/service-override/debug',
'vscode/service-override/preferences', 'vscode/service-override/snippets', 'vscode/service-override/files', 'vscode/service-override/output',
'vscode/service-override/terminal', 'vscode/service-override/search', 'vscode/service-override/markers', 'vscode/service-override/accessibility',
'vscode/service-override/terminal', 'vscode/service-override/search', 'vscode/service-override/markers', 'vscode/service-override/accessibility', 'vscode/service-override/storage',
'vscode/service-override/languageDetectionWorker', 'vscode/default-extensions/clojure', 'vscode/default-extensions/coffeescript', 'vscode/default-extensions/cpp',
'vscode/default-extensions/csharp', 'vscode/default-extensions/css', 'vscode/default-extensions/diff', 'vscode/default-extensions/fsharp', 'vscode/default-extensions/go',
'vscode/default-extensions/groovy', 'vscode/default-extensions/html', 'vscode/default-extensions/java', 'vscode/default-extensions/javascript',
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@codingame/monaco-vscode-api",
"version": "1.81.0-next.0",
"version": "0.0.0-semantic-release",
"private": false,
"description": "VSCode public API plugged on the monaco editor",
"keywords": [],
Expand Down
8 changes: 7 additions & 1 deletion rollup/rollup.default-extensions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,13 @@ export default rollup.defineConfig(defaultExtensions.map(name => (<rollup.Rollup
input: path.resolve(DEFAULT_EXTENSIONS_PATH, name),
output: [{
minifyInternalExports: false,
assetFileNames: `default-extensions/${name}/[name][extname]`,
assetFileNames: chunkInfo => {
if (chunkInfo.name != null && chunkInfo.name.endsWith('d.ts')) {
// append .txt at the end of d.ts files: those file are required by the typescript extension and are just expected to be loaded as simple text
return `default-extensions/${name}/[name][extname].txt`
}
return `default-extensions/${name}/[name][extname]`
},
format: 'esm',
dir: 'dist',
entryFileNames: `default-extensions/${name}.js`,
Expand Down
46 changes: 42 additions & 4 deletions scripts/vscode.patch
Original file line number Diff line number Diff line change
Expand Up @@ -235,6 +235,23 @@ index fc197da1d57..a4d9573979f 100644

public static validateOptions(options: IEditorOptions): ValidatedEditorOptions {
const result = new ValidatedEditorOptions();
diff --git a/src/vs/editor/editor.main.ts b/src/vs/editor/editor.main.ts
index 23d547570e9..31dfb4fd8d4 100644
--- a/src/vs/editor/editor.main.ts
+++ b/src/vs/editor/editor.main.ts
@@ -5,12 +5,5 @@

import 'vs/editor/editor.all';
import 'vs/editor/standalone/browser/iPadShowKeyboard/iPadShowKeyboard';
-import 'vs/editor/standalone/browser/inspectTokens/inspectTokens';
-import 'vs/editor/standalone/browser/quickAccess/standaloneHelpQuickAccess';
-import 'vs/editor/standalone/browser/quickAccess/standaloneGotoLineQuickAccess';
-import 'vs/editor/standalone/browser/quickAccess/standaloneGotoSymbolQuickAccess';
-import 'vs/editor/standalone/browser/quickAccess/standaloneCommandsQuickAccess';
-import 'vs/editor/standalone/browser/referenceSearch/standaloneReferenceSearch';
-import 'vs/editor/standalone/browser/toggleHighContrast/toggleHighContrast';

export * from 'vs/editor/editor.api';
diff --git a/src/vs/platform/assignment/common/assignmentService.ts b/src/vs/platform/assignment/common/assignmentService.ts
index 67e34826627..7c5287d6a32 100644
--- a/src/vs/platform/assignment/common/assignmentService.ts
Expand Down Expand Up @@ -526,7 +543,7 @@ index b83a462131d..5555f431ba0 100644
performance.mark('code/extHost/didInitAPI');

diff --git a/src/vs/workbench/api/worker/extensionHostWorker.ts b/src/vs/workbench/api/worker/extensionHostWorker.ts
index 6e6f8845da5..74ecefe68f1 100644
index 6e6f8845da5..89cab1e16da 100644
--- a/src/vs/workbench/api/worker/extensionHostWorker.ts
+++ b/src/vs/workbench/api/worker/extensionHostWorker.ts
@@ -15,7 +15,6 @@ import * as performance from 'vs/base/common/performance';
Expand All @@ -537,7 +554,16 @@ index 6e6f8845da5..74ecefe68f1 100644
import { URI } from 'vs/base/common/uri';

//#region --- Define, capture, and override some globals
@@ -89,66 +88,155 @@ self.addEventListener = () => console.trace(`'addEventListener' has been blocked
@@ -47,7 +46,7 @@ function shouldTransformUri(uri: string): boolean {
// In principle, we could convert any URI, but we have concerns
// that parsing https URIs might end up decoding escape characters
// and result in an unintended transformation
- return /^(file|vscode-remote):/i.test(uri);
+ return /^(file|extension|vscode-remote):/i.test(uri);
}

const nativeFetch = fetch.bind(self);
@@ -89,66 +88,167 @@ self.addEventListener = () => console.trace(`'addEventListener' has been blocked
(<any>self)['webkitResolveLocalFileSystemSyncURL'] = undefined;
(<any>self)['webkitResolveLocalFileSystemURL'] = undefined;

Expand Down Expand Up @@ -603,8 +629,20 @@ index 6e6f8845da5..74ecefe68f1 100644
+ return nativeFetch(asWorkerBrowserUrl(input), init);
+ };
+ self.XMLHttpRequest = class extends XMLHttpRequest {
+ private notFound = false;
+ override open(method: string, url: string | URL, async?: boolean, username?: string | null, password?: string | null): void {
+ return super.open(method, asWorkerBrowserUrl(url), async ?? true, username, password);
+ const transformedUrl = asWorkerBrowserUrl(url);
+ this.notFound = transformedUrl.startsWith('extension:');
+ return super.open(method, transformedUrl, async ?? true, username, password);
+ }
+ override send(body?: Document | XMLHttpRequestBodyInit | null | undefined): void {
+ if (this.notFound) {
+ return;
+ }
+ super.send(body);
+ }
+ override get status() {
+ return this.notFound ? 404 : super.status;
+ }
+ };
+ const nativeImportScripts = importScripts.bind(self);
Expand Down Expand Up @@ -747,7 +785,7 @@ index 6e6f8845da5..74ecefe68f1 100644
}

//#endregion ---
@@ -255,6 +343,7 @@ export function create(): { onmessage: (message: any) => void } {
@@ -255,6 +355,7 @@ export function create(): { onmessage: (message: any) => void } {
);

patchFetching(uri => extHostMain.asBrowserUri(uri));
Expand Down
15 changes: 15 additions & 0 deletions src/missing-services.ts
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,8 @@ import { ITestProfileService } from 'vs/workbench/contrib/testing/common/testPro
import { IEncryptionService } from 'vs/platform/encryption/common/encryptionService'
import { ITestResultService } from 'vs/workbench/contrib/testing/common/testResultService'
import { IDiagnosticsService, NullDiagnosticsService } from 'vs/platform/diagnostics/common/diagnostics'
import { INotebookSearchService } from 'vs/workbench/contrib/search/browser/notebookSearch'
import { ResourceSet } from 'vs/base/common/map'
import { unsupported } from './tools'

class NullLoggerService extends AbstractLoggerService {
Expand Down Expand Up @@ -2086,3 +2088,16 @@ registerSingleton(IUserDataInitializationService, class UserDataInitializationSe
}, InstantiationType.Delayed)

registerSingleton(IDiagnosticsService, NullDiagnosticsService, InstantiationType.Delayed)

registerSingleton(INotebookSearchService, class NotebookSearchService implements INotebookSearchService {
_serviceBrand: undefined
async notebookSearch () {
return {
completeData: {
messages: [],
results: []
},
scannedFiles: new ResourceSet()
}
}
}, InstantiationType.Delayed)
2 changes: 1 addition & 1 deletion src/service-override/accessibility.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@ import 'vs/workbench/contrib/codeEditor/browser/accessibility/accessibility'

export default function getServiceOverride (): IEditorOverrideServices {
return {
[IAccessibleViewService.toString()]: new SyncDescriptor(AccessibleViewService, [])
[IAccessibleViewService.toString()]: new SyncDescriptor(AccessibleViewService, [], true)
}
}
2 changes: 1 addition & 1 deletion src/service-override/audioCue.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,6 @@ registerAssets(audioAssets)

export default function getServiceOverride (): IEditorOverrideServices {
return {
[IAudioCueService.toString()]: new SyncDescriptor(AudioCueService)
[IAudioCueService.toString()]: new SyncDescriptor(AudioCueService, [], true)
}
}
2 changes: 1 addition & 1 deletion src/service-override/bulkEdit.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@ import { BulkEditService } from 'vs/workbench/contrib/bulkEdit/browser/bulkEditS

export default function getServiceOverride (): IEditorOverrideServices {
return {
[IBulkEditService.toString()]: new SyncDescriptor(BulkEditService)
[IBulkEditService.toString()]: new SyncDescriptor(BulkEditService, [], true)
}
}
Loading

0 comments on commit cba40c0

Please sign in to comment.