| Introduction |
| Known limitations |
| Installation folders |
| Reports |
| Alerts |
| STWA1-Property access in read/write methods |
| STWA2-Ambiguous unit references |
| STWA3-Subprogram calls itself unconditionally |
| STWA4-Index error |
| STWA5-Possible bad pointer usage |
| STWA6-Possible bad typecast (for objects: consider using "as") |
| STWA7-For-loop with possible bad condition |
| STWA8-Bad parameter usage |
| STWA9-Generic interface has GUID |
| STWA10-Interface lacks GUID |
| STWA11-Duplicated GUID |
| STWA12-Equal if-then and if-else statements |
| WARN1-Interfaced identifiers that are used, but not outside of unit |
| WARN2-Interfaced class identifiers that are public/published, but not used outside of unit |
| WARN3-Variables that are referenced, but never set |
| WARN4-Variables that are referenced, but possibly never set (ref/set by unknown subprograms) |
| WARN5-Variables that are set, but never referenced |
| WARN6-Variables that are set, but possibly never referenced (ref/set by unknown subprograms) |
| WARN7-Local variables that are referenced before they are set |
| WARN8-Local variables that may be referenced by unknown subprogram before they are set |
| WARN9-Var parameters that are used, but never set |
| WARN10-Var parameters that are used, but possibly never set (ref/set by unknown subprograms |
| WARN11-Value parameters that are set |
| WARN12-Value parameters that are possibly set (ref/set by unknown subprogram) |
| WARN13-Interfaces passed as parameters without "const" directive |
| WARN14-Variables with absolute directive |
| WARN15-Constructors/destructors without calls to inherited |
| WARN16-Destructors without override directive |
| WARN17-Classes with more than one destructor |
| WARN18-Function result not set |
| WARN19-Recursive subprograms |
| WARN20-Dangerous Exit-statements |
| WARN21-Dangerous Raise |
| WARN22-Dangerous Label-locations inside for-loops |
| WARN23-Dangerous Label-locations inside repeat/while-loops |
| WARN24-Possible bad object creation |
| WARN25-Bad thread-local variables |
| WARN26-Instance created of class with abstract methods |
| WARN27-Empty code blocks and short-circuited statements |
| WARN28-Empty case labels |
| WARN29-Short-circuited for-statements |
| WARN30-Short-circuited if/case-statements |
| WARN31-Short-circuited on-statements |
| WARN32-Short-circuited repeat-statements |
| WARN33-Short-circuited while-statements |
| WARN34-Empty except-block |
| WARN35-Empty finally-block |
| WARN36-Forward directive in interface |
| WARN37-Empty subprogram parameter list |
| WARN38-Ambiguous references in with-blocks |
| WARN39-Classes without overrides of abstract methods |
| WARN40-Local for-loop variables read after loop |
| WARN41-Local for-loop variables possibly read after loop |
| WARN42-For-loop variables not used in loop |
| WARN43-Non-public constructors/destructors |
| WARN44-Functions called as procedures |
| WARN45-Mismatch property read/write specifiers |
| WARN46-Local variables that are set but not later used |
| WARN47-Duplicate lines |
| WARN48-Duplicate class types in except-block |
| WARN49-Redeclared identifiers from System unit |
| WARN50-Identifier with same name as keyword/directive |
| WARN51-Out parameter is read before set, or never set |
| WARN52-Possible bad assignment |
| WARN53-Mixing interface variables and objects |
| WARN54-Set before passed as out parameter |
| WARN55-Redeclares ancestor member, or method in helped class/record |
| WARN56-Parameter to FreeAndNil is not an object |
| WARN57-Enumerated constant missing in case structure |
| WARN58-Mixed operator precedence levels |
| WARN59-Explicit float comparison |
| WARN60-Condition evaluates to constant value |
| WARN61-Assigned to itself |
| WARN62-Possible orphan event handler |
| WARN63-Mismatch 32/64-bits |
| WARN64-Misformed calls to Format-function |
| MEMO1-Local objects with unprotected calls to Free |
| MEMO2-Non-local objects with unprotected calls to Free |
| MEMO3-Objects created in try-structure |
| MEMO4-Unbalanced Create/Free |
| MEMO5-Local objects that are created more than once without being freed in-between |
| MEMO6-Local objects that are referenced before being created |
| MEMO7-Local objects that are referenced after being freed |
| COWA1-Controls that overlap visually |
| COWA2-Labels with Caption-property that does not end in ":" |
| COWA3-Conflicting accelerators |
| COWA4-Labels (or static texts) that have accelerators but FocusControl is not set |
| COWA5-Conflicting shortcuts |
| COWA6-Buttons/menu items with OnClick-event that is unassigned |
| COWA7-Menu items that have HelpContext=0 |
| COWA8-Hint is not activated |
| Reductions |
| REDU1-Identifiers never used |
| REDU2-Local identifiers only used at a lower scope |
| REDU3-Local identifiers only used at a lower scope, but in more than one subprogram |
| REDU4-Local identifiers that are set and referenced once |
| REDU5-Local identifiers that possibly are set and referenced once |
| REDU6-Local identifiers that are set more than once without referencing in-between |
| REDU7-Local identifiers that possibly are set more than once without referencing in-between |
| REDU8-Class fields that are zero-initialized in constructor |
| REDU9-Class fields that possibly are zero-initialized in constructor |
| REDU10-Local long strings that are initialized to empty string |
| REDU11-Local long strings that possibly are initialized to empty strings |
| REDU12-Functions called only as procedures (result ignored) |
| REDU13-Functions/procedures (methods excluded) only called once |
| REDU14-Methods only called once from other method of the same class |
| REDU15-Unneeded boolean comparisons |
| REDU16-Boolean assignment can be shortened |
| REDU17-Fields only used in single method |
| REDU18-Consider using interface type |
| REDU19-Redundant parentheses |
| REDU20-Common subexpression, consider elimination |
| REDU21-Default parameter values that can be omitted |
| REDU22-Inconsistent conditions |
| REDU23-Typecasts that possibly can be omitted |
| REDU24-Local identifiers never used |
| Conventions |
| CONV1-Ordinary types that do not start with "T" |
| CONV2-Exception types that do not start with "E" |
| CONV3-Pointer types that do not start with "P" |
| CONV4-Interface types that do not start with "I" |
| CONV5-Class fields that are not declared in the private section |
| CONV6-Class fields that are exposed by properties (read/write) but do not start with "F" |
| CONV7-Properties to method pointers that do not start with "On/Before/After" |
| CONV8-Functions that are exposed by properties (read) but do not start with "Get" |
| CONV9-Procedures that are exposed by properties (write) but do not start with "Set" |
| CONV10-Classes that have visible constructors with bad names |
| CONV11-Classes that have visible destructors with bad names |
| CONV12-Identifiers that have unsuitable names |
| CONV13-Multiple with-variables |
| CONV14-Property access methods that are not private/protected |
| CONV15-Hard to read identifier names |
| CONV16-Label usage |
| CONV17-Bad class visibility order |
| CONV18-Identifiers with numerals |
| CONV19-Local identifiers that "shadow" outer scope identifiers |
| CONV20-Local identifiers that "shadow" class members |
| CONV21-Class/member name collision |
| CONV22-Class fields that are not declared in the private/protected sections |
| CONV23-Class fields that do not start with "F" |
| CONV24-Value parameters that do not start with selected prefix |
| CONV25-Const parameters that do not start with selected prefix |
| CONV26-Out parameters that do not start with selected prefix |
| CONV27-Var parameters that do not start with selected prefix |
| CONV28-Old-style function result |
| CONV29-With statements |
| CONV30-Private can be changed to strict private |
| CONV31-Protected can be changed to strict protected |
| CONV32-Multiple statements on the same line |
| Optimizations |
| OPTI1-Missing "const" for unmodified string parameter |
| OPTI2-Missing "const" for unmodified record parameter |
| OPTI3-Missing "const" for unmodified array parameter |
| OPTI4-Array properties that are referenced/set within methods |
| OPTI5-Virtual methods (procedures/functions) that are not overridden |
| OPTI6-Local subprograms with references to outer local variables |
| OPTI7-Subprograms with local subprograms |
| OPTI8-Parameter is "var", can be changed to "out" |
| OPTI9-Inlined subprograms not inlined because not yet implemented |
| OPTI10-Managed local variable that can be declared inline |
| OPTI11-Managed local variable is inlined in loop |
| Menu items |
| Analyze project |
| Analyze module |
| Quick analysis of module |
| Stop |
| Options |
| General settings |
| Report settings |
| Alerts |
| Reductions |
| Optimizations |
| Conventions |
| Help for Pascal Expert |
| About Pascal Expert |
Copyright © 2001-2025 Peganza