diff --git a/packages/pyright-internal/jest.config.js b/packages/pyright-internal/jest.config.js index 9fd7c0fd9..a88202d8c 100644 --- a/packages/pyright-internal/jest.config.js +++ b/packages/pyright-internal/jest.config.js @@ -4,7 +4,8 @@ * Configuration for jest tests. */ -module.exports = { +/** @type {import('ts-jest/dist/types').JestConfigWithTsJest} */ +const config = { testEnvironment: 'node', roots: ['/src/tests'], transform: { @@ -19,3 +20,5 @@ module.exports = { moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'], setupFiles: ['./src/tests/setupTests.ts'], }; + +module.exports = config; diff --git a/packages/pyright-internal/src/baseline.ts b/packages/pyright-internal/src/baseline.ts index 2c73056aa..b69191b1d 100644 --- a/packages/pyright-internal/src/baseline.ts +++ b/packages/pyright-internal/src/baseline.ts @@ -12,7 +12,7 @@ export interface BaselinedDiagnostic { range: { startColumn: number; endColumn: number }; } -interface BaselineFile { +export interface BaselineFile { files: { [filePath: string]: BaselinedDiagnostic[]; }; diff --git a/packages/pyright-internal/src/tests/languageServer.test.ts b/packages/pyright-internal/src/tests/languageServer.test.ts index 5f535651e..ea24b722d 100644 --- a/packages/pyright-internal/src/tests/languageServer.test.ts +++ b/packages/pyright-internal/src/tests/languageServer.test.ts @@ -34,6 +34,8 @@ import { runPyrightServer, waitForDiagnostics, } from './lsp/languageServerTestUtils'; +import { BaselineFile } from '../baseline'; +import { DiagnosticRule } from '../common/diagnosticRules'; /** objects from `sendRequest` don't work with assertions and i cant figure out why */ const assertEqual = (actual: T, expected: T) => expect(JSON.parse(JSON.stringify(actual))).toStrictEqual(expected); @@ -962,4 +964,70 @@ describe(`Basic language server tests`, () => { 'invalid diagnosticMode: "asdf". valid options are "workspace" or "openFilesOnly"' ); }); + describe('baseline', () => { + test('baselined error not shown', async () => { + const baseline: BaselineFile = { + files: { + './foo.py': [ + { + code: DiagnosticRule.reportAssignmentType, + range: { + startColumn: 11, + endColumn: 13, + }, + }, + ], + }, + }; + const code = ` +// @filename: .basedpyright/baseline.json +//// ${JSON.stringify(baseline)} +//// +// @filename: foo.py +//// foo: int = "" +//// asdf +//// [|/*marker*/|] +`; + const settings = [ + { + item: { + scopeUri: `file://${normalizeSlashes(DEFAULT_WORKSPACE_ROOT, '/')}`, + section: 'basedpyright.analysis', + }, + value: { + diagnosticSeverityOverrides: { + reportAssignmentType: 'error', + reportUndefinedVariable: 'error', + }, + }, + }, + ]; + + const info = await runLanguageServer( + DEFAULT_WORKSPACE_ROOT, + code, + /* callInitialize */ true, + settings, + undefined, + /* supportsBackgroundThread */ false + ); + + // get the file containing the marker that also contains our task list comments + await openFile(info, 'marker'); + + // Wait for the diagnostics to publish + const diagnostics = await waitForDiagnostics(info); + const file = diagnostics.find((d) => d.uri.includes('test.py')); + assert(file); + + // Make sure the error has a special rule + assert.equal(file.diagnostics[0].code, 'reportUnknownParameterType'); + + // make sure additional diagnostic severities work + assert.equal( + file.diagnostics.find((diagnostic) => diagnostic.code === 'reportUnusedFunction')?.severity, + DiagnosticSeverity.Hint // TODO: hint? how do we differentiate between unused/unreachable/deprecated? + ); + }); + }); });