diff --git a/doc/src/editors/creator-editors.qdoc b/doc/src/editors/creator-editors.qdoc index a355cfc57f8..26486de0dfb 100644 --- a/doc/src/editors/creator-editors.qdoc +++ b/doc/src/editors/creator-editors.qdoc @@ -347,41 +347,374 @@ \endlist - \section1 Checking JavaScript Syntax + \section1 Checking JavaScript and QML Syntax - You can run static checks on JavaScript to find common problems, such as: - - \list - - \o Duplicate or conflicting variable, function, and formal parameter - declarations - - \o Variables and functions that are used before they are declared - - \o Possibly unsafe uses of the == or != operators - - \o Comma expressions, except in \c for statements - - \o Expression statements, except function or method calls, assignments, - or \c delete - - \o Assignments within conditions (such as, \c {if (a = b)}) - - \o Case blocks within a switch that do not end with a return, break, - continue, or throw and that are not empty - - \o Nested block statements - - \o \c with statements - - \o \c void expressions - - \endlist + You can run static checks on the QML and JavaScript code in your project + to find common problems. To run the checks, select \gui {Tools > QML/JS > Run Checks} or press \key Ctrl+Shift+C. The results are shown in the \gui {QML Analysis} filter of the \gui {Issues} output pane. + + \section1 List of JavaScript and QML Checks + + Many of the JavaScript checks are similar to the ones in Douglas + Crockford's JSLint tool and are explained well on + \l{http://www.jslint.com/lint.html}{the JSLint website}. + + \table + \header + \o Id + \o Severity + \o Message + \o Description + + \row + \o M1 + \o Error + \o Invalid value for enum + \o + + \row + \o M2 + \o Error + \o Enum value must be a string or a number + \o + + \row + \o M3 + \o Error + \o Number value expected + \o + + \row + \o M4 + \o Error + \o Boolean value expected + \o + + \row + \o M5 + \o Error + \o String value expected + \o + + \row + \o M6 + \o Error + \o Invalid URL + \o + + \row + \o M7 + \o Warning + \o File or directory does not exist + \o + + \row + \o M8 + \o Error + \o Invalid color + \o + + \row + \o M9 + \o Error + \o Anchor line expected + \o + + \row + \o M10 + \o Error + \o Duplicate property binding + \o + + \row + \o M11 + \o Error + \o Id expected + \o + + \row + \o M14 + \o Error + \o Invalid id + \o + + \row + \o M15 + \o Error + \o Duplicate id + \o + + \row + \o M16 + \o Error + \o Invalid property name 'name' + \o + + \row + \o M17 + \o Error + \o 'Name' does not have members + \o + + \row + \o M18 + \o Error + \o 'Field' is not a member of 'object' + \o + + \row + \o M19 + \o Warning + \o Assignment in condition + \o + + \row + \o M20 + \o Warning + \o Unterminated non-empty case block + \o + + \row + \o M23 + \o Warning + \o Do not use 'eval' + \o + + \row + \o M28 + \o Warning + \o Unreachable + \o + + \row + \o M29 + \o Warning + \o Do not use 'with' + \o + + \row + \o M30 + \o Warning + \o Do not use comma expressions + \o + + \row + \o M31 + \o Warning + \o Unnecessary message suppression + \o + + \row + \o M103 + \o Warning + \o 'Name' is already a formal parameter + \o + + \row + \o M104 + \o Warning + \o 'Name' is already a function + \o + + \row + \o M105 + \o Warning + \o Var 'name' is used before its declaration + \o + + \row + \o M106 + \o Warning + \o 'Name' is already a var + \o + + \row + \o M107 + \o Warning + \o 'Name' is declared more than once + \o + + \row + \o M108 + \o Warning + \o Function 'name' is used before its declaration + \o + + \row + \o M109 + \o Warning + \o Do not use 'Boolean' as a constructor + \o + + \row + \o M110 + \o Warning + \o Do not use 'String' as a constructor + \o + + \row + \o M111 + \o Warning + \o Do not use 'Object' as a constructor + \o + + \row + \o M112 + \o Warning + \o Do not use 'Array' as a constructor + \o + + \row + \o M113 + \o Warning + \o Do not use 'Function' as a constructor + \o + + \row + \o M114 + \o Hint + \o The 'function' keyword and the opening parenthesis should be separated by a single space + \o + + \row + \o M115 + \o Warning + \o Do not use stand-alone blocks + \o + + \row + \o M116 + \o Warning + \o Do not use void expressions + \o + + \row + \o M117 + \o Warning + \o Confusing pluses + \o + + \row + \o M119 + \o Warning + \o Confusing minuses + \o + + \row + \o M121 + \o Hint + \o Declare all function vars on a single line + \o + + \row + \o M123 + \o Hint + \o Unnecessary parentheses + \o + + \row + \o M126 + \o Warning + \o == and != may perform type coercion, use === or !== to avoid + \o + + \row + \o M127 + \o Warning + \o Expression statements should be assignments, calls or delete expressions only + \o + + \row + \o M201 + \o Hint + \o Var declarations should be at the start of a function + \o + + \row + \o M202 + \o Hint + \o Only use one statement per line + \o + + \row + \o M300 + \o Error + \o Unknown component + \o + + + + \row + \o M301 + \o Error + \o Could not resolve the prototype 'name' of 'object' + \o + + \row + \o M302 + \o Error + \o Could not resolve the prototype 'name' + \o + + \row + \o M303 + \o Error + \o Prototype cycle, the last non-repeated component is 'name' + \o + + \row + \o M304 + \o Error + \o Invalid property type 'name' + \o + + \row + \o M305 + \o Warning + \o == and != perform type coercion, use === or !== to avoid + \o + + \row + \o M306 + \o Warning + \o Calls of functions that start with an uppercase letter should use 'new' + \o + + \row + \o M307 + \o Warning + \o 'new' should only be used with functions that start with an uppercase letter + \o + + \row + \o M308 + \o Warning + \o Do not use 'Number' as a constructor + \o + + \row + \o M309 + \o Hint + \o Use spaces around binary operators + \o + + \row + \o M310 + \o Warning + \o Unintentional empty block, use ({}) for empty object literal + \o + + \row + \o M311 + \o Hint + \o Use 'type' instead of 'var' or 'variant' to improve performance + \o + + \endtable */ diff --git a/src/libs/qmljs/qmljsstaticanalysismessage.cpp b/src/libs/qmljs/qmljsstaticanalysismessage.cpp index 1e271e90c05..bd66fc76f6f 100644 --- a/src/libs/qmljs/qmljsstaticanalysismessage.cpp +++ b/src/libs/qmljs/qmljsstaticanalysismessage.cpp @@ -72,6 +72,8 @@ public: StaticAnalysisMessages::StaticAnalysisMessages() { + // When changing a message or severity, update the documentation, currently + // in creator-editors.qdoc, accordingly. newMsg(ErrInvalidEnumValue, Error, tr("invalid value for enum")); newMsg(ErrEnumValueMustBeStringOrNumber, Error, @@ -165,7 +167,7 @@ StaticAnalysisMessages::StaticAnalysisMessages() newMsg(ErrUnknownComponent, Error, tr("unknown component")); newMsg(ErrCouldNotResolvePrototypeOf, Error, - tr("could not resolve the prototype '%1'' of '%2'"), 2); + tr("could not resolve the prototype '%1' of '%2'"), 2); newMsg(ErrCouldNotResolvePrototype, Error, tr("could not resolve the prototype '%1'"), 1); newMsg(ErrPrototypeCycle, Error, diff --git a/src/libs/qmljs/qmljsstaticanalysismessage.h b/src/libs/qmljs/qmljsstaticanalysismessage.h index e91c26fc46b..d8b8d665216 100644 --- a/src/libs/qmljs/qmljsstaticanalysismessage.h +++ b/src/libs/qmljs/qmljsstaticanalysismessage.h @@ -54,6 +54,9 @@ enum Severity enum Type { + // Changing the numbers can break user code. + // When adding a new check, also add it to the documentation, currently + // in creator-editors.qdoc. UnknownType = 0, ErrInvalidEnumValue = 1, ErrEnumValueMustBeStringOrNumber = 2,