Skip to content

Commit 9af10ad

Browse files
authored
Merge pull request #43 from CodinGame/update-to-monaco-vscode-api
Use monaco-vscode-api
2 parents 71b8d1e + c5089cf commit 9af10ad

16 files changed

+185
-135
lines changed

browserMock.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,4 +49,11 @@ Object.defineProperty(window, 'ResizeObserver', {
4949
constructor(stringUrl) {}
5050
observe() {}
5151
}
52+
})
53+
54+
Object.defineProperty(window, 'TextEncoder', {
55+
value: class TextObserver {
56+
constructor(stringUrl) {}
57+
encode(src) { return src }
58+
}
5259
})

package-lock.json

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

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
"@codingame/monaco-editor-wrapper": "^1.14.5",
2626
"@codingame/monaco-jsonrpc": "^0.4.0",
2727
"sweetalert": "^2.1.2",
28+
"vscode": "npm:@codingame/monaco-vscode-api@^1.68.2",
2829
"vscode-languageserver-protocol": "^3.17.1"
2930
},
3031
"devDependencies": {
@@ -46,7 +47,7 @@
4647
"@types/jest": "^28.1.1",
4748
"@types/once": "^1.4.0",
4849
"@types/rollup-plugin-node-builtins": "^2.1.2",
49-
"@types/vscode": "^1.67.0",
50+
"@types/vscode": "^1.68.0",
5051
"@typescript-eslint/eslint-plugin": "5.27.1",
5152
"@typescript-eslint/parser": "5.27.1",
5253
"canvas": "^2.9.1",
@@ -62,7 +63,7 @@
6263
"eslint-plugin-unused-imports": "2.0.0",
6364
"jest": "^28.1.1",
6465
"jest-environment-jsdom": "^28.1.1",
65-
"monaco-languageclient": "^1.1.0",
66+
"monaco-languageclient": "^2.0.0-dev.0",
6667
"proxy-polyfill": "^0.3.2",
6768
"rollup": "2.75.6",
6869
"rollup-plugin-dts": "^4.2.2",
@@ -108,7 +109,6 @@
108109
]
109110
},
110111
"moduleNameMapper": {
111-
"^vscode$": "monaco-languageclient/vscode-compatibility",
112112
"^monaco-editor$": "monaco-editor/esm/vs/editor/editor.api",
113113
"^monaco-editor-core$": "monaco-editor/esm/vs/editor/editor.api"
114114
}

