diff --git a/mode/python.py b/mode/python.py index aa634ec..1511d62 100644 --- a/mode/python.py +++ b/mode/python.py @@ -1,4 +1,4 @@ -import commands, os.path, sets, string +import commands, os.path, sets, string, sys, traceback import color, completer, default, mode2, method, regex, tab2 from point2 import Point from lex3 import Grammar, PatternRule, RegionRule, OverridePatternRule @@ -212,21 +212,16 @@ class PythonSetLib(method.Method): class PythonCheckSyntax(method.Method): '''Check the syntax of the current python file''' def _execute(self, w, **vargs): - mod = os.path.splitext(w.buffer.path)[0] - cwd = os.getcwd() + '/' - if mod.startswith(cwd): - mod = mod.replace(cwd, '', 1) - else: - mod = os.path.basename(mod) - mod = mod.replace('/', '.') - cmd = "PYTHONPATH=%s python -c 'import %s'" % (w.mode.pythonlib, mod) - (status, output) = commands.getstatusoutput(cmd) - if status == 0: - w.application.set_error("Syntax OK") - w.application.data_buffer("python-syntax", output, switch_to=False) - else: - output = output + "\ncommand exit status: %d" % (status) - w.application.data_buffer("python-syntax", output, switch_to=True) + syspath = list(sys.path) + sys.path.insert(0, w.mode.pythonlib) + source = w.buffer.make_string() + try: + code = compile(source, w.buffer.path, 'exec') + w.set_error("Syntax OK") + except Exception, e: + output = traceback.format_exc() + w.application.data_buffer("*PythonSyntax*", output, switch_to=True) + sys.path = syspath class PythonDictCleanup(method.Method): '''Align assignment blocks and literal dictionaries'''