From f7cbcf417c8ca09d5d5b613fefccdef041f41bb9 Mon Sep 17 00:00:00 2001 From: Rui Liu Date: Fri, 17 Aug 2018 16:13:28 +0800 Subject: [PATCH 1/2] Fix: `%%black` will be removed even formatting fails. Fix: Ignore all magic calls. --- blackcellmagic.py | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/blackcellmagic.py b/blackcellmagic.py index f3ace1d..7cdf44b 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,22 @@ 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*%(?=\w+)", "\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"^##!%", r"%", formated) + formated = re.sub(r"##!%(?=\w+)", "%", 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): From 76356ac693f2592928679b9f184b43c1be12217c Mon Sep 17 00:00:00 2001 From: Rui Liu Date: Fri, 17 Aug 2018 16:27:26 +0800 Subject: [PATCH 2/2] Fix: `%%black` will be removed even formatting fails. Fix: Ignore all magic calls. --- blackcellmagic.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/blackcellmagic.py b/blackcellmagic.py index 7cdf44b..22be0a3 100644 --- a/blackcellmagic.py +++ b/blackcellmagic.py @@ -39,7 +39,7 @@ def black(self, line, cell): if cell: # Comment magics cell = re.sub(r"^%", r"##!%", cell) - cell = re.sub(r"\n\s*%(?=\w+)", "\n##!%", 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": @@ -49,8 +49,7 @@ def black(self, line, cell): print(e) finally: # Uncomment magics - formated = re.sub(r"^##!%", r"%", formated) - formated = re.sub(r"##!%(?=\w+)", "%", formated) + formated = re.sub(r"##!%", "%", formated) # No matter success or not, something will always be put back self.shell.set_next_input(formated, replace=True)