Skip to content

Commit cba40c0

Browse files
authored
Merge pull request #163 from CodinGame/import-all-editor-features
Fix 1.81 introduced issues
2 parents 3b1acfe + 6878988 commit cba40c0

37 files changed

+305
-214
lines changed

README.md

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -120,9 +120,10 @@ await initialize({
120120
})
121121
```
122122

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

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

148149
Usage:
149150

@@ -295,8 +296,6 @@ It includes:
295296
- Keybinding service, with user keybindings editor
296297
- Debuggers
297298

298-
It also uses the `synchronizeJsonSchemas` function to register them on the monaco json worker and have autocomplete/hover on settings and keybindings.
299-
300299
From CLI run:
301300

302301
```bash

demo/index.html

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ <h1>Editor</h1>
2020
<button id="run">Run with debugger</button>
2121
<button id="filesystem">Attach filesystem</button>
2222
<button id="customEditorPanel">Open custom editor panel</button>
23+
<button id="clearStorage">Clear storage</button>
2324
</div>
2425
</div>
2526

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

3031
<h1>Settings</h1>
3132
<button id="settingsui">Open settings UI</button>
32-
<div id="settings-editor" class="editor"></div>
33+
<div id="settings-editor" class="standalone-editor"></div>
3334
<h1>Keybindings</h1>
3435
<button id="keybindingsui">Open keybindings UI</button>
35-
<div id="keybindings-editor" class="editor"></div>
36+
<div id="keybindings-editor" class="standalone-editor"></div>
3637
</div>
3738
<script type="module" src="/src/main.ts"></script>
3839
</body>

demo/package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

demo/src/features/output.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,17 @@
1-
import * as vscode from 'vscode'
2-
import { onExtHostInitialized } from 'vscode/extensions'
1+
import { ExtensionHostKind, onExtHostInitialized, registerExtension } from 'vscode/extensions'
32

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

5+
const { getApi } = registerExtension({
6+
name: 'outputDemo',
7+
publisher: 'codingame',
8+
version: '1.0.0',
9+
engines: {
10+
vscode: '*'
11+
}
12+
}, ExtensionHostKind.LocalProcess)
13+
14+
const vscode = await getApi()
615
const fakeOutputChannel = vscode.window.createOutputChannel('Fake output')
716
const anotherFakeOutputChannel = vscode.window.createOutputChannel('Your code', 'javascript')
817

demo/src/main.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
import './style.css'
2-
import 'monaco-editor/esm/vs/editor/editor.all.js'
3-
import * as monaco from 'monaco-editor/esm/vs/editor/editor.api.js'
4-
import 'monaco-editor/esm/vs/editor/standalone/browser/iPadShowKeyboard/iPadShowKeyboard.js'
5-
import './setup'
2+
import * as monaco from 'monaco-editor'
63
import { createConfiguredEditor, createModelReference } from 'vscode/monaco'
74
import { registerFileSystemOverlay, HTMLFileSystemProvider } from 'vscode/service-override/files'
85
import * as vscode from 'vscode'
96
import { ILogService, StandaloneServices, IPreferencesService, IEditorService, IDialogService } from 'vscode/services'
107
import { ConfirmResult } from 'vscode/service-override/views'
8+
import { clearStorage } from './setup'
119
import { CustomEditorInput } from './features/customView'
1210
import './features/debugger'
1311
import './features/search'
@@ -80,7 +78,7 @@ await vscode.window.showTextDocument(mainDocument, {
8078

8179
anotherFakeOutputChannel.replace(mainDocument.getText())
8280
vscode.workspace.onDidChangeTextDocument((e) => {
83-
if (e.document === mainDocument) {
81+
if (e.document === mainDocument && e.contentChanges.length > 0) {
8482
anotherFakeOutputChannel.replace(e.document.getText())
8583
}
8684
})
@@ -191,3 +189,7 @@ document.querySelector('#customEditorPanel')!.addEventListener('click', async ()
191189
pinned: true
192190
})
193191
})
192+
193+
document.querySelector('#clearStorage')!.addEventListener('click', async () => {
194+
clearStorage()
195+
})

