forked from Floorp-Projects/Floorp
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Bug 1613526 - Create a code quality documentation and move the approp…
…riate docs r=ahal This for a few reasons: * The summary becomes the landing page for code quality: https://firefox-source-docs.mozilla.org/tools/static-analysis/summary.html * I don't think we need a full code quality category * Closer to the source-code-doc * All the files at the same place Differential Revision: https://phabricator.services.mozilla.com/D61767
- Loading branch information
Showing
37 changed files
with
1,038 additions
and
619 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
|
||
Mode line | ||
~~~~~~~~~ | ||
|
||
Files should have Emacs and vim mode line comments as the first two | ||
lines of the file, which should set ``indent-tabs-mode`` to ``nil``. For new | ||
files, use the following, specifying two-space indentation: | ||
|
||
.. code-block:: cpp | ||
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ | ||
/* vim: set ts=8 sts=2 et sw=2 tw=80: */ | ||
/* This Source Code Form is subject to the terms of the Mozilla Public | ||
* License, v. 2.0. If a copy of the MPL was not distributed with this | ||
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */ | ||
Be sure to use the correct ``Mode`` in the first line, don't use ``C++`` in | ||
JavaScript files. |
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,150 @@ | ||
======================= | ||
JavaScript Coding style | ||
======================= | ||
|
||
Coding style | ||
~~~~~~~~~~~~ | ||
|
||
`prettier <https://prettier.io/>`_ is the tool used to reformat the JavaScript code. | ||
|
||
|
||
Methods and functions | ||
~~~~~~~~~~~~~~~~~~~~~ | ||
|
||
In JavaScript, functions should use camelCase, but should not capitalize | ||
the first letter. Methods should not use the named function expression | ||
syntax, because our tools understand method names: | ||
|
||
.. code-block:: cpp | ||
doSomething: function (aFoo, aBar) { | ||
... | ||
} | ||
In-line functions should have spaces around braces, except before commas | ||
or semicolons: | ||
|
||
.. code-block:: cpp | ||
function valueObject(aValue) { return { value: aValue }; } | ||
JavaScript objects | ||
~~~~~~~~~~~~~~~~~~ | ||
|
||
.. code-block:: cpp | ||
var foo = { prop1: "value1" }; | ||
var bar = { | ||
prop1: "value1", | ||
prop2: "value2" | ||
}; | ||
Constructors for objects should be capitalized and use Pascal Case: | ||
|
||
.. code-block:: cpp | ||
function ObjectConstructor() { | ||
this.foo = "bar"; | ||
} | ||
Operators | ||
~~~~~~~~~ | ||
|
||
In JavaScript, overlong expressions not joined by ``&&`` and | ||
``||`` should break so the operator starts on the second line and | ||
starting in the same column as the beginning of the expression in the | ||
first line. This applies to ``?:``, binary arithmetic operators | ||
including ``+``, and member-of operators. Rationale: an operator at the | ||
front of the continuation line makes for faster visual scanning, as | ||
there is no need to read to the end of line. Also there exists a | ||
context-sensitive keyword hazard in JavaScript; see {{bug(442099, "bug", | ||
19)}}, which can be avoided by putting . at the start of a continuation | ||
line, in long member expression. | ||
|
||
In JavaScript, ``==`` is preferred to ``===``. | ||
|
||
Unary keyword operators, such as ``typeof``, should have their operand | ||
parenthesized; e.g. ``typeof("foo") == "string"``. | ||
|
||
Literals | ||
~~~~~~~~ | ||
|
||
Double-quoted strings (e.g. ``"foo"``) are preferred to single-quoted | ||
strings (e.g. ``'foo'``), in JavaScript, except to avoid escaping | ||
embedded double quotes, or when assigning inline event handlers. | ||
|
||
|
||
Prefixes | ||
~~~~~~~~ | ||
|
||
- k=constant (e.g. ``kNC_child``). Not all code uses this style; some | ||
uses ``ALL_CAPS`` for constants. | ||
- g=global (e.g. ``gPrefService``) | ||
- a=argument (e.g. ``aCount``) | ||
|
||
- JavaScript Specific Prefixes | ||
|
||
- \_=member (variable or function) (e.g. ``_length`` or | ||
``_setType(aType)``) | ||
- k=enumeration value (e.g. ``const kDisplayModeNormal = 0``) | ||
- on=event handler (e.g. ``function onLoad()``) | ||
- Convenience constants for interface names should be prefixed with | ||
``nsI``: | ||
|
||
.. code-block:: javascript | ||
const nsISupports = Components.interfaces.nsISupports; | ||
const nsIWBN = Components.interfaces.nsIWebBrowserNavigation; | ||
Other advices | ||
~~~~~~~~~~~~~ | ||
|
||
- Make sure you are aware of the `JavaScript | ||
Tips <https://developer.mozilla.org/docs/Mozilla/JavaScript_Tips>`__. | ||
- Do not compare ``x == true`` or ``x == false``. Use ``(x)`` or | ||
``(!x)`` instead. ``x == true``, is certainly different from if | ||
``(x)``! Compare objects to ``null``, numbers to ``0`` or strings to | ||
``""``, if there is chance for confusion. | ||
- Make sure that your code doesn't generate any strict JavaScript | ||
warnings, such as: | ||
|
||
- Duplicate variable declaration. | ||
- Mixing ``return;`` with ``return value;`` | ||
- Undeclared variables or members. If you are unsure if an array | ||
value exists, compare the index to the array's length. If you are | ||
unsure if an object member exists, use ``"name"`` in ``aObject``, | ||
or if you are expecting a particular type you may use | ||
``typeof(aObject.name) == "function"`` (or whichever type you are | ||
expecting). | ||
|
||
- Use ``['value1, value2']`` to create a JavaScript array in preference | ||
to using | ||
``new {{JSxRef("Array", "Array", "Syntax", 1)}}(value1, value2)`` | ||
which can be confusing, as ``new Array(length)`` will actually create | ||
a physically empty array with the given logical length, while | ||
``[value]`` will always create a 1-element array. You cannot actually | ||
guarantee to be able to preallocate memory for an array. | ||
- Use ``{ member: value, ... }`` to create a JavaScript object; a | ||
useful advantage over ``new {{JSxRef("Object", "Object", "", 1)}}()`` | ||
is the ability to create initial properties and use extended | ||
JavaScript syntax, to define getters and setters. | ||
- If having defined a constructor you need to assign default | ||
properties, it is preferred to assign an object literal to the | ||
prototype property. | ||
- Use regular expressions, but use wisely. For instance, to check that | ||
``aString`` is not completely whitespace use | ||
``/\S/.{{JSxRef("RegExp.test", "test(aString)", "", 1)}}``. Only use | ||
{{JSxRef("String.search", "aString.search()")}} if you need to know | ||
the position of the result, or {{JSxRef("String.match", | ||
"aString.match()")}} if you need to collect matching substrings | ||
(delimited by parentheses in the regular expression). Regular | ||
expressions are less useful if the match is unknown in advance, or to | ||
extract substrings in known positions in the string. For instance, | ||
{{JSxRef("String.slice", "aString.slice(-1)")}} returns the last | ||
letter in ``aString``, or the empty string if ``aString`` is empty. | ||
|
File renamed without changes.
File renamed without changes.
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
Coding style | ||
============ | ||
|
||
Firefox code is using different programming languages. | ||
For each language, we are enforcing a specific coding style. | ||
|
||
.. toctree:: | ||
:maxdepth: 2 | ||
:glob: | ||
|
||
* | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
Linting | ||
======= | ||
|
||
Linters are used in mozilla-central to help enforce coding style and avoid bad practices. Due to the | ||
wide variety of languages in use, this is not always an easy task. In addition, linters should be runnable from editors, from the command line, from review tools | ||
and from continuous integration. It's easy to see how the complexity of running all of these | ||
different kinds of linters in all of these different places could quickly balloon out of control. | ||
|
||
``Mozlint`` is a library that accomplishes several goals: | ||
|
||
1. It provides a standard method for adding new linters to the tree, which can be as easy as | ||
defining a config object in a ``.yml`` file. This helps keep lint related code localized, and | ||
prevents different teams from coming up with their own unique lint implementations. | ||
2. It provides a streamlined interface for running all linters at once. Instead of running N | ||
different lint commands to test your patch, a single ``mach lint`` command will automatically run | ||
all applicable linters. This means there is a single API surface that other tools can use to | ||
invoke linters. | ||
3. With a simple taskcluster configuration, Mozlint provides an easy way to execute all these jobs | ||
at review phase. | ||
|
||
``Mozlint`` isn't designed to be used directly by end users. Instead, it can be consumed by things | ||
like mach, phabricator and taskcluster. | ||
|
||
.. toctree:: | ||
:caption: Linting User Guide | ||
:maxdepth: 1 | ||
:glob: | ||
|
||
usage | ||
create | ||
linters/* |
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.