5359f7f4e1
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
32 lines
794 B
Python
Executable File
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))
|