Skip to content

Commit 295ea45

Browse files
empty2filljwindgassen
authored andcommitted
Add TemplateNamingConvention
- gather all type action asset
1 parent 2719584 commit 295ea45

File tree

6 files changed

+187
-0
lines changed

6 files changed

+187
-0
lines changed

Plugins/Linter/Linter.uplugin

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,21 @@
5858
"Server",
5959
"Client"
6060
]
61+
},
62+
{
63+
"Name": "TemplateLinter",
64+
"Type": "Editor",
65+
"LoadingPhase": "PreDefault",
66+
"WhitelistPlatforms": [
67+
"Win64",
68+
"Win32",
69+
"Mac",
70+
"Linux"
71+
],
72+
"BlacklistTargets": [
73+
"Server",
74+
"Client"
75+
]
6176
}
6277
]
6378
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// Copyright 2019-2020 Gamemakin LLC. All Rights Reserved.
2+
3+
#include "TemplateLinter.h"
4+
5+
#define LOCTEXT_NAMESPACE "FTemplateLinterModule"
6+
7+
void FTemplateLinterModule::StartupModule()
8+
{
9+
// Super::StartupModule();
10+
}
11+
12+
void FTemplateLinterModule::ShutdownModule()
13+
{
14+
// Super::ShutdownModule();
15+
}
16+
17+
#undef LOCTEXT_NAMESPACE
18+
19+
IMPLEMENT_MODULE(FTemplateLinterModule, TemplateLinter)
20+
DEFINE_LOG_CATEGORY(LogTemplateLinter);
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
// Copyright 2019-2020 Gamemakin LLC. All Rights Reserved.
2+
#include "TemplateNamingConvention.h"
3+
4+
#include "IAssetTypeActions.h"
5+
#include "AssetToolsModule.h"
6+
#include "Misc/BlacklistNames.h"
7+
8+
UTemplateNamingConvention::UTemplateNamingConvention(const FObjectInitializer& ObjectInitializer)
9+
: Super(ObjectInitializer)
10+
{
11+
if(HasAnyFlags(EObjectFlags::RF_ClassDefaultObject))
12+
{
13+
return;
14+
}
15+
16+
auto AddNamingConvention = [&](const FString& ObjectPath, const FString& Prefix = TEXT(""), const FString& Suffix = TEXT(""), const FName& Variant = NAME_None) {
17+
ClassNamingConventions.Push(FLinterNamingConventionInfo(TSoftClassPtr<UObject>(FSoftObjectPath(ObjectPath)), Prefix, Suffix, Variant));
18+
};
19+
20+
// Add all type action asset, reference SFilterList::MakeAddFilterMenu
21+
{
22+
FAssetToolsModule& AssetToolsModule = FModuleManager::LoadModuleChecked<FAssetToolsModule>(TEXT("AssetTools"));
23+
24+
// Get the browser type maps
25+
TArray<TWeakPtr<IAssetTypeActions>> AssetTypeActionsList;
26+
AssetToolsModule.Get().GetAssetTypeActionsList(AssetTypeActionsList);
27+
28+
// Sort the list
29+
struct FCompareIAssetTypeActions
30+
{
31+
FORCEINLINE bool operator()(const TWeakPtr<IAssetTypeActions>& A, const TWeakPtr<IAssetTypeActions>& B) const
32+
{
33+
return A.Pin()->GetName().CompareTo(B.Pin()->GetName()) == -1;
34+
}
35+
};
36+
AssetTypeActionsList.Sort(FCompareIAssetTypeActions());
37+
38+
TSharedRef<FBlacklistNames> AssetClassBlacklist = AssetToolsModule.Get().GetAssetClassBlacklist();
39+
40+
// For every asset type, add naming convention
41+
for (int32 ClassIdx = 0; ClassIdx < AssetTypeActionsList.Num(); ++ClassIdx)
42+
{
43+
const TWeakPtr<IAssetTypeActions>& WeakTypeActions = AssetTypeActionsList[ClassIdx];
44+
if (WeakTypeActions.IsValid())
45+
{
46+
TSharedPtr<IAssetTypeActions> TypeActions = WeakTypeActions.Pin();
47+
if (ensure(TypeActions.IsValid()) && TypeActions->CanFilter())
48+
{
49+
UClass* SupportedClass = TypeActions->GetSupportedClass();
50+
if (SupportedClass && AssetClassBlacklist->PassesFilter(SupportedClass->GetFName()))
51+
{
52+
AddNamingConvention(SupportedClass->GetPathName());
53+
}
54+
}
55+
}
56+
}
57+
}
58+
59+
// Add missing asset and variant
60+
{
61+
// Animation
62+
AddNamingConvention(TEXT("/Script/Engine.AnimLayerInterface"));
63+
AddNamingConvention(TEXT("/Script/Engine.MorphTarget"));
64+
65+
// Artificial Intelligence
66+
AddNamingConvention(TEXT("/Script/Engine.AIController"));
67+
AddNamingConvention(TEXT("/Script/Engine.BTDecorator"));
68+
AddNamingConvention(TEXT("/Script/Engine.BTService"));
69+
AddNamingConvention(TEXT("/Script/Engine.BTTaskNode"));
70+
71+
// Blueprints
72+
AddNamingConvention(TEXT("/Script/Engine.Blueprint"), "", "", "MacroLibrary");
73+
AddNamingConvention(TEXT("/Script/Engine.Blueprint"), "", "", "Interface");
74+
AddNamingConvention(TEXT("/Script/Engine.BlueprintFunctionLibrary"));
75+
76+
// Materials
77+
AddNamingConvention(TEXT("/Script/Engine.Material"), "", "", "PostProcess");
78+
AddNamingConvention(TEXT("/Script/Engine.MaterialInstanceConstant"), "", "", "PostProcess");
79+
}
80+
81+
SortConventions();
82+
}
83+
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// Copyright 2019-2020 Gamemakin LLC. All Rights Reserved.
2+
#pragma once
3+
4+
#include "Modules/ModuleManager.h"
5+
6+
DECLARE_LOG_CATEGORY_EXTERN(LogTemplateLinter, Verbose, All);
7+
8+
class TEMPLATELINTER_API FTemplateLinterModule : public IModuleInterface
9+
{
10+
public:
11+
12+
/** IModuleInterface implementation */
13+
virtual void StartupModule() override;
14+
virtual void ShutdownModule() override;
15+
16+
virtual bool SupportsDynamicReloading() override
17+
{
18+
return false;
19+
}
20+
21+
private:
22+
23+
};
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// Copyright 2019-2020 Gamemakin LLC. All Rights Reserved.
2+
#pragma once
3+
4+
#include "CoreMinimal.h"
5+
#include "LinterNamingConvention.h"
6+
#include "TemplateNamingConvention.generated.h"
7+
8+
UCLASS()
9+
class UTemplateNamingConvention : public ULinterNamingConvention
10+
{
11+
GENERATED_BODY()
12+
13+
public:
14+
15+
UTemplateNamingConvention(const FObjectInitializer& ObjectInitializer);
16+
17+
};
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
// Copyright 2019-2020 Gamemakin LLC. All Rights Reserved.
2+
3+
using UnrealBuildTool;
4+
5+
public class TemplateLinter : ModuleRules
6+
{
7+
public TemplateLinter(ReadOnlyTargetRules Target) : base(Target)
8+
{
9+
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
10+
11+
PublicDependencyModuleNames.AddRange(
12+
new string[]
13+
{
14+
"Core",
15+
"CoreUObject",
16+
"Engine",
17+
"Linter"
18+
}
19+
);
20+
21+
22+
PrivateDependencyModuleNames.AddRange(
23+
new string[]
24+
{
25+
26+
}
27+
);
28+
}
29+
}

0 commit comments

Comments
 (0)