Skip to content

Validators Reference

Terro Fergius edited this page Aug 24, 2026 · 5 revisions

Validators Reference

Every rule, what it looks at, whether it ships on, and the property that controls it.

Rule IDs do not change between versions. You can rely on them in CI output, in JSON reports and in config.

Priorities run P0 for things that break the pipeline, P1 for major, P2 for minor, P3 for information. Each rule carries its own, and you can change it in the config.

Note: Every check here is a property on its validator inside your ASVCheckerConfig asset. Configuration shows where to click.

Naming Convention

Class UASVValidator_NamingConvention. Checks names against the prefix, suffix and pattern conventions from Allar's UE5 Style Guide. It reads asset registry tags, so nothing gets loaded and a full pass stays cheap.

Panel detail view, one violation traced from rule to validator to config to setting, with Navigate

Rule ID What it checks Default Config property Auto-fix
missing_prefix Asset name doesn't start with the required prefix for its class (e.g. BP_, T_, SM_) On · P0 bCheckPrefix, DefaultClassPrefixes, ClassRules Yes, renames asset, adds prefix
duplicate_prefix Prefix is repeated in the name (e.g. BP_BP_MyActor) On · P0 bCheckPrefix, DefaultClassPrefixes Yes, renames, removes duplicate
missing_suffix Required suffix for the class is absent (e.g. _SC for SoundConcurrency) On · P1 bCheckSuffix, DefaultClassSuffixes Yes, renames, adds suffix
missing_allowed_suffix World asset doesn't end with one of the allowed level suffixes (_P, _Audio, _Lighting, _Geo, _Gameplay) On · P1 bCheckAllowedSuffix, ClassRules[].AllowedSuffixes Yes, renames, adds first allowed suffix
name_pattern_mismatch Name doesn't match the regex pattern or contains a disallowed substring (__, -) Off · P1 bCheckNamePattern, NamePattern, DisallowSubstrings No
non_ascii_name Asset name contains non-ASCII characters (Cyrillic, CJK, etc.) Off · P1 bCheckNonAsciiName No
junk_name Name contains a placeholder/junk word anywhere (start, middle or end): New, Default, Untitled, Copy, Temp, Test, Example, Template, Placeholder. Matched as a whole word, so Temple and Latest are left alone Off · P1 bCheckJunkName, DisallowedNames Yes, strips junk word when a meaningful name remains
wrong_case A word segment in the asset name starts with a lowercase letter (e.g. T_cross instead of T_Cross). Skipped when the prefix itself is missing to avoid double-flagging. Off · P2 bCheckPascalCase, PascalCasePriority Yes, capitalizes first letter of each name segment

Common prefixes (built-in defaults)

Asset type Prefix Asset type Prefix
Blueprint BP_ Widget Blueprint WBP_
Animation Blueprint ABP_ Function Library BPL_
Static Mesh SM_ Skeletal Mesh SK_
Material M_ Material Instance MI_
Texture / Texture2D T_ Render Target RT_
Sound Wave S_ Sound Cue SC_
Niagara System NS_ Particle System PS_
Data Asset DA_ Data Table DT_
Enum E_ Struct F_
World (Level) L_ Level Sequence SEQ_

There are 80+ types in the full list, taken from Allar's UE5 Style Guide. Change any of them, or add your own, in DefaultClassPrefixes or ClassRules.

Custom class prefixes

For project-specific asset types (e.g. GA_ for Gameplay Abilities, GE_ for Gameplay Effects, GC_ for Gameplay Cues):

  1. Open Content/Data/DA_ASV_AllarStyleGuide
  2. Expand ASVValidator_NamingConvention in the Validators list
  3. Under Class Rules, click + to add a new entry
  4. Set Class Picker to the parent class, UGameplayAbility for instance. Every Blueprint subclass matches on its own through IsChildOf, so you list the parent once.
  5. Set Prefix to GA_
  6. Optionally set Suffix or Target Folders

Tip: Default Class Prefixes on the same validator is a plain key/value map: class name on one side, prefix on the other. Use it when you do not need inheritance, for example "GameplayEffect_C" with "GE_". ClassRules is the one that follows subclasses.

Folder Structure

