Web Inspector: Create a UI for displaying JavaScript type information
authorsaambarati1@gmail.com <saambarati1@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 2 Sep 2014 18:25:32 +0000 (18:25 +0000)
committersaambarati1@gmail.com <saambarati1@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 2 Sep 2014 18:25:32 +0000 (18:25 +0000)
commitb763731fb75786388de55faf70c1e5f70b547317
tree62aee862dd4cea524eb6b12d734cad21b4802e87
parent7e12e824d6d17a27c9533cc6e035969d3ff51a2b
Web Inspector: Create a UI for displaying JavaScript type information
https://bugs.webkit.org/show_bug.cgi?id=135142

Reviewed by Joseph Pecoraro.

JavaScriptCore now has a type profiler. This patch provides a frontend
user interface for displaying this type information in the Web Inspector.
The user interface works by placing inline "type tokens" next to important
JavaScript expressions: function arguments, function return types, and
variable declarations. Type information can also be seen for almost every
JavaScipt expression just by hovering over it while viewing a JavaScript file.

Currently, turning on the type profiler is expensive, so the inspector
ensures to never turn on type profiling until the user specifically asks
for type information to be turned on.

* UserInterface/Base/Main.js:
(WebInspector.loaded):
* UserInterface/Controllers/CodeMirrorTokenTrackingController.js:
(WebInspector.CodeMirrorTokenTrackingController.prototype._startTracking):
(WebInspector.CodeMirrorTokenTrackingController.prototype._processNewHoveredToken):
Added a new type profiling mode.

* UserInterface/Controllers/FormatterSourceMap.js:
(WebInspector.FormatterSourceMap.prototype.originalToFormatted):
(WebInspector.FormatterSourceMap.prototype.originalPositionToFormatted):
(WebInspector.FormatterSourceMap.prototype.formattedToOriginal):
(WebInspector.FormatterSourceMap.prototype.formattedToOriginalOffset):
* UserInterface/Controllers/TypeTokenAnnotator.js: Added.
(WebInspector.TypeTokenAnnotator):
(WebInspector.TypeTokenAnnotator.prototype.get isActive):
(WebInspector.TypeTokenAnnotator.prototype.get sourceCodeTextEditor):
(WebInspector.TypeTokenAnnotator.prototype.pause):
(WebInspector.TypeTokenAnnotator.prototype.resume):
(WebInspector.TypeTokenAnnotator.prototype.refresh):
(WebInspector.TypeTokenAnnotator.prototype.reset):
(WebInspector.TypeTokenAnnotator.prototype.toggleTypeAnnotations):
(WebInspector.TypeTokenAnnotator.prototype._insertAnnotations.):
(WebInspector.TypeTokenAnnotator.prototype._insertTypeTokensForEachNode):
(WebInspector.TypeTokenAnnotator.prototype._insertToken):
(WebInspector.TypeTokenAnnotator.prototype.isLineTerminator):
(WebInspector.TypeTokenAnnotator.prototype._translateToOffsetAfterFunctionParameterList):
(WebInspector.TypeTokenAnnotator.prototype._clearTimeoutIfNeeded):
This class is responsible for producing the inline "type token" annotations.

