cpython icon indicating copy to clipboard operation
cpython copied to clipboard

gh-133710: Enhance pyrepl auto-indent

Open tanloong opened this issue 2 months ago • 0 comments

This modifies _should_auto_indent() to scan characters from the start of the buffer up to the target position pos, tracking context to ignore irrelavant content within strings, then checks if the conditions for auto-indent are met.

It uses a stack (str_delims) to track quotes (" or '). When inside a string (stack not empty), characters like # or : are treated as literal text and are ignored. A flag (in_comment) marks when a # (not inside a string) has been encountered, ignoring all subsequent characters on that line as comment text. It tracks the indentation level of the last non-whitespace character (lastchar_line_indent), which helps ensure the colon is at a valid indentation level to trigger auto-indent.

The function returns True if the last non-whitespace character (outside comments/strings) is a colon (:), and the indentation level of the line where pos resides is not greater than the indentation of that colon.

Hi @wiggin15, as this _should_auto_indent() function is modified based on your original implementation (#119606), if you could help review when you have some spare time, I would be really appreciated.

  • Issue: gh-133710

tanloong avatar Oct 28 '25 15:10 tanloong