chore: housekeeping — linter & formatter setup

Add .prettierrc.json, .markdownlint.json, .yamllint.yaml, .gitattributes
Run CSharpier, Prettier and markdownlint across the entire codebase.
No logic changes — formatting, using order and line endings only.
This commit is contained in:
2026-05-10 13:01:00 +02:00
parent cd01fa63a1
commit 699d4ede1d
141 changed files with 8833 additions and 5733 deletions
+67 -23
View File
@@ -2,10 +2,10 @@
using System.Numerics;
using System.Text.Json;
using System.Text.Json.Serialization;
using Dalamud.Bindings.ImGui;
using Dalamud.Interface.Textures;
using Dalamud.Interface.Textures.TextureWraps;
using Dalamud.Utility;
using Dalamud.Bindings.ImGui;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;
@@ -15,11 +15,31 @@ public static class EmoteCache
{
private static readonly string[] NotWorking =
[
":tf:", "(ditto)", "c!", "h!", "l!", "M&Mjc", "LUL3D", "p!",
"POLICE2", "r!", "Pussy", "s!", "v!", "w!", "x0r6ztGiggle",
"z!", "xar2EDM", "iron95Pls", "Clap2", "AlienPls3", "Life",
"peepoPogClimbingTreeHard4House", "monkaGIGAftRobertDowneyJr",
"DogLookingSussyAndCold", "DICKS"
":tf:",
"(ditto)",
"c!",
"h!",
"l!",
"M&Mjc",
"LUL3D",
"p!",
"POLICE2",
"r!",
"Pussy",
"s!",
"v!",
"w!",
"x0r6ztGiggle",
"z!",
"xar2EDM",
"iron95Pls",
"Clap2",
"AlienPls3",
"Life",
"peepoPogClimbingTreeHard4House",
"monkaGIGAftRobertDowneyJr",
"DogLookingSussyAndCold",
"DICKS",
];
private static readonly HttpClient Client = new();
@@ -56,7 +76,7 @@ public static class EmoteCache
{
Unloaded,
Loading,
Done
Done,
}
// All of this data is uninitalized while State is not `LoadingState.Done`
@@ -80,11 +100,16 @@ public static class EmoteCache
internal static void TrackLoad(Task loadTask, string emoteCode)
{
PendingLoads.Add(loadTask.ContinueWith(t =>
{
if (t.IsFaulted)
Plugin.Log.Error(t.Exception!, $"EmoteCache load failed for {emoteCode}");
}, TaskScheduler.Default));
PendingLoads.Add(
loadTask.ContinueWith(
t =>
{
if (t.IsFaulted)
Plugin.Log.Error(t.Exception!, $"EmoteCache load failed for {emoteCode}");
},
TaskScheduler.Default
)
);
}
public static async Task LoadData()
@@ -121,7 +146,10 @@ public static class EmoteCache
// load. Skip them defensively so a single bad row no longer
// breaks the cache for everyone else.
foreach (var emote in jsonList)
if (!string.IsNullOrEmpty(emote.Emote.Code) && !NotWorking.Contains(emote.Emote.Code))
if (
!string.IsNullOrEmpty(emote.Emote.Code)
&& !NotWorking.Contains(emote.Emote.Code)
)
Cache.TryAdd(emote.Emote.Code, emote.Emote);
lastId = jsonList.Last().Id;
@@ -225,13 +253,19 @@ public static class EmoteCache
// upstream could still hand us "../foo" and write into the
// pluginConfigs root (or worse). Resolve the candidate path and
// refuse anything that escapes the cache directory.
var dir = Path.GetFullPath(Path.Join(Plugin.Interface.ConfigDirectory.FullName, "EmoteCacheV1"));
var dir = Path.GetFullPath(
Path.Join(Plugin.Interface.ConfigDirectory.FullName, "EmoteCacheV1")
);
Directory.CreateDirectory(dir);
var dirPrefix = dir.EndsWith(Path.DirectorySeparatorChar) ? dir : dir + Path.DirectorySeparatorChar;
var dirPrefix = dir.EndsWith(Path.DirectorySeparatorChar)
? dir
: dir + Path.DirectorySeparatorChar;
var filePath = Path.GetFullPath(Path.Join(dir, $"{emote.Id}.{emote.ImageType}"));
if (!filePath.StartsWith(dirPrefix, StringComparison.Ordinal))
throw new InvalidOperationException($"Emote path escapes cache directory: id={emote.Id}, type={emote.ImageType}");
throw new InvalidOperationException(
$"Emote path escapes cache directory: id={emote.Id}, type={emote.ImageType}"
);
if (File.Exists(filePath))
{
@@ -242,7 +276,12 @@ public static class EmoteCache
var content = await Client.GetAsync(EmotePath.Format(emote.Id), ct);
RawData = await content.Content.ReadAsByteArrayAsync(ct);
await using var stream = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.Read);
await using var stream = new FileStream(
filePath,
FileMode.Create,
FileAccess.Write,
FileShare.Read
);
await stream.WriteAsync(RawData, ct);
}
@@ -271,12 +310,13 @@ public static class EmoteCache
return;
ct.ThrowIfCancellationRequested();
Texture = await Plugin.TextureProvider.CreateFromImageAsync(image, cancellationToken: ct);
Texture = await Plugin.TextureProvider.CreateFromImageAsync(
image,
cancellationToken: ct
);
IsLoaded = true;
}
catch (OperationCanceledException)
{
}
catch (OperationCanceledException) { }
catch (Exception ex)
{
Failed = true;
@@ -363,7 +403,11 @@ public static class EmoteCache
var buffer = new byte[4 * frame.Width * frame.Height];
frame.CopyPixelDataTo(buffer);
var tex = await Plugin.TextureProvider.CreateFromRawAsync(RawImageSpecification.Rgba32(frame.Width, frame.Height), buffer, cancellationToken: ct);
var tex = await Plugin.TextureProvider.CreateFromRawAsync(
RawImageSpecification.Rgba32(frame.Width, frame.Height),
buffer,
cancellationToken: ct
);
frames.Add((tex, delay));
}
@@ -385,4 +429,4 @@ public static class EmoteCache
}
}
}
}
}