diff --git a/plugin/syntastic.vim b/plugin/syntastic.vim index f9a2a1f2..79c200f2 100644 --- a/plugin/syntastic.vim +++ b/plugin/syntastic.vim @@ -19,7 +19,7 @@ if has('reltime') lockvar! g:_SYNTASTIC_START endif -let g:_SYNTASTIC_VERSION = '3.5.0-72' +let g:_SYNTASTIC_VERSION = '3.5.0-146' lockvar g:_SYNTASTIC_VERSION " Sanity checks {{{1 diff --git a/syntax_checkers/python/codec.py b/syntax_checkers/python/codec.py new file mode 100755 index 00000000..6e980c7b --- /dev/null +++ b/syntax_checkers/python/codec.py @@ -0,0 +1,31 @@ +#!/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\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)) diff --git a/syntax_checkers/python/python.vim b/syntax_checkers/python/python.vim index 1ffc073e..6d0c11e6 100644 --- a/syntax_checkers/python/python.vim +++ b/syntax_checkers/python/python.vim @@ -15,10 +15,14 @@ if exists("g:loaded_syntastic_python_python_checker") endif let g:loaded_syntastic_python_python_checker = 1 +if !exists('g:syntastic_python_python_use_codec') + let g:syntastic_python_python_use_codec = 0 +endif + let s:save_cpo = &cpo set cpo&vim -let s:compiler = expand(':p:h', 1) . syntastic#util#Slash() . 'compile.py' +let s:base_path = expand(':p:h', 1) . syntastic#util#Slash() function! SyntaxCheckers_python_python_IsAvailable() dict if !executable(self.getExec()) @@ -32,7 +36,9 @@ function! SyntaxCheckers_python_python_IsAvailable() dict endfunction function! SyntaxCheckers_python_python_GetLocList() dict - let makeprg = self.makeprgBuild({ 'exe': [self.getExec(), s:compiler] }) + let compiler = s:base_path . (g:syntastic_python_python_use_codec ? 'codec.py' : 'compile.py') + call self.log('using compiler script', compiler) + let makeprg = self.makeprgBuild({ 'exe': [self.getExec(), compiler] }) let errorformat = '%E%f:%l:%c: %m'