From ac02aa57ff3ecccad46af17533208c9b0fd6c99c Mon Sep 17 00:00:00 2001
From: jugglinmike <mike@mikepennisi.com>
Date: Mon, 9 Jul 2018 12:29:43 -0400
Subject: [PATCH] Relax linting rules for `esid` metadata (#1632)

The document fragments used by the ECMAScript specification do not
conform to any particular pattern beyond the grammar defined by the URL
standard [1]. Relax the linting rule to enforce a simplified version of
that grammar.

[1] https://url.spec.whatwg.org/#fragment-state
---
 tools/lint/lib/checks/esid.py                    |  7 ++++++-
 tools/lint/test/fixtures/esid_invalid.js         | 10 ++++++++++
 tools/lint/test/fixtures/valid_esid_alternate.js |  9 +++++++++
 3 files changed, 25 insertions(+), 1 deletion(-)
 create mode 100644 tools/lint/test/fixtures/esid_invalid.js
 create mode 100644 tools/lint/test/fixtures/valid_esid_alternate.js

diff --git a/tools/lint/lib/checks/esid.py b/tools/lint/lib/checks/esid.py
index f4e0d586bc..cdfcac6678 100644
--- a/tools/lint/lib/checks/esid.py
+++ b/tools/lint/lib/checks/esid.py
@@ -8,7 +8,12 @@ class CheckEsid(Check):
     def __init__(self):
         #self.es5idRegex = re.compile(r"^S?(B|\d+)(\.\d+)+(-(\d+|[a-z]|i+))*(_A\d(\.\d+)?(_T\d(\.\d+)?)?)?$")
         self.es6idRegex = re.compile(r"^(S?(B|\d+)(\.\d+)+(((_A\d\.\d)?_T?\d)|[ _]S\d+(\.[a-z])*)?(, |$))+")
-        self.esidRegex = re.compile(r"^(pending|(prod|sec|sup)-[-_A-Za-z0-9.%@]+)$")
+        # Simpliiied version of the WhatWG URL specification for fragment
+        # parsing
+        # https://url.spec.whatwg.org/#fragment-state
+        self.esidRegex = re.compile(
+            u"^[a-z0-9!$&'()*+,\-./:;=?@_~\u00a0-\U0010fffd]+$", re.IGNORECASE
+        )
 
     def run(self, name, meta, source):
         if not meta:
diff --git a/tools/lint/test/fixtures/esid_invalid.js b/tools/lint/test/fixtures/esid_invalid.js
new file mode 100644
index 0000000000..b98434b883
--- /dev/null
+++ b/tools/lint/test/fixtures/esid_invalid.js
@@ -0,0 +1,10 @@
+ESID
+^ expected errors | v input
+// Copyright (C) 2018 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: something withaspace
+description: Minimal test
+---*/
+
+function f() {}
diff --git a/tools/lint/test/fixtures/valid_esid_alternate.js b/tools/lint/test/fixtures/valid_esid_alternate.js
new file mode 100644
index 0000000000..f079a22a09
--- /dev/null
+++ b/tools/lint/test/fixtures/valid_esid_alternate.js
@@ -0,0 +1,9 @@
+^ expected errors | v input
+// Copyright (C) 2017 Mike Pennisi. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: use-strict-directive!@$&*()_+
+description: Minimal test
+---*/
+
+function f() {}
-- 
GitLab