Al Code Analysis Rules (Diagnostic Descriptors)

Since my last blog about the new Code Analysis for Al development, I have been wondering what rules Microsoft actually applies in which Code Analyzer. My good friend an colleague is all into decompiling and reflecting – and he helped my find my way to the object model that Microsoft creates for the Source Code Analysis – to get to the “Diagnostic Descriptors”. We did that in PowerShell – of course 😉 (I might share the code when it’s ready to 😉 – it will end up on my PowerShell Repository eventually).

Below the result. As you know, there are 3 “cops” (Code Analyzers). Let’s see the result per Code Analyzer

AppSourceCop

Id Title Description MessageFormat Category Default Severety IsEnabled

ByDefault

AS0001 Tables cannot be deleted. Tables cannot be deleted. Table ‘{0}’ has been deleted. Upgrade Error

TRUE

AS0002 Fields cannot be deleted. Fields cannot be deleted. Field ‘{0}’ has been deleted from table ‘{1}’. Upgrade Error

TRUE

AS0003 The previous version was not found. The previous version was not found. The previous version was not found. Name='{0}’, Publisher='{1}’, Version'{2}’ Upgrade Warning

TRUE

AS0004 Fields cannot change type. Fields cannot change type. Field ‘{0}’ has changed type from ‘{1}’ to ‘{2}’. Type changes are not allowed. Upgrade Error

TRUE

AS0005 Fields cannot change name. Fields cannot change name. Field ‘{0}’ has changed name to ‘{1}’. Name changes are not allowed. Upgrade Error

TRUE

AS0006 Tables cannot change name. Tables cannot change name. Table ‘{0}’ has changed name to ‘{1}’. Name changes are not allowed. Upgrade Error

TRUE

AS0007 Properties cannot change value. Properties cannot change value. The property ‘{0}’ has changed value. Value change is not allowed for this property. Upgrade Error

TRUE

AS0008 Keys cannot change name. Keys cannot change name. Key ‘{0}’ has changed name to ‘{1}’. Name changes are not allowed. Upgrade Error

TRUE

AS0009 Key fields cannot be changed. Key fields cannot be changed. Key ‘{0}’ has changed the key fields. Changes to the field list are not allowed. Upgrade Error

TRUE

AS0010 Keys cannot be deleted. Keys cannot be deleted. Key ‘{0}’ has been deleted. Key deletions is not allowed. Upgrade Error

TRUE

AS0011 A prefix is required A prefix is required The identifier ‘{0}’ must have the prefix ‘{1}’. Extensibility Error

TRUE

AS0012 A suffix is required A suffix is required The identifier ‘{0}’ must have the suffix ‘{1}’. Extensibility Error

TRUE

AS0013 The field identifier must be within the allowed range. The field identifier must be within the allowed range. The field identifier ‘{0}’ is not valid. It must be within the allowed range ‘{1}’ – ‘{2}’ Extensibility Error

TRUE

AS0014 The project manifest must contain the allocated identifier range. The project manifest must contain the allocated identifier range. The project manifest must contain the allocated identifier range. Extensibility Error

TRUE

CodeCop

Id Title Description MessageFormat Category Default Severety IsEnabled

ByDefault

AA0001 There must be exactly one space character on each side of a binary operator such as := + – AND OR =. There must be exactly one space character on each side of a binary operator such as := + – AND OR =. The parameter comma operator however, should have no spaces. There must be exactly one space character on each side of ‘{0}’. Readability Warning

TRUE

AA0002 There must be no space character. There must be no space character between a unary operator and its argument. There must be no space character after ‘{0}’. Readability Warning

TRUE

AA0003 There must be exactly one space character between the NOT operator and its argument. There must be exactly one space character between the NOT operator and its argument. There must be exactly one space character after ‘{0}’. Readability Warning

TRUE

AA0005 Only use BEGIN..END to enclose compound statements. Only use BEGIN..END to enclose compound statements. Only use BEGIN..END to enclose compound statements. Readability Warning

TRUE

AA0008 Function calls should have parenthesis even if they do not have any parameters. Use parenthesis in a function call even if the function does not have any parameters. You must specify open and close parenthesis after ‘{0}’. Readability Warning

TRUE

AA0013 When BEGIN follows THEN, ELSE, DO, it should be on the same line, preceded by one space character. When BEGIN follows THEN, ELSE, DO, it should be on the same line, preceded by one space character. When BEGIN follows THEN, ELSE, DO, it should be on the same line, preceded by one space character. Readability Warning

TRUE

AA0018 The END, IF, REPEAT, FOR, WHILE, and CASE statement should always start a line. The END, IF, REPEAT, FOR, WHILE, and CASE statement should always start a line. The ‘{0}’ keyword should always start a line. Readability Warning

TRUE

AA0021 Variable declarations should be ordered by type. Variable declarations should be ordered by type. In general, object and complex variable types are listed first followed by simple variables. Variable declarations should be ordered by type. Readability Warning

TRUE

AA0022 Substitute the IF THEN ELSE structure with a CASE. An IF followed by two or more ELSE IF should be replaced with a CASE. Substitute the IF THEN ELSE structure with a CASE. Readability Warning

TRUE

AA0074 TextConst variable names should have an approved suffix. TextConst variable names should have a suffix (an approved three-letter suffix: Msg, Tok, Err, Qst, Lbl, Txt) describing usage. TextConst variable ‘{0}’ must have a suffix from this list: Msg, Tok, Err, Qst, Lbl, Txt. Readability Warning

TRUE

AA0136 Do not write code that will never be hit. Do not write code that will never be hit. Unreachable code detected. Design Warning

TRUE

AA0137 Do not declare variables that are unused. Do not declare variables that are unused. Variable ‘{0}’ is unused in the method ‘{1}’. Design Warning

TRUE

AA0139 Do not assign a text to a target with smaller size. Do not assign a text to a target with smaller size. Possible overflow assigning ‘{0}’ to ‘{1}’. Design Warning

TRUE

AA0161 Only use ASSERTERROR in Test Codeunits. Only use ASSERTERROR in Test Codeunits. Only use ASSERTERROR in Test Codeunits. Design Warning

TRUE

AA0194 Only write actions that have an effect. Remember to specify either the ‘OnAction’ trigger or ‘RunObject’ property on an action. Remember to specify either the ‘OnAction’ trigger or ‘RunObject’ property on an action. Design Warning

TRUE

PerTenantExtensionCop

Id Title Description MessageFormat Category Default Severety IsEnabled

ByDefault

PTE0001 Object ID must be in free range. Object ID must be in free range. {0} ‘{1}’ has an ID of [{2}]. It must be between 50000 and 50099. Object

Validation

Error

TRUE

PTE0002 Field ID must be in free range. Field ID must be in free range. Field ‘{0}’ has an ID of [{1}]. It must be between 50000 and 50099. Object

Validation

Error

TRUE

PTE0003 Functions must not subscribe to CompanyOpen events. Functions must not subscribe to CompanyOpen events. Function {0} subscribes to {1}. Object

Validation

Error

TRUE

PTE0004 Table definitions must have a matching permission set. Table definitions must have a matching permission set. Table ‘{0}’ is missing a matching permission set. Object

Validation

Error

TRUE

PTE0005 Property ‘target’ has invalid value. ‘Internal’ is a reserved usage for the ‘target’ property. App.json ‘target’ property must not be set to ‘Internal’. Package

Validation

Error

TRUE

PTE0006 Encryption key functions must not be invoked. Encryption key functions must not be invoked. Encryption key function ‘{0}’ is not allowed. Package

Validation

Error

TRUE

PTE0007 Test assertion functions are not allowed in a non-test context. Test assertion functions are not allowed in a non-test context. Assertion function ‘{0}’ must not be invoked. Package

Validation

Error

TRUE

PTE0008 Fields must use ApplicationArea property. Fields must use ApplicationArea property. Field with name ‘{0}’ must have a value for the ApplicationArea property. Package

Validation

Error

TRUE

Enjoy!

5.00 avg. rating (98% score) - 2 votes

Permanent link to this article: https://www.waldo.be/2018/04/05/al-code-analysis-rules-diagnostic-descriptors/

3 pings

  1. […] might remember my post about the Code Analyzers Diagnostic Descriptors when it first came out. I’m very happy with this tool, as it avoids many mistakes, and it […]

  2. […] might remember my post about the Code Analyzers Diagnostic Descriptors when it first came out. I’m very happy with this tool, as it avoids many mistakes, and it […]

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.