syntastic/syntax_checkers/python/codec.py
LCD 47 5359f7f4e1 Python checker: new option g:syntastic_python_python_use_codec (@delfick).
The new option tells the checket to load the file in memory and look for
a comment line "# coding: <codec>".  If found, the named codec is used
to decode the file before checking.  This makes sense only if said codec
doesn't change the line numbers of the initial file.  An example of such
codec is "spec" provided by the "Nose of Yeti" library:

https://github.com/delfick/nose-of-yeti
2015-01-17 11:17:35 +02:00

32 lines
794 B
Python
Executable File

#!/usr/bin/env python
from __future__ import print_function
from sys import argv, exit
import codecs
import re
import os
if len(argv) != 2:
exit(1)
try:
with open(argv[1]) as fle:
text = fle.readlines()
if text:
match = re.match(r"#\s*coding\s*:\s*(?P<coding>\w+)", text[0])
if match:
text = codecs.lookup(match.groupdict()["coding"]).incrementaldecoder().decode(
''.join(text).encode('utf-8')).encode('utf-8')
if isinstance(text, list):
text = ''.join(text).encode('utf-8')
compile(text, argv[1], 'exec', 0, 1)
except SyntaxError as err:
print('%s:%s:%s: %s' % (err.filename, err.lineno, err.offset, err.msg))
except Exception as err:
print('%s:%s:%s: %s' % (os.path.abspath(argv[1]), 1, 0, err))