Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Parallel lint #35

Closed
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 34 additions & 3 deletions inspektor/lint.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import logging
import os
import sys
import multiprocessing

from pylint.lint import Run, PyLinter

Expand All @@ -38,6 +39,21 @@ class QuietLintRun(Run):
LinterClass = QuietPyLinter


def run_pylint_file(args):
filename, other_opts = args
default_opts = ['--rcfile=/dev/null',
'--good-names=i,j,k,Run,_,vm',
('--msg-template='
'"{msg_id}:{line:3d},{column}: {obj}: {msg}"')]
opts = default_opts + other_opts
runner = QuietLintRun(opts + [filename], exit=False)
try:
if runner.linter.msg_status != 0:
return filename
except Exception as details:
return filename


class Linter(object):

def __init__(self, args, logger=logging.getLogger('')):
Expand Down Expand Up @@ -94,11 +110,26 @@ def check_dir(self, path):

:param path: Path to a directory.
"""
filenames = []
failed_paths = []
for root, dirs, files in os.walk(path):
for filename in files:
self.check_file(os.path.join(root, filename))

return not self.failed_paths
filename = os.path.join(root, filename)
checker = PathChecker(path=filename, args=self.args, label='Lint',
logger=self.log)
if checker.check_attributes('text', 'python', 'not_empty'):
filenames.append(os.path.join(root, filename))

if filenames:
pool = multiprocessing.Pool()
opts = self.get_opts()
args = [(filename, opts) for filename in filenames]
failed_paths = pool.map(run_pylint_file, args)
if any(failed_paths):
failed_paths = [path for path in failed_paths if path is not None]
self.failed_paths += failed_paths
return False
return True

def check_file(self, path):
"""
Expand Down