Skip to content

Commit ffb4829

Browse files
authored
Merge pull request #33 from Flow-Launcher/enum_localization
Support enum localization with EnumSourceGenerator & Support internal static PublicAPI instance with PublicApiSourceGenerator& Improve TabString performance
2 parents 24712e5 + 169a4b5 commit ffb4829

15 files changed

+701
-112
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
using System;
2+
3+
namespace Flow.Launcher.Localization.Attributes
4+
{
5+
/// <summary>
6+
/// Attribute to mark an enum for localization.
7+
/// </summary>
8+
[AttributeUsage(AttributeTargets.Enum)]
9+
public class EnumLocalizeAttribute : Attribute
10+
{
11+
}
12+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
using System;
2+
3+
namespace Flow.Launcher.Localization.Attributes
4+
{
5+
/// <summary>
6+
/// Attribute to mark a localization key for an enum field.
7+
/// </summary>
8+
[AttributeUsage(AttributeTargets.Field)]
9+
public class EnumLocalizeKeyAttribute : Attribute
10+
{
11+
public static readonly EnumLocalizeKeyAttribute Default = new EnumLocalizeKeyAttribute();
12+
13+
public EnumLocalizeKeyAttribute() : this(string.Empty)
14+
{
15+
}
16+
17+
public EnumLocalizeKeyAttribute(string enumLocalizeKey)
18+
{
19+
EnumLocalizeKey = enumLocalizeKey;
20+
}
21+
22+
public virtual string LocalizeKey => EnumLocalizeKey;
23+
24+
protected string EnumLocalizeKey { get; set; }
25+
26+
public override bool Equals(object obj) =>
27+
obj is EnumLocalizeKeyAttribute other && other.LocalizeKey == LocalizeKey;
28+
29+
public override int GetHashCode() => LocalizeKey?.GetHashCode() ?? 0;
30+
31+
public override bool IsDefaultAttribute() => Equals(Default);
32+
}
33+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
using System;
2+
3+
namespace Flow.Launcher.Localization.Attributes
4+
{
5+
/// <summary>
6+
/// Attribute to mark a localization value for an enum field.
7+
/// </summary>
8+
[AttributeUsage(AttributeTargets.Field)]
9+
public class EnumLocalizeValueAttribute : Attribute
10+
{
11+
public static readonly EnumLocalizeValueAttribute Default = new EnumLocalizeValueAttribute();
12+
13+
public EnumLocalizeValueAttribute() : this(string.Empty)
14+
{
15+
}
16+
17+
public EnumLocalizeValueAttribute(string enumLocalizeValue)
18+
{
19+
EnumLocalizeValue = enumLocalizeValue;
20+
}
21+
22+
public virtual string LocalizeValue => EnumLocalizeValue;
23+
24+
protected string EnumLocalizeValue { get; set; }
25+
26+
public override bool Equals(object obj) =>
27+
obj is EnumLocalizeValueAttribute other && other.LocalizeValue == LocalizeValue;
28+
29+
public override int GetHashCode() => LocalizeValue?.GetHashCode() ?? 0;
30+
31+
public override bool IsDefaultAttribute() => Equals(Default);
32+
}
33+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFramework>netstandard2.0</TargetFramework>
5+
<RootNamespace>Flow.Launcher.Localization.Attributes</RootNamespace>
6+
</PropertyGroup>
7+
8+
</Project>

Flow.Launcher.Localization.Shared/Constants.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,14 @@ public static class Constants
2020
public const string OldLocalizationMethodName = "GetTranslation";
2121
public const string StringFormatMethodName = "Format";
2222
public const string StringFormatTypeName = "string";
23+
public const string EnumLocalizeClassSuffix = "Data";
24+
public const string EnumLocalizeAttributeName = "EnumLocalizeAttribute";
25+
public const string EnumLocalizeKeyAttributeName = "EnumLocalizeKeyAttribute";
26+
public const string EnumLocalizeValueAttributeName = "EnumLocalizeValueAttribute";
27+
// Use PublicApi instead of PublicAPI for possible ambiguity with Flow.Launcher.Plugin.IPublicAPI
28+
public const string PublicApiClassName = "PublicApi";
29+
public const string PublicApiPrivatePropertyName = "instance";
30+
public const string PublicApiInternalPropertyName = "Instance";
2331

2432
public static readonly Regex LanguagesXamlRegex = new Regex(@"\\Languages\\[^\\]+\.xaml$", RegexOptions.IgnoreCase);
2533
public static readonly string[] OldLocalizationClasses = { "IPublicAPI", "Internationalization" };

Flow.Launcher.Localization.Shared/Helper.cs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
using Microsoft.CodeAnalysis;
1+
using System.Linq;
2+
using System.Threading;
3+
using Microsoft.CodeAnalysis;
24
using Microsoft.CodeAnalysis.CSharp;
35
using Microsoft.CodeAnalysis.CSharp.Syntax;
46
using Microsoft.CodeAnalysis.Diagnostics;
5-
using System.Linq;
6-
using System.Threading;
77

88
namespace Flow.Launcher.Localization.Shared
99
{
@@ -81,5 +81,14 @@ private static Location GetCodeFixLocation(PropertyDeclarationSyntax property, S
8181
}
8282

8383
#endregion
84+
85+
#region Tab String
86+
87+
public static string Spacing(int n)
88+
{
89+
return new string(' ', n * 4);
90+
}
91+
92+
#endregion
8493
}
8594
}

Flow.Launcher.Localization.SourceGenerators/AnalyzerReleases.Unshipped.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,4 @@ FLSG0004 | Localization | Warning | FLSG0004_ContextPropertyNotStatic
1111
FLSG0005 | Localization | Warning | FLSG0005_ContextPropertyIsPrivate
1212
FLSG0006 | Localization | Warning | FLSG0006_ContextPropertyIsProtected
1313
FLSG0007 | Localization | Warning | FLSG0007_LocalizationKeyUnused
14+
FLSG0008 | Localization | Warning | FLSG0008_EnumFieldLocalizationKeyValueInvalid

Flow.Launcher.Localization.SourceGenerators/Flow.Launcher.Localization.SourceGenerators.csproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
<TargetFramework>netstandard2.0</TargetFramework>
55
<EnforceExtendedAnalyzerRules>true</EnforceExtendedAnalyzerRules>
66
<RootNamespace>Flow.Launcher.Localization.SourceGenerators</RootNamespace>
7+
<!-- Add AssemblyVersion because we need to use assembly version as package version -->
8+
<AssemblyVersion>0.0.2</AssemblyVersion>
79
</PropertyGroup>
810

911
<ItemGroup>

0 commit comments

Comments
 (0)