blob: dcca65f62a3a40dca7d3c05061de071335c6f982 [file] [log] [blame]
import flake8.main.application
import os
import subprocess
import tempfile
from checkpackagelib.base import _Tool
class NotExecutable(_Tool):
def ignore(self):
return False
def run(self):
if self.ignore():
return
if os.access(self.filename, os.X_OK):
return ["{}:0: This file does not need to be executable{}".format(self.filename, self.hint())]
class Flake8(_Tool):
def run(self):
with tempfile.NamedTemporaryFile() as output:
app = flake8.main.application.Application()
app.run(['--output-file={}'.format(output.name), self.filename])
stdout = output.readlines()
processed_output = [str(line.decode().rstrip()) for line in stdout if line]
if len(stdout) == 0:
return
return ["{}:0: run 'flake8' and fix the warnings".format(self.filename),
'\n'.join(processed_output)]
class Shellcheck(_Tool):
def run(self):
cmd = ['shellcheck', "--external-sources", self.filename]
try:
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout = p.communicate()[0]
processed_output = [str(line.decode().rstrip()) for line in stdout.splitlines() if line]
if p.returncode == 0:
return
return ["{}:0: run 'shellcheck' and fix the warnings".format(self.filename),
'\n'.join(processed_output)]
except FileNotFoundError:
return ["{}:0: failed to call 'shellcheck'".format(self.filename)]