* UserInterface/Images/NavigationItemTypes.svg: Added.
* UserInterface/Main.html:
* UserInterface/Models/Script.js:
(WebInspector.Script.prototype.get scriptSyntaxTree):
* UserInterface/Models/ScriptSyntaxTree.js:
(WebInspector.ScriptSyntaxTree.prototype.containsNonEmptyReturnStatement):
(WebInspector.ScriptSyntaxTree.prototype.):
(WebInspector.ScriptSyntaxTree.prototype.updateTypes):
(WebInspector.ScriptSyntaxTree.prototype._createInternalSyntaxTree):
* UserInterface/Views/ScriptContentView.js:
(WebInspector.ScriptContentView):
(WebInspector.ScriptContentView.prototype.get navigationItems):
(WebInspector.ScriptContentView.prototype._contentDidPopulate):
(WebInspector.ScriptContentView.prototype._toggleTypeAnnotations):
(WebInspector.ScriptContentView.prototype._showJavaScriptTypeInformationSettingChanged):
* UserInterface/Views/SourceCodeTextEditor.js:
(WebInspector.SourceCodeTextEditor):
(WebInspector.SourceCodeTextEditor.prototype.shown):
(WebInspector.SourceCodeTextEditor.prototype.hidden):
(WebInspector.SourceCodeTextEditor.prototype.canShowTypeAnnotations):
(WebInspector.SourceCodeTextEditor.prototype.toggleTypeAnnotations):
(WebInspector.SourceCodeTextEditor.prototype.showPopoverForTypes):
(WebInspector.SourceCodeTextEditor.prototype.prettyPrint):
(WebInspector.SourceCodeTextEditor.prototype._populateWithContent):
(WebInspector.SourceCodeTextEditor.prototype._debuggerDidPause):
(WebInspector.SourceCodeTextEditor.prototype._debuggerDidResume):
(WebInspector.SourceCodeTextEditor.prototype._updateTokenTrackingControllerState):
(WebInspector.SourceCodeTextEditor.prototype.tokenTrackingControllerNewHighlightCandidate):
(WebInspector.SourceCodeTextEditor.prototype._tokenTrackingControllerHighlightedJavaScriptTypeInformation.handler):
(WebInspector.SourceCodeTextEditor.prototype._tokenTrackingControllerHighlightedJavaScriptTypeInformation):
(WebInspector.SourceCodeTextEditor.prototype._showPopover):
(WebInspector.SourceCodeTextEditor.prototype.editingControllerDidFinishEditing):
(WebInspector.SourceCodeTextEditor.prototype._makeTypeTokenAnnotator):
(WebInspector.SourceCodeTextEditor.prototype._enableScrollEventsForTypeTokenAnnotator):
(WebInspector.SourceCodeTextEditor.prototype._disableScrollEventsForTypeTokenAnnotator):
(WebInspector.SourceCodeTextEditor.prototype._makeTypeTokenScrollEventHandler.scrollHandler):
(WebInspector.SourceCodeTextEditor.prototype._makeTypeTokenScrollEventHandler):
* UserInterface/Views/TextContentView.js:
(WebInspector.TextContentView.prototype.get navigationItems):
* UserInterface/Views/TextEditor.js:
(WebInspector.TextEditor.prototype.set formatted):
(WebInspector.TextEditor.prototype.canShowTypeAnnotations):
(WebInspector.TextEditor.prototype.visibleRangeOffsets):
(WebInspector.TextEditor.prototype.originalOffsetToCurrentPosition):
(WebInspector.TextEditor.prototype.currentOffsetToCurrentPosition):
(WebInspector.TextEditor.prototype.currentPositionToOriginalOffset):
(WebInspector.TextEditor.prototype.currentPositionToCurrentOffset):
(WebInspector.TextEditor.prototype.setInlineWidget):
(WebInspector.TextEditor.prototype.addScrollHandler):
(WebInspector.TextEditor.prototype.removeScrollHandler):
(WebInspector.TextEditor.prototype._scrollIntoViewCentered):
* UserInterface/Views/TextResourceContentView.js:
(WebInspector.TextResourceContentView):
(WebInspector.TextResourceContentView.prototype.get navigationItems):
(WebInspector.TextResourceContentView.prototype._contentDidPopulate):
(WebInspector.TextResourceContentView.prototype._toggleTypeAnnotations):
(WebInspector.TextResourceContentView.prototype._showJavaScriptTypeInformationSettingChanged):
* UserInterface/Views/TypePropertiesSection.js: Added.
(WebInspector.TypePropertiesSection):
(WebInspector.TypePropertiesSection.prototype.onpopulate):
(WebInspector.TypePropertiesSection.PropertyComparator):
(WebInspector.TypePropertyTreeElement):
(WebInspector.TypePropertyTreeElement.prototype.onpopulate):
* UserInterface/Views/TypeTokenView.css: Added.
(.type-token):
(.type-token-left-spacing):
(.type-token-right-spacing):
(.type-token-function, .type-token-boolean):
(.type-token-number):
(.type-token-string):
(.type-token-default):
(.type-token-empty):
(.type-token-many):
* UserInterface/Views/TypeTokenView.js: Added.
(WebInspector.TypeTokenView):
(WebInspector.TypeTokenView.titleForPopover):
(WebInspector.TypeTokenView.prototype.update):
(WebInspector.TypeTokenView.prototype._setUpMouseoverHandlers):
(WebInspector.TypeTokenView.prototype._shouldShowPopover):
The inline "type token" view.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@173180 268f45cc-cd09-0410-ab3c-d52691b4dbfc
18 files changed:
Source/WebInspectorUI/ChangeLog
Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js
Source/WebInspectorUI/UserInterface/Base/Main.js
Source/WebInspectorUI/UserInterface/Controllers/CodeMirrorTokenTrackingController.js
Source/WebInspectorUI/UserInterface/Controllers/FormatterSourceMap.js
Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js [new file with mode: 0644]
Source/WebInspectorUI/UserInterface/Images/NavigationItemTypes.svg [new file with mode: 0644]
Source/WebInspectorUI/UserInterface/Main.html
Source/WebInspectorUI/UserInterface/Models/Script.js
Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js
Source/WebInspectorUI/UserInterface/Views/ScriptContentView.js
Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js
Source/WebInspectorUI/UserInterface/Views/TextContentView.js
Source/WebInspectorUI/UserInterface/Views/TextEditor.js
Source/WebInspectorUI/UserInterface/Views/TextResourceContentView.js
Source/WebInspectorUI/UserInterface/Views/TypePropertiesSection.js [new file with mode: 0644]
Source/WebInspectorUI/UserInterface/Views/TypeTokenView.css [new file with mode: 0644]
Source/WebInspectorUI/UserInterface/Views/TypeTokenView.js [new file with mode: 0644]