diff --git a/blackcellmagic.py b/blackcellmagic.py index f3ace1d..22be0a3 100644 --- a/blackcellmagic.py +++ b/blackcellmagic.py @@ -21,7 +21,7 @@ from black import format_str from IPython.core import magic_arguments from IPython.core.magic import Magics, cell_magic, magics_class - +import re @magics_class class FormattingMagic(Magics): @@ -37,10 +37,21 @@ def black(self, line, cell): args = magic_arguments.parse_argstring(self.black, line) line_length = args.line_length if cell: - formated = format_str(src_contents=cell, line_length=line_length) - if formated and formated[-1] == "\n": + # Comment magics + cell = re.sub(r"^%", r"##!%", cell) + cell = re.sub(r"\n\s*%", "\n##!%", cell) + try: + formated = format_str(src_contents=cell, line_length=line_length) + if formated and formated[-1] == "\n": formated = formated[:-1] - self.shell.set_next_input(formated, replace=True) + except ValueError as e: + formated = cell + print(e) + finally: + # Uncomment magics + formated = re.sub(r"##!%", "%", formated) + # No matter success or not, something will always be put back + self.shell.set_next_input(formated, replace=True) def load_ipython_extension(ipython):