Web Inspector: highlight undefined word in JavaScript
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 20 Feb 2013 09:44:37 +0000 (09:44 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 20 Feb 2013 09:44:37 +0000 (09:44 +0000)
https://bugs.webkit.org/show_bug.cgi?id=109585

Patch by Andrey Lushnikov <lushnikov@chromium.org> on 2013-02-20
Reviewed by Vsevolod Vlasov.

Source/WebCore:

Test enhancement: inspector/syntax-highlight-javascript.html

Add global object value properties to tokenizer and add a css style
class to highlight "undefined" with gray color.

* inspector/front-end/SourceJavaScriptTokenizer.js:
(WebInspector.SourceJavaScriptTokenizer.prototype.nextToken):
* inspector/front-end/SourceJavaScriptTokenizer.re2js:
* inspector/front-end/inspectorSyntaxHighlight.css:
(.webkit-javascript-undef):

LayoutTests:

Enhance layout test to verify highlighting of global object value properties.

* inspector/syntax-highlight-javascript-expected.txt:
* inspector/syntax-highlight-javascript.html:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@143440 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/inspector/syntax-highlight-javascript-expected.txt
LayoutTests/inspector/syntax-highlight-javascript.html
Source/WebCore/ChangeLog
Source/WebCore/inspector/front-end/SourceJavaScriptTokenizer.js
Source/WebCore/inspector/front-end/SourceJavaScriptTokenizer.re2js
Source/WebCore/inspector/front-end/inspectorSyntaxHighlight.css

index 5949a00..8e3fbd4 100644 (file)
@@ -1,3 +1,15 @@
+2013-02-20  Andrey Lushnikov  <lushnikov@chromium.org>
+
+        Web Inspector: highlight undefined word in JavaScript
+        https://bugs.webkit.org/show_bug.cgi?id=109585
+
+        Reviewed by Vsevolod Vlasov.
+
+        Enhance layout test to verify highlighting of global object value properties.
+
+        * inspector/syntax-highlight-javascript-expected.txt:
+        * inspector/syntax-highlight-javascript.html:
+
 2013-02-20  Mike West  <mkwst@chromium.org>
 
         Use EventPathWalker rather than parentNode() to normalize event targets in EventHandler.
index c27625c..66fcd76 100644 (file)
@@ -17,4 +17,7 @@ foo/**
 */foo: webkit-javascript-ident,webkit-javascript-comment,,webkit-javascript-comment,,webkit-javascript-comment,webkit-javascript-ident
 {0: true}: webkit-block-start,webkit-javascript-number,*,webkit-whitespace,webkit-javascript-keyword,webkit-block-end
 var toString;: webkit-javascript-keyword,webkit-whitespace,webkit-javascript-ident,*
+var foo = undefined;: webkit-javascript-keyword,webkit-whitespace,webkit-javascript-ident,webkit-whitespace,*,webkit-whitespace,webkit-javascript-undef,*
+var foo = Infinity;: webkit-javascript-keyword,webkit-whitespace,webkit-javascript-ident,webkit-whitespace,*,webkit-whitespace,webkit-javascript-inf,*
+var foo = NaN;: webkit-javascript-keyword,webkit-whitespace,webkit-javascript-ident,webkit-whitespace,*,webkit-whitespace,webkit-javascript-nan,*
 
index daa516d..c9a7927 100644 (file)
@@ -24,6 +24,9 @@ function test()
     dumpSyntaxHighlightJS("foo/**\n/\n*/foo");
     dumpSyntaxHighlightJS("{0: true}");
     dumpSyntaxHighlightJS("var toString;");
+    dumpSyntaxHighlightJS("var foo = undefined;");
+    dumpSyntaxHighlightJS("var foo = Infinity;");
+    dumpSyntaxHighlightJS("var foo = NaN;");
 
     InspectorTest.completeTest();
 }
index 40928be..43cf6a4 100644 (file)
@@ -1,3 +1,21 @@
+2013-02-20  Andrey Lushnikov  <lushnikov@chromium.org>
+
+        Web Inspector: highlight undefined word in JavaScript
+        https://bugs.webkit.org/show_bug.cgi?id=109585
+
+        Reviewed by Vsevolod Vlasov.
+
+        Test enhancement: inspector/syntax-highlight-javascript.html
+
+        Add global object value properties to tokenizer and add a css style
+        class to highlight "undefined" with gray color.
+
+        * inspector/front-end/SourceJavaScriptTokenizer.js:
+        (WebInspector.SourceJavaScriptTokenizer.prototype.nextToken):
+        * inspector/front-end/SourceJavaScriptTokenizer.re2js:
+        * inspector/front-end/inspectorSyntaxHighlight.css:
+        (.webkit-javascript-undef):
+
 2013-02-20  Mike West  <mkwst@chromium.org>
 
         Use EventPathWalker rather than parentNode() to normalize event targets in EventHandler.
