mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
With the Python 3 changes to the repo, the linter now needs to be called with python3 explicitly, so that there are no syntax errors.
97 lines
2.1 KiB
Python
Executable File
97 lines
2.1 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
# This source file is part of the Swift.org open source project
|
|
#
|
|
# Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors
|
|
# Licensed under Apache License v2.0 with Runtime Library Exception
|
|
#
|
|
# See https://swift.org/LICENSE.txt for license information
|
|
# See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
|
|
#
|
|
|
|
|
|
"""
|
|
Utility script used to run the flake8 linter over all the project Python
|
|
sources.
|
|
"""
|
|
|
|
|
|
from __future__ import absolute_import, print_function, unicode_literals
|
|
|
|
import os
|
|
import subprocess
|
|
import sys
|
|
|
|
|
|
__all__ = [
|
|
'lint',
|
|
]
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Constants
|
|
|
|
_UTILS_DIR = os.path.abspath(os.path.dirname(__file__))
|
|
_PROJECT_DIR = os.path.dirname(_UTILS_DIR)
|
|
|
|
_REQUIRED_PACKAGES = [
|
|
'flake8',
|
|
'flake8-import-order',
|
|
]
|
|
|
|
_INSTALL_FLAKE8_MESSAGE = """
|
|
The flake8 and flake8-import-order Python packages are required for linting,
|
|
but these were not found on your system.
|
|
|
|
You can install these using:
|
|
|
|
python -m pip install flake8
|
|
python -m pip install flake8-import-order
|
|
|
|
For more help, see http://flake8.pycqa.org.
|
|
"""
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Helpers
|
|
|
|
def _is_package_installed(name):
|
|
"""Runs the pip command to check if a package is installed.
|
|
"""
|
|
|
|
command = [
|
|
sys.executable,
|
|
'-m', 'pip',
|
|
'show', '--quiet',
|
|
name,
|
|
]
|
|
|
|
with open(os.devnull, 'w') as devnull:
|
|
status = subprocess.call(command, stderr=devnull)
|
|
|
|
return not status
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
|
|
|
def lint(args, verbose=False):
|
|
all_packages_installed = all([
|
|
_is_package_installed(name)
|
|
for name in _REQUIRED_PACKAGES
|
|
])
|
|
|
|
if not all_packages_installed:
|
|
if verbose:
|
|
print(_INSTALL_FLAKE8_MESSAGE)
|
|
|
|
return 1
|
|
|
|
return subprocess.call(
|
|
[sys.executable, '-m', 'flake8'] + args,
|
|
cwd=_PROJECT_DIR,
|
|
universal_newlines=True)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
sys.exit(lint(sys.argv[1:], verbose=True))
|