blob: e4f96ca3a9f01d5a48247375d6e765d5ace4ddf6 [file] [log] [blame]
#!/usr/bin/env python
#
# Copyright 2016 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import os.path as path
import re
import subprocess
import sys
scripts_path = path.dirname(path.dirname(path.abspath(__file__)))
sys.path.append(scripts_path)
import devtools_paths
files_to_lint = None
if len(sys.argv) >= 2:
if sys.argv[1] == '--help':
print('Usage: %s [file|dir|glob]*' % path.basename(sys.argv[0]))
print
print(' [file|dir|glob]* Path or glob to run eslint on.')
print(' If absent, the entire frontend will be checked.')
sys.exit(0)
else:
print('Linting only these files:\n %s' % sys.argv[1:])
files_to_lint = sys.argv[1:]
is_cygwin = sys.platform == 'cygwin'
def popen(arguments, cwd=None):
return subprocess.Popen(arguments, cwd=cwd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
def to_platform_path(filepath):
if not is_cygwin:
return filepath
return re.sub(r'^/cygdrive/(\w)', '\\1:', filepath)
def to_platform_path_exact(filepath):
if not is_cygwin:
return filepath
output, _ = popen(['cygpath', '-w', filepath]).communicate()
# pylint: disable=E1103
return output.strip().replace('\\', '\\\\')
devtools_path = devtools_paths.devtools_root_path()
devtools_frontend_path = path.join(devtools_path, 'front_end')
print('Linting JavaScript with eslint...\n')
def js_lint(files_list=None):
eslint_errors_found = False
if files_list is None:
files_list = [devtools_frontend_path]
files_list = [file_name for file_name in files_list if not file_name.endswith('.eslintrc.js')]
eslintconfig_path = path.join(devtools_path, '.eslintrc.js')
eslintignore_path = path.join(devtools_path, '.eslintignore')
exec_command = [
devtools_paths.node_path(),
devtools_paths.eslint_path(),
'--config',
to_platform_path_exact(eslintconfig_path),
'--ignore-path',
to_platform_path_exact(eslintignore_path),
'--fix',
] + files_list
eslint_proc = popen(exec_command, cwd=devtools_path)
(eslint_proc_out, _) = eslint_proc.communicate()
if eslint_proc.returncode != 0:
eslint_errors_found = True
else:
print('eslint exited successfully')
print(eslint_proc_out)
return eslint_errors_found
def main():
errors_found = js_lint(files_to_lint)
if errors_found:
print('ERRORS DETECTED')
sys.exit(1)
if __name__ == '__main__':
main()