rollup.config.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,6 @@ export default rollup.defineConfig({
7575
}, {
7676
find: /^(monaco-editor|monaco-editor-core)$/,
7777
replacement: 'monaco-editor/esm/vs/editor/editor.api'
78-
}, {
79-
find: 'vscode',
80-
replacement: require.resolve('monaco-languageclient/vscode-compatibility')
8178
}]
8279
}),
8380
{

src/createLanguageClient.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import { MessageReader, MessageWriter, Message, Event, DataCallback, Disposable, PartialMessageInfo } from 'vscode-jsonrpc'
22
import { Uri } from 'monaco-editor'
33
import {
4-
MonacoLanguageClient, Middleware, ErrorHandler, IConnectionProvider, InitializeParams, RegistrationRequest, RegistrationParams, UnregistrationRequest, UnregistrationParams, LanguageClientOptions, MessageTransports, InitializeRequest
4+
MonacoLanguageClient, Middleware, ErrorHandler, IConnectionProvider, LanguageClientOptions, MessageTransports
55
} from 'monaco-languageclient'
6+
import { InitializeParams, InitializeRequest, RegistrationParams, RegistrationRequest, UnregistrationParams, UnregistrationRequest } from 'vscode-languageserver-protocol'
67
import { registerExtensionFeatures } from './extensions'
78
import { LanguageClientId } from './languageClientOptions'
89
import { Infrastructure } from './infrastructure'

src/extensions.ts

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import { monaco, registerTextModelContentProvider } from '@codingame/monaco-editor-wrapper'
22
import {
3-
Disposable,
4-
ServerCapabilities, DocumentSelector, MonacoLanguageClient, Services,
5-
TextDocumentSyncOptions, TextDocument, DidSaveTextDocumentNotification, Emitter, DisposableCollection
3+
Disposable, MonacoLanguageClient, DisposableCollection
64
} from 'monaco-languageclient'
75
import { StaticFeature, FeatureState, ProtocolRequestType } from 'vscode-languageclient/lib/common/api'
6+
import { DidSaveTextDocumentNotification, DocumentSelector, Emitter, ServerCapabilities, TextDocumentSyncOptions } from 'vscode-languageserver-protocol'
7+
import * as vscode from 'vscode'
88
import { updateFile, willShutdownNotificationType, WillShutdownParams } from './customRequests'
99
import { Infrastructure } from './infrastructure'
1010
import { LanguageClient, LanguageClientManager } from './languageClient'
@@ -28,22 +28,22 @@ export class InitializeTextDocumentFeature implements StaticFeature {
2828
}
2929

3030
const languageClient = this.languageClient
31-
async function saveFile (textDocument: TextDocument) {
32-
if (Services.get().languages.match(documentSelector!, textDocument)) {
33-
await updateFile(textDocument.uri, textDocument.getText(), languageClient)
31+
async function saveFile (textDocument: vscode.TextDocument) {
32+
if (documentSelector != null && vscode.languages.match(documentSelector, textDocument) > 0) {
33+
await updateFile(textDocument.uri.toString(), textDocument.getText(), languageClient)
3434

3535
// Always send notification even if the server doesn't support it (because csharp register the didSave feature too late)
36-
languageClient.sendNotification(DidSaveTextDocumentNotification.type, {
36+
await languageClient.sendNotification(DidSaveTextDocumentNotification.type, {
3737
textDocument: {
38-
uri: textDocument.uri
38+
uri: textDocument.uri.toString()
3939
},
4040
text: textDocument.getText()
4141
})
4242
}
4343
}
4444

45-
this.didOpenTextDocumentDisposable = Services.get().workspace.onDidOpenTextDocument(saveFile)
46-
Services.get().workspace.textDocuments.forEach(saveFile)
45+
this.didOpenTextDocumentDisposable = vscode.workspace.onDidOpenTextDocument(saveFile)
46+
vscode.workspace.textDocuments.forEach(saveFile)
4747
}
4848

4949
getState (): FeatureState {
@@ -66,18 +66,18 @@ class CobolResolveSubroutineFeature implements StaticFeature {
6666
fillClientCapabilities (): void {}
6767

6868
initialize (capabilities: ServerCapabilities, documentSelector: DocumentSelector): void {
69-
this.onRequestDisposable = this.languageClient.onRequest(ResolveCobolSubroutineRequestType, (routineName: string) => {
69+
this.onRequestDisposable = this.languageClient.onRequest(ResolveCobolSubroutineRequestType, (routineName: string): string => {
7070
const constantRoutinePaths: Partial<Record<string, string>> = {
71-
'assert-equals': `${Services.get().workspace.rootUri ?? 'file:/tmp/project'}/deps/assert-equals.cbl`
71+
'assert-equals': `file:${vscode.workspace.rootPath ?? '/tmp/project'}/deps/assert-equals.cbl`
7272
}
7373
const contantRoutinePath = constantRoutinePaths[routineName.toLowerCase()]
7474
if (contantRoutinePath != null) {
7575
return contantRoutinePath
7676
}
77-
return Services.get().workspace.textDocuments
78-
.filter(textDocument => Services.get().languages.match(documentSelector, textDocument))
77+
return vscode.workspace.textDocuments
78+
.filter(textDocument => vscode.languages.match(documentSelector, textDocument))
7979
.filter(document => document.getText().match(new RegExp(`PROGRAM-ID\\.\\W+${routineName}\\.`, 'gi')))
80-
.sort((a, b) => a.uri.localeCompare(b.uri))[0]?.uri
80+
.sort((a, b) => a.uri.toString().localeCompare(b.uri.toString()))[0]?.uri.toString()
8181
})
8282
}
8383

@@ -131,9 +131,9 @@ export class FileSystemFeature implements StaticFeature {
131131
}
132132
}))
133133
disposableCollection.push(getServices().workspace.registerSaveDocumentHandler({
134-
async saveTextContent (textDocument, reason) {
135-
if (languageClientManager.isModelManaged(textDocument)) {
136-
await infrastructure.saveFileContent?.(textDocument, reason, languageClientManager)
134+
async saveTextContent (document, reason) {
135+
if (languageClientManager.isModelManaged(document)) {
136+
await infrastructure.saveFileContent?.(document, reason, languageClientManager)
137137
}
138138
}
139139
}))

src/index.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { MessageTransports, TextDocument, TextDocumentSaveReason } from 'monaco-languageclient'
1+
import { MessageTransports } from 'monaco-languageclient'
22
import 'proxy-polyfill'
33
import type { WorkspaceFolder } from 'vscode'
44
import { CodinGameInfrastructure, Infrastructure } from './infrastructure'
@@ -24,8 +24,6 @@ export type {
2424
WillShutdownParams,
2525
Infrastructure,
2626
WorkspaceFolder,
27-
TextDocument,
28-
TextDocumentSaveReason,
2927
LanguageClientOptions,
3028
LanguageClientManagerOptions,
3129
MessageTransports

src/infrastructure.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import { IWebSocket, WebSocketMessageReader, WebSocketMessageWriter, toSocket } from '@codingame/monaco-jsonrpc'
2-
import { MessageTransports, TextDocument, TextDocumentSaveReason } from 'monaco-languageclient'
2+
import { MessageTransports } from 'monaco-languageclient'
33
import * as monaco from 'monaco-editor'
44
import type * as vscode from 'vscode'
5+
import { TextDocument } from 'vscode-languageserver-textdocument'
6+
import { TextDocumentSaveReason } from 'vscode-languageserver-protocol'
57
import { getFile, updateFile } from './customRequests'
68
import { LanguageClientManager } from './languageClient'
79
import { LanguageClientId, LanguageClientOptions } from './languageClientOptions'
@@ -33,7 +35,7 @@ export interface Infrastructure {
3335
* @param reason The reason of the save
3436
* @param languageClient The languageclient we're trying to save the file to
3537
*/
36-
saveFileContent? (document: TextDocument, reason: TextDocumentSaveReason, languageClient: LanguageClientManager): Promise<void>
38+
saveFileContent? (document: vscode.TextDocument, reason: vscode.TextDocumentSaveReason, languageClient: LanguageClientManager): Promise<void>
3739
/**
3840
* Get a text file content as a model
3941
* @param resource the Uri of the file
@@ -96,7 +98,7 @@ export abstract class CodinGameInfrastructure implements Infrastructure {
9698
name: 'main'
9799
}]
98100

99-
public async saveFileContent (document: TextDocument, reason: TextDocumentSaveReason, languageClient: LanguageClientManager): Promise<void> {
101+
public async saveFileContent (document: vscode.TextDocument, reason: TextDocumentSaveReason, languageClient: LanguageClientManager): Promise<void> {
100102
if (languageClient.isConnected()) {
101103
await updateFile(document.uri.toString(), document.getText(), languageClient)
102104
}

src/languageClient.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import * as monaco from 'monaco-editor'
22
import {
3-
CloseAction, ErrorAction, MonacoLanguageClient, Emitter, Event, TextDocument, Services, State, DisposableCollection, CancellationToken, RequestType, NotificationType, LogMessageNotification
3+
CloseAction, ErrorAction, MonacoLanguageClient, State, DisposableCollection
44
} from 'monaco-languageclient'
55
import delay from 'delay'
6+
import { CancellationToken, Emitter, NotificationType, RequestType, Event, LogMessageNotification } from 'vscode-languageserver-protocol'
7+
import * as vscode from 'vscode'
68
import { updateServices } from './services'
79
import createLanguageClient from './createLanguageClient'
810
import { WillShutdownParams } from './customRequests'
@@ -12,7 +14,7 @@ import { getLanguageClientOptions, LanguageClientId, LanguageClientOptions } fro
1214
import { Infrastructure } from './infrastructure'
1315

1416
export interface LanguageClient {
15-
sendNotification<P>(type: NotificationType<P>, params?: P): void
17+
sendNotification<P>(type: NotificationType<P>, params?: P): Promise<void>
1618
sendRequest<P, R, E> (request: RequestType<P, R, E>, params: P, token?: CancellationToken): Promise<R>
1719
}
1820

@@ -94,11 +96,11 @@ export class LanguageClientManager implements LanguageClient {
9496
return this.onErrorEmitter.event
9597
}
9698

97-
isModelManaged (document: TextDocument): boolean {
99+
isModelManaged (document: vscode.TextDocument): boolean {
98100
if (this.clientOptions.documentSelector == null) {
99101
return false
100102
}
101-
return Services.get().languages.match(this.clientOptions.documentSelector, document)
103+
return vscode.languages.match(this.clientOptions.documentSelector, document) > 0
102104
}
103105

104106
isDisposed (): boolean {

0 commit comments

Comments
 (0)