diff --git a/packages/pyright-internal/src/analyzer/sourceFile.ts b/packages/pyright-internal/src/analyzer/sourceFile.ts index 9ede64cc18..3ccdb6a4f3 100644 --- a/packages/pyright-internal/src/analyzer/sourceFile.ts +++ b/packages/pyright-internal/src/analyzer/sourceFile.ts @@ -573,6 +573,15 @@ export class SourceFile { try { //TODO: this isnt ideal because it re-reads the file for each cell which is unnecessary source = getIPythonCells(this.fileSystem, this.getRealUri(), this._console)?.[cellIndex]?.source; + // Make sure we don't return any non-python cells + if ( + source && + ['%sql', '%%sql', '%sh', '%pip', '%run', '%fs', '%load', '%matplotlib', '%who', '%env'].includes( + source[0].split(/[\s]/)[0] + ) + ) { + return ''; + } } catch (e) { this._console.error(e instanceof Error ? e.message : String(e)); } diff --git a/packages/pyright-internal/src/tests/notebooks.test.ts b/packages/pyright-internal/src/tests/notebooks.test.ts index df5bb23180..7d8f3fe47f 100644 --- a/packages/pyright-internal/src/tests/notebooks.test.ts +++ b/packages/pyright-internal/src/tests/notebooks.test.ts @@ -4,7 +4,7 @@ import { ErrorTrackingNullConsole, typeAnalyzeSampleFiles, validateResultsButBas test('symbol from previous cell', () => { const analysisResults = typeAnalyzeSampleFiles(['notebook.ipynb']); - tExpect(analysisResults.length).toStrictEqual(2); + tExpect(analysisResults.length).toStrictEqual(3); validateResultsButBased(analysisResults[0], { errors: [], }); @@ -18,6 +18,9 @@ test('symbol from previous cell', () => { }, ], }); + validateResultsButBased(analysisResults[2], { + errors: [], + }); }); test('non-python cell', () => { diff --git a/packages/pyright-internal/src/tests/samples/notebook.ipynb b/packages/pyright-internal/src/tests/samples/notebook.ipynb index a2385e29e1..e4f04572e7 100644 --- a/packages/pyright-internal/src/tests/samples/notebook.ipynb +++ b/packages/pyright-internal/src/tests/samples/notebook.ipynb @@ -17,6 +17,16 @@ "source": [ "bar: str = foo" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%sql\n", + "SELECT 1 AS foo, 2 AS bar" + ] } ], "metadata": {