From 2d411f68ea857c3daff4d09c64acd83874ada84f Mon Sep 17 00:00:00 2001 From: Pablo Rosado Date: Fri, 7 Mar 2025 10:07:57 +0100 Subject: [PATCH] Skip 'if __name__=='__main__' blocks in snapshots --- .../install/run-until-cursor-0.0.1.vsix | Bin 6075 -> 6630 bytes .../run-until-cursor/src/extension.ts | 52 ++++++++++++++++-- 2 files changed, 48 insertions(+), 4 deletions(-) diff --git a/vscode_extensions/run-until-cursor/install/run-until-cursor-0.0.1.vsix b/vscode_extensions/run-until-cursor/install/run-until-cursor-0.0.1.vsix index de6a22c5131de01fbfc35d11424879e1b8689382..2d934ccf324eb77f33a5e9daf82d651e7cab6d2b 100644 GIT binary patch delta 3389 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 Jd=&ry004;CFB<>= diff --git a/vscode_extensions/run-until-cursor/src/extension.ts b/vscode_extensions/run-until-cursor/src/extension.ts index 9a161dc1e81..8da8d58d536 100644 --- a/vscode_extensions/run-until-cursor/src/extension.ts +++ b/vscode_extensions/run-until-cursor/src/extension.ts @@ -51,14 +51,14 @@ export function activate(context: vscode.ExtensionContext) { if (cursorLine >= startLine && cursorLine < endLine) { executeRange = new vscode.Range(startLine, 0, cursorLine + 1, 0); } - // If outside `run()` (either above or below), execute **the entire script** + // If outside `run()` (either above or below), execute **the entire script** (without `if __name__ == "__main__":`) else { - executeRange = new vscode.Range(0, 0, document.lineCount, 0); + executeRange = filterOutMainBlock(document); shouldMoveCursor = true; } } else { - // If `run()` is not found, execute everything as a fallback - executeRange = new vscode.Range(0, 0, document.lineCount, 0); + // If `run()` is not found, execute everything (without `if __name__ == "__main__":`) + executeRange = filterOutMainBlock(document); } // Step 3: Apply selection and execute immediately (with an adjustable delay) @@ -82,3 +82,47 @@ export function activate(context: vscode.ExtensionContext) { } export function deactivate() {} + +/** + * Filters out `if __name__ == "__main__":` and its indented block. + */ +function filterOutMainBlock(document: vscode.TextDocument): vscode.Range { + let mainStart: number | null = null; + let mainEnd: number | null = null; + + // Flexible regex for detecting variations of `if __name__ == "__main__":` + const mainRegex = /^\s*if\s*["']__main__["']\s*==\s*__name__\s*:|^\s*if\s*__name__\s*==\s*["']__main__["']\s*:/; + + // Step 1: Find `if __name__ == "__main__":` + for (let i = 0; i < document.lineCount; i++) { + if (mainRegex.test(document.lineAt(i).text)) { + mainStart = i; + break; + } + } + + if (mainStart !== null) { + // Step 2: Find where `if __name__ == "__main__":` block ends (first non-indented line) + for (let i = mainStart + 1; i < document.lineCount; i++) { + const lineText = document.lineAt(i).text; + + // A **non-indented line** (not empty & not a comment) signals the end of the block + if (lineText.trim().length > 0 && !lineText.startsWith(" ") && !lineText.startsWith("\t")) { + mainEnd = i; + break; + } + } + + // If no non-indented line was found, assume the block goes to the last line + if (mainEnd === null) { + mainEnd = document.lineCount; + } + } + + // If we found `if __name__ == "__main__":`, remove that block + if (mainStart !== null && mainEnd !== null) { + return new vscode.Range(0, 0, mainStart, 0); // Select everything **before** `if __name__ == "__main__"` + } else { + return new vscode.Range(0, 0, document.lineCount, 0); // No `main` block, execute everything + } +}