Skip to content

Audit: Analyzers checking base object types but not extension objects #315

@Arthurvdv

Description

@Arthurvdv

Summary

Several analyzers check for specific base object types (Page, Table, Codeunit, etc.) but do not consider their extension counterparts (PageExtension, TableExtension, etc.). This can lead to false negatives (missing diagnostics) or false positives (incorrect diagnostics on extension objects).

This issue was identified while fixing #313 (AC0004 skipping Page but not PageExtension).

Confirmed gaps to investigate

Analyzer Rule Issue
CaptionRequired AC0003 IsInApiPage() checks NavTypeKind.Page but not PageExtension. Controls added by a page extension to an API page may incorrectly trigger the caption diagnostic (false positive).
FieldGroupsRequired AC0013 Only iterates NavTypeKind.Page objects to find tables with page references. Tables used exclusively by page extensions are missed.
NamingPattern LC0092 Registers for SymbolKind.Table, Page, Codeunit, etc. but not extension object symbol kinds. Extension object names are not validated against naming patterns.
CasingMismatchIdentifier FC0001 Registers for base object symbol kinds only. Extension objects are not checked for casing mismatches.
CasingMismatchKeyword FC0002 Same as above.
ObjectIdInDeclaration LC0003 Maps syntax kinds to symbol kinds for base objects. Extension object IDs may not be validated.

Not a gap (verified)

  • RunPageImplementPageManagement (AC0006): checks target method type (Page.Run), not the callers containing object type
  • AllowInCustomizationsForOmittedFields (AC0026): already handles both Page and PageExtension
  • TableFieldToolTip (AC0011): already registers for both Page and PageExtension
  • EmptyCaptionLocked: already registers for PageExtensionObject syntax
  • TranslatableTextShouldBeTranslated (LC0091): already handles PageExtension
  • PermissionSetCoverage, AccessPropertyExplicitlySet, ExtensiblePropertyExplicitlySet: extension objects do not have these properties
  • IntegrationEventInInternalCodeunit, InstallAndUpgradeCodeunitsShouldBeInternal, ClearCodeunitSingleInstance: no codeunit extensions exist in AL

Recommendation

Each gap should be evaluated individually. Some may be intentional (extension objects genuinely should not trigger the diagnostic), while others are bugs.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions