Skip to content

Commit

Permalink
Update Volar to 2.4 (#7)
Browse files Browse the repository at this point in the history
* Update Volar to 2.4
  • Loading branch information
johnsoncodehk authored Sep 13, 2024
1 parent 4adb163 commit d231297
Show file tree
Hide file tree
Showing 10 changed files with 175 additions and 150 deletions.
14 changes: 7 additions & 7 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,11 @@
"devDependencies": {
"@types/node": "latest",
"typescript": "latest",
"@volar/language-server": "~2.2.0",
"volar-service-css": "volar-2.2",
"volar-service-emmet": "volar-2.2",
"volar-service-html": "volar-2.2",
"volar-service-typescript": "volar-2.2",
"@volar/language-server": "~2.4.0",
"volar-service-css": "volar-2.4",
"volar-service-emmet": "volar-2.4",
"volar-service-html": "volar-2.4",
"volar-service-typescript": "volar-2.4",
"@superoffice/langium-crmscript": "link:packages\\langium-crmscript",
"@superoffice/language-server": "link:packages\\language-server",
"langium": "^3.0.0",
Expand All @@ -40,6 +40,6 @@
"@superoffice/webapi": "^10.3.4"
},
"workspaces": [
"packages/*"
]
"packages/*"
]
}
6 changes: 4 additions & 2 deletions packages/language-server/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@
"build:prod": "node ./scripts/build.mjs --production"
},
"devDependencies": {
"@volar/language-core": "~2.2.0",
"vscode-html-languageservice": "^5.2.0"
"@volar/language-core": "~2.4.0",
"@volar/typescript": "~2.4.0",
"muggle-string": "^0.4.1",
"vscode-html-languageservice": "^5.3.1"
}
}
39 changes: 29 additions & 10 deletions packages/language-server/src/core/superoffice.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
import {
CodeInformation,
CodeMapping,
forEachEmbeddedCode,
ExtraServiceScript,
type LanguagePlugin,
Mapping,
VirtualCode,
CodeInformation,
CodeMapping,
Segment,
toString as volarToString,
buildMappings,
} from '@volar/language-core';
import { TypeScriptExtraServiceScript } from '@volar/typescript';
import { type Segment, toString as volarToString } from 'muggle-string';
import ts, { ModuleResolutionKind } from 'typescript';
import * as html from 'vscode-html-languageservice';
import { URI } from 'vscode-uri';

// Constants
const npmImport = `import { WebApi } from "@superoffice/webapi";const SO = new WebApi();\n`;
Expand All @@ -30,13 +30,13 @@ const typescriptFeatures = {

const htmlLs = html.getLanguageService();

export function getSuperOfficeLanguageModule(): LanguagePlugin<SuperOfficeVirtualCode> {
export function getSuperOfficeLanguagePlugin(): LanguagePlugin<URI, SuperOfficeVirtualCode> {
return {
getLanguageId(uri) {
if (uri.endsWith('.jsfso')) {
if (uri.path.endsWith('.jsfso')) {
return 'jsfso';
}
else if (uri.endsWith('.crmscript-definition')) {
else if (uri.path.endsWith('.crmscript-definition')) {
return 'crmscript-definition';
}
},
Expand All @@ -53,7 +53,7 @@ export function getSuperOfficeLanguageModule(): LanguagePlugin<SuperOfficeVirtua
return undefined;
},
getExtraServiceScripts(fileName, root) {
const scripts: ExtraServiceScript[] = [];
const scripts: TypeScriptExtraServiceScript[] = [];
for (const code of forEachEmbeddedCode(root)) {
if (code.languageId === 'javascript') {
scripts.push({
Expand Down Expand Up @@ -315,3 +315,22 @@ class SuperOfficeVirtualCode implements VirtualCode {
}
}
}

function buildMappings<T>(chunks: Segment<T>[]) {
let length = 0;
const mappings: Mapping<T>[] = [];
for (const segment of chunks) {
if (typeof segment === 'string') {
length += segment.length;
} else {
mappings.push({
sourceOffsets: [segment[2]],
generatedOffsets: [length],
lengths: [segment[0].length],
data: segment[3]!,
});
length += segment[0].length;
}
}
return mappings;
}
8 changes: 8 additions & 0 deletions packages/language-server/src/plugins/crmscript-definition.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,14 @@ export function create({
}): LanguageServicePlugin {
return {
name: 'crmscript',
capabilities: {
completionProvider: {},
hoverProvider: true,
diagnosticProvider: {
interFileDependencies: false,
workspaceDiagnostics: false,
},
},
create(): LanguageServicePluginInstance {
return {
async provideCompletionItems(document: TextDocument, position: Position, _: CompletionContext, token: CancellationToken) {
Expand Down
10 changes: 6 additions & 4 deletions packages/language-server/src/server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ import { create as createEmmetService } from 'volar-service-emmet';
import { create as createHtmlService } from 'volar-service-html';
import { create as createCssService } from 'volar-service-css';
import { create as createTypeScriptService } from 'volar-service-typescript';
import { createServer, createConnection, createTypeScriptProjectProvider, loadTsdkByPath } from '@volar/language-server/node.js';
import { createServer, createConnection, createTypeScriptProject, loadTsdkByPath } from '@volar/language-server/node.js';

import { create as createCrmscriptService } from './plugins/crmscript-definition.js';
import { getSuperOfficeLanguageModule } from './core/superoffice.js';
import { getSuperOfficeLanguagePlugin } from './core/superoffice.js';

import { createCrmscriptServices } from '@superoffice/langium-crmscript/src/language/crmscript-module.js';
import { NodeFileSystem } from 'langium/node';
Expand Down Expand Up @@ -36,20 +36,22 @@ connection.onInitialize(params => {
const tsdk = loadTsdkByPath(params.initializationOptions.typescript.tsdk, params.locale);
return server.initialize(
params,
createTypeScriptProject(tsdk.typescript, tsdk.diagnosticMessages, () => ({
languagePlugins: [getSuperOfficeLanguagePlugin()],
})),
[
createHtmlService(),
createCssService(),
createEmmetService({}),
...createTypeScriptService(tsdk.typescript, {}),
createCrmscriptService({ sharedService: shared, definitionService: Definition }),
],
createTypeScriptProjectProvider(tsdk.typescript, tsdk.diagnosticMessages, () => [getSuperOfficeLanguageModule()]),
);
});

connection.onInitialized(params => {
shared.workspace.WorkspaceManager.initialized(params);
return server.initialized;
server.initialized();
});

connection.onShutdown(server.shutdown);
7 changes: 4 additions & 3 deletions packages/monaco/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,10 @@
"preview": "vite preview"
},
"devDependencies": {
"@volar/language-service": "~2.2.0",
"@volar/monaco": "~2.2.0",
"@volar/jsdelivr": "~2.4.0",
"@volar/language-service": "~2.4.0",
"@volar/monaco": "~2.4.0",
"vite": "^5.2.10",
"monaco-editor": "^0.47.0"
"monaco-editor": "^0.51.0"
}
}
41 changes: 21 additions & 20 deletions packages/monaco/src/custom.worker.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,17 @@
import * as worker from 'monaco-editor/esm/vs/editor/editor.worker';
import type * as monaco from 'monaco-editor';
import {
createTypeScriptWorkerService,
ServiceEnvironment,
activateAutomaticTypeAcquisition,
createTypeScriptWorkerLanguageService,
type LanguageServiceEnvironment,
} from '@volar/monaco/worker.js';


import { createNpmFileSystem } from '@volar/jsdelivr';
import { URI } from 'vscode-uri';

// import { service as crmscriptLanguageService } from "@superoffice/language-service/crmscriptLanguageService.js";
// import { suoLanguagePlugin } from "@superoffice/language-service/suoLanguagePlugin.js";

import { create as createCrmscriptService } from '@superoffice/language-server/src/plugins/crmscript-definition.js';
import { getSuperOfficeLanguageModule } from '@superoffice/language-server/src/core/superoffice.js';
import { getSuperOfficeLanguagePlugin } from '@superoffice/language-server/src/core/superoffice.js';

import ts from 'typescript';
import { create as createEmmetService } from 'volar-service-emmet';
Expand All @@ -28,37 +27,39 @@ const { shared, Definition } = createCrmscriptServices({ ...NodeFileSystem });

self.onmessage = () => {
worker.initialize((ctx: monaco.worker.IWorkerContext) => {
const env: ServiceEnvironment = {
workspaceFolder: 'file:///',
typescript: {
uriToFileName: (uri: string) => uri.substring('file://'.length),
fileNameToUri: (fileName: string) => 'file://' + fileName,
},
const env: LanguageServiceEnvironment = {
workspaceFolders: [URI.parse('file:///')],
fs: createNpmFileSystem(),
};
const asFileName = (uri: URI) => uri.path
const asUri = (fileName: string): URI => URI.file(fileName)

activateAutomaticTypeAcquisition(env);
return createTypeScriptWorkerService({
return createTypeScriptWorkerLanguageService({
typescript: ts,
compilerOptions: {
...ts.getDefaultCompilerOptions(),
allowJs: true,
module: ts.ModuleKind.ESNext,
...ts.getDefaultCompilerOptions(),
allowJs: true,
module: ts.ModuleKind.ESNext,
target: ts.ScriptTarget.ESNext,
},
},
workerContext: ctx,
env,
languagePlugins: [
//TODO: Figure this out
getSuperOfficeLanguageModule()
getSuperOfficeLanguagePlugin()
],
servicePlugins: [
languageServicePlugins: [
// ...
createHtmlService(),
createCssService(),
createEmmetService({}),
...createTypeScriptService(ts),
createCrmscriptService({ sharedService: shared, definitionService: Definition }),
],
uriConverter: {
asFileName,
asUri,
},
});
});
};
5 changes: 2 additions & 3 deletions packages/vscode/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -166,10 +166,9 @@
},
"devDependencies": {
"@types/vscode": "^1.82.0",
"@volar/vscode": "~2.2.0",
"@volar/vscode": "~2.4.0",
"@types/uuid": "^9.0.8",
"uuid": "^9.0.1",
"openid-client": "^5.6.5",
"vscode-languageclient": "^9.0.1"
"openid-client": "^5.6.5"
}
}
2 changes: 1 addition & 1 deletion packages/vscode/src/extension.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import * as serverProtocol from '@volar/language-server/protocol';
import { LabsInfo, createLabsInfo, getTsdk } from '@volar/vscode';
import * as vscode from 'vscode';
import * as lsp from 'vscode-languageclient/node';
import * as lsp from '@volar/vscode/node';
import { TreeViewDataProvider } from './providers/treeViewDataProvider';
//import { VirtualFileSystemProvider } from './handlers/virtualWorkspaceFileManager';
import { CONFIG_COMMANDS } from './config';
Expand Down
Loading

0 comments on commit d231297

Please sign in to comment.