| #!/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() |