From 3899754a1efb2f864c35a926b1bb61c506557748 Mon Sep 17 00:00:00 2001 From: DetachHead Date: Thu, 25 Jan 2024 08:28:34 +1000 Subject: [PATCH] add test --- .../pyright-internal/src/analyzer/service.ts | 11 ++++++++-- .../pyright-internal/src/tests/config.test.ts | 22 ++++++++++++++++--- .../pyproject.toml | 7 ++++++ .../pyproject.toml | 6 +++++ 4 files changed, 41 insertions(+), 5 deletions(-) create mode 100644 packages/pyright-internal/src/tests/samples/based_project_with_pyproject_toml/pyproject.toml create mode 100644 packages/pyright-internal/src/tests/samples/project_with_both_config_sections_in_pyproject_toml/pyproject.toml diff --git a/packages/pyright-internal/src/analyzer/service.ts b/packages/pyright-internal/src/analyzer/service.ts index a8453a74a7..aab2a584be 100644 --- a/packages/pyright-internal/src/analyzer/service.ts +++ b/packages/pyright-internal/src/analyzer/service.ts @@ -943,8 +943,15 @@ export class AnalyzerService { return this._attemptParseFile(pyprojectPath, (fileContents, attemptCount) => { try { const configObj = TOML.parse(fileContents); - if (configObj && configObj.tool && (configObj.tool as TOML.JsonMap).basedpyright) { - return (configObj.tool as TOML.JsonMap).basedpyright as object; + if (configObj && configObj.tool) { + const toml = configObj.tool as TOML.JsonMap; + if (toml.basedpyright && toml.pyright) { + this._console.error( + 'Pyproject file cannot have both `pyright` and `basedpyright` sections. pick one' + ); + return undefined; + } + return (toml.basedpyright || toml.pyright) as object; } } catch (e: any) { this._console.error(`Pyproject file parse attempt ${attemptCount} error: ${JSON.stringify(e)}`); diff --git a/packages/pyright-internal/src/tests/config.test.ts b/packages/pyright-internal/src/tests/config.test.ts index 6f31ed4dec..bba1501964 100644 --- a/packages/pyright-internal/src/tests/config.test.ts +++ b/packages/pyright-internal/src/tests/config.test.ts @@ -300,19 +300,35 @@ test('AutoSearchPathsOnAndExtraPaths', () => { assert.deepStrictEqual(configOptions.defaultExtraPaths, expectedExtraPaths); }); -test('BasicPyprojectTomlParsing', () => { - const cwd = normalizePath(combinePaths(process.cwd(), 'src/tests/samples/project_with_pyproject_toml')); +const setupPyprojectToml = (projectPath: string) => { + const cwd = normalizePath(combinePaths(process.cwd(), projectPath)); const service = createAnalyzer(); const commandLineOptions = new CommandLineOptions(cwd, /* fromVsCodeExtension */ true); service.setOptions(commandLineOptions); - const configOptions = service.test_getConfigOptions(commandLineOptions); + return service.test_getConfigOptions(commandLineOptions); +}; + +test('BasicPyprojectTomlParsing', () => { + const configOptions = setupPyprojectToml('src/tests/samples/project_with_pyproject_toml'); assert.strictEqual(configOptions.defaultPythonVersion!, PythonVersion.V3_9); assert.strictEqual(configOptions.diagnosticRuleSet.reportMissingImports, 'error'); assert.strictEqual(configOptions.diagnosticRuleSet.reportUnusedClass, 'warning'); }); +test('basedPyprojectTomlParsing', () => { + const configOptions = setupPyprojectToml('src/tests/samples/based_project_with_pyproject_toml'); + assert.strictEqual(configOptions.defaultPythonVersion!, PythonVersion.V3_9); + assert.strictEqual(configOptions.diagnosticRuleSet.reportMissingImports, 'error'); + assert.strictEqual(configOptions.diagnosticRuleSet.reportUnusedClass, 'warning'); +}); + +test('both pyright and basedpyright in pyproject.toml', () => { + const configOptions = setupPyprojectToml('src/tests/samples/project_with_both_config_sections_in_pyproject_toml'); + assert.strictEqual(configOptions.defaultPythonVersion!, undefined); +}); + test('FindFilesInMemoryOnly', () => { const cwd = normalizePath(process.cwd()); const service = createAnalyzer(); diff --git a/packages/pyright-internal/src/tests/samples/based_project_with_pyproject_toml/pyproject.toml b/packages/pyright-internal/src/tests/samples/based_project_with_pyproject_toml/pyproject.toml new file mode 100644 index 0000000000..34bc46dfda --- /dev/null +++ b/packages/pyright-internal/src/tests/samples/based_project_with_pyproject_toml/pyproject.toml @@ -0,0 +1,7 @@ +[tool.basedpyright] +include = ["test*.py"] + +reportMissingImports = true +reportUnusedClass = "warning" + +pythonVersion = "3.9" diff --git a/packages/pyright-internal/src/tests/samples/project_with_both_config_sections_in_pyproject_toml/pyproject.toml b/packages/pyright-internal/src/tests/samples/project_with_both_config_sections_in_pyproject_toml/pyproject.toml new file mode 100644 index 0000000000..d54052ee88 --- /dev/null +++ b/packages/pyright-internal/src/tests/samples/project_with_both_config_sections_in_pyproject_toml/pyproject.toml @@ -0,0 +1,6 @@ +[tool.basedpyright] +pythonVersion = "3.10" + +[tool.pyright] +pythonVersion = "3.9" +