index 29970a9..072dde6 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.13.5 on Wed Feb  6 13:24:52 2013 */
+/* Generated by re2c 0.13.5 on Tue Feb 19 16:16:47 2013 */
 /*
  * Copyright (C) 2009 Google Inc. All rights reserved.
  *
@@ -77,6 +77,12 @@ WebInspector.SourceJavaScriptTokenizer.Keywords = [
         "class", "enum", "export", "extends", "import", "super", "get", "set", "with"
     ].keySet();
 
+WebInspector.SourceJavaScriptTokenizer.GlobalObjectValueProperties = {
+    "NaN": "javascript-nan",
+    "undefined": "javascript-undef",
+    "Infinity": "javascript-inf"
+};
+
 WebInspector.SourceJavaScriptTokenizer.prototype = {
     createInitialCondition: function()
     {
@@ -278,7 +284,9 @@ case 22:
 case 23:
             {
                     var token = this._line.substring(cursorOnEnter, cursor);
-                    if (WebInspector.SourceJavaScriptTokenizer.Keywords[token] === true && token !== "__proto__")
+                    if (WebInspector.SourceJavaScriptTokenizer.GlobalObjectValueProperties.hasOwnProperty(token))
+                        this.tokenType = WebInspector.SourceJavaScriptTokenizer.GlobalObjectValueProperties[token];
+                    else if (WebInspector.SourceJavaScriptTokenizer.Keywords[token] === true && token !== "__proto__")
                         this.tokenType = "javascript-keyword";
                     else
                         this.tokenType = "javascript-ident";
@@ -1236,7 +1244,9 @@ case 148:
             this.setLexCondition(this._lexConditions.DIV);
             {
                     var token = this._line.substring(cursorOnEnter, cursor);
-                    if (WebInspector.SourceJavaScriptTokenizer.Keywords[token] === true && token !== "__proto__")
+                    if (WebInspector.SourceJavaScriptTokenizer.GlobalObjectValueProperties.hasOwnProperty(token))
+                        this.tokenType = WebInspector.SourceJavaScriptTokenizer.GlobalObjectValueProperties[token];
+                    else if (WebInspector.SourceJavaScriptTokenizer.Keywords[token] === true && token !== "__proto__")
                         this.tokenType = "javascript-keyword";
                     else
                         this.tokenType = "javascript-ident";
index 221583a..cda1c05 100644 (file)
@@ -76,6 +76,12 @@ WebInspector.SourceJavaScriptTokenizer.Keywords = [
         "class", "enum", "export", "extends", "import", "super", "get", "set", "with"
     ].keySet();
 
+WebInspector.SourceJavaScriptTokenizer.GlobalObjectValueProperties = {
+    "NaN": "javascript-nan",
+    "undefined": "javascript-undef",
+    "Infinity": "javascript-inf"
+};
+
 WebInspector.SourceJavaScriptTokenizer.prototype = {
     createInitialCondition: function()
     {
@@ -173,7 +179,9 @@ WebInspector.SourceJavaScriptTokenizer.prototype = {
                 <DIV,NODIV> Identifier => DIV
                 {
                     var token = this._line.substring(cursorOnEnter, cursor);
-                    if (WebInspector.SourceJavaScriptTokenizer.Keywords[token] === true && token !== "__proto__")
+                    if (WebInspector.SourceJavaScriptTokenizer.GlobalObjectValueProperties.hasOwnProperty(token))
+                        this.tokenType = WebInspector.SourceJavaScriptTokenizer.GlobalObjectValueProperties[token];
+                    else if (WebInspector.SourceJavaScriptTokenizer.Keywords[token] === true && token !== "__proto__")
                         this.tokenType = "javascript-keyword";
                     else
                         this.tokenType = "javascript-ident";
index 10fa3c9..0d1ae97 100644 (file)
     color: rgb(200, 0, 180);
 }
 
+.webkit-javascript-undef {
+    color: rgb(123, 123, 123);
+}
+
 .webkit-javascript-comment {
     color: rgb(0, 116, 0);
 }