Skip to content

Commit e1fa151

Browse files
committed
refactor: Source Generator 自动生成 Metadata,消除 FormatPlugin/FormatMetadata 重复声明
- FormatPluginAttribute 新增 IsBinary 可选命名参数 - Source Generator 自动推断 SupportsImport/SupportsExport/IsBinary - Source Generator 为每个格式类生成 partial class 的 Metadata 实现 - 83 个格式类改为 partial,删除手写的 Metadata 声明 - 信息单一来源:所有元数据仅在 [FormatPlugin] 属性中声明一次 重构前(每个格式类需要声明两次): [FormatPlugin("rime", "Rime", 150)] public sealed class RimeImporter : TextFormatImporter { public override FormatMetadata Metadata { get; } = new("rime", "Rime", 150, ...); } 重构后(信息只声明一次): [FormatPlugin("rime", "Rime", 150)] public sealed partial class RimeImporter : TextFormatImporter { }
1 parent a11b923 commit e1fa151

88 files changed

Lines changed: 208 additions & 423 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

src/ImeWlConverter.Abstractions/FormatPluginAttribute.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ namespace ImeWlConverter.Abstractions;
22

33
/// <summary>
44
/// Marks a class as an IME format plugin for compile-time registration via Source Generator.
5+
/// The Source Generator reads these values to auto-generate the <c>Metadata</c> property.
56
/// </summary>
67
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
78
public sealed class FormatPluginAttribute : Attribute
@@ -15,6 +16,9 @@ public sealed class FormatPluginAttribute : Attribute
1516
/// <summary>Sort order for UI display.</summary>
1617
public int SortOrder { get; }
1718

19+
/// <summary>Whether this format uses binary encoding (auto-detected from base class if not set).</summary>
20+
public bool IsBinary { get; set; }
21+
1822
/// <summary>
1923
/// Initializes a new instance of the <see cref="FormatPluginAttribute"/> class.
2024
/// </summary>

src/ImeWlConverter.Formats/BaiduBcd/BaiduBcdImporter.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,12 @@ namespace ImeWlConverter.Formats.BaiduBcd;
99

1010
/// <summary>Baidu Shouji bcd dictionary importer (binary, delegates to legacy).</summary>
1111
[FormatPlugin("bcd", "百度手机bcd", 1020)]
12-
public sealed class BaiduBcdImporter : BinaryFormatImporter
12+
public sealed partial class BaiduBcdImporter : BinaryFormatImporter
1313
{
1414
static BaiduBcdImporter()
1515
{
1616
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
1717
}
18-
19-
public override FormatMetadata Metadata { get; } = new(
20-
"bcd", "百度手机bcd", 1020, SupportsImport: true, SupportsExport: false, IsBinary: true);
21-
2218
protected override IReadOnlyList<WordEntry> ParseBinary(Stream input, CancellationToken ct)
2319
{
2420
var tempFile = Path.GetTempFileName();

src/ImeWlConverter.Formats/BaiduBdict/BaiduBdictImporter.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,12 @@ namespace ImeWlConverter.Formats.BaiduBdict;
99

1010
/// <summary>Baidu Pinyin bdict dictionary importer (binary, delegates to legacy).</summary>
1111
[FormatPlugin("bdict", "百度拼音bdict", 100)]
12-
public sealed class BaiduBdictImporter : BinaryFormatImporter
12+
public sealed partial class BaiduBdictImporter : BinaryFormatImporter
1313
{
1414
static BaiduBdictImporter()
1515
{
1616
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
1717
}
18-
19-
public override FormatMetadata Metadata { get; } = new(
20-
"bdict", "百度拼音bdict", 100, SupportsImport: true, SupportsExport: false, IsBinary: true);
21-
2218
protected override IReadOnlyList<WordEntry> ParseBinary(Stream input, CancellationToken ct)
2319
{
2420
var tempFile = Path.GetTempFileName();

src/ImeWlConverter.Formats/BaiduPinyin/BaiduPinyinExporter.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,9 @@ namespace ImeWlConverter.Formats.BaiduPinyin;
77

88
/// <summary>Baidu Pinyin dictionary exporter (text format). Supports both Chinese and English entries.</summary>
99
[FormatPlugin("bdpy", "百度拼音", 90)]
10-
public sealed class BaiduPinyinExporter : TextFormatExporter
10+
public sealed partial class BaiduPinyinExporter : TextFormatExporter
1111
{
1212
protected override Encoding FileEncoding => Encoding.Unicode;
13-
14-
public override FormatMetadata Metadata { get; } = new(
15-
"bdpy", "百度拼音", 90, SupportsImport: false, SupportsExport: true);
16-
1713
protected override string? FormatEntry(WordEntry entry)
1814
{
1915
if (entry.IsEnglish)

src/ImeWlConverter.Formats/BaiduPinyin/BaiduPinyinImporter.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,9 @@ namespace ImeWlConverter.Formats.BaiduPinyin;
88

99
/// <summary>Baidu Pinyin dictionary importer (text format). Supports both Chinese and English entries.</summary>
1010
[FormatPlugin("bdpy", "百度拼音", 90)]
11-
public sealed class BaiduPinyinImporter : TextFormatImporter
11+
public sealed partial class BaiduPinyinImporter : TextFormatImporter
1212
{
1313
protected override Encoding FileEncoding => Encoding.Unicode;
14-
15-
public override FormatMetadata Metadata { get; } = new(
16-
"bdpy", "百度拼音", 90, SupportsImport: true, SupportsExport: false);
17-
1814
protected override IEnumerable<WordEntry> ParseLine(string line)
1915
{
2016
var array = line.Split('\t');

src/ImeWlConverter.Formats/BaiduPinyinBackup/BaiduPinyinBackupImporter.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,12 @@ namespace ImeWlConverter.Formats.BaiduPinyinBackup;
99

1010
/// <summary>Baidu Pinyin backup file importer (binary, delegates to legacy).</summary>
1111
[FormatPlugin("bdpybin", "百度拼音备份", 20)]
12-
public sealed class BaiduPinyinBackupImporter : BinaryFormatImporter
12+
public sealed partial class BaiduPinyinBackupImporter : BinaryFormatImporter
1313
{
1414
static BaiduPinyinBackupImporter()
1515
{
1616
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
1717
}
18-
19-
public override FormatMetadata Metadata { get; } = new(
20-
"bdpybin", "百度拼音备份", 20, SupportsImport: true, SupportsExport: false, IsBinary: true);
21-
2218
protected override IReadOnlyList<WordEntry> ParseBinary(Stream input, CancellationToken ct)
2319
{
2420
var tempFile = Path.GetTempFileName();

src/ImeWlConverter.Formats/BaiduShouji/BaiduShoujiExporter.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,9 @@ namespace ImeWlConverter.Formats.BaiduShouji;
77

88
/// <summary>Baidu Mobile dictionary exporter. Format: word(pin|yin) 20000</summary>
99
[FormatPlugin("bdsj", "百度手机", 1000)]
10-
public sealed class BaiduShoujiExporter : TextFormatExporter
10+
public sealed partial class BaiduShoujiExporter : TextFormatExporter
1111
{
1212
protected override Encoding FileEncoding => Encoding.Unicode;
13-
14-
public override FormatMetadata Metadata { get; } = new(
15-
"bdsj", "百度手机", 1000, SupportsImport: false, SupportsExport: true);
16-
1713
protected override string? FormatEntry(WordEntry entry)
1814
{
1915
var pinyin = entry.Code?.GetPrimaryCode("|") ?? "";

src/ImeWlConverter.Formats/BaiduShouji/BaiduShoujiImporter.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,9 @@ namespace ImeWlConverter.Formats.BaiduShouji;
88

99
/// <summary>Baidu Mobile dictionary importer. Format: word(pin|yin) rank</summary>
1010
[FormatPlugin("bdsj", "百度手机", 1000)]
11-
public sealed class BaiduShoujiImporter : TextFormatImporter
11+
public sealed partial class BaiduShoujiImporter : TextFormatImporter
1212
{
1313
protected override Encoding FileEncoding => Encoding.Unicode;
14-
15-
public override FormatMetadata Metadata { get; } = new(
16-
"bdsj", "百度手机", 1000, SupportsImport: true, SupportsExport: false);
17-
1814
protected override IEnumerable<WordEntry> ParseLine(string line)
1915
{
2016
var parenIdx = line.IndexOf('(');

src/ImeWlConverter.Formats/BaiduShoujiEng/BaiduShoujiEngExporter.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,9 @@ namespace ImeWlConverter.Formats.BaiduShoujiEng;
77

88
/// <summary>Baidu Mobile English dictionary exporter. Format: word\t(54999+rank)</summary>
99
[FormatPlugin("bdsje", "百度手机英文", 1010)]
10-
public sealed class BaiduShoujiEngExporter : TextFormatExporter
10+
public sealed partial class BaiduShoujiEngExporter : TextFormatExporter
1111
{
1212
protected override Encoding FileEncoding => Encoding.ASCII;
13-
14-
public override FormatMetadata Metadata { get; } = new(
15-
"bdsje", "百度手机英文", 1010, SupportsImport: false, SupportsExport: true);
16-
1713
protected override string? FormatEntry(WordEntry entry)
1814
{
1915
return $"{entry.Word}\t{54999 + entry.Rank}";

src/ImeWlConverter.Formats/BaiduShoujiEng/BaiduShoujiEngImporter.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,9 @@ namespace ImeWlConverter.Formats.BaiduShoujiEng;
88

99
/// <summary>Baidu Mobile English dictionary importer. Format: word\trank</summary>
1010
[FormatPlugin("bdsje", "百度手机英文", 1010)]
11-
public sealed class BaiduShoujiEngImporter : TextFormatImporter
11+
public sealed partial class BaiduShoujiEngImporter : TextFormatImporter
1212
{
1313
protected override Encoding FileEncoding => Encoding.ASCII;
14-
15-
public override FormatMetadata Metadata { get; } = new(
16-
"bdsje", "百度手机英文", 1010, SupportsImport: true, SupportsExport: false);
17-
1814
protected override IEnumerable<WordEntry> ParseLine(string line)
1915
{
2016
var parts = line.Split('\t');

0 commit comments

Comments
 (0)