From f5cd5a0013be92bece8ac109619061dd39878b21 Mon Sep 17 00:00:00 2001 From: Fatmir Sukaliq Date: Thu, 26 Mar 2020 17:51:36 -0400 Subject: [PATCH] Fixing reactive values in typescript --- .gitignore | 2 ++ packages/language-server/.gitignore | 1 + .../language-server/src/plugins/TypeScriptPlugin.ts | 4 ++-- packages/language-server/src/utils.ts | 12 ++++++++++++ packages/svelte-vscode/.gitignore | 1 + 5 files changed, 18 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 87174b804..03ea03c3b 100644 --- a/.gitignore +++ b/.gitignore @@ -65,3 +65,5 @@ typings/ # tdsx dist + +.DS_STORE \ No newline at end of file diff --git a/packages/language-server/.gitignore b/packages/language-server/.gitignore index 5dbbc7fbb..1ee132aee 100644 --- a/packages/language-server/.gitignore +++ b/packages/language-server/.gitignore @@ -1,3 +1,4 @@ dist/ .vscode/ node_modules/ +.DS_STORE \ No newline at end of file diff --git a/packages/language-server/src/plugins/TypeScriptPlugin.ts b/packages/language-server/src/plugins/TypeScriptPlugin.ts index bdd36d7a1..fac52d2c7 100644 --- a/packages/language-server/src/plugins/TypeScriptPlugin.ts +++ b/packages/language-server/src/plugins/TypeScriptPlugin.ts @@ -35,7 +35,7 @@ import { mapSeverity, } from './typescript/utils'; import { getLanguageServiceForDocument, CreateDocument } from './typescript/service'; -import { pathToUrl } from '../utils'; +import { pathToUrl, isValidSvelteReactiveValueDiagnostic } from '../utils'; import { TextDocument } from '../lib/documents/TextDocument'; export class TypeScriptPlugin @@ -103,7 +103,7 @@ export class TypeScriptPlugin source: isTypescript ? 'ts' : 'js', message: ts.flattenDiagnosticMessageText(diagnostic.messageText, '\n'), code: diagnostic.code, - })); + })).filter(diagnostic => isValidSvelteReactiveValueDiagnostic(diagnostic)); } doHover(document: Document, position: Position): Hover | null { diff --git a/packages/language-server/src/utils.ts b/packages/language-server/src/utils.ts index 4ff9594e9..d039fd695 100644 --- a/packages/language-server/src/utils.ts +++ b/packages/language-server/src/utils.ts @@ -19,3 +19,15 @@ export function pathToUrl(path: string) { export function flatten(arr: T[][]): T[] { return arr.reduce((all, item) => [...all, ...item], []); } + +const TS2552_REGEX = /Cannot find name '\$([a-zA-Z0-9_]+)'. Did you mean '([a-zA-Z0-9_]+)'\?/i; +export function isValidSvelteReactiveValueDiagnostic(diagnostic: any): boolean { + if (diagnostic.code !== 2552) return true; + + /** if error message doesn't contain a reactive value, do nothing */ + if (!diagnostic.message.includes('$')) return true; + + const [, usedVar, proposedVar] = diagnostic.message.match(TS2552_REGEX) || []; + + return !(usedVar && proposedVar && usedVar === proposedVar); +} \ No newline at end of file diff --git a/packages/svelte-vscode/.gitignore b/packages/svelte-vscode/.gitignore index c925c21d5..52153c33e 100644 --- a/packages/svelte-vscode/.gitignore +++ b/packages/svelte-vscode/.gitignore @@ -1,2 +1,3 @@ /dist /node_modules +.DS_STORE \ No newline at end of file