From 6faecfb82b7250171bc589b23c5ef615f01f271f Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Mon, 12 Sep 2022 05:25:59 +0300 Subject: [PATCH] feat: meet `@ts-diagnostic-disable`! Support can be enabled via new setting, define this on first line in `//` comment and disable diagnostics you won't see in the editor --- src/configurationType.ts | 8 ++++++++ typescript/src/index.ts | 19 +++++++++++++++++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/configurationType.ts b/src/configurationType.ts index 45f24a41..cb96a012 100644 --- a/src/configurationType.ts +++ b/src/configurationType.ts @@ -158,4 +158,12 @@ export type Configuration = { * @default true */ enableMethodSnippets: boolean + /** + * Support `@ts-diagnostic-disable` top-level comment for disabling spefici semantic diagnostics + * Example: `// @ts-diagnostic-disable + * Advanced usage only! Enable in `.vscode/settings.json` for projects that need this + * Since its changes only IDE experience, but not tsc + * @default false + */ + supportTsDiagnosticDisableComment: boolean } diff --git a/typescript/src/index.ts b/typescript/src/index.ts index f01590aa..73aa71cb 100644 --- a/typescript/src/index.ts +++ b/typescript/src/index.ts @@ -6,7 +6,6 @@ import type { Configuration } from '../../src/configurationType' import _ from 'lodash' import { GetConfig } from './types' import { getCompletionsAtPosition, PrevCompletionMap } from './completionsAtPosition' -import { getParameterListParts } from './completionGetMethodParameters' import { oneOf } from '@zardoy/utils' import { isGoodPositionMethodCompletion } from './isGootPositionMethodCompletion' @@ -134,7 +133,7 @@ export = function ({ typescript }: { typescript: typeof import('typescript/lib/t proxy.getCodeFixesAtPosition = (fileName, start, end, errorCodes, formatOptions, preferences) => { let prior = info.languageService.getCodeFixesAtPosition(fileName, start, end, errorCodes, formatOptions, preferences) // const scriptSnapshot = info.project.getScriptSnapshot(fileName) - const diagnostics = info.languageService.getSemanticDiagnostics(fileName) + const diagnostics = proxy.getSemanticDiagnostics(fileName) // https://github.com/Microsoft/TypeScript/blob/v4.5.5/src/compiler/diagnosticMessages.json#L458 const appliableErrorCode = [1156, 1157].find(code => errorCodes.includes(code)) @@ -203,6 +202,22 @@ export = function ({ typescript }: { typescript: typeof import('typescript/lib/t return prior } + proxy.getSemanticDiagnostics = fileName => { + let prior = info.languageService.getSemanticDiagnostics(fileName) + if (c('supportTsDiagnosticDisableComment')) { + const scriptSnapshot = info.project.getScriptSnapshot(fileName)! + const firstLine = scriptSnapshot.getText(0, scriptSnapshot.getLength()).split(/\r?\n/)[0]! + if (firstLine.startsWith('//')) { + const match = firstLine.match(/@ts-diagnostic-disable ((\d+, )*(\d+))/) + if (match) { + const codesToDisable = match[1]!.split(', ').map(Number) + prior = prior.filter(({ code }) => !codesToDisable.includes(code)) + } + } + } + return prior + } + info.languageService[thisPluginMarker] = true return proxy