Class UASVValidator_FolderStructure. Checks that an asset sits in the folder its class belongs in, and that the folder names themselves follow the project's path conventions.

Rule ID What it checks Default Config property Auto-fix
wrong_folder Asset is not under any of the allowed folders for its class (e.g. a Material outside Materials/) On · P0 bCheckWrongFolder, ClassRules Yes, moves asset to best matching folder
folder_contains_unicode A folder segment contains non-ASCII characters On · P0 bCheckUnicode No
folder_not_pascal_case A folder segment starts with a lowercase letter or contains underscores Off · P1 bCheckPascalCase No
folder_disallowed_name A folder has a generic/redundant name: Assets, AssetTypes, Meshes, Textures, Materials Off · P1 bCheckDisallowedNames, DisallowedFolderNames No
folder_in_developers Asset sits in /Game/Developers/, which is a scratch area and should not ship On · P2 bCheckDevelopersFolder No

Note: folder_disallowed_name ships off. Plenty of existing projects are full of folders called Assets or Meshes, and turning this on there gives you a wall of results. It suits a new project, or one that has already been cleaned up.

To turn it on: open DA_ASV_AllarStyleGuide, expand ASVValidator_FolderStructure, tick bCheckDisallowedNames and put the names you do not want into DisallowedFolderNames.

Texture

Class UASVValidator_Texture. Most of it runs off asset registry tags, so textures are not loaded to be checked.

Render targets and a few other generated types are skipped: ExcludeClasses ships with TextureRenderTarget2D, TextureRenderTargetCube, TextureLightProfile, MediaTexture and RenderTarget in it. Add your own types there if a check keeps firing on something it should not.

Rule ID What it checks Default Config property Auto-fix
texture_not_power_of_two Texture width or height is not a power of two (required for mipmaps and some GPU formats) Off · P1 bCheckPowerOfTwo No, the texture has to be reimported at the right size
texture_exceeds_max_size Texture dimension exceeds MaxTextureSize (default 8192) On · P0 bCheckMaxSize, MaxTextureSize No, the texture has to be reimported smaller
texture_wrong_srgb sRGB flag doesn't match texture type. Color textures (_D, _C, _Albedo) must have sRGB on; data textures (_N, _M, _R, _ARM) must have it off. Off · P1 bCheckSRGB Yes, sets correct sRGB flag
texture_wrong_compression Compression settings don't match texture type by suffix (e.g. normal maps should use TC_NormalMap) Off · P2 bCheckCompression Yes, sets correct compression
texture_wrong_group LOD group doesn't match expected for texture type (e.g. UI textures should use TEXTUREGROUP_UI) Off · P2 bCheckTextureGroup, ExpectedTextureGroup Yes, sets correct LOD group

Suffix-based type detection

Texture type comes from the name suffix. These are the suffixes the validator actually knows, and what each one implies:

Suffix sRGB Compression Texture group
_D on not checked TEXTUREGROUP_World
_BC on not checked not checked
_E on not checked not checked
_N off TC_Normalmap TEXTUREGROUP_WorldNormalMap
_M off TC_Masks not checked
_Mask off TC_Masks not checked
_R off TC_Grayscale not checked
_AO off TC_Grayscale not checked
_H off TC_Grayscale not checked
_DP off not checked not checked
_ORM off not checked not checked
_RMA off not checked not checked
_UI not checked not checked TEXTUREGROUP_UI

Note: A texture whose name ends in something else is invisible to these three checks. There is no guessing from content, so if your project writes _Normal or _Albedo instead of _N and _D, either rename them or add your suffixes to NonColorSuffixes, ColorSuffixes, ExpectedCompression and ExpectedTextureGroup on the validator.

Blueprint

Class UASVValidator_Blueprint. This one has to load each Blueprint to read its variables and its compile state, which costs a lot more than the tag-only checks. On a big project lean on the OnSave trigger and keep full Blueprint passes for when you actually want them.

Variable naming

