Skip to content

Commit bcc5ea9

Browse files
authored
Merge pull request #152 from CodinGame/language-detection-worker
Language detection worker
2 parents dee0132 + 8c0e697 commit bcc5ea9

File tree

24 files changed

+508
-62
lines changed

24 files changed

+508
-62
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ await initialize({
120120
})
121121
```
122122

123-
Additionally, this library exposes 21 modules that include the vscode version of some services (with some glue to make it work with monaco):
123+
Additionally, this library exposes 22 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`
126126
- Notifications: `vscode/service-override/notifications`
@@ -143,6 +143,7 @@ Additionally, this library exposes 21 modules that include the vscode version of
143143
- Terminal: `vscode/service-override/terminal`
144144
- Search: `vscode/service-override/search`
145145
- Markers: `vscode/service-override/markers`
146+
- Language detection worker: `vscode/service-override/languageDetectionWorker`
146147

147148
Usage:
148149

demo/index.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ <h1>Editor</h1>
1919

2020
<button id="run">Run with debugger</button>
2121
<button id="filesystem">Attach filesystem</button>
22+
<button id="customEditorPanel">Open custom editor panel</button>
2223
</div>
2324
</div>
2425

demo/package-lock.json

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

demo/src/features/customView.ts

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { IDialogService } from 'vscode/services'
2-
import { registerCustomView, ViewContainerLocation } from 'vscode/service-override/views'
2+
import { registerCustomView, registerEditorPane, ViewContainerLocation } from 'vscode/service-override/views'
33
import * as monaco from 'monaco-editor/esm/vs/editor/editor.api.js'
44
import iconUrl from '../Visual_Studio_Code_1.35_icon.svg?url'
55

@@ -42,3 +42,21 @@ registerCustomView({
4242
}
4343
}]
4444
})
45+
46+
const { CustomEditorInput } = registerEditorPane({
47+
id: 'custom-editor-pane',
48+
name: 'Custom editor pane',
49+
renderBody (container) {
50+
container.style.display = 'flex'
51+
container.style.alignItems = 'center'
52+
container.style.justifyContent = 'center'
53+
container.innerHTML = 'This is a custom editor pane<br />You can render anything you want here'
54+
55+
return {
56+
dispose () {
57+
}
58+
}
59+
}
60+
})
61+
62+
export { CustomEditorInput }

demo/src/features/terminal.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ import ansiColors from 'ansi-colors'
33
import * as vscode from 'vscode'
44

55
export class TerminalBackend extends SimpleTerminalBackend {
6-
getDefaultSystemShell = async (): Promise<string> => 'fake'
7-
createProcess = async (): Promise<ITerminalChildProcess> => {
6+
override getDefaultSystemShell = async (): Promise<string> => 'fake'
7+
override createProcess = async (): Promise<ITerminalChildProcess> => {
88
const dataEmitter = new vscode.EventEmitter<string>()
99
const propertyEmitter = new vscode.EventEmitter<{
1010
type: string
@@ -23,13 +23,13 @@ export class TerminalBackend extends SimpleTerminalBackend {
2323
return undefined
2424
}
2525

26-
onDidChangeProperty = propertyEmitter.event
26+
override onDidChangeProperty = propertyEmitter.event
2727

28-
shutdown (immediate: boolean): void {
28+
override shutdown (immediate: boolean): void {
2929
console.log('shutdown', immediate)
3030
}
3131

32-
input (data: string): void {
32+
override input (data: string): void {
3333
for (const c of data) {
3434
if (c.charCodeAt(0) === 13) {
3535
dataEmitter.fire(`\r\n${ansiColors.green('$')} `)
@@ -49,6 +49,9 @@ export class TerminalBackend extends SimpleTerminalBackend {
4949
resize (cols: number, rows: number): void {
5050
console.log('resize', cols, rows)
5151
}
52+
53+
override clearBuffer (): void | Promise<void> {
54+
}
5255
}
5356
return new FakeTerminalProcess(1, 1, '/tmp', dataEmitter.event)
5457
}

demo/src/main.ts

Lines changed: 63 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@ import './setup'
66
import { createConfiguredEditor, createModelReference } from 'vscode/monaco'
77
import { registerFileSystemOverlay, HTMLFileSystemProvider } from 'vscode/service-override/files'
88
import * as vscode from 'vscode'
9-
import { ILogService, StandaloneServices, IPreferencesService } from 'vscode/services'
10-
import './features/customView'
9+
import { ILogService, StandaloneServices, IPreferencesService, IEditorService, IDialogService } from 'vscode/services'
10+
import { ConfirmResult } from 'vscode/service-override/views'
11+
import { CustomEditorInput } from './features/customView'
1112
import './features/debugger'
1213
import './features/search'
1314
import { anotherFakeOutputChannel } from './features/output'
@@ -16,21 +17,47 @@ import './features/intellisense'
1617
import './features/notifications'
1718
import './features/terminal'
1819

19-
import 'vscode/default-extensions/theme-defaults'
20+
import 'vscode/default-extensions/clojure'
21+
import 'vscode/default-extensions/coffeescript'
22+
import 'vscode/default-extensions/cpp'
23+
import 'vscode/default-extensions/csharp'
24+
import 'vscode/default-extensions/css'
25+
import 'vscode/default-extensions/diff'
26+
import 'vscode/default-extensions/fsharp'
27+
import 'vscode/default-extensions/go'
28+
import 'vscode/default-extensions/groovy'
29+
import 'vscode/default-extensions/html'
30+
import 'vscode/default-extensions/java'
2031
import 'vscode/default-extensions/javascript'
21-
import 'vscode/default-extensions/typescript-basics'
2232
import 'vscode/default-extensions/json'
23-
import 'vscode/default-extensions/html'
24-
import 'vscode/default-extensions/css'
33+
import 'vscode/default-extensions/julia'
34+
import 'vscode/default-extensions/lua'
35+
import 'vscode/default-extensions/markdown-basics'
36+
import 'vscode/default-extensions/objective-c'
37+
import 'vscode/default-extensions/perl'
38+
import 'vscode/default-extensions/php'
39+
import 'vscode/default-extensions/powershell'
40+
import 'vscode/default-extensions/python'
41+
import 'vscode/default-extensions/r'
42+
import 'vscode/default-extensions/ruby'
43+
import 'vscode/default-extensions/rust'
44+
import 'vscode/default-extensions/scss'
45+
import 'vscode/default-extensions/shellscript'
46+
import 'vscode/default-extensions/sql'
47+
import 'vscode/default-extensions/swift'
48+
import 'vscode/default-extensions/typescript-basics'
49+
import 'vscode/default-extensions/vb'
50+
import 'vscode/default-extensions/xml'
51+
import 'vscode/default-extensions/yaml'
2552

53+
import 'vscode/default-extensions/theme-defaults'
2654
import 'vscode/default-extensions/theme-seti'
2755
import 'vscode/default-extensions/references-view'
2856
import 'vscode/default-extensions/search-result'
2957
import 'vscode/default-extensions/configuration-editing'
3058
import 'vscode/default-extensions/markdown-math'
3159
import 'vscode/default-extensions/npm'
3260
import 'vscode/default-extensions/media-preview'
33-
import 'vscode/default-extensions/markdown-basics'
3461

3562
const modelRef = await createModelReference(monaco.Uri.file('/tmp/test.js'), `// import anotherfile
3663
let variable = 1
@@ -135,3 +162,32 @@ document.querySelector('#keybindingsui')!.addEventListener('click', async () =>
135162
await StandaloneServices.get(IPreferencesService).openGlobalKeybindingSettings(false)
136163
window.scrollTo({ top: 0, behavior: 'smooth' })
137164
})
165+
166+
document.querySelector('#customEditorPanel')!.addEventListener('click', async () => {
167+
const input = new CustomEditorInput({
168+
async confirm () {
169+
const { confirmed } = await StandaloneServices.get(IDialogService).confirm({
170+
message: 'Are you sure you want to close this INCREDIBLE editor pane?'
171+
})
172+
return confirmed ? ConfirmResult.DONT_SAVE : ConfirmResult.CANCEL
173+
},
174+
showConfirm () {
175+
return true
176+
}
177+
})
178+
let toggle = false
179+
const interval = window.setInterval(() => {
180+
const title = toggle ? 'Awesome editor pane' : 'Incredible editor pane'
181+
input.setTitle(title)
182+
input.setName(title)
183+
input.setDescription(title)
184+
toggle = !toggle
185+
}, 1000)
186+
input.onWillDispose(() => {
187+
window.clearInterval(interval)
188+
})
189+
190+
await StandaloneServices.get(IEditorService).openEditor(input, {
191+
pinned: true
192+
})
193+
})

demo/src/setup.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,13 @@ import getTerminalServiceOverride from 'vscode/service-override/terminal'
1919
import getSearchAccessServiceOverride from 'vscode/service-override/search'
2020
import getMarkersAccessServiceOverride from 'vscode/service-override/markers'
2121
import getAccessibilityAccessServiceOverride from 'vscode/service-override/accessibility'
22+
import getLanguageDetectionWorkerServiceOverride from 'vscode/service-override/languageDetectionWorker'
2223
import getExtensionServiceOverride from 'vscode/service-override/extensions'
2324
import EditorWorker from 'monaco-editor/esm/vs/editor/editor.worker.js?worker'
2425
import TextMateWorker from 'vscode/workers/textMate.worker?worker'
2526
import OutputLinkComputerWorker from 'vscode/workers/outputLinkComputer.worker?worker'
2627
import ExtensionHostWorker from 'vscode/workers/extensionHost.worker?worker'
28+
import LanguageDetectionWorker from 'vscode/workers/languageDetection.worker?worker'
2729
import * as monaco from 'monaco-editor/esm/vs/editor/editor.api.js'
2830
import { TerminalBackend } from './features/terminal'
2931
import { openNewCodeEditor } from './features/editor'
@@ -34,7 +36,8 @@ export type WorkerLoader = () => Worker
3436
const workerLoaders: Partial<Record<string, WorkerLoader>> = {
3537
editorWorkerService: () => new (toCrossOriginWorker(EditorWorker))(),
3638
textMateWorker: () => new (toCrossOriginWorker(TextMateWorker))(),
37-
outputLinkComputer: () => new (toCrossOriginWorker(OutputLinkComputerWorker))()
39+
outputLinkComputer: () => new (toCrossOriginWorker(OutputLinkComputerWorker))(),
40+
languageDetectionWorkerService: () => new (toCrossOriginWorker(LanguageDetectionWorker))()
3841
}
3942
window.MonacoEnvironment = {
4043
getWorker: function (moduleId, label) {
@@ -70,7 +73,8 @@ await initializeMonacoService({
7073
...getTerminalServiceOverride(new TerminalBackend()),
7174
...getSearchAccessServiceOverride(),
7275
...getMarkersAccessServiceOverride(),
73-
...getAccessibilityAccessServiceOverride()
76+
...getAccessibilityAccessServiceOverride(),
77+
...getLanguageDetectionWorkerServiceOverride()
7478
})
7579
StandaloneServices.get(ILogService).setLevel(LogLevel.Off)
7680

demo/src/style.css

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,18 +22,18 @@ body {
2222
#editors {
2323
position: relative;
2424
min-width: 0;
25-
height: 600px;
25+
height: 55vh;
2626
border: 1px solid var(--vscode-editorWidget-border);
2727
}
2828

2929
#panel {
3030
display: flex;
3131
flex: none;
3232
border: 1px solid var(--vscode-editorWidget-border);
33-
height: 400px;
33+
height: 30vh;
3434
}
3535

3636
.editor {
3737
width: 100%;
38-
height: 600px;
38+
height: 55vh;
3939
}

demo/vite.config.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,21 @@ export default defineConfig({
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',
4545
'vscode/service-override/terminal', 'vscode/service-override/search', 'vscode/service-override/markers', 'vscode/service-override/accessibility',
46-
'vscode/default-extensions/theme-defaults', 'vscode/default-extensions/javascript', 'vscode/default-extensions/json', 'vscode/default-extensions/theme-seti',
46+
'vscode/service-override/languageDetectionWorker', 'vscode/default-extensions/clojure', 'vscode/default-extensions/coffeescript', 'vscode/default-extensions/cpp',
47+
'vscode/default-extensions/csharp', 'vscode/default-extensions/css', 'vscode/default-extensions/diff', 'vscode/default-extensions/fsharp', 'vscode/default-extensions/go',
48+
'vscode/default-extensions/groovy', 'vscode/default-extensions/html', 'vscode/default-extensions/java', 'vscode/default-extensions/javascript',
49+
'vscode/default-extensions/json', 'vscode/default-extensions/julia', 'vscode/default-extensions/lua', 'vscode/default-extensions/markdown-basics',
50+
'vscode/default-extensions/objective-c', 'vscode/default-extensions/perl', 'vscode/default-extensions/php', 'vscode/default-extensions/powershell',
51+
'vscode/default-extensions/python', 'vscode/default-extensions/r', 'vscode/default-extensions/ruby', 'vscode/default-extensions/rust',
52+
'vscode/default-extensions/scss', 'vscode/default-extensions/shellscript', 'vscode/default-extensions/sql', 'vscode/default-extensions/swift',
53+
'vscode/default-extensions/typescript-basics', 'vscode/default-extensions/vb', 'vscode/default-extensions/xml', 'vscode/default-extensions/yaml',
54+
'vscode/default-extensions/theme-defaults', 'vscode/default-extensions/theme-seti',
4755
'vscode/default-extensions/references-view', 'vscode/default-extensions/typescript-basics', 'vscode/default-extensions/search-result',
4856
'vscode/default-extensions/typescript-language-features', 'vscode/default-extensions/markdown-language-features',
4957
'vscode/default-extensions/json-language-features', 'vscode/default-extensions/css-language-features',
5058
'vscode/default-extensions/npm', 'vscode/default-extensions/css', 'vscode/default-extensions/markdown-basics', 'vscode/default-extensions/html',
5159
'vscode/default-extensions/html-language-features', 'vscode/default-extensions/configuration-editing', 'vscode/default-extensions/media-preview', 'vscode/default-extensions/markdown-math',
52-
'vscode/workers/extensionHost.worker'
60+
'vscode/workers/extensionHost.worker', 'vscode/workers/languageDetection.worker'
5361
],
5462
esbuildOptions: {
5563
plugins: [{

package-lock.json

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

0 commit comments

Comments
 (0)