diff --git a/.changeset/unlucky-items-fly.md b/.changeset/unlucky-items-fly.md new file mode 100644 index 000000000..fa06602d1 --- /dev/null +++ b/.changeset/unlucky-items-fly.md @@ -0,0 +1,7 @@ +--- +"vscode-ui5-language-assistant": patch +"@ui5-language-assistant/vscode-ui5-language-assistant-bas-ext": patch +"@ui5-language-assistant/language-server": patch +--- + +activation process fine tuning diff --git a/packages/language-server/jest.config.js b/packages/language-server/jest.config.js index 406cef575..5794b8ae8 100644 --- a/packages/language-server/jest.config.js +++ b/packages/language-server/jest.config.js @@ -3,6 +3,10 @@ const defaultConfig = require("../../jest.config"); module.exports = { ...defaultConfig, + coveragePathIgnorePatterns: [ + "/src/server.ts", + "/scripts/update-diagnostics-snapshots.js", + ], globals: { "ts-jest": { tsconfig: join(__dirname, "tsconfig-test.json"), diff --git a/packages/language-server/scripts/update-diagnostics-snapshots.js b/packages/language-server/scripts/update-diagnostics-snapshots.js index cc590869e..859a69100 100644 --- a/packages/language-server/scripts/update-diagnostics-snapshots.js +++ b/packages/language-server/scripts/update-diagnostics-snapshots.js @@ -1,4 +1,3 @@ -/* istanbul ignore file - dev scripts don't need tests */ const klawSync = require("klaw-sync"); const { forEach, filter, map } = require("lodash"); const { resolve, dirname } = require("path"); diff --git a/packages/language-server/src/server.ts b/packages/language-server/src/server.ts index 023b51754..80b01e9d7 100644 --- a/packages/language-server/src/server.ts +++ b/packages/language-server/src/server.ts @@ -1,4 +1,3 @@ -/* istanbul ignore file */ import { forEach } from "lodash"; import { createConnection, diff --git a/packages/vscode-ui5-language-assistant/jest.config.js b/packages/vscode-ui5-language-assistant/jest.config.js index 406cef575..bd373919d 100644 --- a/packages/vscode-ui5-language-assistant/jest.config.js +++ b/packages/vscode-ui5-language-assistant/jest.config.js @@ -3,6 +3,10 @@ const defaultConfig = require("../../jest.config"); module.exports = { ...defaultConfig, + coveragePathIgnorePatterns: [ + "/scripts/package-vsix.js", + "/src/extension.ts", + ], globals: { "ts-jest": { tsconfig: join(__dirname, "tsconfig-test.json"), diff --git a/packages/vscode-ui5-language-assistant/package.json b/packages/vscode-ui5-language-assistant/package.json index 92dc65962..b5d2ff436 100644 --- a/packages/vscode-ui5-language-assistant/package.json +++ b/packages/vscode-ui5-language-assistant/package.json @@ -18,7 +18,7 @@ "main": "./lib/src/extension", "activationEvents": [ "onFileSystem:manifest-schema", - "*" + "onLanguage:xml" ], "contributes": { "semanticTokenScopes": [ diff --git a/packages/vscode-ui5-language-assistant/scripts/package-vsix.js b/packages/vscode-ui5-language-assistant/scripts/package-vsix.js index 52bdb82ce..3e3612078 100644 --- a/packages/vscode-ui5-language-assistant/scripts/package-vsix.js +++ b/packages/vscode-ui5-language-assistant/scripts/package-vsix.js @@ -1,4 +1,3 @@ -/* istanbul ignore file */ /** * Workaround to: https://github.com/microsoft/vscode-vsce/issues/300 * This "sorts of" implements the (broken) `yarn list` with support for workspaces diff --git a/packages/vscode-ui5-language-assistant/src/extension.ts b/packages/vscode-ui5-language-assistant/src/extension.ts index 00067c1cb..87cc0a11f 100644 --- a/packages/vscode-ui5-language-assistant/src/extension.ts +++ b/packages/vscode-ui5-language-assistant/src/extension.ts @@ -1,4 +1,3 @@ -/* istanbul ignore file */ import { resolve } from "path"; import { readFileSync } from "fs"; import { @@ -55,24 +54,15 @@ let client: LanguageClient; let statusBarItem: StatusBarItem; let currentModel: UI5Model | undefined; -export async function activate(context: ExtensionContext): Promise { - // create the LanguageClient (+Server) - client = createLanguageClient(context); - - // register semantic token provider - context.subscriptions.push( - languages.registerDocumentSemanticTokensProvider( - { language: "xml" }, - bindingSemanticTokensProvider, - bindingLegend - ) - ); - +function init(context: ExtensionContext): void { // create the StatusBarItem which displays the used UI5 version statusBarItem = createStatusBarItem(context); - // show/hide and update the status bar + // create the LanguageClient (+Server) + client = createLanguageClient(context); + client.start().then(() => { + // show/hide and update the status bar client.onNotification( "UI5LanguageAssistant/ui5Model", async (model: UI5Model): Promise => await updateCurrentModel(model) @@ -82,31 +72,56 @@ export async function activate(context: ExtensionContext): Promise { (error: Error) => handleContextError(error) ); }); +} + +export async function activate(context: ExtensionContext): Promise { + // complete initialization task asynchronously + init(context); + + // register semantic token provider + context.subscriptions.push( + languages.registerDocumentSemanticTokensProvider( + { language: "xml" }, + bindingSemanticTokensProvider, + bindingLegend + ) + ); + window.onDidChangeActiveTextEditor(async () => { await updateCurrentModel(undefined); }); - languages.registerDocumentFormattingEditProvider("xml", { - provideDocumentFormattingEdits(document: TextDocument): TextEdit[] { - if (isXMLView(document.uri.fsPath)) { - return formatDocument(document); - } - return []; - }, - }); - languages.registerDocumentRangeFormattingEditProvider("xml", { - provideDocumentRangeFormattingEdits(document, range, options): TextEdit[] { - if (isXMLView(document.uri.fsPath)) { - return formatRange(document, range, options); - } - return []; - }, - }); - client.start(); + context.subscriptions.push( + languages.registerDocumentFormattingEditProvider("xml", { + provideDocumentFormattingEdits(document: TextDocument): TextEdit[] { + if (isXMLView(document.uri.fsPath)) { + return formatDocument(document); + } + return []; + }, + }) + ); - const provider = await getManifestSchemaProvider(context); context.subscriptions.push( - workspace.registerTextDocumentContentProvider(MANIFEST_SCHEMA, provider) + languages.registerDocumentRangeFormattingEditProvider("xml", { + provideDocumentRangeFormattingEdits( + document, + range, + options + ): TextEdit[] { + if (isXMLView(document.uri.fsPath)) { + return formatRange(document, range, options); + } + return []; + }, + }) + ); + + context.subscriptions.push( + workspace.registerTextDocumentContentProvider( + MANIFEST_SCHEMA, + await getManifestSchemaProvider(context) + ) ); } diff --git a/sonar-project.properties b/sonar-project.properties index ecfb85bff..d3a02e312 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -2,6 +2,7 @@ sonar.organization=sap-1 sonar.projectKey=SAP_ui5-language-assistant sonar.sources=. sonar.inclusions=**/*.ts +sonar.coverage.exclusions=packages/language-server/src/server.ts, packages/language-server/scripts/update-diagnostics-snapshots.js, packages/vscode-ui5-language-assistant/scripts/package-vsix.js, packages/vscode-ui5-language-assistant/src/extension.ts sonar.exclusions=**/*.test.ts, **/test/**/*, **/test-packages/**/*, **/scripts/**/*.ts sonar.cpd.exclusions=**/i18n.ts, **/*.test.ts, **/test/**/*, **/test-packages/**/*, **/scripts/**/*.ts sonar.tests=.