Add Python syntax checking to Code Step dialog

Validates code with ast.parse() before accepting. Shows line number
and error message if syntax is invalid.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
rob 2026-01-14 14:27:55 -04:00
parent d0ff6c0c35
commit 436d6292ff
1 changed files with 15 additions and 1 deletions

View File

@ -1,9 +1,11 @@
"""Step editor dialogs.""" """Step editor dialogs."""
import ast
from PySide6.QtWidgets import ( from PySide6.QtWidgets import (
QDialog, QVBoxLayout, QFormLayout, QLineEdit, QDialog, QVBoxLayout, QFormLayout, QLineEdit,
QComboBox, QPushButton, QHBoxLayout, QLabel, QComboBox, QPushButton, QHBoxLayout, QLabel,
QPlainTextEdit, QSplitter, QGroupBox, QTextEdit QPlainTextEdit, QSplitter, QGroupBox, QTextEdit, QMessageBox
) )
from PySide6.QtCore import Qt, QThread, Signal from PySide6.QtCore import Qt, QThread, Signal
@ -378,6 +380,18 @@ IMPORTANT: Return ONLY executable inline Python code. No function definitions, n
self.output_input.setFocus() self.output_input.setFocus()
return return
# Syntax check the Python code
try:
ast.parse(code)
except SyntaxError as e:
line_info = f" (line {e.lineno})" if e.lineno else ""
QMessageBox.warning(
self, "Syntax Error",
f"Python syntax error{line_info}:\n\n{e.msg}"
)
self.code_input.setFocus()
return
self.accept() self.accept()
def get_step(self) -> CodeStep: def get_step(self) -> CodeStep: