diff --git a/flake8_mypy.py b/flake8_mypy.py index 5560f2b..0e26e30 100644 --- a/flake8_mypy.py +++ b/flake8_mypy.py @@ -184,14 +184,22 @@ def run(self) -> Iterator[_Flake8Error]: # unexpected clashes with other .py and .pyi files in the same original # directory. with TemporaryDirectory(prefix='flake8mypy_') as d: - with NamedTemporaryFile( - 'w', encoding='utf8', prefix='tmpmypy_', suffix='.py', dir=d - ) as f: - self.filename = f.name + file = NamedTemporaryFile( + 'w', + encoding='utf8', + prefix='tmpmypy_', + suffix='.py', + dir=d, + delete=False, + ) + try: + self.filename = file.name for line in self.lines: - f.write(line) - f.flush() + file.write(line) + file.close() yield from self._run() + finally: + os.remove(file.name) def _run(self) -> Iterator[_Flake8Error]: mypy_cmdline = self.build_mypy_cmdline(self.filename, self.options.mypy_config) @@ -255,7 +263,7 @@ def make_error(self, line: str, regex: Pattern) -> Error: raise ValueError("unmatched line") lineno = int(m.group('lineno')) - column = int(m.group('column') or 0) + column = int(m.group('column') or 1) - 1 message = m.group('message').strip() if m.group('class') == 'note': return T400(lineno, column, vars=(message,)) @@ -279,7 +287,7 @@ def build_mypy_re(self, filename: Union[str, Path]) -> Pattern: except ValueError: pass # not relative to the cwd - re_filename = str(filename).replace('.', r'\.') + re_filename = re.escape(str(filename)) if re_filename.startswith(r'\./'): re_filename = re_filename[3:] return re.compile(