Skip to content


Browse files Browse the repository at this point in the history
Updated docs
  • Loading branch information
Allar committed Mar 3, 2020
1 parent c386c23 commit c9991b6
Show file tree
Hide file tree
Showing 8 changed files with 67 additions and 4 deletions.
4 changes: 4 additions & 0 deletions
Expand Up @@ -10,6 +10,10 @@ Heavily inspired by the [Airbnb Javascript Style Guide](

An automated method of checking your project against this style guide is available for purchase at [the Unreal Engine marketplace]( This plugin's source code will eventually be free, but in order to use with UE4 without building the engine from source code, please use the marketplace version.

## Linter and Style Guide Documentation

More technical documentation regarding Linter and the Style Guide can be found at our [ReadTheDocs]( page.

## Discuss This Style Guide

Gamemakin LLC has a public Discord channel at with a #linter channel if you'd like to discuss all things style guide and Linter plugin.
Expand Down
8 changes: 5 additions & 3 deletions docs/
Expand Up @@ -3,7 +3,9 @@
## Requirements

* You will need a launcher version of Unreal Engine 4 version 4.24 or later.
* You must purchase (for free) the Linter plugin on the Unreal Engine Marketplace. @TODO: Add link here once I have it
* You must purchase (for free) the Linter plugin on the Unreal Engine Marketplace.

@TODO: Add link here once I have it

## Installing From The Launcher

Expand All @@ -16,8 +18,8 @@
## Enabling Linter

1. Open your project
2. Open the Plugins window by clicking Windows on the main toolbar and navigating to Plugins
3. @TODO: My launcher is installing, finish writing this as soon as it is done
2. Open the Plugins window by clicking Edit on the main toolbar and navigating to Plugins
3. Search for Linter
4. Enable the Linter plugin by ensuring the Enabled checkbox is checked
5. Restart the editor

Expand Down
4 changes: 4 additions & 0 deletions docs/
Expand Up @@ -78,6 +78,10 @@ You should only implement this if you want to "early out" of the linting process
`NamingConvention` assets are simply a list of naming conventions as a data asset. `LintRules` will have access to the `NamingConvention` data asset that is defined in the lint rule's parent `LintRuleSet`. The `NamingConvention` data asset isn't responsible for any implementation logic. Instead `LintRules` are written to perform these naming convention checks using the given `NamingConvention` data asset as configuration.
## LintRuleCollections... collect rules
Sometimes it is easier to treat a collection of rules as a single rule. In this case, you can create a `LintRuleCollection` class that simply defines a list of other `LintRules`. This is very useful when dealing with repetitive path and file name lint rules.
## Video Walkthrough of Creating A LintRuleSet
@TODO: Get this edited, uploaded, submitted, embedded
4 changes: 4 additions & 0 deletions docs/
Expand Up @@ -4,6 +4,10 @@ This is the official documentation for Linter and the [Gamemakin LLC Style Guide

## About Linter

<div style="position: relative; height: 0; overflow: hidden; max-width: 100%; height: auto;">
<iframe width="640" height="320" src="" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

Linter is an Unreal Engine 4 plugin available on the Unreal Engine Marketplace that can be used for automated scanning and reporting of a UE4 project's adherence to style guide standards. It can scan through all of your project's content using programmatic rulesets and tell you when you aren't following a rule. This is a fairly common type of tool usually seen in web development, but now we can do it with Unreal Engine!

By default Linter is bundled with two rule sets:
Expand Down
3 changes: 3 additions & 0 deletions docs/
@@ -0,0 +1,3 @@
# Gamemakin LLC Style Guide

For information about how Linter scans against the Gamemakin LLC Style Guide, please see the style guide itself at []( as the style guide is marked up with its own Linter annotations.
1 change: 1 addition & 0 deletions docs/
Expand Up @@ -4,6 +4,7 @@ This page documents active efforts with Linter and the Gamemakin LLC Style Guide

## Planned Future Features

1. Finish video tutorial on the creation of a new lint ruleset
1. Linter scanning via commandlet for automated build pipelines
1. Allowing rule scanning to support multiple class matches in a class lint rules map

Expand Down
46 changes: 45 additions & 1 deletion docs/
Expand Up @@ -4,6 +4,10 @@ This page covers how Linter implements rule sets based off of the [Unreal Engine

If you would like to contribute by adding support for additional guidelines, please join the discussion in the [Gamemakin LLC Community Discord](

## Disclaimer

You are not guaranteed to have your product submission accepted by the Unreal Engine Marketplace simply because you might pass all these rules, however failing these rules will make your submission incredibly more likely to be rejected.

## 2.3.6 Particle Effects

### 2.3.6.b [Particle emitter names must be accurate and relevant and must not be "Particle Emitter" unless they're the only emitter in a given particle system](
Expand All @@ -12,6 +16,28 @@ Linter's interpretation of this is to simply check to see if a `UParticleSystem`

This is handled by `Blueprint'/Linter/MarketplaceLinter/LintRules/MPLR_Particles_EmitterNames.MPLR_Particles_EmitterNames'`.

## 2.3.7 Textures

### 2.3.7.a [Both dimensions of each texture should have a size that is a power of 2 where applicable (e.g. 1024x512 or 1024x4096)](

Linter's interpretation is to do a simple "power of two" math test on both the width and the height of all textures. If a texture fails this power of two math test, it then is checked to see if it's `LODGROUP` is exempt from this rule. For the Unreal Engine Marketplace Guidelines, this rule set is configured to only allow textures of the `UI` `LODGROUP` to not have power of two sizes.

This is handled by `Blueprint'/Linter/MarketplaceLinter/LintRules/MPLR_Texture2D_PowerOfTwo.MPLR_Texture2D_PowerOfTwo'`.

### 2.3.7.b [Textures must have a maximum size in either dimension of 8192](

Linter's interpretation of this is to make sure a texture's width or height isn't bigger than 8192. That simple.

This is handled by `Blueprint'/Linter/MarketplaceLinter/LintRules/MPLR_Texture2D_Size_NotTooBig.MPLR_Texture2D_Size_NotTooBig'`.

## 2.4 Audio

### 2.4.c [Audio files must have a sample rate of 22050 Hz or 44100 Hz with no audio defects](

Linter's interpretation of this is pretty straight forward. `USoundWave` assets must have sample rates of either 22050 or 44100.

This is handled by `Blueprint'/Linter/MarketplaceLinter/LintRules/MPLR_SoundWave_SampleRate.MPLR_SoundWave_SampleRate'`.

## 2.5 Blueprints

### 2.5.d [Blueprints must have no loose nodes unless they’re commented for example/tutorial purposes](
Expand All @@ -36,8 +62,26 @@ Linter's interpretation of this is that all assets should match a pattern define

The Marketplace `NamingConvention` asset is `MarketplaceNamingConvention'/Linter/MarketplaceLinter/MarketplaceNamingConvention.MarketplaceNamingConvention'` and the rule that checks for this is `Blueprint'/Linter/MarketplaceLinter/LintRules/MPLR_IsNamedCorrectly.MPLR_IsNamedCorrectly'`.

### 2.7.1.b [Folders and files must not be vaguely-named such as \"Assets\", \"NewFolder\", etc.](

Linter's interpretation of this is that all path elements must never be "Assets" or "NewFolder".

This is handled by `Blueprint'/Linter/MarketplaceLinter/LintRules/MPLR_Path_DisallowedPathNames.MPLR_Path_DisallowedPathNames'`.

### 2.7.1.c [Folder and file names must contain only English alphanumeric characters and underscores](

Linter's interpretation of this is that all path elements are tested against a Regular Expression `[^a-zA-Z0-9_]` which is only valid if the entire path element does not have any character except the letters "a through z", "A through Z", "0 through 9", and the '_' character.

This is handled by `Blueprint'/Linter/MarketplaceLinter/LintRules/MPLR_Path_AlphaNumeric.MPLR_Path_AlphaNumeric'`.
This is handled by `Blueprint'/Linter/MarketplaceLinter/LintRules/MPLR_Path_AlphaNumeric.MPLR_Path_AlphaNumeric'`.

### 2.7.2.b [In order to reduce migration conflicts after importing project files from the Epic Games Launcher, all project-specific assets must be stored in one top level folder; there must be no other folders or files directly under the Content folder](

Linter's interpretation of this is that the parent folder of any asset should not be the path `/Content/`.

This is handled by `Blueprint'/Linter/MarketplaceLinter/LintRules/MPLR_Path_NoTopLevelAssets.MPLR_Path_NoTopLevelAssets'`.

### 2.7.2.d [Including the name of the top level folder under the Content folder, all asset file paths must be 140 characters or less](

Linter's interpretation of this is that the path of any asset returned by `UObject::GetPathName()`, with the redundant asset name chopped off, should not be longer than 140 characters.

This is handled by `Blueprint'/Linter/MarketplaceLinter/LintRules/MPLR_Path_IsNotTooLong.MPLR_Path_IsNotTooLong'`. The path name that is used for this asset for example would be `/Linter/MarketplaceLinter/LintRules/MPLR_Path_IsNotTooLong'`.
1 change: 1 addition & 0 deletions mkdocs.yml
Expand Up @@ -4,5 +4,6 @@ nav:
- Getting Started:
- How Does Linting Work?:
- Unreal Engine Marketplace Guidelines:
- Gamemakin LLC Style Guide:
theme: readthedocs

0 comments on commit c9991b6

Please sign in to comment.