Lightning Flow Scanner(Rule Engine)
This the rule engine is used in both the VSCode extension and the SFDX plugin of the same name.
Rules
Old API version
Newer API components may cause older versions of Flows to start behaving incorrectly due to differences in the underlying mechanics. The Api Version has been available as an attribute on the Flow since API v50.0 and it is recommended to limit variation and to update them on a regular basis.
Default Value: >50.0
Configuration example:
APIVersion:
{
severity: 'error',
expression: '===58'
}
Configuration ID: APIVersion
(View source code)
DML statements in a loop
To avoid hitting Apex governor limits, we recommend grouping all of your changes together at the end of the flow, whether those changes create, update, or delete records.
Configuration ID: DMLStatementInLoop
(View source code)
Duplicate DML operations
If the flow commits changes to the database or performs actions between two screens, don't let users navigate back between screen. Otherwise, the flow may perform duplicate database operations.
Configuration ID: DuplicateDMLOperations
(View source code)
Hardcoded Ids
IDs are org-specific, so don’t hard-code IDs. Instead, pass them into variables when the flow starts. You can do so, for example, by using merge fields in URL parameters or by using a Get Records element.
Configuration ID: HardcodedIds
(View source code)
Flow naming conventions
Readability of flow is very important. Agreeing on and following the same naming conventions will ease collaboration.
Default Value: [A-Za-z0-9]+_[A-Za-z0-9]+
Configuration example:
FlowName:
{
severity: 'error',
expression: '[A-Za-z0-9]'
}
Configuration ID: FlowName
(View source code)
Missing flow description
Descriptions are useful for documentation purposes. It is recommended to provide information about where it is used and what it will do.
Configuration ID: MissingFlowDescription
(View source code)
Missing error handlers
Sometimes a flow doesn’t perform an operation that you configured it to do. By default, the flow shows an error message to the user and emails the admin who created the flow. However, you can control that behavior.
Configuration ID: MissingFaultPath
(View source code)
Missing null handlers
If a Get Records operation does not find any data it will return null. Use a decision element on the operation result variable to validate that the result is not null.
Configuration ID: MissingNullHandler
(View source code)
Unconnected elements
Unconnected elements which are not being used by the Flow should be avoided to keep Flows efficient and maintainable.
Configuration ID: UnconnectedElements
(View source code)
Unused variables
Unconnected variables which are not being used by the Flow should be avoided to keep Flow more efficient and maintainable.
Configuration ID: UnusedVariables
(View source code)
Core Functions
getRules(ruleNames? : string[]): IRuleDefinition[];
Returns all rules that are currently available if there are no ruleNames specified. In case ruleNames are specified, it will only return rules which are included by name.
scan(flows: Flow[], ruleOptions?: IRulesConfig): ScanResult[];
If there are no rules specified, the scan will run all available rules by default. In case that there are ruleNames specified, only the specified rules will be ran. Specified exceptions will be ignored from the results altogether.
fix(flows :Flow[]): ScanResult[];
Removes unused variables and unconnected elements from selected flows automatically.