demo/src/setup.ts

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,11 @@ import getSnippetServiceOverride from 'vscode/service-override/snippets'
1616
import getQuickAccessServiceOverride from 'vscode/service-override/quickaccess'
1717
import getOutputServiceOverride from 'vscode/service-override/output'
1818
import getTerminalServiceOverride from 'vscode/service-override/terminal'
19-
import getSearchAccessServiceOverride from 'vscode/service-override/search'
20-
import getMarkersAccessServiceOverride from 'vscode/service-override/markers'
21-
import getAccessibilityAccessServiceOverride from 'vscode/service-override/accessibility'
19+
import getSearchServiceOverride from 'vscode/service-override/search'
20+
import getMarkersServiceOverride from 'vscode/service-override/markers'
21+
import getAccessibilityServiceOverride from 'vscode/service-override/accessibility'
2222
import getLanguageDetectionWorkerServiceOverride from 'vscode/service-override/languageDetectionWorker'
23+
import getStorageServiceOverride, { IStorageItemsChangeEvent, StorageScope } from 'vscode/service-override/storage'
2324
import getExtensionServiceOverride from 'vscode/service-override/extensions'
2425
import EditorWorker from 'monaco-editor/esm/vs/editor/editor.worker.js?worker'
2526
import TextMateWorker from 'vscode/workers/textMate.worker?worker'
@@ -49,6 +50,8 @@ window.MonacoEnvironment = {
4950
}
5051
}
5152

53+
const onStorageChange = new monaco.Emitter<IStorageItemsChangeEvent>()
54+
5255
// Override services
5356
await initializeMonacoService({
5457
...getExtensionServiceOverride(toWorkerConfig(ExtensionHostWorker)),
@@ -71,13 +74,33 @@ await initializeMonacoService({
7174
}),
7275
...getOutputServiceOverride(),
7376
...getTerminalServiceOverride(new TerminalBackend()),
74-
...getSearchAccessServiceOverride(),
75-
...getMarkersAccessServiceOverride(),
76-
...getAccessibilityAccessServiceOverride(),
77-
...getLanguageDetectionWorkerServiceOverride()
77+
...getSearchServiceOverride(),
78+
...getMarkersServiceOverride(),
79+
...getAccessibilityServiceOverride(),
80+
...getLanguageDetectionWorkerServiceOverride(),
81+
...getStorageServiceOverride({
82+
read (scope) {
83+
return new Map(Object.entries(JSON.parse(localStorage.getItem(`storage-${scope}`) ?? '{}')))
84+
},
85+
async write (scope, data) {
86+
localStorage.setItem(`storage-${scope}`, JSON.stringify(Object.fromEntries(data.entries())))
87+
},
88+
onDidChange: onStorageChange.event
89+
})
7890
})
7991
StandaloneServices.get(ILogService).setLevel(LogLevel.Off)
8092

93+
export function clearStorage (): void {
94+
const allKeys = new Set([StorageScope.APPLICATION, StorageScope.PROFILE, StorageScope.WORKSPACE].flatMap(scope => Object.keys(JSON.parse(localStorage.getItem(`storage-${scope}`) ?? '{}'))))
95+
localStorage.removeItem(`storage-${StorageScope.APPLICATION}`)
96+
localStorage.removeItem(`storage-${StorageScope.PROFILE}`)
97+
localStorage.removeItem(`storage-${StorageScope.WORKSPACE}`)
98+
onStorageChange.fire({
99+
deleted: allKeys,
100+
changed: new Map()
101+
})
102+
}
103+
81104
await initializeVscodeExtensions()
82105

83106
renderSidebarPart(document.querySelector<HTMLDivElement>('#sidebar')!)

demo/src/style.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ body {
3333
height: 30vh;
3434
}
3535

36-
.editor {
36+
.standalone-editor {
3737
width: 100%;
3838
height: 55vh;
3939
}

demo/vite.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ export default defineConfig({
4242
'vscode/service-override/keybindings', 'vscode/service-override/textmate', 'vscode/service-override/theme', 'vscode/service-override/languages',
4343
'vscode/service-override/audioCue', 'vscode/service-override/views', 'vscode/service-override/quickaccess', 'vscode/service-override/debug',
4444
'vscode/service-override/preferences', 'vscode/service-override/snippets', 'vscode/service-override/files', 'vscode/service-override/output',
45-
'vscode/service-override/terminal', 'vscode/service-override/search', 'vscode/service-override/markers', 'vscode/service-override/accessibility',
45+
'vscode/service-override/terminal', 'vscode/service-override/search', 'vscode/service-override/markers', 'vscode/service-override/accessibility', 'vscode/service-override/storage',
4646
'vscode/service-override/languageDetectionWorker', 'vscode/default-extensions/clojure', 'vscode/default-extensions/coffeescript', 'vscode/default-extensions/cpp',
4747
'vscode/default-extensions/csharp', 'vscode/default-extensions/css', 'vscode/default-extensions/diff', 'vscode/default-extensions/fsharp', 'vscode/default-extensions/go',
4848
'vscode/default-extensions/groovy', 'vscode/default-extensions/html', 'vscode/default-extensions/java', 'vscode/default-extensions/javascript',

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@codingame/monaco-vscode-api",
3-
"version": "1.81.0-next.0",
3+
"version": "0.0.0-semantic-release",
44
"private": false,
55
"description": "VSCode public API plugged on the monaco editor",
66
"keywords": [],

0 commit comments

Comments
 (0)