ES6 Style: Add presubmit prompt to avoid const/let in potential iOS9 code.

This is in preparation of moving const/let to the "allowed" features in the
ES6 styleguide.

Bug: 671426
Change-Id: I45285d49885470cfe29aaddfe9e9ff6c2ce953a2
Reviewed-on: https://chromium-review.googlesource.com/578731
Reviewed-by: Dirk Pranke <[email protected]>
Reviewed-by: Michael Giuffrida <[email protected]>
Commit-Queue: Demetrios Papadopoulos <[email protected]>
Cr-Commit-Position: refs/heads/master@{#488560}
diff --git a/PRESUBMIT.py b/PRESUBMIT.py
index cf8be130..f5c4d86 100644
--- a/PRESUBMIT.py
+++ b/PRESUBMIT.py
@@ -23,8 +23,6 @@
     r".+[\\\/]pnacl_shim\.c$",
     r"^gpu[\\\/]config[\\\/].*_list_json\.cc$",
     r"^chrome[\\\/]browser[\\\/]resources[\\\/]pdf[\\\/]index.js",
-    r".*vulcanized.html$",
-    r".*crisper.js$",
     r"tools[\\\/]md_browser[\\\/].*\.css$",
     # Test pages for WebRTC telemetry tests.
     r"tools[\\\/]perf[\\\/]page_sets[\\\/]webrtc_cases.*",
@@ -2009,27 +2007,64 @@
               (fpath.LocalPath(), lnum, deprecated, replacement)))
   return results
 
+def _CheckForRiskyJsArrowFunction(line_number, line):
+  if ' => ' in line:
+    return "line %d, is using an => (arrow) function\n %s\n" % (
+        line_number, line)
+  return ''
+
+def _CheckForRiskyJsConstLet(input_api, line_number, line):
+  if input_api.re.match('^\s*(const|let)\s', line):
+    return "line %d, is using const/let keyword\n %s\n" % (
+        line_number, line)
+  return ''
 
 def _CheckForRiskyJsFeatures(input_api, output_api):
   maybe_ios_js = (r"^(ios|components|ui\/webui\/resources)\/.+\.js$", )
   file_filter = lambda f: input_api.FilterSourceFile(f, white_list=maybe_ios_js)
 
-  arrow_lines = []
+  results = []
   for f in input_api.AffectedFiles(file_filter=file_filter):
+    arrow_error_lines = []
+    const_let_error_lines = []
     for lnum, line in f.ChangedContents():
-      if ' => ' in line:
-        arrow_lines.append((f.LocalPath(), lnum))
+      arrow_error_lines += filter(None, [
+        _CheckForRiskyJsArrowFunction(lnum, line),
+      ])
 
-  if not arrow_lines:
-    return []
+      const_let_error_lines += filter(None, [
+        _CheckForRiskyJsConstLet(input_api, lnum, line),
+      ])
 
-  return [output_api.PresubmitPromptWarning("""
-Use of => operator detected in:
+    if arrow_error_lines:
+      arrow_error_lines = map(
+          lambda e: "%s:%s" % (f.LocalPath(), e), arrow_error_lines)
+      results.append(
+          output_api.PresubmitPromptWarning('\n'.join(arrow_error_lines + [
+"""
+Use of => (arrow) operator detected in:
 %s
 Please ensure your code does not run on iOS9 (=> (arrow) does not work there).
 https://chromium.googlesource.com/chromium/src/+/master/docs/es6_chromium.md#Arrow-Functions
-""" % "\n".join("  %s:%d\n" % line for line in arrow_lines))]
+""" % f.LocalPath()
+          ])))
 
+    if const_let_error_lines:
+      const_let_error_lines = map(
+          lambda e: "%s:%s" % (f.LocalPath(), e), const_let_error_lines)
+      results.append(
+          output_api.PresubmitPromptWarning('\n'.join(const_let_error_lines + [
+"""
+Use of const/let keywords detected in:
+%s
+Please ensure your code does not run on iOS9 because const/let is not fully
+supported.
+https://chromium.googlesource.com/chromium/src/+/master/docs/es6_chromium.md#let-Block_Scoped-Variables
+https://chromium.googlesource.com/chromium/src/+/master/docs/es6_chromium.md#const-Block_Scoped-Constants
+""" % f.LocalPath()
+          ])))
+
+  return results
 
 def _CheckForRelativeIncludes(input_api, output_api):
   # Need to set the sys.path so PRESUBMIT_test.py runs properly