Rule ID What it checks Default Config property Auto-fix
bp_bool_no_prefix Boolean variable doesn't start with b (Allar 3.2.1.3) Off · P1 bCheckBoolPrefix Yes, renames, adds b prefix
bp_bool_is_pattern Boolean uses bIs, bHas, bCan pattern. Allar 3.2.1.4 prefers bDead over bIsDead. Off · P2 bCheckBoolIsPattern Yes, renames, removes Is/Has/Can
bp_var_not_pascal_case Variable name doesn't start with an uppercase letter (Allar 3.2.1.2) Off · P1 bCheckPascalCase Yes, capitalizes first letter
bp_var_atomic_type_name Variable name contains atomic type in the name such as ScoreFloat where Score would do (Allar 3.2.1.6) Off · P2 bCheckAtomicTypeName No
bp_var_redundant_context Variable name repeats the Blueprint class name (e.g. PlayerHealth in BP_Player) (Allar 3.2.1.5) Off · P2 bCheckRedundantContext No
var_array_not_plural TArray variable name is not plural (e.g. Enemy should be Enemies) (Allar 3.2.1.8) Off · P2 bCheckArrayPlural No
var_missing_type_name Struct/Object variable doesn't include the type name (e.g. Hit instead of HitResult) (Allar 3.2.1.7) Off · P2 bCheckComplexTypeName No

Variable metadata

Rule ID What it checks Default Config property Auto-fix
bp_editable_missing_tooltip Editable variable (EditAnywhere / EditDefaultsOnly) has no tooltip (Allar 3.2.2.1) Off · P2 bCheckEditableTooltips No
bp_editable_missing_range Editable numeric variable has no ClampMin/ClampMax range defined (Allar 3.2.2.2) Off · P3 bCheckEditableRanges No
bp_var_config_flag Variable has the Config flag set. Blueprints should not use Config (Allar 3.2.8). Off · P1 bCheckConfigFlag No
bp_vars_uncategorized Blueprint has more than UncategorizedVarThreshold editable variables with no category (Allar 3.2.3) Off · P3 bCheckUncategorizedVars, UncategorizedVarThreshold (default 5) No

Compilation

Rule ID What it checks Default Config property Auto-fix
blueprint_compile_error Blueprint has compilation errors (BS_Error state) On · P0 bCheckCompilation No
blueprint_compile_warning Blueprint compiles with warnings (the BS_UpToDateWithWarnings state), usually deprecated nodes left behind by an engine upgrade Off · P2 bCheckCompileWarnings No

Note: var_array_not_plural and var_missing_type_name ship off. On real projects they fire on a lot of variables that are fine, and they only make sense once the team has agreed on the naming they enforce.

To turn them on: open DA_ASV_AllarStyleGuide, expand ASVValidator_Blueprint, tick bCheckArrayPlural or bCheckComplexTypeName.

Static Mesh

Class UASVValidator_Mesh. Loads the UStaticMesh to look at collision, LODs and Nanite.

Rule ID What it checks Default Config property Auto-fix
mesh_no_collision Static mesh has no collision geometry (no simple or complex collision set up) Off · P1 bCheckCollision No, add collision in the mesh editor
mesh_no_lods Mesh above MinTriCountForLOD triangles has only one LOD level Off · P2 bCheckLODs, MinTriCountForLOD (default 5000) No, set LODs up in the mesh editor or let auto-LOD do it
mesh_nanite_policy Mesh Nanite state doesn't match project policy (MustEnable, MustDisable, or AllowAny). Triangle threshold applies for MustEnable. Off · P2 bCheckNanite, NanitePolicy, MinTriCountForNanite (default 10000) Yes, enables or disables Nanite per policy

Note: mesh_nanite_policy ships off, and the policy behind it does not: NanitePolicy defaults to Must Enable. Tick the check before the project has decided and every mesh over the threshold turns into a result.

To turn it on: open DA_ASV_AllarStyleGuide, expand ASVValidator_Mesh, tick bCheckNanite, pick the NanitePolicy you want out of Must Enable, Must Disable and Allow Any, and set MinTriCountForNanite if 10 000 triangles is not your line.

Asset Health

Class UASVValidator_AssetHealth. Right now this means stale redirectors; more health checks will land here later. Reads the asset registry, loads nothing.

Rule ID What it checks Default Config property Auto-fix
stale_redirector An ObjectRedirector is sitting at this path, left behind by a rename or move that nobody cleaned up On · P1 bCheckRedirectors Yes, runs Fix Up Redirectors (same as right-click in Content Browser)

Clone this wiki locally