From d03e2c286f43a244cf75a585b01e099b91b58011 Mon Sep 17 00:00:00 2001 From: Martin Aeschlimann Date: Fri, 9 Feb 2018 10:41:20 +0100 Subject: [PATCH] [json] enable strict checks on server --- extensions/json/server/package.json | 4 +-- extensions/json/server/src/jsonServerMain.ts | 30 ++++++++-------- extensions/json/server/src/utils/errors.ts | 18 +++++----- extensions/json/server/tsconfig.json | 3 +- extensions/json/server/yarn.lock | 38 ++++++++++---------- 5 files changed, 47 insertions(+), 46 deletions(-) diff --git a/extensions/json/server/package.json b/extensions/json/server/package.json index 2d0d485bdb0..34d3b370410 100644 --- a/extensions/json/server/package.json +++ b/extensions/json/server/package.json @@ -10,8 +10,8 @@ "dependencies": { "jsonc-parser": "^1.0.1", "request-light": "^0.2.2", - "vscode-json-languageservice": "^3.0.6", - "vscode-languageserver": "^3.5.0", + "vscode-json-languageservice": "^3.0.7", + "vscode-languageserver": "^4.0.0-next.3", "vscode-nls": "^3.2.1", "vscode-uri": "^1.0.1" }, diff --git a/extensions/json/server/src/jsonServerMain.ts b/extensions/json/server/src/jsonServerMain.ts index 9b01f30cd7d..1adbcfbf546 100644 --- a/extensions/json/server/src/jsonServerMain.ts +++ b/extensions/json/server/src/jsonServerMain.ts @@ -17,8 +17,8 @@ import fs = require('fs'); import URI from 'vscode-uri'; import * as URL from 'url'; import Strings = require('./utils/strings'); -import { formatError, runSafe } from './utils/errors'; -import { JSONDocument, JSONSchema, LanguageSettings, getLanguageService, DocumentLanguageSettings } from 'vscode-json-languageservice'; +import { formatError, runSafe, runSafeAsync } from './utils/errors'; +import { JSONDocument, JSONSchema, getLanguageService, DocumentLanguageSettings, SchemaConfiguration } from 'vscode-json-languageservice'; import { getLanguageModelCache } from './languageModelCache'; interface ISchemaAssociations { @@ -40,7 +40,7 @@ namespace SchemaContentChangeNotification { // Create a connection for the server let connection: IConnection = createConnection(); -process.on('unhandledRejection', e => { +process.on('unhandledRejection', (e: any) => { connection.console.error(formatError(`Unhandled exception`, e)); }); @@ -62,7 +62,7 @@ let clientDynamicRegisterSupport = false; connection.onInitialize((params: InitializeParams): InitializeResult => { function hasClientCapability(...keys: string[]) { - let c = params.capabilities; + let c = params.capabilities as any; for (let i = 0; c && i < keys.length; i++) { c = c[keys[i]]; } @@ -146,9 +146,9 @@ interface JSONSchemaSettings { schema?: JSONSchema; } -let jsonConfigurationSettings: JSONSchemaSettings[] = void 0; -let schemaAssociations: ISchemaAssociations = void 0; -let formatterRegistration: Thenable = null; +let jsonConfigurationSettings: JSONSchemaSettings[] | undefined = void 0; +let schemaAssociations: ISchemaAssociations | undefined = void 0; +let formatterRegistration: Thenable | null = null; // The settings have changed. Is send on server activation as well. connection.onDidChangeConfiguration((change) => { @@ -184,10 +184,10 @@ connection.onNotification(SchemaContentChangeNotification.type, uri => { }); function updateConfiguration() { - let languageSettings: LanguageSettings = { + let languageSettings = { validate: true, allowComments: true, - schemas: [] + schemas: new Array() }; if (schemaAssociations) { for (var pattern in schemaAssociations) { @@ -292,7 +292,7 @@ function getJSONDocument(document: TextDocument): JSONDocument { } connection.onCompletion(textDocumentPosition => { - return runSafe(() => { + return runSafeAsync(() => { let document = documents.get(textDocumentPosition.textDocument.uri); let jsonDocument = getJSONDocument(document); return languageService.doComplete(document, textDocumentPosition.position, jsonDocument); @@ -300,13 +300,13 @@ connection.onCompletion(textDocumentPosition => { }); connection.onCompletionResolve(completionItem => { - return runSafe(() => { + return runSafeAsync(() => { return languageService.doResolve(completionItem); - }, null, `Error while resolving completion proposal`); + }, completionItem, `Error while resolving completion proposal`); }); connection.onHover(textDocumentPositionParams => { - return runSafe(() => { + return runSafeAsync(() => { let document = documents.get(textDocumentPositionParams.textDocument.uri); let jsonDocument = getJSONDocument(document); return languageService.doHover(document, textDocumentPositionParams.position, jsonDocument); @@ -329,13 +329,13 @@ connection.onDocumentRangeFormatting(formatParams => { }); connection.onRequest(DocumentColorRequest.type, params => { - return runSafe(() => { + return runSafeAsync(() => { let document = documents.get(params.textDocument.uri); if (document) { let jsonDocument = getJSONDocument(document); return languageService.findDocumentColors(document, jsonDocument); } - return []; + return Promise.resolve([]); }, [], `Error while computing document colors for ${params.textDocument.uri}`); }); diff --git a/extensions/json/server/src/utils/errors.ts b/extensions/json/server/src/utils/errors.ts index d5a0c8e7d05..27ece60c051 100644 --- a/extensions/json/server/src/utils/errors.ts +++ b/extensions/json/server/src/utils/errors.ts @@ -16,16 +16,16 @@ export function formatError(message: string, err: any): string { return message; } -export function runSafe(func: () => Thenable | T, errorVal: T, errorMessage: string): Thenable | T { +export function runSafeAsync(func: () => Thenable, errorVal: T, errorMessage: string): Thenable { + let t = func(); + return t.then(void 0, e => { + console.error(formatError(errorMessage, e)); + return errorVal; + }); +} +export function runSafe(func: () => T, errorVal: T, errorMessage: string): T { try { - let t = func(); - if (t instanceof Promise) { - return t.then(void 0, e => { - console.error(formatError(errorMessage, e)); - return errorVal; - }); - } - return t; + return func(); } catch (e) { console.error(formatError(errorMessage, e)); return errorVal; diff --git a/extensions/json/server/tsconfig.json b/extensions/json/server/tsconfig.json index e085b24514b..5f15678fc54 100644 --- a/extensions/json/server/tsconfig.json +++ b/extensions/json/server/tsconfig.json @@ -8,7 +8,8 @@ "noUnusedLocals": true, "lib": [ "es5", "es2015.promise" - ] + ], + "strict": true }, "include": [ "src/**/*" diff --git a/extensions/json/server/yarn.lock b/extensions/json/server/yarn.lock index 6e12ae6fd78..169311dfdf0 100644 --- a/extensions/json/server/yarn.lock +++ b/extensions/json/server/yarn.lock @@ -64,35 +64,35 @@ request-light@^0.2.2: https-proxy-agent "2.1.1" vscode-nls "^2.0.2" -vscode-json-languageservice@^3.0.6: - version "3.0.6" - resolved "https://registry.yarnpkg.com/vscode-json-languageservice/-/vscode-json-languageservice-3.0.6.tgz#21ea07cfc5cd0748bb1a9f54f8011d3c54667dc7" +vscode-json-languageservice@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/vscode-json-languageservice/-/vscode-json-languageservice-3.0.7.tgz#dc00117d51d4a7ac3bde9204afa701f962f00736" dependencies: jsonc-parser "^1.0.1" - vscode-languageserver-types "^3.5.0" + vscode-languageserver-types "^3.6.0-next.1" vscode-nls "^2.0.2" vscode-uri "^1.0.1" -vscode-jsonrpc@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-3.5.0.tgz#87239d9e166b2d7352245b8a813597804c1d63aa" +vscode-jsonrpc@^3.6.0-next.1: + version "3.6.0-next.1" + resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-3.6.0-next.1.tgz#3cb463dffe5842d6aec16718ca9252708cd6aabe" -vscode-languageserver-protocol@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.5.0.tgz#067c5cbe27709795398d119692c97ebba1452209" +vscode-languageserver-protocol@^3.6.0-next.3: + version "3.6.0-next.4" + resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.6.0-next.4.tgz#5b9940e4d6afafd5b63f9731dbd3a9bcc65b3719" dependencies: - vscode-jsonrpc "^3.5.0" - vscode-languageserver-types "^3.5.0" + vscode-jsonrpc "^3.6.0-next.1" + vscode-languageserver-types "^3.6.0-next.1" -vscode-languageserver-types@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.5.0.tgz#e48d79962f0b8e02de955e3f524908e2b19c0374" +vscode-languageserver-types@^3.6.0-next.1: + version "3.6.0-next.1" + resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.6.0-next.1.tgz#98e488d3f87b666b4ee1a3d89f0023e246d358f3" -vscode-languageserver@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-3.5.0.tgz#d28099bc6ddda8c1dd16b707e454e1b1ddae0dba" +vscode-languageserver@^4.0.0-next.3: + version "4.0.0-next.3" + resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-4.0.0-next.3.tgz#89a9ce5078e3a86a78e3551c3766194ce4295611" dependencies: - vscode-languageserver-protocol "^3.5.0" + vscode-languageserver-protocol "^3.6.0-next.3" vscode-uri "^1.0.1" vscode-nls@^2.0.2: