|  | #!/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 | 
|  |  | 
|  | import install_node_deps | 
|  |  | 
|  | 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("\\", "\\\\") | 
|  |  | 
|  |  | 
|  | scripts_path = path.dirname(path.abspath(__file__)) | 
|  | devtools_path = path.dirname(scripts_path) | 
|  | devtools_frontend_path = path.join(devtools_path, "front_end") | 
|  | eslint_path = path.join(devtools_path, "node_modules", "eslint", "bin", "eslint.js") | 
|  |  | 
|  | print("Linting JavaScript with eslint...\n") | 
|  |  | 
|  |  | 
|  | def js_lint(files_list=None): | 
|  | eslint_errors_found = False | 
|  | if not path.isfile(eslint_path): | 
|  | print("Failed to run eslint, run ./scripts/install_node_deps.py to install eslint") | 
|  | eslint_errors_found = True | 
|  | return eslint_errors_found | 
|  |  | 
|  | 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") | 
|  | (node_path, _) = install_node_deps.resolve_node_paths() | 
|  | exec_command = [ | 
|  | node_path, | 
|  | eslint_path, | 
|  | "--config", | 
|  | to_platform_path_exact(eslintconfig_path), | 
|  | "--ignore-path", | 
|  | to_platform_path_exact(eslintignore_path), | 
|  | ] + 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 | 
|  |  | 
|  |  | 
|  | errors_found = js_lint(files_to_lint) | 
|  |  | 
|  | if errors_found: | 
|  | print("ERRORS DETECTED") | 
|  | sys.exit(1) |