Files
palemoon27/devtools/shared/gcli/source/docs/developing-gcli.md
roytam1 4be8027b21 (WIP) import changes from `dev' branch of rmottola/Arctic-Fox:
- adapted version of Bug 912121 - Migrate major DevTools directories (8ff521cb21)
- Bug 1187831 - Refactor the highlighters into separate modules; r=pbrosset (fdca9d5f16)
- Bug 1157906 - Can't return arrays as a root response, fixes inspect button. r=bgrins (f684642158)
- Bug 912121 - Adjust build configs and test manifests. r=glandium (304066d667)
- Bug 912121 - Package DevTools client content in devtools.jar. rs=devtools (967caca3e0)
- Bug 1074180 - Convert touch simulator to frame script for e10s. r=ochameau (be9559c94c)
- Bug 1178851 - Move testing flag to DevToolsUtils. r=ochameau (9eb0bb908f)
- Bug 1158634 - Modify font-inspector tests for better code sharing. r=pbrosset (6e5f42e1fc)
- Bug 859058 - Export content of the Network panel as HAR; r=jsantell, r=jlongster (629f4c8f63)
- fix some module paths and Telemetry init (ed5131d7e1)
- Bug 1167945 - Remove spidermonkey specific JS from canvasdebugger; r=jryans (4865569865)
- Bug 1188401 - Expose require out of Loader.jsm and use it. r=jryans (464953c07a)
- Bug 1175760 - Set recording configurations based on UI prefs, but also target support overrides UI prefs. r=vp (137e7940db)
- Bug 1172180 - Create a PerformanceActor, and migrate existing pseudo PerformanceFront to a legacy front. r=vp (0fa20d2d20)
- Bug 1172180 - Add polling events for profiler/buffer status on the profiler itself. r=vp (ef4bb72f73)
- Bug 1172180 - part 2 - add ability to auto drain allocation logs in memory component via a timer and on GC. r=fitzgen (46ae8dd7eb)
- Bug 1190857 - Add loader alias to DevTools loader exports. r=jryans (fbe9e189b0)
- Bug 1195825 - Replace Cu.import(Promise.jsm) by require(promise) in devtools. r=jryans (be39379f9a)
- Bug 1153305 - change css-tokenizer.js to use CSSLexer r=pbrosset (584a825504)
- Bug 1178535 - Part 1: Parse the pseudoclasses and attributes from the selector text r=tromney (9d761b2ecf)
- Bug 1173298 - Disable add rule button for non-element nodes and anonymous elements. r=bgrins (1c60a6580c)
- move themes from toolkit to devtools (97989c5768)
- Bug 1190452 - Always import toolkit/devtools/server/main.js as CommonJS module. r=jryans (4b651f7076)
- Bug 1192863 - Use client/main.js instead of dbg-server.jsm. r=jryans (becdb5489e)
- minor cleanup (ba24674685)
- Bug 999568 - Bring devtools window to front on F12. r=pbrosset (8e945fb777)
- move devtool locales (52ddf02403)
- Bug 912121 - Adjust ESLint files. r=pbrosset (59724e31e3)
- Bug 1204182 - Use a single jar manifest for shared theme resources. r=dao (8b396bafe1)
- fix double entry (e64c5bb511)
- Bug 1077339 - Display keyboard shortcuts when hovering panel tabs. r=janx f=bgrins (1422fe5127)
- Bug 912121 - Rewrite require / import to match source tree. rs=devtools (09c4767e9f)
- Bug 1193313 - Remove projecteditor promise alias in favor of require(promise). r=bgrins (8ed93e1a8f)
- Bug 1193313 - Cleanup promises. r=jryans (38508b18ea)
- Bug 1193313 - Make gcli use DOM Promise. r=jwalker (405e49ec4e)
- Bug 1160361 - Skip Telemetry calls for non-Firefox. r=bgrins (942761962e)
- Bug 1189386 - Paint Flashing button on Developers Toolbar is checked on new tabs. r=pbrosset (d2cd46a7f2)
- Bug 1197394 - GCLI's number-type doesn't ignore min or max-values of 0. r=jwalker (5bda36049b)
- Bug 1046049 - Fix :w for saving in webide. r=jryans (8b353db8ca)
- Bug 1148086 - Style Editor: Don't jump to the first line unconditionally when an editor is shown. r=bgrins (25cd83f12f)
- Bug 1049199 - Style editor should show XBL stylesheets. r=pbrosset Bug 1148770 - Wait for asynchronous operations to complete before resolving in StyleSheetEditor.fetchSource. r=ejpbruel (0d3f4ff86f)
- Bug 1148770 - Don't load CodeMirror editor if StyleSheetEditor is destroyed before load is called. r=bgrins (5a665dca6e)
- Bug 999299 - Remove '[]' from the autoCloseBrackets config for Style Editor sourceeditor;r=mratcliffe (58aaf86e1d)
- Bug 1177891 - Introduce redux-style UI architecture in the debugger and refactor event listeners to use it. r=fitzgen Bug 1204173 - Replace Fluxify with Redux. r=jlongster (145adb12e4)
- Bug 1176981 - Part 0: Remove the tracing debugger UI; r=vporof (92d7fb4f3d)
- Bug 1176981 - Part 1: Remove the tracing debugger actor from the server; r=vporof (6548c82f8e)
- Bug 1176981 - Part 3: Actually remove the tracing debugger pref; r=vporof (731656b547)
- Bug 912121 - Create shims for popular DevTools modules in add-ons. rs=devtools (4635ccf492)
- partial of Bug 912121 - Update misc. DevTools paths and comments. rs=devtools (3b00d87f89)
- Bug 1189128 - Rename devtools .inc.css files that are no longer included to .css;r=jryans (b0fffb3be1)
- Bug 912121 - Misc. DevTools test fixes after migration. rs=devtools (6285f7ccd3)
- Bug 912121 - Package DevTools client themes in devtools.jar. rs=devtools (697be51a28)
- Bug 912121 - Create shims for popular DevTools themes in add-ons. rs=devtools (903c0e721e)
- Bug 912121 - Migrate DevTools themes. rs=devtools (a64b30b44f)
- Bug 1201597 - Part 0: Make saveHeapSnapshot return the file path rather than take it as a parameter; r=bholley (85652707da)
- Bug 1200446 - Add a method for saving heap snapshots to MemoryActor; r=jryans (112af304d1)
- Bug 1201213 - Add a HeapAnalyses{Worker,Client} for running heap analyses; r=jsantell (3e43273721)
- Bug 1201597 - Part 1: Implement an nsIOutputStream for ipc::FileDescriptor; r=mrbkap (e659f8514d)
- Bug 1201597 - Part 2: Add an IPDL subprotocol for opening core dump files to (f9c9b2b747)
- missing bit of Bug 1188401 - Expose require out of Loader.jsm (c7174fce60)
- Bug 1191916 - only enable step in/over/out buttons if actually paused at a location r=bgrins Bug 789430 - Pause on next bytecode instead of immediately;r=fitzgen (d51da724b3)
- Bug 1201700 - Create skeleton memory tool. r=fitzgen (4217e71fd4)
- missing bit of Bug 1178851 (1804598f62)
- add missing bit (c72fbab8a6)
- fix (2ea8917252)
- Bug 1182194 - Remove DevToolsUtils.jsm (in favor of its module). r=jwalker (16cd60ce9a)
- Bug 1182194 - Convert LayoutHelpers.jsm into a commonjs module. r=jwalker Bug 1132475 - Refactor LayoutHelpers.jsm to avoid dependencies. r=pbrosset (5409fcdaac)
- Bug 935366 - Remove unused Require.jsm. r=fitzgen (20ce6ce7f4)
- remove unbuild profiler and timeline, but build shims (c0d9a9048a)
- Bug 1169135 - Make Graphs.jsm a require module, r=jsantell (8bd010851b)
- Bug 1137487 - Make tests wait for the canvas graph's destruction to finish before cleaning up, r=me (ba472b7c63)
- Bug 1151246 - flame graph header should render above the flame graph. r=vp (6f0ca96884)
- Bug 1066504 - Allow timeline range selection to continue even after mouseout of the graph window. r=vporof Bug 1145784 - Bind graph mouse movement to the top level window;r=vporof (7556cd2cf7)
- Bug 1141719 - Lots of "TypeError: ownerWindow is null" when shutting down the new perf tool on debug builds, r=jsantell (12761630dc)
- Bug 1175686 - Pull line and bar graph widgets outside of Graphs.js into their own files, r=jsantell, a=Mossop (e6e895604a)
- Bug 1174264 - Stacked Mountain Chart Widget, r=jsantell, a=Mossop (c1ed5dfed1)
- Bug 980006 - Add MDN tooltips for CSS properties. r=pbrosset (dc7102fa19)
- Bug 1159109 - The MDN tooltip should be controlled by a pref. r=pbrosset (95da8e51a5)
- missing bits of Bug 1182194 - Use DevToolsUtils module instead of JSM. (355c4e2f80)
- Bug 1141615 - Use before declaration for scaledStep in FlameGraph.jsm, r=jsantell (993c41aae5)
- Bug 1145784 - Use testX/testY for coordinates during tests for the Graph and FlameGraph;r=vporof (a004e9c7f0)
- Bug 1090950 - Properly bound fillRect call for Graphs with selections that start or end out of bounds. r=vporof (3fbf750cbd)
- Bug 1164327 - Make resizing a graph maintain the drawn selection. r=vporof (147485835b)
- Don't dump errors in tests that are already handled by the parser (bug 1138784). r=vporof (e0671fd8b3)
- Bug 913617 - Reflect.parse: rename ArrowExpression to ArrowFunctionExpression. r=jorendorff (78eb0f718b)
- Bug 1008380 - Can't remove a breakpoint after it slides to a new line;r=jlong (4fd797cf9a)
- Bug 1131756 - properly display anonymous sources when they are needed in the debugger r=ejpbruel Bug 1183895 - Part 2: Add a toolbar button for toggling the promise debugger r=fitzgen (5a01328a1e)
- Bug 1183895 - Part 1: Add a new pane for the promise debugger r=fitzgen (20a1f49b59)
- Bug 1179977 - Vertical layout for JSDebugger in small window host. r=jlong (4bb82acdb6)
- some profiler/performance leftover (921b05d184)
- Bug 1155553 - Fixes animationinspector regression with actor-capabilities detection; r=bgrins (12095c1afc)
- Bug 1169563 - 1 - Minor ESLint code cleanup; r=ednapiranha (c6c808ca1b)
- Bug 1169563 - 2 - Add a scrubber element to timeline animation UI; r=zer0 (44caa900cd)
- Bug 1169563 - 3 - Move the scrubber in the animation timeline to set the time; r=tromey (71ee83e303)
- Bug 1169563 - 5 - Resize animations in the timeline UI to show their rates; r=miker (63709f41b6)
- Bug 1169563 - 6 - Animate the scrubber when animations are playing; r=miker (3f63035572)
- Bug 1174060 - 4 - Minor eslint changes to animation-inspector; r=ednapiranha (42c3242e87)
- missing eslint stuff (c4ad512ec9)
- Bug 1090478 - Add a keyboard shortcut for the Browser Toolbox. r=jryans (f5ec8fce1d)
- Bug 1135635 - Position sidebar allTabs menu absolutely to avoid oveflow jittering; r=bgrins (7339c7344a)
- Bug 1182083 - Don't hide tabpanels in the DevTools sidebar. r=vporof (9ed0784990)
- some telemetry stuff (3844f60f89)
- Bug 1172010 - Fix tools reload gcli command. r=jwalker (c3c2ab47ae)
- Bug 1107656 - Generate unique prefixes for e10s parent-child server connections; r=ochameau (da59ead659)
- fix image paths (085de78f74)
- Bug 116953 - 4 - Move traits out of controller; r=tromey (80e5d0ba8d)
- Bug 1174060 - 1 - Fix auto-removed animations that have the same name but different targets; r=miker (0ac111d790)
- Bug 1174060 - 2 - Display negative delays like normal delays; r=bgrins (530b611f97)
- Bug 1174060 - 5 - Reverts typo introduced by bug 1180134 that overrided the background-image; r=tromey (104def3b4d)
- Bug 1180134 - Color code animations and transitions so they look different; r=bgrins (fdfa5b131c)
- Bug 1174060 - 6 - Tests for how delays are displayed in the timeline; r=ochameau (26422f6438)
-  Bu 1155661 - 1 - Rename toolbar to global-toolbar; r=zer0 (ccf6e8c304)
- Bug 1155661 - 2 - Add a new timeline toolbar shown only when the timeline is displayed and non empty; r=zer0 (1a4de3a552)
- Bug 1202443 - Prevent pushing the timeline header up when there are many animations; r=zer0 (7eb9645dd8)
- fix some paths (fd03ff798b)
- Bug 1155661 - 3 - Add a way to play/pause the current animations at the same time; r=miker (582c82e3a9)
- Bug 1156757 - Turn ON the animation inspector UI v3 by default and remove v2; r=past (0093d6e0cc)
- Bug 1155663 - More tests for the timeline-based animation inspector UI; r=bgrins (5138da1bf1)
- Bug 1155661 - 4 - Add the timeline play/pause button; r=bgrins (2af3664fdd)
- Bug 1155661 - 5 - Make the timeline emit data about its current state and update the play/pause button based on this; r=miker (2b56df070d)
- Bug 1155661 - 6 - Implement the behavior behind the timeline play/pause button; r=miker (783e49d1ae)
- Bug 1173761 - Display each animation's time data like duration in a tooltip; r=miker (312b319c21)
- Bug 1155651 - Return all players below a node in getAnimationPlayersForNode; r=miker (38c6e3b365)
- Bug 1170806 - Fix GeneratedLocation documentation comment DONTBUILD; r=me (3f1f605e15)
- Bug 1150814 - Rulers graduations are not displayed. r=mratcliffe (48b79dae20)
- Bug 938188 - Make highlighter capable of highlighting only one region, fading out others. r=bgrins (ceb4211e87)
- Bug 1151956 - Add tooltips with refs to source css rules in the layout-view; r=miker (b72cab14da)
- Bug 1167617 - Remove SpiderMonkey specific JS syntax from inspector; r=jryans (9c95101e22)
- Bug 1149346 - First word in selector-search also matches classes and ids; r=harth (82159de025)
- Bug 1196776 - Fix dynamic actors in browser content toolbox. r=jryans (3370eef446)
- Bug 1174821 - 1 - eslint cleanup of view.js; r=janx (fa3ecba9a2)
- Bug 1174821 - 2 - Show only 1 box-model region on hover; r=janx (ad1ddab34a)
- Bug 1174821 - 3 - Consolidate and cleanup layoutview's css files; r=janx (8baa3fd80b)
- Bug 1174821 - 4 - Refactor layoutview's dimming; r=janx (37d5849be5)
- Bug 1174821 - 5 - More eslint cleanup of view.js; r=janx (82200173a0)
- Bug 1173373 - Change DevTools tab tooltips from Cmd+Alt* to Cmd+Opt+*;r=janx (23f9900033)
- Bug 1138591 - Remove the chrome-enabled pref. r=past (8bfd0a8d14)
- Bug 1195162 - Remove unused pref layout.debug.enable_data_xbl (r=sicking) (04c4996c90)
- fix misspatch (975349f11b)
- fix misspatch (c9ef2c63de)
2022-07-05 22:25:33 +08:00

214 lines
8.5 KiB
Markdown

# Developing GCLI
## About the code
The majority of the GCLI source is stored in the ``lib`` directory.
The ``docs`` directory contains documentation.
The ``scripts`` directory contains RequireJS that GCLI uses.
The ``build`` directory contains files used when creating builds.
The ``mozilla`` directory contains the mercurial patch queue of patches to apply
to mozilla-central.
The ``selenium-tests`` directory contains selenium web-page integration tests.
The source in the ``lib`` directory is split into 4 sections:
- ``lib/demo`` contains commands used in the demo page. It is not needed except
for demo purposes.
- ``lib/test`` contains a small test harness for testing GCLI.
- ``lib/gclitest`` contains tests that run in the test harness
- ``lib/gcli`` contains the actual meat
GCLI is split into a UI portion and a Model/Controller portion.
## The GCLI Model
The heart of GCLI is a ``Requisition``, which is an AST for the input. A
``Requisition`` is a command that we'd like to execute, and we're filling out
all the inputs required to execute the command.
A ``Requisition`` has a ``Command`` that is to be executed. Each Command has a
number of ``Parameter``s, each of which has a name and a type as detailed
above.
As you type, your input is split into ``Argument``s, which are then assigned to
``Parameter``s using ``Assignment``s. Each ``Assignment`` has a ``Conversion``
which stores the input argument along with the value that is was converted into
according to the type of the parameter.
There are special assignments called ``CommandAssignment`` which the
``Requisition`` uses to link to the command to execute, and
``UnassignedAssignment``used to store arguments that do not have a parameter
to be assigned to.
## The GCLI UI
There are several components of the GCLI UI. Each can have a script portion,
some template HTML and a CSS file. The template HTML is processed by
``domtemplate`` before use.
DomTemplate is fully documented in [it's own repository]
(https://github.com/joewalker/domtemplate).
The components are:
- ``Inputter`` controls the input field, processing special keyboard events and
making sure that it stays in sync with the Requisition.
- ``Completer`` updates a div that is located behind the input field and used
to display completion advice and hint highlights. It is stored in
completer.js.
- ``Display`` is responsible for containing the popup hints that are displayed
above the command line. Typically Display contains a Hinter and a RequestsView
although these are not both required. Display itself is optional, and isn't
planned for use in the first release of GCLI in Firefox.
- ``Hinter`` Is used to display input hints. It shows either a Menu or an
ArgFetch component depending on the state of the Requisition
- ``Menu`` is used initially to select the command to be executed. It can act
somewhat like the Start menu on windows.
- ``ArgFetch`` Once the command to be executed has been selected, ArgFetch
shows a 'dialog' allowing the user to enter the parameters to the selected
command.
- ``RequestsView`` Contains a set of ``RequestView`` components, each of which
displays a command that has been invoked. RequestsView is a poor name, and
should better be called ReportView
ArgFetch displays a number of Fields. There are fields for most of the Types
discussed earlier. See 'Writing Fields' above for more information.
## Testing
GCLI contains 2 test suites:
- JS level testing is run with the ``test`` command. The tests are located in
``lib/gclitest`` and they use the test runner in ``lib/test``. This is fairly
comprehensive, however it does not do UI level testing.
If writing a new test it needs to be registered in ``lib/gclitest/index``.
For an example of how to write tests, see ``lib/gclitest/testSplit.js``.
The test functions are implemented in ``lib/test/assert``.
- Browser integration tests are included in ``browser_webconsole_gcli_*.js``,
in ``toolkit/components/console/hudservice/tests/browser``. These are
run with the rest of the Mozilla test suite.
## Coding Conventions
The coding conventions for the GCLI project come from the Bespin/Skywriter and
Ace projects. They are roughly [Crockford]
(http://javascript.crockford.com/code.html) with a few exceptions and
additions:
* ``var`` does not need to be at the top of each function, we'd like to move
to ``let`` when it's generally available, and ``let`` doesn't have the same
semantic twists as ``var``.
* Strings are generally enclosed in single quotes.
* ``eval`` is to be avoided, but we don't declare it evil.
The [Google JavaScript conventions]
(https://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml) are
more detailed, we tend to deviate in:
* Custom exceptions: We generally just use ``throw new Error('message');``
* Multi-level prototype hierarchies: Allowed; we don't have ``goog.inherits()``
* ``else`` begins on a line by itself:
if (thing) {
doThis();
}
else {
doThat();
}
## Startup
Internally GCLI modules have ``startup()``/``shutdown()`` functions which are
called on module init from the top level ``index.js`` of that 'package'.
In order to initialize a package all that is needed is to require the package
index (e.g. ``require('package/index')``).
The ``shutdown()`` function was useful when GCLI was used in Bespin as part of
dynamic registration/de-registration. It is not known if this feature will be
useful in the future. So it has not been entirely removed, it may be at some
future date.
## Running the Unit Tests
Start the GCLI static server:
cd path/to/gcli
node gcli.js
Now point your browser to http://localhost:9999/localtest.html. When the page
loads the tests will be automatically run outputting to the console, or you can
enter the ``test`` command to run the unit tests.
## Contributing Code
Please could you do the following to help minimize the amount of rework that we
do:
1. Check the unit tests run correctly (see **Running the Unit Tests** above)
2. Check the code follows the style guide. At a minimum it should look like the
code around it. For more detailed notes, see **Coding Conventions** above
3. Help me review your work by using good commit comments. Which means 2 things
* Well formatted messages, i.e. 50 char summary including bug tag, followed
by a blank line followed by a more in-depth message wrapped to 72 chars
per line. This is basically the format used by the Linux Kernel. See the
[commit log](https://github.com/joewalker/gcli/commits/master) for
examples. The be extra helpful, please use the "shortdesc-BUGNUM: " if
possible which also helps in reviews.
* Commit your changes as a story. Make it easy for me to understand the
changes that you've made.
4. Sign your work. To improve tracking of who did what, we follow the sign-off
procedure used in the Linux Kernel.
The sign-off is a simple line at the end of the explanation for the
patch, which certifies that you wrote it or otherwise have the right to
pass it on as an open-source patch. The rules are pretty simple: if you
can certify the below:
Developer's Certificate of Origin 1.1
By making a contribution to this project, I certify that:
(a) The contribution was created in whole or in part by me and I
have the right to submit it under the open source license
indicated in the file; or
(b) The contribution is based upon previous work that, to the best
of my knowledge, is covered under an appropriate open source
license and I have the right under that license to submit that
work with modifications, whether created in whole or in part
by me, under the same open source license (unless I am
permitted to submit under a different license), as indicated
in the file; or
(c) The contribution was provided directly to me by some other
person who certified (a), (b) or (c) and I have not modified
it.
(d) I understand and agree that this project and the contribution
are public and that a record of the contribution (including all
personal information I submit with it, including my sign-off) is
maintained indefinitely and may be redistributed consistent with
this project or the open source license(s) involved.
then you just add a line saying
Signed-off-by: Random J Developer <random@developer.example.org>
using your real name (sorry, no pseudonyms or anonymous contributions.)
Thanks for wanting to contribute code.