Skip to content

Support enum localization with EnumSourceGenerator & Support internal static PublicAPI instance with PublicApiSourceGenerator& Improve TabString performance #33

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 23 commits into from
Apr 5, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions Flow.Launcher.Localization.Attributes/EnumLocalizeAttribute.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using System;

namespace Flow.Launcher.Localization.Attributes
{
/// <summary>
/// Attribute to mark an enum for localization.
/// </summary>
[AttributeUsage(AttributeTargets.Enum)]
public class EnumLocalizeAttribute : Attribute
{
}
}
33 changes: 33 additions & 0 deletions Flow.Launcher.Localization.Attributes/EnumLocalizeKeyAttribute.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
using System;

namespace Flow.Launcher.Localization.Attributes
{
/// <summary>
/// Attribute to mark a localization key for an enum field.
/// </summary>
[AttributeUsage(AttributeTargets.Field)]
public class EnumLocalizeKeyAttribute : Attribute
{
public static readonly EnumLocalizeKeyAttribute Default = new EnumLocalizeKeyAttribute();

public EnumLocalizeKeyAttribute() : this(string.Empty)
{
}

public EnumLocalizeKeyAttribute(string enumLocalizeKey)
{
EnumLocalizeKey = enumLocalizeKey;
}

public virtual string LocalizeKey => EnumLocalizeKey;

protected string EnumLocalizeKey { get; set; }

public override bool Equals(object obj) =>
obj is EnumLocalizeKeyAttribute other && other.LocalizeKey == LocalizeKey;

public override int GetHashCode() => LocalizeKey?.GetHashCode() ?? 0;

public override bool IsDefaultAttribute() => Equals(Default);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
using System;

namespace Flow.Launcher.Localization.Attributes
{
/// <summary>
/// Attribute to mark a localization value for an enum field.
/// </summary>
[AttributeUsage(AttributeTargets.Field)]
public class EnumLocalizeValueAttribute : Attribute
{
public static readonly EnumLocalizeValueAttribute Default = new EnumLocalizeValueAttribute();

public EnumLocalizeValueAttribute() : this(string.Empty)
{
}

public EnumLocalizeValueAttribute(string enumLocalizeValue)
{
EnumLocalizeValue = enumLocalizeValue;
}

public virtual string LocalizeValue => EnumLocalizeValue;

protected string EnumLocalizeValue { get; set; }

public override bool Equals(object obj) =>
obj is EnumLocalizeValueAttribute other && other.LocalizeValue == LocalizeValue;

public override int GetHashCode() => LocalizeValue?.GetHashCode() ?? 0;

public override bool IsDefaultAttribute() => Equals(Default);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<RootNamespace>Flow.Launcher.Localization.Attributes</RootNamespace>
</PropertyGroup>

</Project>
8 changes: 8 additions & 0 deletions Flow.Launcher.Localization.Shared/Constants.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,14 @@ public static class Constants
public const string OldLocalizationMethodName = "GetTranslation";
public const string StringFormatMethodName = "Format";
public const string StringFormatTypeName = "string";
public const string EnumLocalizeClassSuffix = "Data";
public const string EnumLocalizeAttributeName = "EnumLocalizeAttribute";
public const string EnumLocalizeKeyAttributeName = "EnumLocalizeKeyAttribute";
public const string EnumLocalizeValueAttributeName = "EnumLocalizeValueAttribute";
// Use PublicApi instead of PublicAPI for possible ambiguity with Flow.Launcher.Plugin.IPublicAPI
public const string PublicApiClassName = "PublicApi";
public const string PublicApiPrivatePropertyName = "instance";
public const string PublicApiInternalPropertyName = "Instance";

public static readonly Regex LanguagesXamlRegex = new Regex(@"\\Languages\\[^\\]+\.xaml$", RegexOptions.IgnoreCase);
public static readonly string[] OldLocalizationClasses = { "IPublicAPI", "Internationalization" };
Expand Down
15 changes: 12 additions & 3 deletions Flow.Launcher.Localization.Shared/Helper.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
using Microsoft.CodeAnalysis;
using System.Linq;
using System.Threading;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Diagnostics;
using System.Linq;
using System.Threading;

namespace Flow.Launcher.Localization.Shared
{
Expand Down Expand Up @@ -81,5 +81,14 @@ private static Location GetCodeFixLocation(PropertyDeclarationSyntax property, S
}

#endregion

#region Tab String

public static string Spacing(int n)
{
return new string(' ', n * 4);
}

#endregion
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,4 @@ FLSG0004 | Localization | Warning | FLSG0004_ContextPropertyNotStatic
FLSG0005 | Localization | Warning | FLSG0005_ContextPropertyIsPrivate
FLSG0006 | Localization | Warning | FLSG0006_ContextPropertyIsProtected
FLSG0007 | Localization | Warning | FLSG0007_LocalizationKeyUnused
FLSG0008 | Localization | Warning | FLSG0008_EnumFieldLocalizationKeyValueInvalid
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
<TargetFramework>netstandard2.0</TargetFramework>
<EnforceExtendedAnalyzerRules>true</EnforceExtendedAnalyzerRules>
<RootNamespace>Flow.Launcher.Localization.SourceGenerators</RootNamespace>
<!-- Add AssemblyVersion because we need to use assembly version as package version -->
<AssemblyVersion>0.0.2</AssemblyVersion>
</PropertyGroup>

<ItemGroup>
Expand Down
Loading
Loading