author | Nick Fitzgerald <fitzgen@gmail.com> |
Tue, 03 Sep 2013 19:22:08 -0700 | |
changeset 145488 | cff37b5ea5fb7da9d737981d959c63318b562b13 |
parent 145487 | e4ca2c1ba7c3adf9c21195b4f46fcb2aa504181c |
child 145489 | e56e7c0e83f2de1c4ca6a52a61c1a5c6e4405806 |
push id | 25214 |
push user | kwierso@gmail.com |
push date | Thu, 05 Sep 2013 00:02:20 +0000 |
treeherder | mozilla-central@99bd249e5a20 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | anton |
bugs | 906640 |
milestone | 26.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/browser/devtools/scratchpad/scratchpad.js +++ b/browser/devtools/scratchpad/scratchpad.js @@ -15,27 +15,30 @@ "use strict"; let require = Components.utils.import("resource://gre/modules/devtools/Loader.jsm", {}).devtools.require; let { Cc, Ci, Cu } = require("chrome"); let promise = require("sdk/core/promise"); let Telemetry = require("devtools/shared/telemetry"); let TargetFactory = require("devtools/framework/target").TargetFactory; +const escodegen = require("escodegen/escodegen"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/NetUtil.jsm"); Cu.import("resource:///modules/source-editor.jsm"); Cu.import("resource:///modules/devtools/LayoutHelpers.jsm"); Cu.import("resource:///modules/devtools/scratchpad-manager.jsm"); Cu.import("resource://gre/modules/jsdebugger.jsm"); Cu.import("resource:///modules/devtools/gDevTools.jsm"); Cu.import("resource://gre/modules/osfile.jsm"); Cu.import("resource:///modules/devtools/ViewHelpers.jsm"); +Cu.import("resource://gre/modules/reflect.jsm"); +Cu.import("resource://gre/modules/devtools/DevToolsUtils.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "VariablesView", "resource:///modules/devtools/VariablesView.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "VariablesViewController", "resource:///modules/devtools/VariablesViewController.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "ObjectClient", @@ -517,16 +520,30 @@ var Scratchpad = { }); } }, reject); return deferred.promise; }, /** + * Pretty print the source text inside the scratchpad. + */ + prettyPrint: function SP_prettyPrint() { + const uglyText = this.getText(); + try { + const ast = Reflect.parse(uglyText); + const prettyText = escodegen.generate(ast); + this.setText(prettyText); + } catch (e) { + this.writeAsErrorComment(DevToolsUtils.safeErrorString(e)); + } + }, + + /** * Writes out a primitive value as a comment. This handles values which are * to be printed directly (number, string) as well as grips to values * (null, undefined, longString). * * @param any aValue * The value to print. * @return Promise * The promise that resolves after the value has been printed.
--- a/browser/devtools/scratchpad/scratchpad.xul +++ b/browser/devtools/scratchpad/scratchpad.xul @@ -41,16 +41,17 @@ <!-- TODO: bug 650340 - implement printFile() <command id="sp-cmd-printFile" oncommand="Scratchpad.printFile();" disabled="true"/> --> <command id="sp-cmd-close" oncommand="Scratchpad.close();"/> <command id="sp-cmd-run" oncommand="Scratchpad.run();"/> <command id="sp-cmd-inspect" oncommand="Scratchpad.inspect();"/> <command id="sp-cmd-display" oncommand="Scratchpad.display();"/> + <command id="sp-cmd-pprint" oncommand="Scratchpad.prettyPrint();"/> <command id="sp-cmd-contentContext" oncommand="Scratchpad.setContentContext();"/> <command id="sp-cmd-browserContext" oncommand="Scratchpad.setBrowserContext();" disabled="true"/> <command id="sp-cmd-reloadAndRun" oncommand="Scratchpad.reloadAndRun();"/> <command id="sp-cmd-errorConsole" oncommand="Scratchpad.openErrorConsole();" disabled="true"/> <command id="sp-cmd-webConsole" oncommand="Scratchpad.openWebConsole();"/> <command id="sp-cmd-documentationLink" oncommand="Scratchpad.openDocumentationPage();"/> <command id="sp-cmd-hideSidebar" oncommand="Scratchpad.sidebar.hide();"/> </commandset> @@ -89,16 +90,20 @@ <key id="sp-key-inspect" key="&inspect.key;" command="sp-cmd-inspect" modifiers="accel"/> <key id="sp-key-display" key="&display.key;" command="sp-cmd-display" modifiers="accel"/> + <key id="sp-key-pprint" + key="&pprint.key;" + command="sp-cmd-pprint" + modifiers="accel"/> <key id="sp-key-reloadAndRun" key="&reloadAndRun.key;" command="sp-cmd-reloadAndRun" modifiers="accel,shift"/> <key id="sp-key-errorConsole" key="&errorConsoleCmd.commandkey;" command="sp-cmd-errorConsole" modifiers="accel,shift"/> @@ -267,16 +272,21 @@ <toolbarbutton id="sp-toolbar-inspect" class="devtools-toolbarbutton" label="&inspect.label;" command="sp-cmd-inspect"/> <toolbarbutton id="sp-toolbar-display" class="devtools-toolbarbutton" label="&display.label;" command="sp-cmd-display"/> + <toolbarspacer/> + <toolbarbutton id="sp-toolbar-pprint" + class="devtools-toolbarbutton" + label="&pprint.label;" + command="sp-cmd-pprint"/> </toolbar> <popupset id="scratchpad-popups"> <menupopup id="scratchpad-text-popup" onpopupshowing="goUpdateSourceEditorMenuItems()"> <menuitem id="se-cMenu-cut"/> <menuitem id="se-cMenu-copy"/>
--- a/browser/devtools/scratchpad/test/Makefile.in +++ b/browser/devtools/scratchpad/test/Makefile.in @@ -34,14 +34,15 @@ MOCHITEST_BROWSER_FILES = \ browser_scratchpad_bug756681_display_non_error_exceptions.js \ browser_scratchpad_bug_751744_revert_to_saved.js \ browser_scratchpad_bug740948_reload_and_run.js \ browser_scratchpad_bug_661762_wrong_window_focus.js \ browser_scratchpad_bug_644413_modeline.js \ browser_scratchpad_bug807924_cannot_convert_to_string.js \ browser_scratchpad_long_string.js \ browser_scratchpad_open_error_console.js \ + browser_scratchpad_pprint.js \ head.js \ # Disable test due to bug 807234 becoming basically permanent # browser_scratchpad_bug_653427_confirm_close.js \ include $(topsrcdir)/config/rules.mk
new file mode 100644 --- /dev/null +++ b/browser/devtools/scratchpad/test/browser_scratchpad_pprint.js @@ -0,0 +1,26 @@ +/* vim: set ts=2 et sw=2 tw=80: */ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +function test() +{ + waitForExplicitFinish(); + + gBrowser.selectedTab = gBrowser.addTab(); + gBrowser.selectedBrowser.addEventListener("load", function onLoad() { + gBrowser.selectedBrowser.removeEventListener("load", onLoad, true); + openScratchpad(runTests); + }, true); + + content.location = "data:text/html;charset=utf8,test Scratchpad pretty print."; +} + +function runTests(sw) +{ + const sp = sw.Scratchpad; + sp.setText("function main() { console.log(5); }"); + sp.prettyPrint(); + const prettyText = sp.getText(); + ok(prettyText.contains("\n")); + finish(); +}
--- a/browser/locales/en-US/chrome/browser/devtools/scratchpad.dtd +++ b/browser/locales/en-US/chrome/browser/devtools/scratchpad.dtd @@ -60,16 +60,19 @@ <!ENTITY inspect.label "Inspect"> <!ENTITY inspect.accesskey "I"> <!ENTITY inspect.key "i"> <!ENTITY display.label "Display"> <!ENTITY display.accesskey "D"> <!ENTITY display.key "l"> +<!ENTITY pprint.label "Pretty Print"> +<!ENTITY pprint.key "p"> + <!-- LOCALIZATION NOTE (environmentMenu.label, accesskey): This menu item was - renamed from "Context" to avoid confusion with the right-click context - menu in the text area. It refers to the JavaScript Environment (or context) - the user is evaluating against. I.e., Content (current tab) or Chrome - (browser). --> <!ENTITY environmentMenu.label "Environment"> <!ENTITY environmentMenu.accesskey "N">